ac6502 1.9.3 → 1.11.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 (77) hide show
  1. package/dist/components/CPU.d.ts +4 -0
  2. package/dist/components/CPU.js +87 -30
  3. package/dist/components/CPU.js.map +1 -1
  4. package/dist/components/IO/ACIA.d.ts +13 -21
  5. package/dist/components/IO/ACIA.js +53 -151
  6. package/dist/components/IO/ACIA.js.map +1 -1
  7. package/dist/components/IO/Attachments/KeyboardEncoderAttachment.d.ts +5 -10
  8. package/dist/components/IO/Attachments/KeyboardEncoderAttachment.js +43 -266
  9. package/dist/components/IO/Attachments/KeyboardEncoderAttachment.js.map +1 -1
  10. package/dist/components/IO/Empty.d.ts +1 -3
  11. package/dist/components/IO/Empty.js +1 -5
  12. package/dist/components/IO/Empty.js.map +1 -1
  13. package/dist/components/IO/RAMBank.d.ts +3 -4
  14. package/dist/components/IO/RAMBank.js +4 -13
  15. package/dist/components/IO/RAMBank.js.map +1 -1
  16. package/dist/components/IO/RTC.d.ts +2 -3
  17. package/dist/components/IO/RTC.js +17 -7
  18. package/dist/components/IO/RTC.js.map +1 -1
  19. package/dist/components/IO/Sound.d.ts +1 -3
  20. package/dist/components/IO/Sound.js +13 -23
  21. package/dist/components/IO/Sound.js.map +1 -1
  22. package/dist/components/IO/Storage.d.ts +1 -3
  23. package/dist/components/IO/Storage.js +1 -3
  24. package/dist/components/IO/Storage.js.map +1 -1
  25. package/dist/components/IO/VIA.d.ts +1 -3
  26. package/dist/components/IO/VIA.js +6 -7
  27. package/dist/components/IO/VIA.js.map +1 -1
  28. package/dist/components/IO/Video.d.ts +1 -3
  29. package/dist/components/IO/Video.js +3 -5
  30. package/dist/components/IO/Video.js.map +1 -1
  31. package/dist/components/IO.d.ts +1 -3
  32. package/dist/components/Machine.d.ts +1 -2
  33. package/dist/components/Machine.js +21 -74
  34. package/dist/components/Machine.js.map +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/tests/IO/ACIA.test.js +57 -108
  38. package/dist/tests/IO/ACIA.test.js.map +1 -1
  39. package/dist/tests/IO/Attachments/KeyboardEncoderAttachment.test.js +334 -574
  40. package/dist/tests/IO/Attachments/KeyboardEncoderAttachment.test.js.map +1 -1
  41. package/dist/tests/IO/Empty.test.js +2 -14
  42. package/dist/tests/IO/Empty.test.js.map +1 -1
  43. package/dist/tests/IO/RAMBank.test.js +5 -12
  44. package/dist/tests/IO/RAMBank.test.js.map +1 -1
  45. package/dist/tests/IO/RTC.test.js +7 -16
  46. package/dist/tests/IO/RTC.test.js.map +1 -1
  47. package/dist/tests/IO/Sound.test.js +6 -8
  48. package/dist/tests/IO/Sound.test.js.map +1 -1
  49. package/dist/tests/IO/Storage.test.js +0 -6
  50. package/dist/tests/IO/Storage.test.js.map +1 -1
  51. package/dist/tests/IO/VIA.test.js +6 -10
  52. package/dist/tests/IO/VIA.test.js.map +1 -1
  53. package/dist/tests/IO/Video.test.js +7 -7
  54. package/dist/tests/IO/Video.test.js.map +1 -1
  55. package/package.json +1 -1
  56. package/src/components/CPU.ts +94 -31
  57. package/src/components/IO/ACIA.ts +57 -176
  58. package/src/components/IO/Attachments/KeyboardEncoderAttachment.ts +45 -217
  59. package/src/components/IO/Empty.ts +1 -4
  60. package/src/components/IO/RAMBank.ts +4 -15
  61. package/src/components/IO/RTC.ts +18 -7
  62. package/src/components/IO/Sound.ts +14 -27
  63. package/src/components/IO/Storage.ts +2 -5
  64. package/src/components/IO/VIA.ts +6 -8
  65. package/src/components/IO/Video.ts +5 -7
  66. package/src/components/IO.ts +1 -4
  67. package/src/components/Machine.ts +22 -90
  68. package/src/index.ts +1 -1
  69. package/src/tests/IO/ACIA.test.ts +60 -122
  70. package/src/tests/IO/Attachments/KeyboardEncoderAttachment.test.ts +342 -676
  71. package/src/tests/IO/Empty.test.ts +2 -17
  72. package/src/tests/IO/RAMBank.test.ts +5 -14
  73. package/src/tests/IO/RTC.test.ts +7 -20
  74. package/src/tests/IO/Sound.test.ts +6 -8
  75. package/src/tests/IO/Storage.test.ts +0 -7
  76. package/src/tests/IO/VIA.test.ts +6 -12
  77. package/src/tests/IO/Video.test.ts +7 -8
