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,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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"}
|