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,282 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SerialCard = void 0;
4
+ /**
5
+ * SerialCard - Emulates a 6551 ACIA (Asynchronous Communications Interface Adapter)
6
+ *
7
+ * Register Map:
8
+ * $00: Data Register (read/write)
9
+ * $01: Status Register (read) / Programmed Reset (write)
10
+ * $02: Command Register (write)
11
+ * $03: Control Register (write)
12
+ */
13
+ class SerialCard {
14
+ constructor() {
15
+ this.raiseIRQ = () => { };
16
+ this.raiseNMI = () => { };
17
+ // Registers
18
+ this.dataRegister = 0;
19
+ this.statusRegister = 0x10; // Transmit Data Register Empty
20
+ this.commandRegister = 0;
21
+ this.controlRegister = 0;
22
+ // Buffers
23
+ this.transmitBuffer = [];
24
+ this.receiveBuffer = [];
25
+ // Status flags
26
+ this.parityError = false;
27
+ this.framingError = false;
28
+ this.overrun = false;
29
+ this.irqFlag = false;
30
+ this.echoMode = false;
31
+ // Timing
32
+ this.cycleCounter = 0;
33
+ this.baudRate = 115200;
34
+ }
35
+ /**
36
+ * Read from ACIA register
37
+ */
38
+ read(address) {
39
+ const register = address & 0x03;
40
+ switch (register) {
41
+ case 0x00: // Data Register
42
+ return this.readData();
43
+ case 0x01: // Status Register
44
+ return this.readStatus();
45
+ case 0x02: // Command Register (write-only, returns 0)
46
+ return 0;
47
+ case 0x03: // Control Register (write-only, returns 0)
48
+ return 0;
49
+ default:
50
+ return 0;
51
+ }
52
+ }
53
+ /**
54
+ * Write to ACIA register
55
+ */
56
+ write(address, data) {
57
+ const register = address & 0x03;
58
+ switch (register) {
59
+ case 0x00: // Data Register
60
+ this.writeData(data);
61
+ break;
62
+ case 0x01: // Programmed Reset
63
+ this.programmedReset();
64
+ break;
65
+ case 0x02: // Command Register
66
+ this.writeCommand(data);
67
+ break;
68
+ case 0x03: // Control Register
69
+ this.writeControl(data);
70
+ break;
71
+ }
72
+ }
73
+ /**
74
+ * Read data from receive buffer
75
+ */
76
+ readData() {
77
+ if (this.receiveBuffer.length > 0) {
78
+ const data = this.receiveBuffer.shift();
79
+ this.dataRegister = data;
80
+ // Update status: clear Receive Data Register Full
81
+ this.statusRegister &= ~0x08;
82
+ // Check for overrun if more data arrives
83
+ if (this.receiveBuffer.length === 0) {
84
+ this.overrun = false;
85
+ this.statusRegister &= ~0x04;
86
+ }
87
+ // Clear IRQ if receive IRQ was enabled
88
+ if ((this.commandRegister & 0x04) && this.receiveBuffer.length === 0) {
89
+ this.irqFlag = false;
90
+ this.statusRegister &= ~0x80;
91
+ }
92
+ return data;
93
+ }
94
+ return this.dataRegister;
95
+ }
96
+ /**
97
+ * Write data to transmit buffer
98
+ */
99
+ writeData(data) {
100
+ this.transmitBuffer.push(data & 0xFF);
101
+ // Clear Transmit Data Register Empty flag
102
+ this.statusRegister &= ~0x10;
103
+ }
104
+ /**
105
+ * Read status register
106
+ */
107
+ readStatus() {
108
+ let status = 0;
109
+ // Bit 0: Parity Error
110
+ if (this.parityError)
111
+ status |= 0x01;
112
+ // Bit 1: Framing Error
113
+ if (this.framingError)
114
+ status |= 0x02;
115
+ // Bit 2: Overrun
116
+ if (this.overrun)
117
+ status |= 0x04;
118
+ // Bit 3: Receive Data Register Full
119
+ if (this.receiveBuffer.length > 0)
120
+ status |= 0x08;
121
+ // Bit 4: Transmit Data Register Empty
122
+ if (this.transmitBuffer.length === 0)
123
+ status |= 0x10;
124
+ // Bit 5: Data Carrier Detect (DCD) - always clear (connected)
125
+ status &= ~0x20;
126
+ // Bit 6: Data Set Ready (DSR) - always set (ready)
127
+ status |= 0x40;
128
+ // Bit 7: Interrupt (IRQ)
129
+ if (this.irqFlag)
130
+ status |= 0x80;
131
+ this.statusRegister = status;
132
+ return status;
133
+ }
134
+ /**
135
+ * Write to command register
136
+ */
137
+ writeCommand(data) {
138
+ this.commandRegister = data & 0xFF;
139
+ // Bits 0-1: DTR control
140
+ // const dtrControl = data & 0x03
141
+ // Bit 2: Receive IRQ Enable
142
+ const receiveIRQEnabled = (data & 0x04) !== 0;
143
+ // Bits 3-4: Transmit control and IRQ enable
144
+ // const transmitControl = (data >> 3) & 0x03
145
+ // Bit 5: Echo mode
146
+ this.echoMode = (data & 0x20) !== 0;
147
+ // Bits 6-7: Parity control
148
+ // const parityControl = (data >> 6) & 0x03
149
+ // Handle receive IRQ
150
+ if (receiveIRQEnabled && this.receiveBuffer.length > 0) {
151
+ this.irqFlag = true;
152
+ this.statusRegister |= 0x80;
153
+ this.raiseIRQ();
154
+ }
155
+ else if (!receiveIRQEnabled) {
156
+ this.irqFlag = false;
157
+ this.statusRegister &= ~0x80;
158
+ }
159
+ }
160
+ /**
161
+ * Write to control register
162
+ */
163
+ writeControl(data) {
164
+ this.controlRegister = data & 0xFF;
165
+ // Bits 0-3: Baud rate
166
+ const baudRateCode = data & 0x0F;
167
+ this.baudRate = this.getBaudRate(baudRateCode);
168
+ // Bit 4: Receiver clock source (internal/external)
169
+ const receiverClockSource = (data & 0x10) !== 0;
170
+ // Bits 5-6: Word length (5, 6, 7, or 8 bits)
171
+ const wordLength = ((data >> 5) & 0x03) + 5;
172
+ // Bit 7: Stop bits (1 or 2)
173
+ const stopBits = (data & 0x80) ? 2 : 1;
174
+ }
175
+ /**
176
+ * Get baud rate from control register code
177
+ */
178
+ getBaudRate(code) {
179
+ const baudRates = [
180
+ 115200, // 0000 (actually 16x external clock, using 115200 as default)
181
+ 50, // 0001
182
+ 75, // 0010
183
+ 110, // 0011
184
+ 135, // 0100
185
+ 150, // 0101
186
+ 300, // 0110
187
+ 600, // 0111
188
+ 1200, // 1000
189
+ 1800, // 1001
190
+ 2400, // 1010
191
+ 3600, // 1011
192
+ 4800, // 1100
193
+ 7200, // 1101
194
+ 9600, // 1110
195
+ 19200 // 1111
196
+ ];
197
+ return baudRates[code] || 115200;
198
+ }
199
+ /**
200
+ * Programmed reset
201
+ */
202
+ programmedReset() {
203
+ this.statusRegister = 0x10; // Transmit Data Register Empty
204
+ this.parityError = false;
205
+ this.framingError = false;
206
+ this.overrun = false;
207
+ this.irqFlag = false;
208
+ }
209
+ /**
210
+ * Tick - emulate ACIA timing
211
+ */
212
+ tick(frequency) {
213
+ this.cycleCounter++;
214
+ // Calculate cycles per byte: (CPU_CLOCK / baud_rate) * bits_per_frame
215
+ // Assuming 10 bits per frame (1 start + 8 data + 1 stop)
216
+ const cyclesPerByte = Math.floor((frequency / this.baudRate) * 10);
217
+ // Simulate transmission based on actual baud rate
218
+ if (this.cycleCounter >= cyclesPerByte && this.transmitBuffer.length > 0) {
219
+ this.cycleCounter = 0;
220
+ // Transmit one byte
221
+ const byte = this.transmitBuffer.shift();
222
+ if (byte !== undefined && this.transmit) {
223
+ this.transmit(byte);
224
+ }
225
+ // Set Transmit Data Register Empty if buffer is empty
226
+ if (this.transmitBuffer.length === 0) {
227
+ this.statusRegister |= 0x10;
228
+ // Trigger transmit complete IRQ if enabled
229
+ if ((this.commandRegister & 0x18) === 0x08) {
230
+ this.irqFlag = true;
231
+ this.statusRegister |= 0x80;
232
+ this.raiseIRQ();
233
+ }
234
+ }
235
+ }
236
+ }
237
+ /**
238
+ * Reset the ACIA
239
+ */
240
+ reset(coldStart) {
241
+ this.dataRegister = 0;
242
+ this.statusRegister = 0x10; // Transmit Data Register Empty
243
+ this.commandRegister = 0;
244
+ this.controlRegister = 0;
245
+ this.transmitBuffer = [];
246
+ this.receiveBuffer = [];
247
+ this.parityError = false;
248
+ this.framingError = false;
249
+ this.overrun = false;
250
+ this.irqFlag = false;
251
+ this.echoMode = false;
252
+ this.cycleCounter = 0;
253
+ this.baudRate = 115200;
254
+ }
255
+ /**
256
+ * Receive data from external source
257
+ */
258
+ onData(data) {
259
+ if (this.receiveBuffer.length > 0 && (this.statusRegister & 0x08)) {
260
+ // Overrun condition: data arrives before previous data was read
261
+ this.overrun = true;
262
+ this.statusRegister |= 0x04;
263
+ }
264
+ this.receiveBuffer.push(data & 0xFF);
265
+ // Set Receive Data Register Full flag
266
+ this.statusRegister |= 0x08;
267
+ // Trigger receive IRQ if enabled
268
+ if (this.commandRegister & 0x04) {
269
+ this.irqFlag = true;
270
+ this.statusRegister |= 0x80;
271
+ this.raiseIRQ();
272
+ }
273
+ // Echo mode: automatically transmit received data
274
+ if (this.echoMode) {
275
+ this.transmitBuffer.push(data & 0xFF);
276
+ // Clear Transmit Data Register Empty flag
277
+ this.statusRegister &= ~0x10;
278
+ }
279
+ }
280
+ }
281
+ exports.SerialCard = SerialCard;
282
+ //# sourceMappingURL=SerialCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SerialCard.js","sourceRoot":"","sources":["../../../src/components/IO/SerialCard.ts"],"names":[],"mappings":"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"}