ac6502 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +261 -0
- package/dist/components/CPU.js +1170 -0
- package/dist/components/CPU.js.map +1 -0
- package/dist/components/Cart.js +23 -0
- package/dist/components/Cart.js.map +1 -0
- package/dist/components/IO/Empty.js +19 -0
- package/dist/components/IO/Empty.js.map +1 -0
- package/dist/components/IO/GPIOAttachments/GPIOAttachment.js +71 -0
- package/dist/components/IO/GPIOAttachments/GPIOAttachment.js.map +1 -0
- package/dist/components/IO/GPIOAttachments/GPIOJoystickAttachment.js +90 -0
- package/dist/components/IO/GPIOAttachments/GPIOJoystickAttachment.js.map +1 -0
- package/dist/components/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.js +489 -0
- package/dist/components/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.js.map +1 -0
- package/dist/components/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.js +274 -0
- package/dist/components/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.js.map +1 -0
- package/dist/components/IO/GPIOCard.js +597 -0
- package/dist/components/IO/GPIOCard.js.map +1 -0
- package/dist/components/IO/InputBoard.js +19 -0
- package/dist/components/IO/InputBoard.js.map +1 -0
- package/dist/components/IO/LCDCard.js +19 -0
- package/dist/components/IO/LCDCard.js.map +1 -0
- package/dist/components/IO/RAMCard.js +63 -0
- package/dist/components/IO/RAMCard.js.map +1 -0
- package/dist/components/IO/RTCCard.js +483 -0
- package/dist/components/IO/RTCCard.js.map +1 -0
- package/dist/components/IO/SerialCard.js +282 -0
- package/dist/components/IO/SerialCard.js.map +1 -0
- package/dist/components/IO/SoundCard.js +620 -0
- package/dist/components/IO/SoundCard.js.map +1 -0
- package/dist/components/IO/StorageCard.js +428 -0
- package/dist/components/IO/StorageCard.js.map +1 -0
- package/dist/components/IO/VGACard.js +9 -0
- package/dist/components/IO/VGACard.js.map +1 -0
- package/dist/components/IO/VideoCard.js +623 -0
- package/dist/components/IO/VideoCard.js.map +1 -0
- package/dist/components/IO.js +3 -0
- package/dist/components/IO.js.map +1 -0
- package/dist/components/Machine.js +310 -0
- package/dist/components/Machine.js.map +1 -0
- package/dist/components/RAM.js +24 -0
- package/dist/components/RAM.js.map +1 -0
- package/dist/components/ROM.js +23 -0
- package/dist/components/ROM.js.map +1 -0
- package/dist/index.js +441 -0
- package/dist/index.js.map +1 -0
- package/dist/tests/CPU.test.js +1626 -0
- package/dist/tests/CPU.test.js.map +1 -0
- package/dist/tests/Cart.test.js +119 -0
- package/dist/tests/Cart.test.js.map +1 -0
- package/dist/tests/IO/GPIOAttachments/GPIOAttachment.test.js +339 -0
- package/dist/tests/IO/GPIOAttachments/GPIOAttachment.test.js.map +1 -0
- package/dist/tests/IO/GPIOAttachments/GPIOJoystickAttachment.test.js +126 -0
- package/dist/tests/IO/GPIOAttachments/GPIOJoystickAttachment.test.js.map +1 -0
- package/dist/tests/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.test.js +779 -0
- package/dist/tests/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.test.js.map +1 -0
- package/dist/tests/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.test.js +355 -0
- package/dist/tests/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.test.js.map +1 -0
- package/dist/tests/IO/GPIOCard.test.js +503 -0
- package/dist/tests/IO/GPIOCard.test.js.map +1 -0
- package/dist/tests/IO/RAMCard.test.js +229 -0
- package/dist/tests/IO/RAMCard.test.js.map +1 -0
- package/dist/tests/IO/RTCCard.test.js +177 -0
- package/dist/tests/IO/RTCCard.test.js.map +1 -0
- package/dist/tests/IO/SerialCard.test.js +423 -0
- package/dist/tests/IO/SerialCard.test.js.map +1 -0
- package/dist/tests/IO/SoundCard.test.js +528 -0
- package/dist/tests/IO/SoundCard.test.js.map +1 -0
- package/dist/tests/IO/StorageCard.test.js +647 -0
- package/dist/tests/IO/StorageCard.test.js.map +1 -0
- package/dist/tests/IO/VideoCard.test.js +549 -0
- package/dist/tests/IO/VideoCard.test.js.map +1 -0
- package/dist/tests/Machine.test.js +383 -0
- package/dist/tests/Machine.test.js.map +1 -0
- package/dist/tests/RAM.test.js +160 -0
- package/dist/tests/RAM.test.js.map +1 -0
- package/dist/tests/ROM.test.js +123 -0
- package/dist/tests/ROM.test.js.map +1 -0
- package/jest.config.cjs +9 -0
- package/package.json +43 -0
- package/src/components/CPU.ts +1371 -0
- package/src/components/Cart.ts +20 -0
- package/src/components/IO/GPIOAttachments/GPIOAttachment.ts +189 -0
- package/src/components/IO/GPIOAttachments/GPIOJoystickAttachment.ts +99 -0
- package/src/components/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.ts +465 -0
- package/src/components/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.ts +287 -0
- package/src/components/IO/GPIOCard.ts +677 -0
- package/src/components/IO/RAMCard.ts +68 -0
- package/src/components/IO/RTCCard.ts +518 -0
- package/src/components/IO/SerialCard.ts +335 -0
- package/src/components/IO/SoundCard.ts +711 -0
- package/src/components/IO/StorageCard.ts +473 -0
- package/src/components/IO/VideoCard.ts +730 -0
- package/src/components/IO.ts +11 -0
- package/src/components/Machine.ts +364 -0
- package/src/components/RAM.ts +23 -0
- package/src/components/ROM.ts +19 -0
- package/src/index.ts +474 -0
- package/src/tests/CPU.test.ts +2045 -0
- package/src/tests/Cart.test.ts +149 -0
- package/src/tests/IO/GPIOAttachments/GPIOAttachment.test.ts +413 -0
- package/src/tests/IO/GPIOAttachments/GPIOJoystickAttachment.test.ts +147 -0
- package/src/tests/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.test.ts +961 -0
- package/src/tests/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.test.ts +449 -0
- package/src/tests/IO/GPIOCard.test.ts +644 -0
- package/src/tests/IO/RAMCard.test.ts +284 -0
- package/src/tests/IO/RTCCard.test.ts +222 -0
- package/src/tests/IO/SerialCard.test.ts +530 -0
- package/src/tests/IO/SoundCard.test.ts +659 -0
- package/src/tests/IO/StorageCard.test.ts +787 -0
- package/src/tests/IO/VideoCard.test.ts +668 -0
- package/src/tests/Machine.test.ts +437 -0
- package/src/tests/RAM.test.ts +196 -0
- package/src/tests/ROM.test.ts +154 -0
- package/tsconfig.json +12 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GPIOKeyboardMatrixAttachment = void 0;
|
|
4
|
+
const GPIOAttachment_1 = require("./GPIOAttachment");
|
|
5
|
+
/**
|
|
6
|
+
* USB HID Keycode to ASCII mapping table
|
|
7
|
+
* Maps USB HID usage IDs to ASCII characters
|
|
8
|
+
*/
|
|
9
|
+
const USB_HID_TO_ASCII = {
|
|
10
|
+
0x04: 0x61, // a
|
|
11
|
+
0x05: 0x62, // b
|
|
12
|
+
0x06: 0x63, // c
|
|
13
|
+
0x07: 0x64, // d
|
|
14
|
+
0x08: 0x65, // e
|
|
15
|
+
0x09: 0x66, // f
|
|
16
|
+
0x0A: 0x67, // g
|
|
17
|
+
0x0B: 0x68, // h
|
|
18
|
+
0x0C: 0x69, // i
|
|
19
|
+
0x0D: 0x6A, // j
|
|
20
|
+
0x0E: 0x6B, // k
|
|
21
|
+
0x0F: 0x6C, // l
|
|
22
|
+
0x10: 0x6D, // m
|
|
23
|
+
0x11: 0x6E, // n
|
|
24
|
+
0x12: 0x6F, // o
|
|
25
|
+
0x13: 0x70, // p
|
|
26
|
+
0x14: 0x71, // q
|
|
27
|
+
0x15: 0x72, // r
|
|
28
|
+
0x16: 0x73, // s
|
|
29
|
+
0x17: 0x74, // t
|
|
30
|
+
0x18: 0x75, // u
|
|
31
|
+
0x19: 0x76, // v
|
|
32
|
+
0x1A: 0x77, // w
|
|
33
|
+
0x1B: 0x78, // x
|
|
34
|
+
0x1C: 0x79, // y
|
|
35
|
+
0x1D: 0x7A, // z
|
|
36
|
+
0x1E: 0x31, // 1
|
|
37
|
+
0x1F: 0x32, // 2
|
|
38
|
+
0x20: 0x33, // 3
|
|
39
|
+
0x21: 0x34, // 4
|
|
40
|
+
0x22: 0x35, // 5
|
|
41
|
+
0x23: 0x36, // 6
|
|
42
|
+
0x24: 0x37, // 7
|
|
43
|
+
0x25: 0x38, // 8
|
|
44
|
+
0x26: 0x39, // 9
|
|
45
|
+
0x27: 0x30, // 0
|
|
46
|
+
0x28: 0x0D, // Enter
|
|
47
|
+
0x29: 0x1B, // Escape
|
|
48
|
+
0x2A: 0x08, // Backspace
|
|
49
|
+
0x2B: 0x09, // Tab
|
|
50
|
+
0x2C: 0x20, // Space
|
|
51
|
+
0x2D: 0x2D, // -
|
|
52
|
+
0x2E: 0x3D, // =
|
|
53
|
+
0x2F: 0x5B, // [
|
|
54
|
+
0x30: 0x5D, // ]
|
|
55
|
+
0x31: 0x5C, // backslash
|
|
56
|
+
0x33: 0x3B, // ;
|
|
57
|
+
0x34: 0x27, // '
|
|
58
|
+
0x35: 0x60, // `
|
|
59
|
+
0x36: 0x2C, // ,
|
|
60
|
+
0x37: 0x2E, // .
|
|
61
|
+
0x38: 0x2F, // /
|
|
62
|
+
0x4C: 0x7F, // Delete
|
|
63
|
+
0x4F: 0x1D, // Right Arrow
|
|
64
|
+
0x50: 0x1C, // Left Arrow
|
|
65
|
+
0x51: 0x1F, // Down Arrow
|
|
66
|
+
0x52: 0x1E, // Up Arrow
|
|
67
|
+
0x49: 0x1A, // Insert
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* GPIOKeyboardMatrixAttachment - Emulates a keyboard matrix connected to GPIO ports
|
|
71
|
+
*
|
|
72
|
+
* The keyboard matrix uses:
|
|
73
|
+
* - Port A (PA0-PA7): Rows (8 rows)
|
|
74
|
+
* - Port B (PB0-PB7): Columns (8 columns)
|
|
75
|
+
*
|
|
76
|
+
* Keys are active-low: when a key is pressed, the corresponding row/column intersection
|
|
77
|
+
* pulls the row line low when the column is selected (low).
|
|
78
|
+
*/
|
|
79
|
+
class GPIOKeyboardMatrixAttachment extends GPIOAttachment_1.GPIOAttachmentBase {
|
|
80
|
+
constructor(priority = 0) {
|
|
81
|
+
super(priority, false, false, false, false);
|
|
82
|
+
// Keyboard matrix state - 8 rows, each storing which columns have keys pressed (bit mask)
|
|
83
|
+
this.keyboardMatrix = [0, 0, 0, 0, 0, 0, 0, 0];
|
|
84
|
+
// Currently selected columns from Port B write
|
|
85
|
+
this.selectedColumns = 0xFF;
|
|
86
|
+
this.reset();
|
|
87
|
+
}
|
|
88
|
+
reset() {
|
|
89
|
+
super.reset();
|
|
90
|
+
for (let i = 0; i < 8; i++) {
|
|
91
|
+
this.keyboardMatrix[i] = 0x00;
|
|
92
|
+
}
|
|
93
|
+
this.selectedColumns = 0xFF;
|
|
94
|
+
}
|
|
95
|
+
readPortA(ddr, or) {
|
|
96
|
+
let rowStates = 0xFF; // All rows high (not pressed) by default
|
|
97
|
+
// Check keyboard matrix based on selected columns
|
|
98
|
+
for (let row = 0; row < 8; row++) {
|
|
99
|
+
for (let col = 0; col < 8; col++) {
|
|
100
|
+
// If column is selected (low) and key is pressed in matrix
|
|
101
|
+
if (!(this.selectedColumns & (1 << col)) && (this.keyboardMatrix[row] & (1 << col))) {
|
|
102
|
+
rowStates &= ~(1 << row); // Pull row low (active-low)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return rowStates & 0xFF;
|
|
107
|
+
}
|
|
108
|
+
readPortB(ddr, or) {
|
|
109
|
+
return 0xFF; // Don't interfere with Port B reads
|
|
110
|
+
}
|
|
111
|
+
writePortB(value, ddr) {
|
|
112
|
+
// Store the column selection for matrix scanning
|
|
113
|
+
this.selectedColumns = value & 0xFF;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Update a key state based on USB HID keycode
|
|
117
|
+
* @param usbHidKeycode - USB HID usage ID for the key
|
|
118
|
+
* @param pressed - true if key is pressed, false if released
|
|
119
|
+
*/
|
|
120
|
+
updateKey(usbHidKeycode, pressed) {
|
|
121
|
+
let targetRow = -1;
|
|
122
|
+
let targetCol = -1;
|
|
123
|
+
// Direct USB HID keycode to matrix position mapping for special/modifier keys
|
|
124
|
+
switch (usbHidKeycode) {
|
|
125
|
+
// Modifier keys
|
|
126
|
+
case 0xE0: // Left Ctrl
|
|
127
|
+
case 0xE4: // Right Ctrl
|
|
128
|
+
targetRow = 7;
|
|
129
|
+
targetCol = 0; // PA7, PB0 (CTRL)
|
|
130
|
+
break;
|
|
131
|
+
case 0xE1: // Left Shift
|
|
132
|
+
case 0xE5: // Right Shift
|
|
133
|
+
targetRow = 5;
|
|
134
|
+
targetCol = 4; // PA5, PB4 (SHIFT)
|
|
135
|
+
break;
|
|
136
|
+
case 0xE2: // Left Alt
|
|
137
|
+
case 0xE6: // Right Alt
|
|
138
|
+
targetRow = 7;
|
|
139
|
+
targetCol = 2; // PA7, PB2 (ALT)
|
|
140
|
+
break;
|
|
141
|
+
case 0xE3: // Left GUI (Windows/Command)
|
|
142
|
+
case 0xE7: // Right GUI
|
|
143
|
+
targetRow = 7;
|
|
144
|
+
targetCol = 1; // PA7, PB1 (META/GUI)
|
|
145
|
+
break;
|
|
146
|
+
// Special keys
|
|
147
|
+
case 0x39: // Caps Lock
|
|
148
|
+
targetRow = 3;
|
|
149
|
+
targetCol = 6; // PA3, PB6 (CAPS LOCK)
|
|
150
|
+
break;
|
|
151
|
+
// Function keys (F1-F10) - map to FN + number combination
|
|
152
|
+
case 0x3A: // F1
|
|
153
|
+
case 0x3B: // F2
|
|
154
|
+
case 0x3C: // F3
|
|
155
|
+
case 0x3D: // F4
|
|
156
|
+
case 0x3E: // F5
|
|
157
|
+
case 0x3F: // F6
|
|
158
|
+
case 0x40: // F7
|
|
159
|
+
case 0x41: // F8
|
|
160
|
+
case 0x42: // F9
|
|
161
|
+
case 0x43: // F10
|
|
162
|
+
{
|
|
163
|
+
// Always set the FN key (PA7, PB4)
|
|
164
|
+
if (pressed) {
|
|
165
|
+
this.keyboardMatrix[7] |= (1 << 4);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
this.keyboardMatrix[7] &= ~(1 << 4);
|
|
169
|
+
}
|
|
170
|
+
// Map to corresponding number key
|
|
171
|
+
let numberKey;
|
|
172
|
+
if (usbHidKeycode >= 0x3A && usbHidKeycode <= 0x42) {
|
|
173
|
+
// F1-F9 map to '1'-'9'
|
|
174
|
+
numberKey = 0x31 + (usbHidKeycode - 0x3A); // '1' = 0x31
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// F10 maps to '0'
|
|
178
|
+
numberKey = 0x30; // '0' = 0x30
|
|
179
|
+
}
|
|
180
|
+
// Find and set the number key in the matrix
|
|
181
|
+
for (let row = 0; row < 8; row++) {
|
|
182
|
+
for (let col = 0; col < 8; col++) {
|
|
183
|
+
if (GPIOKeyboardMatrixAttachment.KEYBOARD_LAYOUT[row][col] === numberKey) {
|
|
184
|
+
if (pressed) {
|
|
185
|
+
this.keyboardMatrix[row] |= (1 << col);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
this.keyboardMatrix[row] &= ~(1 << col);
|
|
189
|
+
}
|
|
190
|
+
return; // Done processing
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return; // If number key not found, still return
|
|
195
|
+
}
|
|
196
|
+
default:
|
|
197
|
+
{
|
|
198
|
+
// For all other keys, try ASCII mapping
|
|
199
|
+
const asciiKey = USB_HID_TO_ASCII[usbHidKeycode];
|
|
200
|
+
// If no ASCII mapping, ignore the key
|
|
201
|
+
if (asciiKey === undefined || asciiKey === 0x00) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// Find the ASCII key in the keyboard layout
|
|
205
|
+
for (let row = 0; row < 8; row++) {
|
|
206
|
+
for (let col = 0; col < 8; col++) {
|
|
207
|
+
if (GPIOKeyboardMatrixAttachment.KEYBOARD_LAYOUT[row][col] === asciiKey) {
|
|
208
|
+
targetRow = row;
|
|
209
|
+
targetCol = col;
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (targetRow !== -1)
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
// Update the keyboard matrix if we found a valid position
|
|
220
|
+
if (targetRow !== -1 && targetCol !== -1) {
|
|
221
|
+
if (pressed) {
|
|
222
|
+
this.keyboardMatrix[targetRow] |= (1 << targetCol); // Set bit (key pressed)
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
this.keyboardMatrix[targetRow] &= ~(1 << targetCol); // Clear bit (key released)
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Update a specific matrix position directly
|
|
231
|
+
* @param row - Row index (0-7)
|
|
232
|
+
* @param col - Column index (0-7)
|
|
233
|
+
* @param pressed - true if key is pressed, false if released
|
|
234
|
+
*/
|
|
235
|
+
updateMatrixPosition(row, col, pressed) {
|
|
236
|
+
if (row < 8 && col < 8) {
|
|
237
|
+
if (pressed) {
|
|
238
|
+
this.keyboardMatrix[row] |= (1 << col);
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.keyboardMatrix[row] &= ~(1 << col);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get the current state of the keyboard matrix
|
|
247
|
+
* @returns Array of 8 bytes representing the matrix state
|
|
248
|
+
*/
|
|
249
|
+
getMatrixState() {
|
|
250
|
+
return [...this.keyboardMatrix];
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Get the currently selected columns
|
|
254
|
+
* @returns Byte representing selected columns
|
|
255
|
+
*/
|
|
256
|
+
getSelectedColumns() {
|
|
257
|
+
return this.selectedColumns;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
exports.GPIOKeyboardMatrixAttachment = GPIOKeyboardMatrixAttachment;
|
|
261
|
+
// Keyboard matrix layout mapping
|
|
262
|
+
// Rows are PA0-PA7, Columns are PB0-PB7
|
|
263
|
+
GPIOKeyboardMatrixAttachment.KEYBOARD_LAYOUT = [
|
|
264
|
+
// PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
|
|
265
|
+
[0x60, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37], // PA0: ` 1 2 3 4 5 6 7
|
|
266
|
+
[0x38, 0x39, 0x30, 0x2D, 0x3D, 0x08, 0x1B, 0x09], // PA1: 8 9 0 - = BS ESC TAB
|
|
267
|
+
[0x71, 0x77, 0x65, 0x72, 0x74, 0x79, 0x75, 0x69], // PA2: q w e r t y u i
|
|
268
|
+
[0x6F, 0x70, 0x5B, 0x5D, 0x5C, 0x1A, 0x00, 0x61], // PA3: o p [ ] \ INS CAPS a
|
|
269
|
+
[0x73, 0x64, 0x66, 0x67, 0x68, 0x6A, 0x6B, 0x6C], // PA4: s d f g h j k l
|
|
270
|
+
[0x3B, 0x27, 0x0D, 0x7F, 0x00, 0x7A, 0x78, 0x63], // PA5: ; ' ENTER DEL SHIFT z x c
|
|
271
|
+
[0x76, 0x62, 0x6E, 0x6D, 0x2C, 0x2E, 0x2F, 0x1E], // PA6: v b n m , . / UP
|
|
272
|
+
[0x00, 0x00, 0x00, 0x20, 0x00, 0x1C, 0x1F, 0x1D], // PA7: CTRL META ALT SPACE FN LEFT DOWN RIGHT
|
|
273
|
+
];
|
|
274
|
+
//# sourceMappingURL=GPIOKeyboardMatrixAttachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GPIOKeyboardMatrixAttachment.js","sourceRoot":"","sources":["../../../../src/components/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.ts"],"names":[],"mappings":"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"}
|