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,310 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Machine = void 0;
13
+ const CPU_1 = require("./CPU");
14
+ const RAM_1 = require("./RAM");
15
+ const ROM_1 = require("./ROM");
16
+ const Cart_1 = require("./Cart");
17
+ const GPIOCard_1 = require("./IO/GPIOCard");
18
+ const RAMCard_1 = require("./IO/RAMCard");
19
+ const RTCCard_1 = require("./IO/RTCCard");
20
+ const SerialCard_1 = require("./IO/SerialCard");
21
+ const SoundCard_1 = require("./IO/SoundCard");
22
+ const StorageCard_1 = require("./IO/StorageCard");
23
+ const VideoCard_1 = require("./IO/VideoCard");
24
+ const GPIOKeyboardMatrixAttachment_1 = require("./IO/GPIOAttachments/GPIOKeyboardMatrixAttachment");
25
+ const GPIOKeyboardEncoderAttachment_1 = require("./IO/GPIOAttachments/GPIOKeyboardEncoderAttachment");
26
+ const GPIOJoystickAttachment_1 = require("./IO/GPIOAttachments/GPIOJoystickAttachment");
27
+ const promises_1 = require("fs/promises");
28
+ class Machine {
29
+ //
30
+ // Initialization
31
+ //
32
+ constructor() {
33
+ this.ioCycleAccumulator = 0;
34
+ this.ioTickInterval = 128; // adjust (64/128/256)
35
+ this.isAlive = false;
36
+ this.isRunning = false;
37
+ this.frequency = 2000000; // 2 MHz
38
+ this.scale = 2;
39
+ this.frames = 0;
40
+ this.frameDelay = 0;
41
+ this.frameDelayCount = 0;
42
+ this.startTime = Date.now();
43
+ this.previousTime = performance.now();
44
+ //
45
+ // Methods
46
+ //
47
+ this.loadROM = (path) => __awaiter(this, void 0, void 0, function* () {
48
+ try {
49
+ this.rom.load(Array.from(new Uint8Array(yield (0, promises_1.readFile)(path))));
50
+ }
51
+ catch (error) {
52
+ console.error('Error reading file:', error);
53
+ }
54
+ });
55
+ this.loadCart = (path) => __awaiter(this, void 0, void 0, function* () {
56
+ try {
57
+ const data = Array.from(new Uint8Array(yield (0, promises_1.readFile)(path)));
58
+ const cart = new Cart_1.Cart();
59
+ cart.load(data);
60
+ this.cart = cart;
61
+ }
62
+ catch (error) {
63
+ console.error('Error reading file:', error);
64
+ }
65
+ });
66
+ this.cpu = new CPU_1.CPU(this.read.bind(this), this.write.bind(this));
67
+ this.ram = new RAM_1.RAM();
68
+ this.rom = new ROM_1.ROM();
69
+ this.io1 = new RAMCard_1.RAMCard();
70
+ this.io2 = new RAMCard_1.RAMCard();
71
+ this.io3 = new RTCCard_1.RTCCard();
72
+ this.io4 = new StorageCard_1.StorageCard();
73
+ this.io5 = new SerialCard_1.SerialCard();
74
+ this.io6 = new GPIOCard_1.GPIOCard();
75
+ this.io7 = new SoundCard_1.SoundCard();
76
+ this.io8 = new VideoCard_1.VideoCard();
77
+ // Connect RTCCard IRQ/NMI to CPU
78
+ this.io3.raiseIRQ = () => this.cpu.irq();
79
+ this.io3.raiseNMI = () => this.cpu.nmi();
80
+ // Connect SerialCard IRQ/NMI to CPU
81
+ this.io5.raiseIRQ = () => this.cpu.irq();
82
+ this.io5.raiseNMI = () => this.cpu.nmi();
83
+ // Connect SerialCard transmit callback (use arrow function to look up this.transmit at call time)
84
+ this.io5.transmit = (data) => {
85
+ if (this.transmit) {
86
+ this.transmit(data);
87
+ }
88
+ };
89
+ // Connect VideoCard IRQ/NMI to CPU
90
+ this.io8.raiseIRQ = () => this.cpu.irq();
91
+ this.io8.raiseNMI = () => this.cpu.nmi();
92
+ // Connect SoundCard pushSamples callback (use arrow function to look up this.pushAudioSamples at call time)
93
+ this.io7.pushSamples = (samples) => {
94
+ if (this.pushAudioSamples) {
95
+ this.pushAudioSamples(samples);
96
+ }
97
+ };
98
+ // Create GPIO Attachments
99
+ // Keyboard matrix (manual scanning) - highest priority for Port A rows (priority 10)
100
+ this.keyboardMatrixAttachment = new GPIOKeyboardMatrixAttachment_1.GPIOKeyboardMatrixAttachment(10);
101
+ // Keyboard encoder (ASCII on both Port A and Port B) - medium priority (priority 20)
102
+ this.keyboardEncoderAttachment = new GPIOKeyboardEncoderAttachment_1.GPIOKeyboardEncoderAttachment(20);
103
+ // Joystick (Port B) - lowest priority, fallback (priority 100)
104
+ this.joystickAttachment = new GPIOJoystickAttachment_1.GPIOJoystickAttachment(false, 100);
105
+ // Attach peripherals to GPIO Card
106
+ // Keyboard matrix supports both ports
107
+ this.io6.attachToPortA(this.keyboardMatrixAttachment);
108
+ this.io6.attachToPortB(this.keyboardMatrixAttachment);
109
+ // Keyboard encoder supports both ports
110
+ this.io6.attachToPortA(this.keyboardEncoderAttachment);
111
+ this.io6.attachToPortB(this.keyboardEncoderAttachment);
112
+ // Joystick attached to Port B only
113
+ this.io6.attachToPortB(this.joystickAttachment);
114
+ this.cpu.reset();
115
+ }
116
+ start() {
117
+ this.startTime = Date.now();
118
+ this.isRunning = true;
119
+ this.isAlive = true;
120
+ this.loop();
121
+ }
122
+ end() {
123
+ this.isRunning = false;
124
+ this.isAlive = false;
125
+ }
126
+ run() {
127
+ this.isRunning = true;
128
+ }
129
+ stop() {
130
+ this.isRunning = false;
131
+ }
132
+ step() {
133
+ // Step through one complete instruction
134
+ const cyclesExecuted = this.cpu.step();
135
+ // Tick IO cards for each cycle of the instruction
136
+ for (let i = 0; i < cyclesExecuted; i++) {
137
+ // SerialCard must be cycle-accurate
138
+ this.io5.tick(this.frequency);
139
+ this.ioCycleAccumulator++;
140
+ if (this.ioCycleAccumulator >= this.ioTickInterval) {
141
+ // Skip ticking RAMCard IO1 and IO2 since they have no timing behavior
142
+ this.io3.tick(this.frequency);
143
+ this.io4.tick(this.frequency);
144
+ this.io6.tick(this.frequency);
145
+ this.io7.tick(this.frequency);
146
+ this.io8.tick(this.frequency);
147
+ this.ioCycleAccumulator = 0;
148
+ }
149
+ }
150
+ }
151
+ tick() {
152
+ // Execute one CPU clock cycle
153
+ this.cpu.tick();
154
+ // SerialCard must be cycle-accurate
155
+ this.io5.tick(this.frequency);
156
+ // Tick other IO cards at intervals
157
+ this.ioCycleAccumulator++;
158
+ if (this.ioCycleAccumulator >= this.ioTickInterval) {
159
+ // Skip ticking RAMCard IO1 and IO2 since they have no timing behavior
160
+ this.io3.tick(this.frequency);
161
+ this.io4.tick(this.frequency);
162
+ this.io6.tick(this.frequency);
163
+ this.io7.tick(this.frequency);
164
+ this.io8.tick(this.frequency);
165
+ this.ioCycleAccumulator = 0;
166
+ }
167
+ }
168
+ onReceive(data) {
169
+ this.io5.onData(data); // Pass data to Serial card
170
+ }
171
+ onKeyDown(scancode) {
172
+ // Route keyboard input to attachments
173
+ this.keyboardMatrixAttachment.updateKey(scancode, true); // Update keyboard matrix
174
+ this.keyboardEncoderAttachment.updateKey(scancode, true); // Update keyboard encoder
175
+ }
176
+ onKeyUp(scancode) {
177
+ // Release key from keyboard matrix and encoder
178
+ this.keyboardMatrixAttachment.updateKey(scancode, false); // Update keyboard matrix
179
+ this.keyboardEncoderAttachment.updateKey(scancode, false); // Update keyboard encoder
180
+ }
181
+ onJoystick(buttons) {
182
+ // Update joystick attachment with button states
183
+ this.joystickAttachment.updateJoystick(buttons);
184
+ }
185
+ //
186
+ // Loop Operations
187
+ //
188
+ loop() {
189
+ var _a;
190
+ if (!this.isAlive) {
191
+ return;
192
+ }
193
+ const now = performance.now();
194
+ const elapsedMs = now - this.previousTime;
195
+ this.previousTime = now;
196
+ if (this.isRunning) {
197
+ const ticksPerMs = this.frequency / 1000;
198
+ let accumulator = (_a = this._accumulatorMs) !== null && _a !== void 0 ? _a : 0;
199
+ accumulator += elapsedMs;
200
+ const maxCatchUpMs = 250;
201
+ if (accumulator > maxCatchUpMs)
202
+ accumulator = maxCatchUpMs;
203
+ const ticksToRun = Math.floor(accumulator * ticksPerMs);
204
+ if (ticksToRun > 0) {
205
+ for (let i = 0; i < ticksToRun; i++) {
206
+ this.cpu.tick();
207
+ // SerialCard must be cycle-accurate
208
+ this.io5.tick(this.frequency);
209
+ this.ioCycleAccumulator++;
210
+ if (this.ioCycleAccumulator >= this.ioTickInterval) {
211
+ // Skip ticking RAMCard IO1 and IO2 since they have no timing behavior
212
+ this.io3.tick(this.frequency);
213
+ this.io4.tick(this.frequency);
214
+ this.io6.tick(this.frequency);
215
+ this.io7.tick(this.frequency);
216
+ this.io8.tick(this.frequency);
217
+ this.ioCycleAccumulator = 0;
218
+ }
219
+ }
220
+ accumulator -= ticksToRun / ticksPerMs;
221
+ }
222
+ this._accumulatorMs = accumulator;
223
+ }
224
+ if (this.render) {
225
+ this.render(this.io8.buffer);
226
+ this.frames += 1;
227
+ }
228
+ setImmediate(() => this.loop());
229
+ }
230
+ //
231
+ // Bus Operations
232
+ //
233
+ reset(coldStart) {
234
+ this.cpu.reset();
235
+ this.ram.reset(coldStart);
236
+ this.io1.reset(coldStart);
237
+ this.io2.reset(coldStart);
238
+ this.io3.reset(coldStart);
239
+ this.io4.reset(coldStart);
240
+ this.io5.reset(coldStart);
241
+ this.io6.reset(coldStart);
242
+ this.io7.reset(coldStart);
243
+ this.io8.reset(coldStart);
244
+ }
245
+ read(address) {
246
+ switch (true) {
247
+ case (this.cart && address >= Cart_1.Cart.CODE && address <= Cart_1.Cart.END):
248
+ return this.cart.read(address - Cart_1.Cart.START);
249
+ case (address >= ROM_1.ROM.CODE && address <= ROM_1.ROM.END):
250
+ return this.rom.read(address - ROM_1.ROM.START);
251
+ case (address >= RAM_1.RAM.START && address <= RAM_1.RAM.END):
252
+ return this.ram.read(address);
253
+ case (address >= 0x8000 && address <= 0x83FF):
254
+ return this.io1.read(address - 0x8000) || 0;
255
+ case (address >= 0x8400 && address <= 0x87FF):
256
+ return this.io2.read(address - 0x8400) || 0;
257
+ case (address >= 0x8800 && address <= 0x8BFF):
258
+ return this.io3.read(address - 0x8800) || 0;
259
+ case (address >= 0x8C00 && address <= 0x8FFF):
260
+ return this.io4.read(address - 0x8C00) || 0;
261
+ case (address >= 0x9000 && address <= 0x93FF):
262
+ return this.io5.read(address - 0x9000) || 0;
263
+ case (address >= 0x9400 && address <= 0x97FF):
264
+ return this.io6.read(address - 0x9400) || 0;
265
+ case (address >= 0x9800 && address <= 0x9BFF):
266
+ return this.io7.read(address - 0x9800) || 0;
267
+ case (address >= 0x9C00 && address <= 0x9FFF):
268
+ return this.io8.read(address - 0x9C00) || 0;
269
+ default:
270
+ return 0;
271
+ }
272
+ }
273
+ write(address, data) {
274
+ switch (true) {
275
+ case (address >= RAM_1.RAM.START && address <= RAM_1.RAM.END):
276
+ this.ram.write(address, data);
277
+ return;
278
+ case (address >= 0x8000 && address <= 0x83FF):
279
+ this.io1.write(address - 0x8000, data);
280
+ return;
281
+ case (address >= 0x8400 && address <= 0x87FF):
282
+ this.io2.write(address - 0x8400, data);
283
+ return;
284
+ case (address >= 0x8800 && address <= 0x8BFF):
285
+ this.io3.write(address - 0x8800, data);
286
+ return;
287
+ case (address >= 0x8C00 && address <= 0x8FFF):
288
+ this.io4.write(address - 0x8C00, data);
289
+ return;
290
+ case (address >= 0x9000 && address <= 0x93FF):
291
+ this.io5.write(address - 0x9000, data);
292
+ return;
293
+ case (address >= 0x9400 && address <= 0x97FF):
294
+ this.io6.write(address - 0x9400, data);
295
+ return;
296
+ case (address >= 0x9800 && address <= 0x9BFF):
297
+ this.io7.write(address - 0x9800, data);
298
+ return;
299
+ case (address >= 0x9C00 && address <= 0x9FFF):
300
+ this.io8.write(address - 0x9C00, data);
301
+ return;
302
+ default:
303
+ return;
304
+ }
305
+ }
306
+ }
307
+ exports.Machine = Machine;
308
+ Machine.MAX_FPS = 60;
309
+ Machine.FRAME_INTERVAL_MS = 1000 / Machine.MAX_FPS;
310
+ //# sourceMappingURL=Machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Machine.js","sourceRoot":"","sources":["../../src/components/Machine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RAM = void 0;
4
+ class RAM {
5
+ constructor() {
6
+ this.data = [...Array(RAM.SIZE)].fill(0x00);
7
+ }
8
+ read(address) {
9
+ return this.data[address];
10
+ }
11
+ write(address, data) {
12
+ this.data[address] = data;
13
+ }
14
+ reset(coldStart) {
15
+ if (coldStart) {
16
+ this.data.fill(0x00);
17
+ }
18
+ }
19
+ }
20
+ exports.RAM = RAM;
21
+ RAM.START = 0x0000;
22
+ RAM.END = 0x7FFF;
23
+ RAM.SIZE = RAM.END - RAM.START + 1;
24
+ //# sourceMappingURL=RAM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RAM.js","sourceRoot":"","sources":["../../src/components/RAM.ts"],"names":[],"mappings":";;;AAAA,MAAa,GAAG;IAAhB;QAME,SAAI,GAAa,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAgBlD,CAAC;IAdC,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,IAAY;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,SAAkB;QACtB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;;AApBH,kBAsBC;AApBQ,SAAK,GAAW,MAAM,AAAjB,CAAiB;AACtB,OAAG,GAAW,MAAM,AAAjB,CAAiB;AACpB,QAAI,GAAW,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,AAAlC,CAAkC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ROM = void 0;
4
+ class ROM {
5
+ constructor() {
6
+ this.data = [...Array(ROM.SIZE)].fill(0x00);
7
+ }
8
+ read(address) {
9
+ return this.data[address];
10
+ }
11
+ load(data) {
12
+ if (data.length != ROM.SIZE) {
13
+ return;
14
+ }
15
+ this.data = data;
16
+ }
17
+ }
18
+ exports.ROM = ROM;
19
+ ROM.START = 0x8000;
20
+ ROM.END = 0xFFFF;
21
+ ROM.CODE = 0xA000;
22
+ ROM.SIZE = ROM.END - ROM.START + 1;
23
+ //# sourceMappingURL=ROM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ROM.js","sourceRoot":"","sources":["../../src/components/ROM.ts"],"names":[],"mappings":";;;AAAA,MAAa,GAAG;IAAhB;QAOE,SAAI,GAAa,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAWlD,CAAC;IATC,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,CAAC,IAAc;QACjB,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAAC,OAAM;QAAC,CAAC;QAEvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;;AAjBH,kBAkBC;AAhBQ,SAAK,GAAW,MAAM,AAAjB,CAAiB;AACtB,OAAG,GAAW,MAAM,AAAjB,CAAiB;AACpB,QAAI,GAAW,MAAM,AAAjB,CAAiB;AACrB,QAAI,GAAW,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,AAAlC,CAAkC"}