@@ -4,35 +4,35 @@ exports.KeyboardEncoderAttachment = void 0;
4
4
  const Attachment_1 = require("./Attachment");
5
5
  /**
6
6
  * USB HID Keycode to ASCII mapping table
7
- * Maps USB HID usage IDs to ASCII characters
7
+ * Maps USB HID usage IDs to uppercase ASCII characters
8
8
  */
9
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
10
+ 0x04: 0x41, // A
11
+ 0x05: 0x42, // B
12
+ 0x06: 0x43, // C
13
+ 0x07: 0x44, // D
14
+ 0x08: 0x45, // E
15
+ 0x09: 0x46, // F
16
+ 0x0A: 0x47, // G
17
+ 0x0B: 0x48, // H
18
+ 0x0C: 0x49, // I
19
+ 0x0D: 0x4A, // J
20
+ 0x0E: 0x4B, // K
21
+ 0x0F: 0x4C, // L
22
+ 0x10: 0x4D, // M
23
+ 0x11: 0x4E, // N
24
+ 0x12: 0x4F, // O
25
+ 0x13: 0x50, // P
26
+ 0x14: 0x51, // Q
27
+ 0x15: 0x52, // R
28
+ 0x16: 0x53, // S
29
+ 0x17: 0x54, // T
30
+ 0x18: 0x55, // U
31
+ 0x19: 0x56, // V
32
+ 0x1A: 0x57, // W
33
+ 0x1B: 0x58, // X
34
+ 0x1C: 0x59, // Y
35
+ 0x1D: 0x5A, // Z
36
36
  0x1E: 0x31, // 1
37
37
  0x1F: 0x32, // 2
38
38
  0x20: 0x33, // 3
