@joezilla/8sim 0.10.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 +201 -0
- package/README.md +542 -0
- package/dist/8sim.browser.js +4728 -0
- package/dist/bundles/CardBundle.d.ts +83 -0
- package/dist/bundles/CardBundle.d.ts.map +1 -0
- package/dist/bundles/CardBundle.js +41 -0
- package/dist/bundles/CardBundle.js.map +1 -0
- package/dist/bundles/kernels.d.ts +48 -0
- package/dist/bundles/kernels.d.ts.map +1 -0
- package/dist/bundles/kernels.js +132 -0
- package/dist/bundles/kernels.js.map +1 -0
- package/dist/bundles/seed/index.d.ts +24 -0
- package/dist/bundles/seed/index.d.ts.map +1 -0
- package/dist/bundles/seed/index.js +266 -0
- package/dist/bundles/seed/index.js.map +1 -0
- package/dist/bus/Bus.d.ts +21 -0
- package/dist/bus/Bus.d.ts.map +1 -0
- package/dist/bus/Bus.js +62 -0
- package/dist/bus/Bus.js.map +1 -0
- package/dist/bus/BusRegion.d.ts +8 -0
- package/dist/bus/BusRegion.d.ts.map +1 -0
- package/dist/bus/BusRegion.js +8 -0
- package/dist/bus/BusRegion.js.map +1 -0
- package/dist/bus/SnoopBus.d.ts +15 -0
- package/dist/bus/SnoopBus.d.ts.map +1 -0
- package/dist/bus/SnoopBus.js +41 -0
- package/dist/bus/SnoopBus.js.map +1 -0
- package/dist/cards/BankRamCard.d.ts +35 -0
- package/dist/cards/BankRamCard.d.ts.map +1 -0
- package/dist/cards/BankRamCard.js +56 -0
- package/dist/cards/BankRamCard.js.map +1 -0
- package/dist/cards/DazzlerCard.d.ts +42 -0
- package/dist/cards/DazzlerCard.d.ts.map +1 -0
- package/dist/cards/DazzlerCard.js +83 -0
- package/dist/cards/DazzlerCard.js.map +1 -0
- package/dist/cards/DisplaySurface.d.ts +32 -0
- package/dist/cards/DisplaySurface.d.ts.map +1 -0
- package/dist/cards/DisplaySurface.js +11 -0
- package/dist/cards/DisplaySurface.js.map +1 -0
- package/dist/cards/FdcPlusClient.d.ts +35 -0
- package/dist/cards/FdcPlusClient.d.ts.map +1 -0
- package/dist/cards/FdcPlusClient.js +130 -0
- package/dist/cards/FdcPlusClient.js.map +1 -0
- package/dist/cards/ImsaiMioCard.d.ts +36 -0
- package/dist/cards/ImsaiMioCard.d.ts.map +1 -0
- package/dist/cards/ImsaiMioCard.js +48 -0
- package/dist/cards/ImsaiMioCard.js.map +1 -0
- package/dist/cards/ImsaiSioCard.d.ts +19 -0
- package/dist/cards/ImsaiSioCard.d.ts.map +1 -0
- package/dist/cards/ImsaiSioCard.js +54 -0
- package/dist/cards/ImsaiSioCard.js.map +1 -0
- package/dist/cards/KeyboardCard.d.ts +37 -0
- package/dist/cards/KeyboardCard.d.ts.map +1 -0
- package/dist/cards/KeyboardCard.js +79 -0
- package/dist/cards/KeyboardCard.js.map +1 -0
- package/dist/cards/Mc6850Acia.d.ts +68 -0
- package/dist/cards/Mc6850Acia.d.ts.map +1 -0
- package/dist/cards/Mc6850Acia.js +132 -0
- package/dist/cards/Mc6850Acia.js.map +1 -0
- package/dist/cards/Mits2SioCard.d.ts +27 -0
- package/dist/cards/Mits2SioCard.d.ts.map +1 -0
- package/dist/cards/Mits2SioCard.js +36 -0
- package/dist/cards/Mits2SioCard.js.map +1 -0
- package/dist/cards/MitsDcddCard.d.ts +52 -0
- package/dist/cards/MitsDcddCard.d.ts.map +1 -0
- package/dist/cards/MitsDcddCard.js +294 -0
- package/dist/cards/MitsDcddCard.js.map +1 -0
- package/dist/cards/ParallelCard.d.ts +35 -0
- package/dist/cards/ParallelCard.d.ts.map +1 -0
- package/dist/cards/ParallelCard.js +32 -0
- package/dist/cards/ParallelCard.js.map +1 -0
- package/dist/cards/Port8212.d.ts +31 -0
- package/dist/cards/Port8212.d.ts.map +1 -0
- package/dist/cards/Port8212.js +47 -0
- package/dist/cards/Port8212.js.map +1 -0
- package/dist/cards/RtcCard.d.ts +30 -0
- package/dist/cards/RtcCard.d.ts.map +1 -0
- package/dist/cards/RtcCard.js +61 -0
- package/dist/cards/RtcCard.js.map +1 -0
- package/dist/cards/SerialCard.d.ts +31 -0
- package/dist/cards/SerialCard.d.ts.map +1 -0
- package/dist/cards/SerialCard.js +28 -0
- package/dist/cards/SerialCard.js.map +1 -0
- package/dist/cards/Tr1602Uart.d.ts +55 -0
- package/dist/cards/Tr1602Uart.d.ts.map +1 -0
- package/dist/cards/Tr1602Uart.js +102 -0
- package/dist/cards/Tr1602Uart.js.map +1 -0
- package/dist/cards/Usart8251.d.ts +28 -0
- package/dist/cards/Usart8251.d.ts.map +1 -0
- package/dist/cards/Usart8251.js +88 -0
- package/dist/cards/Usart8251.js.map +1 -0
- package/dist/cards/VdmCard.d.ts +27 -0
- package/dist/cards/VdmCard.d.ts.map +1 -0
- package/dist/cards/VdmCard.js +40 -0
- package/dist/cards/VdmCard.js.map +1 -0
- package/dist/clock/ImmediateClock.d.ts +8 -0
- package/dist/clock/ImmediateClock.d.ts.map +1 -0
- package/dist/clock/ImmediateClock.js +13 -0
- package/dist/clock/ImmediateClock.js.map +1 -0
- package/dist/clock/SystemClock.d.ts +45 -0
- package/dist/clock/SystemClock.d.ts.map +1 -0
- package/dist/clock/SystemClock.js +71 -0
- package/dist/clock/SystemClock.js.map +1 -0
- package/dist/cpu/Cpu8080.d.ts +34 -0
- package/dist/cpu/Cpu8080.d.ts.map +1 -0
- package/dist/cpu/Cpu8080.js +126 -0
- package/dist/cpu/Cpu8080.js.map +1 -0
- package/dist/cpu/Decoder.d.ts +12 -0
- package/dist/cpu/Decoder.d.ts.map +1 -0
- package/dist/cpu/Decoder.js +23 -0
- package/dist/cpu/Decoder.js.map +1 -0
- package/dist/cpu/Flags.d.ts +18 -0
- package/dist/cpu/Flags.d.ts.map +1 -0
- package/dist/cpu/Flags.js +33 -0
- package/dist/cpu/Flags.js.map +1 -0
- package/dist/cpu/Registers.d.ts +22 -0
- package/dist/cpu/Registers.d.ts.map +1 -0
- package/dist/cpu/Registers.js +26 -0
- package/dist/cpu/Registers.js.map +1 -0
- package/dist/cpu/instructions/alu.d.ts +3 -0
- package/dist/cpu/instructions/alu.d.ts.map +1 -0
- package/dist/cpu/instructions/alu.js +221 -0
- package/dist/cpu/instructions/alu.js.map +1 -0
- package/dist/cpu/instructions/branch.d.ts +3 -0
- package/dist/cpu/instructions/branch.d.ts.map +1 -0
- package/dist/cpu/instructions/branch.js +117 -0
- package/dist/cpu/instructions/branch.js.map +1 -0
- package/dist/cpu/instructions/control.d.ts +3 -0
- package/dist/cpu/instructions/control.d.ts.map +1 -0
- package/dist/cpu/instructions/control.js +12 -0
- package/dist/cpu/instructions/control.js.map +1 -0
- package/dist/cpu/instructions/data.d.ts +3 -0
- package/dist/cpu/instructions/data.d.ts.map +1 -0
- package/dist/cpu/instructions/data.js +137 -0
- package/dist/cpu/instructions/data.js.map +1 -0
- package/dist/cpu/instructions/io.d.ts +3 -0
- package/dist/cpu/instructions/io.d.ts.map +1 -0
- package/dist/cpu/instructions/io.js +18 -0
- package/dist/cpu/instructions/io.js.map +1 -0
- package/dist/cpu/instructions/logical.d.ts +3 -0
- package/dist/cpu/instructions/logical.d.ts.map +1 -0
- package/dist/cpu/instructions/logical.js +129 -0
- package/dist/cpu/instructions/logical.js.map +1 -0
- package/dist/cpu/instructions/rotate.d.ts +3 -0
- package/dist/cpu/instructions/rotate.d.ts.map +1 -0
- package/dist/cpu/instructions/rotate.js +34 -0
- package/dist/cpu/instructions/rotate.js.map +1 -0
- package/dist/cpu/instructions/stack.d.ts +3 -0
- package/dist/cpu/instructions/stack.d.ts.map +1 -0
- package/dist/cpu/instructions/stack.js +84 -0
- package/dist/cpu/instructions/stack.js.map +1 -0
- package/dist/cpu/status8080.d.ts +33 -0
- package/dist/cpu/status8080.d.ts.map +1 -0
- package/dist/cpu/status8080.js +73 -0
- package/dist/cpu/status8080.js.map +1 -0
- package/dist/cpu/z80/CpuZ80.d.ts +53 -0
- package/dist/cpu/z80/CpuZ80.d.ts.map +1 -0
- package/dist/cpu/z80/CpuZ80.js +168 -0
- package/dist/cpu/z80/CpuZ80.js.map +1 -0
- package/dist/cpu/z80/DecoderZ80.d.ts +26 -0
- package/dist/cpu/z80/DecoderZ80.d.ts.map +1 -0
- package/dist/cpu/z80/DecoderZ80.js +107 -0
- package/dist/cpu/z80/DecoderZ80.js.map +1 -0
- package/dist/cpu/z80/FlagsZ80.d.ts +27 -0
- package/dist/cpu/z80/FlagsZ80.d.ts.map +1 -0
- package/dist/cpu/z80/FlagsZ80.js +47 -0
- package/dist/cpu/z80/FlagsZ80.js.map +1 -0
- package/dist/cpu/z80/RegistersZ80.d.ts +60 -0
- package/dist/cpu/z80/RegistersZ80.d.ts.map +1 -0
- package/dist/cpu/z80/RegistersZ80.js +90 -0
- package/dist/cpu/z80/RegistersZ80.js.map +1 -0
- package/dist/cpu/z80/flagHelpers.d.ts +25 -0
- package/dist/cpu/z80/flagHelpers.d.ts.map +1 -0
- package/dist/cpu/z80/flagHelpers.js +136 -0
- package/dist/cpu/z80/flagHelpers.js.map +1 -0
- package/dist/cpu/z80/instructions/alu16.d.ts +4 -0
- package/dist/cpu/z80/instructions/alu16.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/alu16.js +27 -0
- package/dist/cpu/z80/instructions/alu16.js.map +1 -0
- package/dist/cpu/z80/instructions/alu8.d.ts +4 -0
- package/dist/cpu/z80/instructions/alu8.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/alu8.js +100 -0
- package/dist/cpu/z80/instructions/alu8.js.map +1 -0
- package/dist/cpu/z80/instructions/bits.d.ts +10 -0
- package/dist/cpu/z80/instructions/bits.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/bits.js +164 -0
- package/dist/cpu/z80/instructions/bits.js.map +1 -0
- package/dist/cpu/z80/instructions/block.d.ts +10 -0
- package/dist/cpu/z80/instructions/block.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/block.js +141 -0
- package/dist/cpu/z80/instructions/block.js.map +1 -0
- package/dist/cpu/z80/instructions/control.d.ts +4 -0
- package/dist/cpu/z80/instructions/control.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/control.js +62 -0
- package/dist/cpu/z80/instructions/control.js.map +1 -0
- package/dist/cpu/z80/instructions/ed.d.ts +4 -0
- package/dist/cpu/z80/instructions/ed.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/ed.js +149 -0
- package/dist/cpu/z80/instructions/ed.js.map +1 -0
- package/dist/cpu/z80/instructions/exchange.d.ts +4 -0
- package/dist/cpu/z80/instructions/exchange.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/exchange.js +37 -0
- package/dist/cpu/z80/instructions/exchange.js.map +1 -0
- package/dist/cpu/z80/instructions/io.d.ts +8 -0
- package/dist/cpu/z80/instructions/io.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/io.js +22 -0
- package/dist/cpu/z80/instructions/io.js.map +1 -0
- package/dist/cpu/z80/instructions/jump.d.ts +4 -0
- package/dist/cpu/z80/instructions/jump.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/jump.js +113 -0
- package/dist/cpu/z80/instructions/jump.js.map +1 -0
- package/dist/cpu/z80/instructions/load.d.ts +7 -0
- package/dist/cpu/z80/instructions/load.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/load.js +103 -0
- package/dist/cpu/z80/instructions/load.js.map +1 -0
- package/dist/cpu/z80/instructions/rotate.d.ts +9 -0
- package/dist/cpu/z80/instructions/rotate.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/rotate.js +48 -0
- package/dist/cpu/z80/instructions/rotate.js.map +1 -0
- package/dist/cpu/z80/instructions/stack.d.ts +4 -0
- package/dist/cpu/z80/instructions/stack.d.ts.map +1 -0
- package/dist/cpu/z80/instructions/stack.js +19 -0
- package/dist/cpu/z80/instructions/stack.js.map +1 -0
- package/dist/cpu/z80/regcodes.d.ts +22 -0
- package/dist/cpu/z80/regcodes.d.ts.map +1 -0
- package/dist/cpu/z80/regcodes.js +93 -0
- package/dist/cpu/z80/regcodes.js.map +1 -0
- package/dist/cpu/z80/types.d.ts +59 -0
- package/dist/cpu/z80/types.d.ts.map +1 -0
- package/dist/cpu/z80/types.js +2 -0
- package/dist/cpu/z80/types.js.map +1 -0
- package/dist/cpu/z80/views.d.ts +8 -0
- package/dist/cpu/z80/views.d.ts.map +1 -0
- package/dist/cpu/z80/views.js +40 -0
- package/dist/cpu/z80/views.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/IBus.d.ts +8 -0
- package/dist/interfaces/IBus.d.ts.map +1 -0
- package/dist/interfaces/IBus.js +2 -0
- package/dist/interfaces/IBus.js.map +1 -0
- package/dist/interfaces/IBusObserver.d.ts +7 -0
- package/dist/interfaces/IBusObserver.d.ts.map +1 -0
- package/dist/interfaces/IBusObserver.js +2 -0
- package/dist/interfaces/IBusObserver.js.map +1 -0
- package/dist/interfaces/IClock.d.ts +6 -0
- package/dist/interfaces/IClock.d.ts.map +1 -0
- package/dist/interfaces/IClock.js +2 -0
- package/dist/interfaces/IClock.js.map +1 -0
- package/dist/interfaces/ICpu.d.ts +46 -0
- package/dist/interfaces/ICpu.d.ts.map +1 -0
- package/dist/interfaces/ICpu.js +2 -0
- package/dist/interfaces/ICpu.js.map +1 -0
- package/dist/interfaces/IIODevice.d.ts +7 -0
- package/dist/interfaces/IIODevice.d.ts.map +1 -0
- package/dist/interfaces/IIODevice.js +2 -0
- package/dist/interfaces/IIODevice.js.map +1 -0
- package/dist/interfaces/IInterruptController.d.ts +8 -0
- package/dist/interfaces/IInterruptController.d.ts.map +1 -0
- package/dist/interfaces/IInterruptController.js +2 -0
- package/dist/interfaces/IInterruptController.js.map +1 -0
- package/dist/interfaces/IMemory.d.ts +9 -0
- package/dist/interfaces/IMemory.d.ts.map +1 -0
- package/dist/interfaces/IMemory.js +2 -0
- package/dist/interfaces/IMemory.js.map +1 -0
- package/dist/interfaces/IModule.d.ts +5 -0
- package/dist/interfaces/IModule.d.ts.map +1 -0
- package/dist/interfaces/IModule.js +2 -0
- package/dist/interfaces/IModule.js.map +1 -0
- package/dist/interfaces/IS100Card.d.ts +6 -0
- package/dist/interfaces/IS100Card.d.ts.map +1 -0
- package/dist/interfaces/IS100Card.js +2 -0
- package/dist/interfaces/IS100Card.js.map +1 -0
- package/dist/interfaces/index.d.ts +10 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +2 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interrupt/InterruptController.d.ts +13 -0
- package/dist/interrupt/InterruptController.d.ts.map +1 -0
- package/dist/interrupt/InterruptController.js +36 -0
- package/dist/interrupt/InterruptController.js.map +1 -0
- package/dist/io/IoSpace.d.ts +9 -0
- package/dist/io/IoSpace.d.ts.map +1 -0
- package/dist/io/IoSpace.js +30 -0
- package/dist/io/IoSpace.js.map +1 -0
- package/dist/machine/MachineRunner.d.ts +54 -0
- package/dist/machine/MachineRunner.d.ts.map +1 -0
- package/dist/machine/MachineRunner.js +102 -0
- package/dist/machine/MachineRunner.js.map +1 -0
- package/dist/machine/MachineSpec.d.ts +80 -0
- package/dist/machine/MachineSpec.d.ts.map +1 -0
- package/dist/machine/MachineSpec.js +9 -0
- package/dist/machine/MachineSpec.js.map +1 -0
- package/dist/machine/buildMachine.d.ts +19 -0
- package/dist/machine/buildMachine.d.ts.map +1 -0
- package/dist/machine/buildMachine.js +122 -0
- package/dist/machine/buildMachine.js.map +1 -0
- package/dist/memory/MemoryMappedIOAdapter.d.ts +14 -0
- package/dist/memory/MemoryMappedIOAdapter.d.ts.map +1 -0
- package/dist/memory/MemoryMappedIOAdapter.js +23 -0
- package/dist/memory/MemoryMappedIOAdapter.js.map +1 -0
- package/dist/memory/Ram.d.ts +17 -0
- package/dist/memory/Ram.d.ts.map +1 -0
- package/dist/memory/Ram.js +36 -0
- package/dist/memory/Ram.js.map +1 -0
- package/dist/memory/Rom.d.ts +13 -0
- package/dist/memory/Rom.d.ts.map +1 -0
- package/dist/memory/Rom.js +25 -0
- package/dist/memory/Rom.js.map +1 -0
- package/dist/util/bits.d.ts +11 -0
- package/dist/util/bits.d.ts.map +1 -0
- package/dist/util/bits.js +35 -0
- package/dist/util/bits.js.map +1 -0
- package/dist/util/hostConsole.d.ts +2 -0
- package/dist/util/hostConsole.d.ts.map +1 -0
- package/dist/util/hostConsole.js +4 -0
- package/dist/util/hostConsole.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Sign-extend an 8-bit displacement to a signed JS number. */
|
|
2
|
+
export function sext8(b) {
|
|
3
|
+
return (b & 0x80) !== 0 ? (b & 0xff) - 0x100 : b & 0xff;
|
|
4
|
+
}
|
|
5
|
+
/** HL view — the unprefixed instruction table. */
|
|
6
|
+
export const HL_VIEW = {
|
|
7
|
+
kind: 'hl',
|
|
8
|
+
indexed: false,
|
|
9
|
+
memExtra: 0,
|
|
10
|
+
getPair: (r) => r.hl,
|
|
11
|
+
setPair: (r, v) => { r.hl = v & 0xffff; },
|
|
12
|
+
getHi: (r) => r.h,
|
|
13
|
+
setHi: (r, v) => { r.h = v & 0xff; },
|
|
14
|
+
getLo: (r) => r.l,
|
|
15
|
+
setLo: (r, v) => { r.l = v & 0xff; },
|
|
16
|
+
// Plain (HL) access does not touch WZ.
|
|
17
|
+
memAddr: (cpu) => cpu.regs.hl,
|
|
18
|
+
};
|
|
19
|
+
function makeIndexView(kind, getReg, setReg, getH, setH, getL, setL) {
|
|
20
|
+
return {
|
|
21
|
+
kind,
|
|
22
|
+
indexed: true,
|
|
23
|
+
memExtra: 8, // 3 T to read d + 5 T internal add
|
|
24
|
+
getPair: getReg,
|
|
25
|
+
setPair: setReg,
|
|
26
|
+
getHi: getH,
|
|
27
|
+
setHi: setH,
|
|
28
|
+
getLo: getL,
|
|
29
|
+
setLo: setL,
|
|
30
|
+
memAddr: (cpu) => {
|
|
31
|
+
const d = sext8(cpu.fetchByte());
|
|
32
|
+
const addr = (getReg(cpu.regs) + d) & 0xffff;
|
|
33
|
+
cpu.regs.wz = addr;
|
|
34
|
+
return addr;
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export const IX_VIEW = makeIndexView('ix', (r) => r.ix, (r, v) => { r.ix = v & 0xffff; }, (r) => r.ixh, (r, v) => { r.ixh = v; }, (r) => r.ixl, (r, v) => { r.ixl = v; });
|
|
39
|
+
export const IY_VIEW = makeIndexView('iy', (r) => r.iy, (r, v) => { r.iy = v & 0xffff; }, (r) => r.iyh, (r, v) => { r.iyh = v; }, (r) => r.iyl, (r, v) => { r.iyl = v; });
|
|
40
|
+
//# sourceMappingURL=views.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"views.js","sourceRoot":"","sources":["../../../src/cpu/z80/views.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export type { IModule } from './interfaces/IModule.js';
|
|
2
|
+
export type { ICpu, CpuState } from './interfaces/ICpu.js';
|
|
3
|
+
export type { IBus } from './interfaces/IBus.js';
|
|
4
|
+
export type { IMemory } from './interfaces/IMemory.js';
|
|
5
|
+
export type { IIODevice } from './interfaces/IIODevice.js';
|
|
6
|
+
export type { IInterruptController } from './interfaces/IInterruptController.js';
|
|
7
|
+
export type { IClock } from './interfaces/IClock.js';
|
|
8
|
+
export type { IBusObserver } from './interfaces/IBusObserver.js';
|
|
9
|
+
export type { IS100Card } from './interfaces/IS100Card.js';
|
|
10
|
+
export { Cpu8080 } from './cpu/Cpu8080.js';
|
|
11
|
+
export { Registers } from './cpu/Registers.js';
|
|
12
|
+
export { Flags } from './cpu/Flags.js';
|
|
13
|
+
export { CpuZ80 } from './cpu/z80/CpuZ80.js';
|
|
14
|
+
export { RegistersZ80 } from './cpu/z80/RegistersZ80.js';
|
|
15
|
+
export { FlagsZ80 } from './cpu/z80/FlagsZ80.js';
|
|
16
|
+
export { Bus } from './bus/Bus.js';
|
|
17
|
+
export { SnoopBus } from './bus/SnoopBus.js';
|
|
18
|
+
export type { BusRegion } from './bus/BusRegion.js';
|
|
19
|
+
export { Ram } from './memory/Ram.js';
|
|
20
|
+
export { Rom } from './memory/Rom.js';
|
|
21
|
+
export { MemoryMappedIOAdapter } from './memory/MemoryMappedIOAdapter.js';
|
|
22
|
+
export { IoSpace } from './io/IoSpace.js';
|
|
23
|
+
export { InterruptController } from './interrupt/InterruptController.js';
|
|
24
|
+
export { ImmediateClock } from './clock/ImmediateClock.js';
|
|
25
|
+
export { SystemClock } from './clock/SystemClock.js';
|
|
26
|
+
export { MachineRunner } from './machine/MachineRunner.js';
|
|
27
|
+
export type { MachineRunnerOptions, CpuSpeed, ISteppable } from './machine/MachineRunner.js';
|
|
28
|
+
export { buildMachine } from './machine/buildMachine.js';
|
|
29
|
+
export type { BuildOptions } from './machine/buildMachine.js';
|
|
30
|
+
export { MachineSpecError } from './machine/MachineSpec.js';
|
|
31
|
+
export type { MachineSpec, Machine, CpuKind, Clock, MemoryRegionSpec, CardSpec, CardFactory, CardContext, } from './machine/MachineSpec.js';
|
|
32
|
+
export { withDefaults, CardConfigError } from './bundles/CardBundle.js';
|
|
33
|
+
export type { CardBundle, CardManifest, ConfigParamSpec, ClaimsFn } from './bundles/CardBundle.js';
|
|
34
|
+
export { seedBundles, seedBundleByName } from './bundles/seed/index.js';
|
|
35
|
+
export { kernels, kernelById, serialKernel, parallelKernel, keyboardKernel, vdmKernel, dazzlerKernel, rtcKernel, bankRamKernel } from './bundles/kernels.js';
|
|
36
|
+
export type { CardKernel } from './bundles/kernels.js';
|
|
37
|
+
export { SerialCard } from './cards/SerialCard.js';
|
|
38
|
+
export type { SerialChip, SerialCardOptions } from './cards/SerialCard.js';
|
|
39
|
+
export { ParallelCard } from './cards/ParallelCard.js';
|
|
40
|
+
export type { PortDirection, ParallelCardOptions, GpioPort } from './cards/ParallelCard.js';
|
|
41
|
+
export { KeyboardCard } from './cards/KeyboardCard.js';
|
|
42
|
+
export type { KeyboardPort, KeyboardCardOptions } from './cards/KeyboardCard.js';
|
|
43
|
+
export { VdmCard } from './cards/VdmCard.js';
|
|
44
|
+
export type { VdmCardOptions } from './cards/VdmCard.js';
|
|
45
|
+
export { DazzlerCard } from './cards/DazzlerCard.js';
|
|
46
|
+
export type { DazzlerCardOptions } from './cards/DazzlerCard.js';
|
|
47
|
+
export { RtcCard } from './cards/RtcCard.js';
|
|
48
|
+
export type { RtcCardOptions, RtcClock } from './cards/RtcCard.js';
|
|
49
|
+
export { BankRamCard } from './cards/BankRamCard.js';
|
|
50
|
+
export type { BankRamCardOptions } from './cards/BankRamCard.js';
|
|
51
|
+
export type { DisplaySurface, DisplayDescriptor, DisplayFrame } from './cards/DisplaySurface.js';
|
|
52
|
+
export { Usart8251 } from './cards/Usart8251.js';
|
|
53
|
+
export { ImsaiSioCard } from './cards/ImsaiSioCard.js';
|
|
54
|
+
export type { SioCardOptions } from './cards/ImsaiSioCard.js';
|
|
55
|
+
export { FdcPlusClient } from './cards/FdcPlusClient.js';
|
|
56
|
+
export type { WebSocketLike } from './cards/FdcPlusClient.js';
|
|
57
|
+
export { MitsDcddCard } from './cards/MitsDcddCard.js';
|
|
58
|
+
export type { DcddOptions } from './cards/MitsDcddCard.js';
|
|
59
|
+
export { Tr1602Uart } from './cards/Tr1602Uart.js';
|
|
60
|
+
export { Port8212 } from './cards/Port8212.js';
|
|
61
|
+
export { ImsaiMioCard } from './cards/ImsaiMioCard.js';
|
|
62
|
+
export type { MioCardOptions } from './cards/ImsaiMioCard.js';
|
|
63
|
+
export { Mc6850Acia } from './cards/Mc6850Acia.js';
|
|
64
|
+
export { Mits2SioCard } from './cards/Mits2SioCard.js';
|
|
65
|
+
export type { Sio2CardOptions } from './cards/Mits2SioCard.js';
|
|
66
|
+
export * from './util/bits.js';
|
|
67
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// CPU
|
|
2
|
+
export { Cpu8080 } from './cpu/Cpu8080.js';
|
|
3
|
+
export { Registers } from './cpu/Registers.js';
|
|
4
|
+
export { Flags } from './cpu/Flags.js';
|
|
5
|
+
export { CpuZ80 } from './cpu/z80/CpuZ80.js';
|
|
6
|
+
export { RegistersZ80 } from './cpu/z80/RegistersZ80.js';
|
|
7
|
+
export { FlagsZ80 } from './cpu/z80/FlagsZ80.js';
|
|
8
|
+
// Bus
|
|
9
|
+
export { Bus } from './bus/Bus.js';
|
|
10
|
+
export { SnoopBus } from './bus/SnoopBus.js';
|
|
11
|
+
// Memory
|
|
12
|
+
export { Ram } from './memory/Ram.js';
|
|
13
|
+
export { Rom } from './memory/Rom.js';
|
|
14
|
+
export { MemoryMappedIOAdapter } from './memory/MemoryMappedIOAdapter.js';
|
|
15
|
+
// IO
|
|
16
|
+
export { IoSpace } from './io/IoSpace.js';
|
|
17
|
+
// Interrupt
|
|
18
|
+
export { InterruptController } from './interrupt/InterruptController.js';
|
|
19
|
+
// Clock
|
|
20
|
+
export { ImmediateClock } from './clock/ImmediateClock.js';
|
|
21
|
+
export { SystemClock } from './clock/SystemClock.js';
|
|
22
|
+
// Machine
|
|
23
|
+
export { MachineRunner } from './machine/MachineRunner.js';
|
|
24
|
+
export { buildMachine } from './machine/buildMachine.js';
|
|
25
|
+
export { MachineSpecError } from './machine/MachineSpec.js';
|
|
26
|
+
// Card bundles (seed)
|
|
27
|
+
export { withDefaults, CardConfigError } from './bundles/CardBundle.js';
|
|
28
|
+
export { seedBundles, seedBundleByName } from './bundles/seed/index.js';
|
|
29
|
+
export { kernels, kernelById, serialKernel, parallelKernel, keyboardKernel, vdmKernel, dazzlerKernel, rtcKernel, bankRamKernel } from './bundles/kernels.js';
|
|
30
|
+
export { SerialCard } from './cards/SerialCard.js';
|
|
31
|
+
export { ParallelCard } from './cards/ParallelCard.js';
|
|
32
|
+
export { KeyboardCard } from './cards/KeyboardCard.js';
|
|
33
|
+
export { VdmCard } from './cards/VdmCard.js';
|
|
34
|
+
export { DazzlerCard } from './cards/DazzlerCard.js';
|
|
35
|
+
export { RtcCard } from './cards/RtcCard.js';
|
|
36
|
+
export { BankRamCard } from './cards/BankRamCard.js';
|
|
37
|
+
// Cards
|
|
38
|
+
export { Usart8251 } from './cards/Usart8251.js';
|
|
39
|
+
export { ImsaiSioCard } from './cards/ImsaiSioCard.js';
|
|
40
|
+
export { FdcPlusClient } from './cards/FdcPlusClient.js';
|
|
41
|
+
export { MitsDcddCard } from './cards/MitsDcddCard.js';
|
|
42
|
+
export { Tr1602Uart } from './cards/Tr1602Uart.js';
|
|
43
|
+
export { Port8212 } from './cards/Port8212.js';
|
|
44
|
+
export { ImsaiMioCard } from './cards/ImsaiMioCard.js';
|
|
45
|
+
export { Mc6850Acia } from './cards/Mc6850Acia.js';
|
|
46
|
+
export { Mits2SioCard } from './cards/Mits2SioCard.js';
|
|
47
|
+
// Utils
|
|
48
|
+
export * from './util/bits.js';
|
|
49
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,MAAM;AACN,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM;AACN,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,SAAS;AACT,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,KAAK;AACL,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,YAAY;AACZ,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,QAAQ;AACR,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAY5D,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE7J,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAIrD,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,QAAQ;AACR,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBus.d.ts","sourceRoot":"","sources":["../../src/interfaces/IBus.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,oBAAoB,IAAI,MAAM,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBus.js","sourceRoot":"","sources":["../../src/interfaces/IBus.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface IBusObserver {
|
|
2
|
+
onMemRead?(address: number, value: number): void;
|
|
3
|
+
onMemWrite?(address: number, value: number): void;
|
|
4
|
+
onIoRead?(port: number, value: number): void;
|
|
5
|
+
onIoWrite?(port: number, value: number): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=IBusObserver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBusObserver.d.ts","sourceRoot":"","sources":["../../src/interfaces/IBusObserver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IBusObserver.js","sourceRoot":"","sources":["../../src/interfaces/IBusObserver.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IClock.d.ts","sourceRoot":"","sources":["../../src/interfaces/IClock.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,IAAI,MAAM,CAAC;IAC3B,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IClock.js","sourceRoot":"","sources":["../../src/interfaces/IClock.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal common surface shared by every CPU core (Cpu8080, CpuZ80).
|
|
3
|
+
*
|
|
4
|
+
* Deliberately lightweight: it does NOT expose the register file or flags,
|
|
5
|
+
* because those differ between CPUs. It re-declares `step(): number`, so any
|
|
6
|
+
* ICpu is structurally assignable to `ISteppable` (src/machine/MachineRunner.ts)
|
|
7
|
+
* and can be driven by MachineRunner without either module importing the other.
|
|
8
|
+
*/
|
|
9
|
+
export interface ICpu {
|
|
10
|
+
/** Execute one instruction (or service one pending interrupt); returns T-states consumed. */
|
|
11
|
+
step(): number;
|
|
12
|
+
/** Clear all registers, flags, and internal state to power-on defaults. */
|
|
13
|
+
reset(): void;
|
|
14
|
+
/** Run until halted or `maxCycles` T-states elapse; returns total T-states executed. */
|
|
15
|
+
run(maxCycles?: number): bigint;
|
|
16
|
+
/** True while the CPU is halted (HLT/HALT executed, awaiting an interrupt). */
|
|
17
|
+
halted: boolean;
|
|
18
|
+
/** Program counter, proxying the underlying register file. */
|
|
19
|
+
pc: number;
|
|
20
|
+
/** A uniform read-only register/flags snapshot for introspection (front panel,
|
|
21
|
+
* debuggers) — the common 8-bit registers both cores share. */
|
|
22
|
+
state(): CpuState;
|
|
23
|
+
}
|
|
24
|
+
/** A CPU register/flags snapshot — the registers common to the 8080 and Z80. */
|
|
25
|
+
export interface CpuState {
|
|
26
|
+
pc: number;
|
|
27
|
+
sp: number;
|
|
28
|
+
a: number;
|
|
29
|
+
/** Flags packed to a byte (PSW low byte on the 8080; F on the Z80). */
|
|
30
|
+
f: number;
|
|
31
|
+
b: number;
|
|
32
|
+
c: number;
|
|
33
|
+
d: number;
|
|
34
|
+
e: number;
|
|
35
|
+
h: number;
|
|
36
|
+
l: number;
|
|
37
|
+
halted: boolean;
|
|
38
|
+
/** Interrupt-enable flip-flop (8080 INTE / Z80 IFF1) — drives the panel INTE lamp. */
|
|
39
|
+
inte: boolean;
|
|
40
|
+
/** A maskable interrupt is currently asserted at the controller — the INT lamp. */
|
|
41
|
+
intPending: boolean;
|
|
42
|
+
/** 8080 status byte of the last instruction — drives the panel machine-cycle
|
|
43
|
+
* lamps (MEMR/INP/M1/OUT/STACK/WO/HLTA/INTA). See `status8080.ts`. */
|
|
44
|
+
status: number;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ICpu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ICpu.d.ts","sourceRoot":"","sources":["../../src/interfaces/ICpu.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,IAAI;IACnB,6FAA6F;IAC7F,IAAI,IAAI,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,IAAI,IAAI,CAAC;IACd,wFAAwF;IACxF,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,+EAA+E;IAC/E,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,EAAE,EAAE,MAAM,CAAC;IACX;mEAC+D;IAC/D,KAAK,IAAI,QAAQ,CAAC;CACnB;AAED,gFAAgF;AAChF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,uEAAuE;IACvE,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,OAAO,CAAC;IAChB,sFAAsF;IACtF,IAAI,EAAE,OAAO,CAAC;IACd,mFAAmF;IACnF,UAAU,EAAE,OAAO,CAAC;IACpB;0EACsE;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ICpu.js","sourceRoot":"","sources":["../../src/interfaces/ICpu.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IIODevice.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIODevice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IIODevice.js","sourceRoot":"","sources":["../../src/interfaces/IIODevice.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IModule } from './IModule.js';
|
|
2
|
+
export interface IInterruptController extends IModule {
|
|
3
|
+
hasPendingInterrupt(): boolean;
|
|
4
|
+
acknowledge(): number;
|
|
5
|
+
assertIRQ(line: number): void;
|
|
6
|
+
clearIRQ(line: number): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=IInterruptController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IInterruptController.d.ts","sourceRoot":"","sources":["../../src/interfaces/IInterruptController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,mBAAmB,IAAI,OAAO,CAAC;IAC/B,WAAW,IAAI,MAAM,CAAC;IACtB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IInterruptController.js","sourceRoot":"","sources":["../../src/interfaces/IInterruptController.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IModule } from './IModule.js';
|
|
2
|
+
export interface IMemory extends IModule {
|
|
3
|
+
readonly baseAddress: number;
|
|
4
|
+
readonly size: number;
|
|
5
|
+
readonly readOnly: boolean;
|
|
6
|
+
read(offset: number): number;
|
|
7
|
+
write(offset: number, value: number): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=IMemory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IMemory.d.ts","sourceRoot":"","sources":["../../src/interfaces/IMemory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IMemory.js","sourceRoot":"","sources":["../../src/interfaces/IMemory.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModule.d.ts","sourceRoot":"","sources":["../../src/interfaces/IModule.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IModule.js","sourceRoot":"","sources":["../../src/interfaces/IModule.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IS100Card.d.ts","sourceRoot":"","sources":["../../src/interfaces/IS100Card.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IS100Card.js","sourceRoot":"","sources":["../../src/interfaces/IS100Card.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type { IModule } from './IModule.js';
|
|
2
|
+
export type { ICpu } from './ICpu.js';
|
|
3
|
+
export type { IBus } from './IBus.js';
|
|
4
|
+
export type { IMemory } from './IMemory.js';
|
|
5
|
+
export type { IIODevice } from './IIODevice.js';
|
|
6
|
+
export type { IInterruptController } from './IInterruptController.js';
|
|
7
|
+
export type { IClock } from './IClock.js';
|
|
8
|
+
export type { IBusObserver } from './IBusObserver.js';
|
|
9
|
+
export type { IS100Card } from './IS100Card.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { IInterruptController } from '../interfaces/IInterruptController.js';
|
|
2
|
+
export declare class InterruptController implements IInterruptController {
|
|
3
|
+
readonly id = "pic";
|
|
4
|
+
private pending;
|
|
5
|
+
private readonly lines;
|
|
6
|
+
constructor(lines?: number);
|
|
7
|
+
hasPendingInterrupt(): boolean;
|
|
8
|
+
acknowledge(): number;
|
|
9
|
+
assertIRQ(line: number): void;
|
|
10
|
+
clearIRQ(line: number): void;
|
|
11
|
+
reset(): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=InterruptController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterruptController.d.ts","sourceRoot":"","sources":["../../src/interrupt/InterruptController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAElF,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,QAAQ,CAAC,EAAE,SAAS;IACpB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,KAAK,SAAI;IAIrB,mBAAmB,IAAI,OAAO;IAI9B,WAAW,IAAI,MAAM;IAYrB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5B,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export class InterruptController {
|
|
2
|
+
id = 'pic';
|
|
3
|
+
pending = 0; // bitmask of pending IRQ lines
|
|
4
|
+
lines;
|
|
5
|
+
constructor(lines = 8) {
|
|
6
|
+
this.lines = lines;
|
|
7
|
+
}
|
|
8
|
+
hasPendingInterrupt() {
|
|
9
|
+
return this.pending !== 0;
|
|
10
|
+
}
|
|
11
|
+
acknowledge() {
|
|
12
|
+
// Find lowest pending IRQ line
|
|
13
|
+
for (let i = 0; i < this.lines; i++) {
|
|
14
|
+
if ((this.pending & (1 << i)) !== 0) {
|
|
15
|
+
this.pending &= ~(1 << i);
|
|
16
|
+
// RST n instruction: 0b11_nnn_111
|
|
17
|
+
return 0xc7 | (i << 3);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return 0xff; // no interrupt (NOP)
|
|
21
|
+
}
|
|
22
|
+
assertIRQ(line) {
|
|
23
|
+
if (line >= 0 && line < this.lines) {
|
|
24
|
+
this.pending |= 1 << line;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
clearIRQ(line) {
|
|
28
|
+
if (line >= 0 && line < this.lines) {
|
|
29
|
+
this.pending &= ~(1 << line);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
reset() {
|
|
33
|
+
this.pending = 0;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=InterruptController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InterruptController.js","sourceRoot":"","sources":["../../src/interrupt/InterruptController.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IACrB,EAAE,GAAG,KAAK,CAAC;IACZ,OAAO,GAAG,CAAC,CAAC,CAAC,+BAA+B;IACnC,KAAK,CAAS;IAE/B,YAAY,KAAK,GAAG,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1B,kCAAkC;gBAClC,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,qBAAqB;IACpC,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IIODevice } from '../interfaces/IIODevice.js';
|
|
2
|
+
export declare class IoSpace {
|
|
3
|
+
private devices;
|
|
4
|
+
register(dev: IIODevice): void;
|
|
5
|
+
read(port: number): number;
|
|
6
|
+
write(port: number, value: number): void;
|
|
7
|
+
reset(): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=IoSpace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IoSpace.d.ts","sourceRoot":"","sources":["../../src/io/IoSpace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAgC;IAE/C,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAM9B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAM1B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxC,KAAK,IAAI,IAAI;CASd"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class IoSpace {
|
|
2
|
+
devices = new Map();
|
|
3
|
+
register(dev) {
|
|
4
|
+
for (const port of dev.basePorts) {
|
|
5
|
+
this.devices.set(port & 0xff, dev);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
read(port) {
|
|
9
|
+
const dev = this.devices.get(port & 0xff);
|
|
10
|
+
if (dev === undefined)
|
|
11
|
+
return 0xff;
|
|
12
|
+
return dev.ioRead(port & 0xff);
|
|
13
|
+
}
|
|
14
|
+
write(port, value) {
|
|
15
|
+
const dev = this.devices.get(port & 0xff);
|
|
16
|
+
if (dev === undefined)
|
|
17
|
+
return;
|
|
18
|
+
dev.ioWrite(port & 0xff, value & 0xff);
|
|
19
|
+
}
|
|
20
|
+
reset() {
|
|
21
|
+
const seen = new Set();
|
|
22
|
+
for (const dev of this.devices.values()) {
|
|
23
|
+
if (!seen.has(dev)) {
|
|
24
|
+
seen.add(dev);
|
|
25
|
+
dev.reset();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=IoSpace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IoSpace.js","sourceRoot":"","sources":["../../src/io/IoSpace.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,OAAO;IACV,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE/C,QAAQ,CAAC,GAAc;QACrB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAY;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,KAAa;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAC9B,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,EAAa,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Anything with a step() that executes one instruction and returns T-states. */
|
|
2
|
+
export interface ISteppable {
|
|
3
|
+
step(): number;
|
|
4
|
+
}
|
|
5
|
+
/** Target CPU speed: a frequency in Hz, or 'max' for unthrottled execution. */
|
|
6
|
+
export type CpuSpeed = number | 'max';
|
|
7
|
+
export interface MachineRunnerOptions {
|
|
8
|
+
/** Target CPU clock. Default 2 MHz — a stock 8080. */
|
|
9
|
+
hz?: CpuSpeed;
|
|
10
|
+
/**
|
|
11
|
+
* Scheduler for the next tick. Defaults to setTimeout (browser-portable).
|
|
12
|
+
* Node callers wanting maximum throughput in 'max' mode can pass
|
|
13
|
+
* (fn, ms) => ms > 0 ? setTimeout(fn, ms) : setImmediate(fn).
|
|
14
|
+
*/
|
|
15
|
+
schedule?: (fn: () => void, delayMs: number) => void;
|
|
16
|
+
/** Called after the runner stops itself because step() threw. */
|
|
17
|
+
onError?: (err: unknown) => void;
|
|
18
|
+
/** Time source in ms. Default performance.now — override for tests. */
|
|
19
|
+
now?: () => number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Drives a CPU's step() loop at a configurable real-time speed.
|
|
23
|
+
*
|
|
24
|
+
* Throttled mode runs the CPU in ~1 ms slices of simulated time and compares
|
|
25
|
+
* simulated progress against wall time (absolute accounting via SystemClock,
|
|
26
|
+
* so timer jitter self-corrects): ahead → sleep the difference; behind → keep
|
|
27
|
+
* stepping up to MAX_SLICE_MS per tick, then yield so host I/O stays
|
|
28
|
+
* responsive. Host stalls beyond RESYNC_BEHIND_MS are forfeited rather than
|
|
29
|
+
* replayed at full speed.
|
|
30
|
+
*/
|
|
31
|
+
export declare class MachineRunner {
|
|
32
|
+
private readonly cpu;
|
|
33
|
+
private hz;
|
|
34
|
+
private readonly clock;
|
|
35
|
+
private readonly schedule;
|
|
36
|
+
private readonly onError;
|
|
37
|
+
private readonly now;
|
|
38
|
+
private running;
|
|
39
|
+
private startedAt;
|
|
40
|
+
private cyclesAtStart;
|
|
41
|
+
constructor(cpu: ISteppable, options?: MachineRunnerOptions);
|
|
42
|
+
get targetHz(): CpuSpeed;
|
|
43
|
+
/** Measured average speed in Hz since start() — for status displays. */
|
|
44
|
+
get effectiveHz(): number;
|
|
45
|
+
get isRunning(): boolean;
|
|
46
|
+
/** Total simulated T-states executed across the runner's lifetime. */
|
|
47
|
+
get elapsedCycles(): bigint;
|
|
48
|
+
start(): void;
|
|
49
|
+
stop(): void;
|
|
50
|
+
/** Change speed while running; pacing restarts from this moment. */
|
|
51
|
+
setHz(hz: CpuSpeed): void;
|
|
52
|
+
private readonly tick;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=MachineRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MachineRunner.d.ts","sourceRoot":"","sources":["../../src/machine/MachineRunner.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAEtC,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,iEAAiE;IACjE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AASD;;;;;;;;;GASG;AACH,qBAAa,aAAa;IAUZ,OAAO,CAAC,QAAQ,CAAC,GAAG;IAThC,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,aAAa,CAAM;gBAEE,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,oBAAyB;IAQhF,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,wEAAwE;IACxE,IAAI,WAAW,IAAI,MAAM,CAIxB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,sEAAsE;IACtE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAIZ,oEAAoE;IACpE,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAOzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CA0BnB;CACH"}
|