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.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +261 -0
  3. package/dist/components/CPU.js +1170 -0
  4. package/dist/components/CPU.js.map +1 -0
  5. package/dist/components/Cart.js +23 -0
  6. package/dist/components/Cart.js.map +1 -0
  7. package/dist/components/IO/Empty.js +19 -0
  8. package/dist/components/IO/Empty.js.map +1 -0
  9. package/dist/components/IO/GPIOAttachments/GPIOAttachment.js +71 -0
  10. package/dist/components/IO/GPIOAttachments/GPIOAttachment.js.map +1 -0
  11. package/dist/components/IO/GPIOAttachments/GPIOJoystickAttachment.js +90 -0
  12. package/dist/components/IO/GPIOAttachments/GPIOJoystickAttachment.js.map +1 -0
  13. package/dist/components/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.js +489 -0
  14. package/dist/components/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.js.map +1 -0
  15. package/dist/components/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.js +274 -0
  16. package/dist/components/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.js.map +1 -0
  17. package/dist/components/IO/GPIOCard.js +597 -0
  18. package/dist/components/IO/GPIOCard.js.map +1 -0
  19. package/dist/components/IO/InputBoard.js +19 -0
  20. package/dist/components/IO/InputBoard.js.map +1 -0
  21. package/dist/components/IO/LCDCard.js +19 -0
  22. package/dist/components/IO/LCDCard.js.map +1 -0
  23. package/dist/components/IO/RAMCard.js +63 -0
  24. package/dist/components/IO/RAMCard.js.map +1 -0
  25. package/dist/components/IO/RTCCard.js +483 -0
  26. package/dist/components/IO/RTCCard.js.map +1 -0
  27. package/dist/components/IO/SerialCard.js +282 -0
  28. package/dist/components/IO/SerialCard.js.map +1 -0
  29. package/dist/components/IO/SoundCard.js +620 -0
  30. package/dist/components/IO/SoundCard.js.map +1 -0
  31. package/dist/components/IO/StorageCard.js +428 -0
  32. package/dist/components/IO/StorageCard.js.map +1 -0
  33. package/dist/components/IO/VGACard.js +9 -0
  34. package/dist/components/IO/VGACard.js.map +1 -0
  35. package/dist/components/IO/VideoCard.js +623 -0
  36. package/dist/components/IO/VideoCard.js.map +1 -0
  37. package/dist/components/IO.js +3 -0
  38. package/dist/components/IO.js.map +1 -0
  39. package/dist/components/Machine.js +310 -0
  40. package/dist/components/Machine.js.map +1 -0
  41. package/dist/components/RAM.js +24 -0
  42. package/dist/components/RAM.js.map +1 -0
  43. package/dist/components/ROM.js +23 -0
  44. package/dist/components/ROM.js.map +1 -0
  45. package/dist/index.js +441 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/tests/CPU.test.js +1626 -0
  48. package/dist/tests/CPU.test.js.map +1 -0
  49. package/dist/tests/Cart.test.js +119 -0
  50. package/dist/tests/Cart.test.js.map +1 -0
  51. package/dist/tests/IO/GPIOAttachments/GPIOAttachment.test.js +339 -0
  52. package/dist/tests/IO/GPIOAttachments/GPIOAttachment.test.js.map +1 -0
  53. package/dist/tests/IO/GPIOAttachments/GPIOJoystickAttachment.test.js +126 -0
  54. package/dist/tests/IO/GPIOAttachments/GPIOJoystickAttachment.test.js.map +1 -0
  55. package/dist/tests/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.test.js +779 -0
  56. package/dist/tests/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.test.js.map +1 -0
  57. package/dist/tests/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.test.js +355 -0
  58. package/dist/tests/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.test.js.map +1 -0
  59. package/dist/tests/IO/GPIOCard.test.js +503 -0
  60. package/dist/tests/IO/GPIOCard.test.js.map +1 -0
  61. package/dist/tests/IO/RAMCard.test.js +229 -0
  62. package/dist/tests/IO/RAMCard.test.js.map +1 -0
  63. package/dist/tests/IO/RTCCard.test.js +177 -0
  64. package/dist/tests/IO/RTCCard.test.js.map +1 -0
  65. package/dist/tests/IO/SerialCard.test.js +423 -0
  66. package/dist/tests/IO/SerialCard.test.js.map +1 -0
  67. package/dist/tests/IO/SoundCard.test.js +528 -0
  68. package/dist/tests/IO/SoundCard.test.js.map +1 -0
  69. package/dist/tests/IO/StorageCard.test.js +647 -0
  70. package/dist/tests/IO/StorageCard.test.js.map +1 -0
  71. package/dist/tests/IO/VideoCard.test.js +549 -0
  72. package/dist/tests/IO/VideoCard.test.js.map +1 -0
  73. package/dist/tests/Machine.test.js +383 -0
  74. package/dist/tests/Machine.test.js.map +1 -0
  75. package/dist/tests/RAM.test.js +160 -0
  76. package/dist/tests/RAM.test.js.map +1 -0
  77. package/dist/tests/ROM.test.js +123 -0
  78. package/dist/tests/ROM.test.js.map +1 -0
  79. package/jest.config.cjs +9 -0
  80. package/package.json +43 -0
  81. package/src/components/CPU.ts +1371 -0
  82. package/src/components/Cart.ts +20 -0
  83. package/src/components/IO/GPIOAttachments/GPIOAttachment.ts +189 -0
  84. package/src/components/IO/GPIOAttachments/GPIOJoystickAttachment.ts +99 -0
  85. package/src/components/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.ts +465 -0
  86. package/src/components/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.ts +287 -0
  87. package/src/components/IO/GPIOCard.ts +677 -0
  88. package/src/components/IO/RAMCard.ts +68 -0
  89. package/src/components/IO/RTCCard.ts +518 -0
  90. package/src/components/IO/SerialCard.ts +335 -0
  91. package/src/components/IO/SoundCard.ts +711 -0
  92. package/src/components/IO/StorageCard.ts +473 -0
  93. package/src/components/IO/VideoCard.ts +730 -0
  94. package/src/components/IO.ts +11 -0
  95. package/src/components/Machine.ts +364 -0
  96. package/src/components/RAM.ts +23 -0
  97. package/src/components/ROM.ts +19 -0
  98. package/src/index.ts +474 -0
  99. package/src/tests/CPU.test.ts +2045 -0
  100. package/src/tests/Cart.test.ts +149 -0
  101. package/src/tests/IO/GPIOAttachments/GPIOAttachment.test.ts +413 -0
  102. package/src/tests/IO/GPIOAttachments/GPIOJoystickAttachment.test.ts +147 -0
  103. package/src/tests/IO/GPIOAttachments/GPIOKeyboardEncoderAttachment.test.ts +961 -0
  104. package/src/tests/IO/GPIOAttachments/GPIOKeyboardMatrixAttachment.test.ts +449 -0
  105. package/src/tests/IO/GPIOCard.test.ts +644 -0
  106. package/src/tests/IO/RAMCard.test.ts +284 -0
  107. package/src/tests/IO/RTCCard.test.ts +222 -0
  108. package/src/tests/IO/SerialCard.test.ts +530 -0
  109. package/src/tests/IO/SoundCard.test.ts +659 -0
  110. package/src/tests/IO/StorageCard.test.ts +787 -0
  111. package/src/tests/IO/VideoCard.test.ts +668 -0
  112. package/src/tests/Machine.test.ts +437 -0
  113. package/src/tests/RAM.test.ts +196 -0
  114. package/src/tests/ROM.test.ts +154 -0
  115. 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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"}