@@ -76,13 +76,11 @@ const USB_HID_TO_ASCII = {
76
76
  * - CA1 interrupt signals data ready on Port A
77
77
  * - CB1 interrupt signals data ready on Port B
78
78
  *
79
- * The encoder supports extensive modifier key combinations:
80
- * - MENU key: 0x80 (alone), 0x90 (with Alt)
81
- * - Function keys F1-F15: 0x81-0x8F (alone), 0x91-0x9F (with Alt)
82
- * - Ctrl combinations: Control codes 0x00-0x1F
83
- * - Alt+Shift: Extended character set 0xA0-0xFF
84
- * - Alt: Extended character set 0xE0-0xFF
85
- * - Shift: Uppercase letters and shifted symbols
79
+ * Letters are always output as uppercase ASCII (0x41-0x5A).
80
+ * Supported modifier combinations:
81
+ * - Ctrl+letter: Control codes 0x01-0x1A
82
+ * - Ctrl+special: Ctrl+2=NUL, Ctrl+6=RS, Ctrl+-=US, Ctrl+[=ESC, Ctrl+\=FS, Ctrl+]=GS
83
+ * - Shift+number/symbol: Standard US keyboard shifted symbols
86
84
  */
87
85
  class KeyboardEncoderAttachment extends Attachment_1.AttachmentBase {
88
86
  constructor(priority = 0) {
@@ -92,7 +90,7 @@ class KeyboardEncoderAttachment extends Attachment_1.AttachmentBase {
92
90
  // 'A' = PS/2 encoder on Port A (CA1 IRQ only)
93
91
  // 'B' = Matrix encoder on Port B (CB1 IRQ only)
94
92
  // 'both' = both ports active (default)
95
- this.activePort = 'both';
93
+ this.activePort = 'B';
96
94
  // Port A state
97
95
  this.asciiDataA = 0x00;
98
96
  this.dataReadyA = false;
@@ -106,9 +104,6 @@ class KeyboardEncoderAttachment extends Attachment_1.AttachmentBase {
106
104
  // Modifier key states
107
105
  this.shiftPressed = false;
108
106
  this.ctrlPressed = false;
109
- this.altPressed = false;
110
- this.menuPressed = false;
111
- this.capsLockActive = false;
112
107
  // Control line states
113
108
  this.stateCA1 = false;
114
109
  this.stateCA2 = false;
@@ -128,9 +123,6 @@ class KeyboardEncoderAttachment extends Attachment_1.AttachmentBase {
128
123
  this.enabledB = false;
129
124
  this.shiftPressed = false;
130
125
  this.ctrlPressed = false;
131
- this.altPressed = false;
132
- this.menuPressed = false;
133
- this.capsLockActive = false;
134
126
  }
135
127
  readPortA(ddrA, orA) {
136
128
  // Only provide data when enabled and data is ready
@@ -180,32 +172,6 @@ class KeyboardEncoderAttachment extends Attachment_1.AttachmentBase {
180
172
  * Map a USB HID keycode to ASCII with modifier keys applied
181
173
  */
182
174
  mapKeyWithModifiers(usbHidKeycode) {
183
- // Handle MENU key (USB HID 0xE3 Left GUI, 0xE7 Right GUI)
184
- if (usbHidKeycode === 0xE3 || usbHidKeycode === 0xE7) {
185
- if (this.altPressed) {
186
- return 0x90; // Alt+MENU
187
- }
188
- return 0x80; // MENU alone
189
- }
190
- // Handle function keys F1-F15 (USB HID 0x3A-0x45 for F1-F12, 0x68-0x6A for F13-F15)
191
- // F1-F15 without Alt → 0x81-0x8F
192
- // Alt+F1-F15 → 0x91-0x9F
193
- if (usbHidKeycode >= 0x3A && usbHidKeycode <= 0x45) {
194
- // F1-F12 (0x3A-0x45)
195
- const fKeyOffset = usbHidKeycode - 0x3A; // 0-11 for F1-F12
196
- if (this.altPressed) {
197
- return 0x91 + fKeyOffset; // Alt+F1-F12 → 0x91-0x9C
198
- }
199
- return 0x81 + fKeyOffset; // F1-F12 → 0x81-0x8C
200
- }
201
- if (usbHidKeycode >= 0x68 && usbHidKeycode <= 0x6A) {
202
- // F13-F15 (0x68-0x6A)
203
- const fKeyOffset = usbHidKeycode - 0x68 + 12; // 12-14 for F13-F15
204
- if (this.altPressed) {
205
- return 0x91 + fKeyOffset; // Alt+F13-F15 → 0x9D-0x9F
206
- }
207
- return 0x81 + fKeyOffset; // F13-F15 → 0x8D-0x8F
208
- }
209
175
  // Get base ASCII character from USB HID keycode
210
176
  const baseChar = USB_HID_TO_ASCII[usbHidKeycode] || 0x00;
211
177
  // If no base mapping, return 0x00
@@ -213,198 +179,23 @@ class KeyboardEncoderAttachment extends Attachment_1.AttachmentBase {
213
179
  return 0x00;
214
180
  }
215
181
  // Handle Ctrl combinations - control codes
216
- if (this.ctrlPressed && !this.altPressed) {
182
+ if (this.ctrlPressed) {
217
183
  // Ctrl with letters produces control codes 0x01-0x1A
218
- if (baseChar >= 0x61 && baseChar <= 0x7A) { // a-z
219
- return baseChar - 0x61 + 0x01;
220
- }
221
184
  if (baseChar >= 0x41 && baseChar <= 0x5A) { // A-Z
222
185
  return baseChar - 0x41 + 0x01;
223
186
  }
224
187
  // Ctrl with other special keys
225
188
  switch (baseChar) {
226
- case 0x32:
227
- case 0x40: return 0x00; // Ctrl+2 or Ctrl+@ = NUL
228
- case 0x36:
229
- case 0x5E: return 0x1E; // Ctrl+6 or Ctrl+^ = RS (UP arrow position)
230
- case 0x2D:
231
- case 0x5F: return 0x1F; // Ctrl+- or Ctrl+_ = US (DOWN arrow position)
232
- case 0x5B:
233
- case 0x7B: return 0x1B; // Ctrl+[ or Ctrl+{ = ESC
234
- case 0x5C:
235
- case 0x7C: return 0x1C; // Ctrl+\ or Ctrl+| = FS (LEFT arrow position)
236
- case 0x5D:
237
- case 0x7D: return 0x1D; // Ctrl+] or Ctrl+} = GS (RIGHT arrow position)
189
+ case 0x32: return 0x00; // Ctrl+2 = NUL
190
+ case 0x36: return 0x1E; // Ctrl+6 = RS
191
+ case 0x2D: return 0x1F; // Ctrl+- = US
192
+ case 0x5B: return 0x1B; // Ctrl+[ = ESC
193
+ case 0x5C: return 0x1C; // Ctrl+\ = FS
194
+ case 0x5D: return 0x1D; // Ctrl+] = GS
238
195
  }
239
196
  }
240
- // Handle Alt+Shift combinations - extended character set
241
- if (this.altPressed && this.shiftPressed) {
242
- switch (baseChar) {
243
- case 0x31: return 0xA1; // '1' -> ¡
244
- case 0x27: return 0xA2; // '\'' -> ¢
245
- case 0x33: return 0xA3; // '3' -> £
246
- case 0x34: return 0xA4; // '4' -> ¤
247
- case 0x35: return 0xA5; // '5' -> ¥
248
- case 0x37: return 0xA6; // '7' -> ¦
249
- case 0x39: return 0xA8; // '9' -> ¨
250
- case 0x30: return 0xA9; // '0' -> ©
251
- case 0x38: return 0xAA; // '8' -> ª
252
- case 0x3D: return 0xAB; // '=' -> «
253
- case 0x3B: return 0xBA; // ';' -> º
254
- case 0x2C: return 0xBC; // ',' -> ¼
255
- case 0x2E: return 0xBE; // '.' -> ¾
256
- case 0x2F: return 0xBF; // '/' -> ¿
257
- case 0x32: return 0xC0; // '2' -> À
258
- case 0x61:
259
- case 0x41: return 0xC1; // 'a'/'A' -> Á
260
- case 0x62:
261
- case 0x42: return 0xC2; // 'b'/'B' -> Â
262
- case 0x63:
263
- case 0x43: return 0xC3; // 'c'/'C' -> Ã
264
- case 0x64:
265
- case 0x44: return 0xC4; // 'd'/'D' -> Ä
266
- case 0x65:
267
- case 0x45: return 0xC5; // 'e'/'E' -> Å
268
- case 0x66:
269
- case 0x46: return 0xC6; // 'f'/'F' -> Æ
270
- case 0x67:
271
- case 0x47: return 0xC7; // 'g'/'G' -> Ç
272
- case 0x68:
273
- case 0x48: return 0xC8; // 'h'/'H' -> È
274
- case 0x69:
275
- case 0x49: return 0xC9; // 'i'/'I' -> É
276
- case 0x6A:
277
- case 0x4A: return 0xCA; // 'j'/'J' -> Ê
278
- case 0x6B:
279
- case 0x4B: return 0xCB; // 'k'/'K' -> Ë
280
- case 0x6C:
281
- case 0x4C: return 0xCC; // 'l'/'L' -> Ì
282
- case 0x6D:
283
- case 0x4D: return 0xCD; // 'm'/'M' -> Í
284
- case 0x6E:
285
- case 0x4E: return 0xCE; // 'n'/'N' -> Î
286
- case 0x6F:
287
- case 0x4F: return 0xCF; // 'o'/'O' -> Ï
288
- case 0x70:
289
- case 0x50: return 0xD0; // 'p'/'P' -> Ð
290
- case 0x71:
291
- case 0x51: return 0xD1; // 'q'/'Q' -> Ñ
292
- case 0x72:
293
- case 0x52: return 0xD2; // 'r'/'R' -> Ò
294
- case 0x73:
295
- case 0x53: return 0xD3; // 's'/'S' -> Ó
296
- case 0x74:
297
- case 0x54: return 0xD4; // 't'/'T' -> Ô
298
- case 0x75:
299
- case 0x55: return 0xD5; // 'u'/'U' -> Õ
300
- case 0x76:
301
- case 0x56: return 0xD6; // 'v'/'V' -> Ö
302
- case 0x77:
303
- case 0x57: return 0xD7; // 'w'/'W' -> ×
304
- case 0x78:
305
- case 0x58: return 0xD8; // 'x'/'X' -> Ø
306
- case 0x79:
307
- case 0x59: return 0xD9; // 'y'/'Y' -> Ù
308
- case 0x7A:
309
- case 0x5A: return 0xDA; // 'z'/'Z' -> Ú
310
- case 0x5B: return 0xFB; // '[' -> û
311
- case 0x5C: return 0xFC; // '\\' -> ü
312
- case 0x5D: return 0xFD; // ']' -> ý
313
- case 0x60: return 0xFE; // '`' -> þ
314
- case 0x36: return 0xDE; // '6' -> Þ
315
- case 0x2D: return 0xDF; // '-' -> ß
316
- }
317
- }
318
- // Handle Alt combinations (without shift)
319
- if (this.altPressed && !this.shiftPressed) {
320
- switch (baseChar) {
321
- case 0x20: return 0xA0; // Space -> nbsp
322
- case 0x27: return 0xA7; // '\'' -> §
323
- case 0x2C: return 0xAC; // ',' -> ¬
324
- case 0x2D: return 0xAD; // '-' -> soft hyphen
325
- case 0x2E: return 0xAE; // '.' -> ®
326
- case 0x2F: return 0xAF; // '/' -> ¯
327
- case 0x30: return 0xB0; // '0' -> °
328
- case 0x31: return 0xB1; // '1' -> ±
329
- case 0x32: return 0xB2; // '2' -> ²
330
- case 0x33: return 0xB3; // '3' -> ³
331
- case 0x34: return 0xB4; // '4' -> ´
332
- case 0x35: return 0xB5; // '5' -> µ
333
- case 0x36: return 0xB6; // '6' -> ¶
334
- case 0x37: return 0xB7; // '7' -> ·
335
- case 0x38: return 0xB8; // '8' -> ¸
336
- case 0x39: return 0xB9; // '9' -> ¹
337
- case 0x3B: return 0xBB; // ';' -> »
338
- case 0x3D: return 0xBD; // '=' -> ½
339
- case 0x5B: return 0xDB; // '[' -> Û
340
- case 0x5C: return 0xDC; // '\\' -> Ü
341
- case 0x5D: return 0xDD; // ']' -> Ý
342
- case 0x60: return 0xE0; // '`' -> à
343
- case 0x61:
344
- case 0x41: return 0xE1; // 'a'/'A' -> á
345
- case 0x62:
346
- case 0x42: return 0xE2; // 'b'/'B' -> â
347
- case 0x63:
348
- case 0x43: return 0xE3; // 'c'/'C' -> ã
349
- case 0x64:
350
- case 0x44: return 0xE4; // 'd'/'D' -> ä
351
- case 0x65:
352
- case 0x45: return 0xE5; // 'e'/'E' -> å
353
- case 0x66:
354
- case 0x46: return 0xE6; // 'f'/'F' -> æ
355
- case 0x67:
356
- case 0x47: return 0xE7; // 'g'/'G' -> ç
357
- case 0x68:
358
- case 0x48: return 0xE8; // 'h'/'H' -> è
359
- case 0x69:
360
- case 0x49: return 0xE9; // 'i'/'I' -> é
361
- case 0x6A:
362
- case 0x4A: return 0xEA; // 'j'/'J' -> ê
363
- case 0x6B:
364
- case 0x4B: return 0xEB; // 'k'/'K' -> ë
365
- case 0x6C:
366
- case 0x4C: return 0xEC; // 'l'/'L' -> ì
367
- case 0x6D:
368
- case 0x4D: return 0xED; // 'm'/'M' -> í
369
- case 0x6E:
370
- case 0x4E: return 0xEE; // 'n'/'N' -> î
371
- case 0x6F:
372
- case 0x4F: return 0xEF; // 'o'/'O' -> ï
373
- case 0x70:
374
- case 0x50: return 0xF0; // 'p'/'P' -> ð
375
- case 0x71:
376
- case 0x51: return 0xF1; // 'q'/'Q' -> ñ
377
- case 0x72:
378
- case 0x52: return 0xF2; // 'r'/'R' -> ò
379
- case 0x73:
380
- case 0x53: return 0xF3; // 's'/'S' -> ó
381
- case 0x74:
382
- case 0x54: return 0xF4; // 't'/'T' -> ô
383
- case 0x75:
384
- case 0x55: return 0xF5; // 'u'/'U' -> õ
385
- case 0x76:
386
- case 0x56: return 0xF6; // 'v'/'V' -> ö
387
- case 0x77:
388
- case 0x57: return 0xF7; // 'w'/'W' -> ÷
389
- case 0x78:
390
- case 0x58: return 0xF8; // 'x'/'X' -> ø
391
- case 0x79:
392
- case 0x59: return 0xF9; // 'y'/'Y' -> ù
393
- case 0x7A:
394
- case 0x5A: return 0xFA; // 'z'/'Z' -> ú
395
- case 0x7F: return 0xFF; // DEL -> ÿ
396
- }
397
- }
398
- // Handle Shift combinations - uppercase and shifted symbols
399
- // Caps Lock XORs with Shift for letters (they cancel each other out)
400
- const effectiveUppercase = this.capsLockActive !== this.shiftPressed;
401
- if (effectiveUppercase && !this.ctrlPressed && !this.altPressed) {
402
- if (baseChar >= 0x61 && baseChar <= 0x7A) { // a-z
403
- return baseChar - 0x61 + 0x41; // A-Z
404
- }
405
- }
406
- if (this.shiftPressed && !this.ctrlPressed && !this.altPressed) {
407
- // Shifted symbols (Caps Lock does not affect symbols)
197
+ // Handle Shift combinations - shifted symbols only (letters are always uppercase)
198
+ if (this.shiftPressed && !this.ctrlPressed) {
408
199
  switch (baseChar) {
409
200
  case 0x31: return 0x21; // '1' -> '!'
410
201
  case 0x32: return 0x40; // '2' -> '@'
@@ -444,24 +235,10 @@ class KeyboardEncoderAttachment extends Attachment_1.AttachmentBase {
444
235
  case 0xE4: // Right Ctrl
445
236
  this.ctrlPressed = pressed;
446
237
  return; // Don't generate output for modifier keys alone
447
- case 0x39: // Caps Lock - toggle on press, ignore release
448
- if (pressed) {
449
- this.capsLockActive = !this.capsLockActive;
450
- }
451
- return;
452
238
  case 0xE1: // Left Shift
453
239
  case 0xE5: // Right Shift
454
240
  this.shiftPressed = pressed;
455
241
  return;
456
- case 0xE2: // Left Alt
457
- case 0xE6: // Right Alt
458
- this.altPressed = pressed;
459
- return;
460
- case 0xE3: // Left GUI (MENU)
461
- case 0xE7: // Right GUI (MENU)
462
- this.menuPressed = pressed;
463
- // MENU key generates output, so don't return - fall through
464
- break;
465
242
  }
466
243
  // Only process key presses, not releases (encoder only reports keypress events)
467
244
  if (!pressed) {
@@ -470,7 +247,7 @@ class KeyboardEncoderAttachment extends Attachment_1.AttachmentBase {
470
247
  // Map the key with active modifiers
471
248
  const mappedValue = this.mapKeyWithModifiers(usbHidKeycode);
472
249
  // Ignore keys with no mapping (0x00 unless it's a valid control code like Ctrl+2 = NUL)
473
- // Valid 0x00: Ctrl+2, Ctrl+@
250
+ // Valid 0x00: Ctrl+2
474
251
  if (mappedValue === 0x00 && !this.ctrlPressed) {
475
252
  return;
476
253
  }
@@ -1 +1 @@
1
- {"version":3,"file":"KeyboardEncoderAttachment.js","sourceRoot":"","sources":["../../../../src/components/IO/Attachments/KeyboardEncoderAttachment.ts"],"names":[],"mappings":"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,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,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AI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IAAI,CAAC;gBAAC,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAA,CAAE,eAAe;gBAClD,KAAK,IA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"}
1
+ {"version":3,"file":"KeyboardEncoderAttachment.js","sourceRoot":"","sources":["../../../../src/components/IO/Attachments/KeyboardEncoderAttachment.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
1
  import { IO } from '../IO';
2
2
  export declare class Empty implements IO {
3
- raiseIRQ: () => void;
4
- raiseNMI: () => void;
5
3
  read(address: number): number;
6
4
  write(address: number, data: number): void;
7
- tick(frequency: number): void;
5
+ tick(frequency: number): number;
8
6
  reset(coldStart: boolean): void;
9
7
  }
@@ -2,15 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Empty = void 0;
4
4
  class Empty {
5
- constructor() {
6
- this.raiseIRQ = () => { };
7
- this.raiseNMI = () => { };
8
- }
9
5
  read(address) {
10
6
  return 0;
11
7
  }
12
8
  write(address, data) { }
13
- tick(frequency) { }
9
+ tick(frequency) { return 0; }
14
10
  reset(coldStart) { }
15
11
  }
16
12
  exports.Empty = Empty;
@@ -1 +1 @@
1
- {"version":3,"file":"Empty.js","sourceRoot":"","sources":["../../../src/components/IO/Empty.ts"],"names":[],"mappings":";;;AAEA,MAAa,KAAK;IAAlB;QAEE,aAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;QACnB,aAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;IAUrB,CAAC;IARC,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,CAAA;IACV,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAY,IAAS,CAAC;IAC7C,IAAI,CAAC,SAAiB,IAAS,CAAC;IAChC,KAAK,CAAC,SAAkB,IAAS,CAAC;CAEnC;AAbD,sBAaC"}
1
+ {"version":3,"file":"Empty.js","sourceRoot":"","sources":["../../../src/components/IO/Empty.ts"],"names":[],"mappings":";;;AAEA,MAAa,KAAK;IAEhB,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,CAAA;IACV,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAY,IAAS,CAAC;IAC7C,IAAI,CAAC,SAAiB,IAAY,OAAO,CAAC,CAAA,CAAC,CAAC;IAC5C,KAAK,CAAC,SAAkB,IAAS,CAAC;CAEnC;AAVD,sBAUC"}
@@ -16,20 +16,19 @@ export declare class RAMBank implements IO {
16
16
  static BANK_CONTROL_REGISTER: number;
17
17
  data: number[];
18
18
  currentBank: number;
19
- raiseIRQ: () => void;
20
- raiseNMI: () => void;
21
19
  /**
22
- * Read from RAM or bank control register
20
+ * Read from RAM - all addresses read from the data array
23
21
  */
24
22
  read(address: number): number;
25
23
  /**
26
24
  * Write to RAM or bank control register
25
+ * Writing to $3FF sets the bank AND writes through to the new bank's data
27
26
  */
28
27
  write(address: number, data: number): void;
29
28
  /**
30
29
  * Tick - no timing behavior for RAM
31
30
  */
32
- tick(frequency: number): void;
31
+ tick(frequency: number): number;
33
32
  /**
34
33
  * Reset the RAM card
35
34
  */
@@ -15,36 +15,27 @@ class RAMBank {
15
15
  constructor() {
16
16
  this.data = [...Array(RAMBank.TOTAL_SIZE)].fill(0x00);
17
17
  this.currentBank = 0;
18
- this.raiseIRQ = () => { };
19
- this.raiseNMI = () => { };
20
18
  }
21
19
  /**
22
- * Read from RAM or bank control register
20
+ * Read from RAM - all addresses read from the data array
23
21
  */
24
22
  read(address) {
25
- // Reading from bank control register returns current bank number
26
- if (address === RAMBank.BANK_CONTROL_REGISTER) {
27
- return this.currentBank;
28
- }
29
- // Calculate actual address in RAM: bank * bank_size + offset and return data
30
23
  return this.data[this.currentBank * RAMBank.BANK_SIZE + address];
31
24
  }
32
25
  /**
33
26
  * Write to RAM or bank control register
27
+ * Writing to $3FF sets the bank AND writes through to the new bank's data
34
28
  */
35
29
  write(address, data) {
36
- // Writing to bank control register switches banks
37
30
  if (address === RAMBank.BANK_CONTROL_REGISTER) {
38
- this.currentBank = data & 0xFF; // Ensure 0-255 range
39
- return;
31
+ this.currentBank = data & 0xFF;
40
32
  }
41
- // Calculate actual address in RAM: bank * bank_size + offset and store data
42
33
  this.data[this.currentBank * RAMBank.BANK_SIZE + address] = data & 0xFF;
43
34
  }
44
35
  /**
45
36
  * Tick - no timing behavior for RAM
46
37
  */
47
- tick(frequency) { }
38
+ tick(frequency) { return 0; }
48
39
  /**
49
40
  * Reset the RAM card
50
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"RAMBank.js","sourceRoot":"","sources":["../../../src/components/IO/RAMBank.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;GASG;AACH,MAAa,OAAO;IAApB;QAOE,SAAI,GAAa,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1D,gBAAW,GAAW,CAAC,CAAA;QAEvB,aAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;QACnB,aAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;IA4CrB,CAAC;IA1CC;;OAEG;IACH,IAAI,CAAC,OAAe;QAClB,iEAAiE;QACjE,IAAI,OAAO,KAAK,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,WAAW,CAAA;QACzB,CAAC;QAED,6EAA6E;QAC7E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,CAAA;IAClE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAe,EAAE,IAAY;QACjC,kDAAkD;QAClD,IAAI,OAAO,KAAK,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAA,CAAC,qBAAqB;YACpD,OAAM;QACR,CAAC;QAED,4EAA4E;QAC5E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;IACzE,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,SAAiB,IAAS,CAAC;IAEhC;;OAEG;IACH,KAAK,CAAC,SAAkB;QACtB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;YACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;;AArDH,0BAuDC;AArDQ,kBAAU,GAAW,GAAG,GAAG,IAAI,AAArB,CAAqB,CAAC,aAAa;AAC7C,iBAAS,GAAW,IAAI,AAAf,CAAe,CAAC,cAAc;AACvC,iBAAS,GAAW,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,AAAjD,CAAiD,CAAC,YAAY;AACvE,6BAAqB,GAAW,KAAK,AAAhB,CAAgB,CAAC,yBAAyB"}
1
+ {"version":3,"file":"RAMBank.js","sourceRoot":"","sources":["../../../src/components/IO/RAMBank.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;GASG;AACH,MAAa,OAAO;IAApB;QAOE,SAAI,GAAa,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1D,gBAAW,GAAW,CAAC,CAAA;IAoCzB,CAAC;IAlCC;;OAEG;IACH,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,CAAA;IAClE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAe,EAAE,IAAY;QACjC,IAAI,OAAO,KAAK,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,CAAA;QAChC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;IACzE,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,SAAiB,IAAY,OAAO,CAAC,CAAA,CAAC,CAAC;IAE5C;;OAEG;IACH,KAAK,CAAC,SAAkB;QACtB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;YACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;;AA1CH,0BA4CC;AA1CQ,kBAAU,GAAW,GAAG,GAAG,IAAI,AAArB,CAAqB,CAAC,aAAa;AAC7C,iBAAS,GAAW,IAAI,AAAf,CAAe,CAAC,cAAc;AACvC,iBAAS,GAAW,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,AAAjD,CAAiD,CAAC,YAAY;AACvE,6BAAqB,GAAW,KAAK,AAAhB,CAAgB,CAAC,yBAAyB"}
@@ -25,8 +25,6 @@ import { IO } from '../IO';
25
25
  * 0x13: RAM Data (Extended RAM Data at address pointed to by 0x10)
26
26
  */
27
27
  export declare class RTC implements IO {
28
- raiseIRQ: () => void;
29
- raiseNMI: () => void;
30
28
  private userSeconds;
31
29
  private userMinutes;
32
30
  private userHours;
@@ -52,6 +50,7 @@ export declare class RTC implements IO {
52
50
  private watchdog2;
53
51
  private watchdogCounterCentis;
54
52
  private watchdogCycleCounter;
53
+ private nmiPending;
55
54
  private controlA;
56
55
  private controlB;
57
56
  private ramAddress;
@@ -100,6 +99,6 @@ export declare class RTC implements IO {
100
99
  private stepWatchdog;
101
100
  read(address: number): number;
102
101
  write(address: number, data: number): void;
103
- tick(frequency: number, cycles?: number): void;
102
+ tick(frequency: number): number;
104
103
  reset(coldStart: boolean): void;
105
104
  }
@@ -28,8 +28,6 @@ exports.RTC = void 0;
28
28
  */
29
29
  class RTC {
30
30
  constructor() {
31
- this.raiseIRQ = () => { };
32
- this.raiseNMI = () => { };
33
31
  // RTC Registers (user-visible)
34
32
  this.userSeconds = 0; // 0x00
35
33
  this.userMinutes = 0; // 0x01
@@ -59,6 +57,7 @@ class RTC {
59
57
  this.watchdog2 = 0; // 0x0D (0.1 Second and Second)
60
58
  this.watchdogCounterCentis = 0;
61
59
  this.watchdogCycleCounter = 0;
60
+ this.nmiPending = false;
62
61
  // Control registers
63
62
  this.controlA = 0; // 0x0E
64
63
  this.controlB = 0; // 0x0F
@@ -239,7 +238,6 @@ class RTC {
239
238
  if ((this.controlB & enableMask) === 0)
240
239
  return;
241
240
  this.controlA |= 0x01; // Set IRQF flag (bit 0)
242
- this.raiseIRQ();
243
241
  }
244
242
  setKickstartFlag() {
245
243
  this.controlA |= 0x04; // Set KSF flag (bit 2)
@@ -278,7 +276,7 @@ class RTC {
278
276
  else {
279
277
  // WDS=1 steers watchdog to reset; emulate by clearing WDE
280
278
  this.controlB &= ~0x02;
281
- this.raiseNMI();
279
+ this.nmiPending = true;
282
280
  }
283
281
  }
284
282
  read(address) {
@@ -416,17 +414,22 @@ class RTC {
416
414
  break;
417
415
  }
418
416
  }
419
- tick(frequency, cycles = 1) {
417
+ tick(frequency) {
420
418
  this.cpuFrequency = frequency > 0 ? frequency : 1000000;
421
419
  const teEnabled = (this.controlB & 0x80) !== 0;
422
420
  if ((this.monthControl & 0x80) !== 0) {
423
421
  // EOSC=1: oscillator disabled (DS1511Y+ active-low enable)
424
422
  this.stepWatchdog();
425
- return;
423
+ let status = (this.controlA & 0x01) ? 0x80 : 0;
424
+ if (this.nmiPending) {
425
+ status |= 0x40;
426
+ this.nmiPending = false;
427
+ }
428
+ return status;
426
429
  }
427
430
  // Advance the clock by counting CPU cycles.
428
431
  // One emulated second = cpuFrequency cycles.
429
- this.cycleAccumulator += cycles;
432
+ this.cycleAccumulator++;
430
433
  while (this.cycleAccumulator >= this.cpuFrequency) {
431
434
  this.cycleAccumulator -= this.cpuFrequency;
432
435
  this.incrementTime();
@@ -444,6 +447,13 @@ class RTC {
444
447
  this.userSyncNeeded = false;
445
448
  }
446
449
  this.stepWatchdog();
450
+ // Return interrupt status: bit 7 = IRQ, bit 6 = NMI
451
+ let status = (this.controlA & 0x01) ? 0x80 : 0;
452
+ if (this.nmiPending) {
453
+ status |= 0x40;
454
+ this.nmiPending = false;
455
+ }
456
+ return status;
447
457
  }
448
458
  reset(coldStart) {
449
459
  if (coldStart) {