@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 @@
|
|
|
1
|
+
{"version":3,"file":"alu.js","sourceRoot":"","sources":["../../../src/cpu/instructions/alu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../../src/cpu/instructions/branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7C,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqHrD"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { u16, toWord } from '../../util/bits.js';
|
|
2
|
+
function readAddr(regs, bus) {
|
|
3
|
+
const lo = bus.read(regs.pc);
|
|
4
|
+
const hi = bus.read(u16(regs.pc + 1));
|
|
5
|
+
regs.pc = u16(regs.pc + 2);
|
|
6
|
+
return toWord(hi, lo);
|
|
7
|
+
}
|
|
8
|
+
export function registerBranch(decoder) {
|
|
9
|
+
// JMP addr (0xC3) — unconditional
|
|
10
|
+
decoder.register(0xc3, (regs, _flags, bus) => {
|
|
11
|
+
regs.pc = readAddr(regs, bus);
|
|
12
|
+
return 10;
|
|
13
|
+
});
|
|
14
|
+
// Conditional JMPs
|
|
15
|
+
const jccTable = [
|
|
16
|
+
[0xc2, f => !f.z], // JNZ
|
|
17
|
+
[0xca, f => f.z], // JZ
|
|
18
|
+
[0xd2, f => !f.cy], // JNC
|
|
19
|
+
[0xda, f => f.cy], // JC
|
|
20
|
+
[0xe2, f => !f.p], // JPO (parity odd)
|
|
21
|
+
[0xea, f => f.p], // JPE (parity even)
|
|
22
|
+
[0xf2, f => !f.s], // JP (positive)
|
|
23
|
+
[0xfa, f => f.s], // JM (minus)
|
|
24
|
+
];
|
|
25
|
+
for (const [opcode, cond] of jccTable) {
|
|
26
|
+
decoder.register(opcode, (regs, flags, bus) => {
|
|
27
|
+
const addr = readAddr(regs, bus);
|
|
28
|
+
if (cond(flags))
|
|
29
|
+
regs.pc = addr;
|
|
30
|
+
return 10;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// CALL addr (0xCD)
|
|
34
|
+
decoder.register(0xcd, (regs, _flags, bus) => {
|
|
35
|
+
const addr = readAddr(regs, bus);
|
|
36
|
+
regs.sp = u16(regs.sp - 1);
|
|
37
|
+
bus.write(regs.sp, (regs.pc >> 8) & 0xff);
|
|
38
|
+
regs.sp = u16(regs.sp - 1);
|
|
39
|
+
bus.write(regs.sp, regs.pc & 0xff);
|
|
40
|
+
regs.pc = addr;
|
|
41
|
+
return 17;
|
|
42
|
+
});
|
|
43
|
+
// Conditional CALLs
|
|
44
|
+
const callTable = [
|
|
45
|
+
[0xc4, f => !f.z], // CNZ
|
|
46
|
+
[0xcc, f => f.z], // CZ
|
|
47
|
+
[0xd4, f => !f.cy], // CNC
|
|
48
|
+
[0xdc, f => f.cy], // CC
|
|
49
|
+
[0xe4, f => !f.p], // CPO
|
|
50
|
+
[0xec, f => f.p], // CPE
|
|
51
|
+
[0xf4, f => !f.s], // CP
|
|
52
|
+
[0xfc, f => f.s], // CM
|
|
53
|
+
];
|
|
54
|
+
for (const [opcode, cond] of callTable) {
|
|
55
|
+
decoder.register(opcode, (regs, flags, bus) => {
|
|
56
|
+
const addr = readAddr(regs, bus);
|
|
57
|
+
if (cond(flags)) {
|
|
58
|
+
regs.sp = u16(regs.sp - 1);
|
|
59
|
+
bus.write(regs.sp, (regs.pc >> 8) & 0xff);
|
|
60
|
+
regs.sp = u16(regs.sp - 1);
|
|
61
|
+
bus.write(regs.sp, regs.pc & 0xff);
|
|
62
|
+
regs.pc = addr;
|
|
63
|
+
return 17;
|
|
64
|
+
}
|
|
65
|
+
return 11;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// RET (0xC9)
|
|
69
|
+
decoder.register(0xc9, (regs, _flags, bus) => {
|
|
70
|
+
const lo = bus.read(regs.sp);
|
|
71
|
+
const hi = bus.read(u16(regs.sp + 1));
|
|
72
|
+
regs.sp = u16(regs.sp + 2);
|
|
73
|
+
regs.pc = toWord(hi, lo);
|
|
74
|
+
return 10;
|
|
75
|
+
});
|
|
76
|
+
// Conditional RETs
|
|
77
|
+
const retTable = [
|
|
78
|
+
[0xc0, f => !f.z], // RNZ
|
|
79
|
+
[0xc8, f => f.z], // RZ
|
|
80
|
+
[0xd0, f => !f.cy], // RNC
|
|
81
|
+
[0xd8, f => f.cy], // RC
|
|
82
|
+
[0xe0, f => !f.p], // RPO
|
|
83
|
+
[0xe8, f => f.p], // RPE
|
|
84
|
+
[0xf0, f => !f.s], // RP
|
|
85
|
+
[0xf8, f => f.s], // RM
|
|
86
|
+
];
|
|
87
|
+
for (const [opcode, cond] of retTable) {
|
|
88
|
+
decoder.register(opcode, (regs, flags, bus) => {
|
|
89
|
+
if (cond(flags)) {
|
|
90
|
+
const lo = bus.read(regs.sp);
|
|
91
|
+
const hi = bus.read(u16(regs.sp + 1));
|
|
92
|
+
regs.sp = u16(regs.sp + 2);
|
|
93
|
+
regs.pc = toWord(hi, lo);
|
|
94
|
+
return 11;
|
|
95
|
+
}
|
|
96
|
+
return 5;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// RST 0..7 (0xC7, 0xCF, 0xD7, 0xDF, 0xE7, 0xEF, 0xF7, 0xFF)
|
|
100
|
+
for (let n = 0; n < 8; n++) {
|
|
101
|
+
const opcode = 0xc7 | (n << 3);
|
|
102
|
+
decoder.register(opcode, (regs, _flags, bus) => {
|
|
103
|
+
regs.sp = u16(regs.sp - 1);
|
|
104
|
+
bus.write(regs.sp, (regs.pc >> 8) & 0xff);
|
|
105
|
+
regs.sp = u16(regs.sp - 1);
|
|
106
|
+
bus.write(regs.sp, regs.pc & 0xff);
|
|
107
|
+
regs.pc = n * 8;
|
|
108
|
+
return 11;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
// PCHL (0xE9) — Jump to HL
|
|
112
|
+
decoder.register(0xe9, (regs, _flags, _bus) => {
|
|
113
|
+
regs.pc = regs.hl;
|
|
114
|
+
return 5;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=branch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../src/cpu/instructions/branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../../src/cpu/instructions/control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAatD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function registerControl(decoder) {
|
|
2
|
+
// NOP
|
|
3
|
+
decoder.register(0x00, (_regs, _flags, _bus) => 4);
|
|
4
|
+
// HLT — CPU halts; handled specially in Cpu8080.step(), but we register it
|
|
5
|
+
// The Cpu8080 checks for HLT before decoding so this is a fallback
|
|
6
|
+
decoder.register(0x76, (_regs, _flags, _bus) => 7);
|
|
7
|
+
// EI — handled in Cpu8080.step() via pendingEI flag
|
|
8
|
+
decoder.register(0xfb, (_regs, _flags, _bus) => 4);
|
|
9
|
+
// DI — handled in Cpu8080.step()
|
|
10
|
+
decoder.register(0xf3, (_regs, _flags, _bus) => 4);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../src/cpu/instructions/control.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC9C,MAAM;IACN,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnD,2EAA2E;IAC3E,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnD,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnD,iCAAiC;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/cpu/instructions/data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAmB7C,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsInD"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { u8, u16, toWord } from '../../util/bits.js';
|
|
2
|
+
const REG_ORDER = ['b', 'c', 'd', 'e', 'h', 'l', 'M', 'a'];
|
|
3
|
+
function getReg(regs, r, bus) {
|
|
4
|
+
if (r === 'M')
|
|
5
|
+
return bus.read(regs.hl);
|
|
6
|
+
return regs[r];
|
|
7
|
+
}
|
|
8
|
+
function setReg(regs, r, val, bus) {
|
|
9
|
+
if (r === 'M') {
|
|
10
|
+
bus.write(regs.hl, u8(val));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
regs[r] = u8(val);
|
|
14
|
+
}
|
|
15
|
+
export function registerData(decoder) {
|
|
16
|
+
// MOV r1, r2 (0x40..0x7F, except 0x76 which is HLT)
|
|
17
|
+
for (let dst = 0; dst < 8; dst++) {
|
|
18
|
+
for (let src = 0; src < 8; src++) {
|
|
19
|
+
const opcode = 0x40 | (dst << 3) | src;
|
|
20
|
+
if (opcode === 0x76)
|
|
21
|
+
continue; // HLT
|
|
22
|
+
const dstReg = REG_ORDER[dst];
|
|
23
|
+
const srcReg = REG_ORDER[src];
|
|
24
|
+
const cycles = (dstReg === 'M' || srcReg === 'M') ? 7 : 5;
|
|
25
|
+
decoder.register(opcode, (regs, _flags, bus) => {
|
|
26
|
+
const val = getReg(regs, srcReg, bus);
|
|
27
|
+
setReg(regs, dstReg, val, bus);
|
|
28
|
+
return cycles;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// MVI r, d8 (0x06, 0x0E, 0x16, 0x1E, 0x26, 0x2E, 0x36, 0x3E)
|
|
33
|
+
for (let r = 0; r < 8; r++) {
|
|
34
|
+
const opcode = 0x06 | (r << 3);
|
|
35
|
+
const reg = REG_ORDER[r];
|
|
36
|
+
const cycles = reg === 'M' ? 10 : 7;
|
|
37
|
+
decoder.register(opcode, (regs, _flags, bus) => {
|
|
38
|
+
const imm = bus.read(regs.pc);
|
|
39
|
+
regs.pc = u16(regs.pc + 1);
|
|
40
|
+
setReg(regs, reg, imm, bus);
|
|
41
|
+
return cycles;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// LXI B, d16 (0x01)
|
|
45
|
+
decoder.register(0x01, (regs, _flags, bus) => {
|
|
46
|
+
regs.c = bus.read(regs.pc);
|
|
47
|
+
regs.b = bus.read(u16(regs.pc + 1));
|
|
48
|
+
regs.pc = u16(regs.pc + 2);
|
|
49
|
+
return 10;
|
|
50
|
+
});
|
|
51
|
+
// LXI D, d16 (0x11)
|
|
52
|
+
decoder.register(0x11, (regs, _flags, bus) => {
|
|
53
|
+
regs.e = bus.read(regs.pc);
|
|
54
|
+
regs.d = bus.read(u16(regs.pc + 1));
|
|
55
|
+
regs.pc = u16(regs.pc + 2);
|
|
56
|
+
return 10;
|
|
57
|
+
});
|
|
58
|
+
// LXI H, d16 (0x21)
|
|
59
|
+
decoder.register(0x21, (regs, _flags, bus) => {
|
|
60
|
+
regs.l = bus.read(regs.pc);
|
|
61
|
+
regs.h = bus.read(u16(regs.pc + 1));
|
|
62
|
+
regs.pc = u16(regs.pc + 2);
|
|
63
|
+
return 10;
|
|
64
|
+
});
|
|
65
|
+
// LXI SP, d16 (0x31)
|
|
66
|
+
decoder.register(0x31, (regs, _flags, bus) => {
|
|
67
|
+
const lo_ = bus.read(regs.pc);
|
|
68
|
+
const hi_ = bus.read(u16(regs.pc + 1));
|
|
69
|
+
regs.sp = u16(toWord(hi_, lo_));
|
|
70
|
+
regs.pc = u16(regs.pc + 2);
|
|
71
|
+
return 10;
|
|
72
|
+
});
|
|
73
|
+
// LDA addr (0x3A)
|
|
74
|
+
decoder.register(0x3a, (regs, _flags, bus) => {
|
|
75
|
+
const lo_ = bus.read(regs.pc);
|
|
76
|
+
const hi_ = bus.read(u16(regs.pc + 1));
|
|
77
|
+
regs.pc = u16(regs.pc + 2);
|
|
78
|
+
regs.a = bus.read(toWord(hi_, lo_));
|
|
79
|
+
return 13;
|
|
80
|
+
});
|
|
81
|
+
// STA addr (0x32)
|
|
82
|
+
decoder.register(0x32, (regs, _flags, bus) => {
|
|
83
|
+
const lo_ = bus.read(regs.pc);
|
|
84
|
+
const hi_ = bus.read(u16(regs.pc + 1));
|
|
85
|
+
regs.pc = u16(regs.pc + 2);
|
|
86
|
+
bus.write(toWord(hi_, lo_), regs.a);
|
|
87
|
+
return 13;
|
|
88
|
+
});
|
|
89
|
+
// LHLD addr (0x2A)
|
|
90
|
+
decoder.register(0x2a, (regs, _flags, bus) => {
|
|
91
|
+
const lo_ = bus.read(regs.pc);
|
|
92
|
+
const hi_ = bus.read(u16(regs.pc + 1));
|
|
93
|
+
regs.pc = u16(regs.pc + 2);
|
|
94
|
+
const addr = toWord(hi_, lo_);
|
|
95
|
+
regs.l = bus.read(addr);
|
|
96
|
+
regs.h = bus.read(u16(addr + 1));
|
|
97
|
+
return 16;
|
|
98
|
+
});
|
|
99
|
+
// SHLD addr (0x22)
|
|
100
|
+
decoder.register(0x22, (regs, _flags, bus) => {
|
|
101
|
+
const lo_ = bus.read(regs.pc);
|
|
102
|
+
const hi_ = bus.read(u16(regs.pc + 1));
|
|
103
|
+
regs.pc = u16(regs.pc + 2);
|
|
104
|
+
const addr = toWord(hi_, lo_);
|
|
105
|
+
bus.write(addr, regs.l);
|
|
106
|
+
bus.write(u16(addr + 1), regs.h);
|
|
107
|
+
return 16;
|
|
108
|
+
});
|
|
109
|
+
// LDAX B (0x0A)
|
|
110
|
+
decoder.register(0x0a, (regs, _flags, bus) => {
|
|
111
|
+
regs.a = bus.read(regs.bc);
|
|
112
|
+
return 7;
|
|
113
|
+
});
|
|
114
|
+
// LDAX D (0x1A)
|
|
115
|
+
decoder.register(0x1a, (regs, _flags, bus) => {
|
|
116
|
+
regs.a = bus.read(regs.de);
|
|
117
|
+
return 7;
|
|
118
|
+
});
|
|
119
|
+
// STAX B (0x02)
|
|
120
|
+
decoder.register(0x02, (regs, _flags, bus) => {
|
|
121
|
+
bus.write(regs.bc, regs.a);
|
|
122
|
+
return 7;
|
|
123
|
+
});
|
|
124
|
+
// STAX D (0x12)
|
|
125
|
+
decoder.register(0x12, (regs, _flags, bus) => {
|
|
126
|
+
bus.write(regs.de, regs.a);
|
|
127
|
+
return 7;
|
|
128
|
+
});
|
|
129
|
+
// XCHG (0xEB) — exchange HL and DE
|
|
130
|
+
decoder.register(0xeb, (regs, _flags, _bus) => {
|
|
131
|
+
const tmp = regs.hl;
|
|
132
|
+
regs.hl = regs.de;
|
|
133
|
+
regs.de = tmp;
|
|
134
|
+
return 5;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../../src/cpu/instructions/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../../src/cpu/instructions/io.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgBjD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { u16 } from '../../util/bits.js';
|
|
2
|
+
export function registerIO(decoder) {
|
|
3
|
+
// IN port (0xDB)
|
|
4
|
+
decoder.register(0xdb, (regs, _flags, bus) => {
|
|
5
|
+
const port = bus.read(regs.pc);
|
|
6
|
+
regs.pc = u16(regs.pc + 1);
|
|
7
|
+
regs.a = bus.ioRead(port);
|
|
8
|
+
return 10;
|
|
9
|
+
});
|
|
10
|
+
// OUT port (0xD3)
|
|
11
|
+
decoder.register(0xd3, (regs, _flags, bus) => {
|
|
12
|
+
const port = bus.read(regs.pc);
|
|
13
|
+
regs.pc = u16(regs.pc + 1);
|
|
14
|
+
bus.ioWrite(port, regs.a);
|
|
15
|
+
return 10;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=io.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"io.js","sourceRoot":"","sources":["../../../src/cpu/instructions/io.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,iBAAiB;IACjB,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,kBAAkB;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3B,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logical.d.ts","sourceRoot":"","sources":["../../../src/cpu/instructions/logical.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAsB7C,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2HtD"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { u8, u16, signBit, zeroFlag, parityFlag } from '../../util/bits.js';
|
|
2
|
+
const REG_ORDER = ['b', 'c', 'd', 'e', 'h', 'l', 'M', 'a'];
|
|
3
|
+
function getReg(regs, r, bus) {
|
|
4
|
+
if (r === 'M')
|
|
5
|
+
return bus.read(regs.hl);
|
|
6
|
+
return regs[r];
|
|
7
|
+
}
|
|
8
|
+
function setLogicFlags(flags, result) {
|
|
9
|
+
const r8 = u8(result);
|
|
10
|
+
flags.s = signBit(r8);
|
|
11
|
+
flags.z = zeroFlag(r8);
|
|
12
|
+
flags.p = parityFlag(r8);
|
|
13
|
+
flags.cy = false;
|
|
14
|
+
}
|
|
15
|
+
export function registerLogical(decoder) {
|
|
16
|
+
// ANA r / ANA M (0xA0..0xA7)
|
|
17
|
+
for (let r = 0; r < 8; r++) {
|
|
18
|
+
const opcode = 0xa0 | r;
|
|
19
|
+
const reg = REG_ORDER[r];
|
|
20
|
+
const cycles = reg === 'M' ? 7 : 4;
|
|
21
|
+
decoder.register(opcode, (regs, flags, bus) => {
|
|
22
|
+
const result = regs.a & getReg(regs, reg, bus);
|
|
23
|
+
flags.ac = ((regs.a | getReg(regs, reg, bus)) & 0x08) !== 0;
|
|
24
|
+
setLogicFlags(flags, result);
|
|
25
|
+
regs.a = u8(result);
|
|
26
|
+
return cycles;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// ANI d8 (0xE6)
|
|
30
|
+
decoder.register(0xe6, (regs, flags, bus) => {
|
|
31
|
+
const imm = bus.read(regs.pc);
|
|
32
|
+
regs.pc = u16(regs.pc + 1);
|
|
33
|
+
flags.ac = ((regs.a | imm) & 0x08) !== 0;
|
|
34
|
+
const result = regs.a & imm;
|
|
35
|
+
setLogicFlags(flags, result);
|
|
36
|
+
regs.a = u8(result);
|
|
37
|
+
return 7;
|
|
38
|
+
});
|
|
39
|
+
// ORA r / ORA M (0xB0..0xB7)
|
|
40
|
+
for (let r = 0; r < 8; r++) {
|
|
41
|
+
const opcode = 0xb0 | r;
|
|
42
|
+
const reg = REG_ORDER[r];
|
|
43
|
+
const cycles = reg === 'M' ? 7 : 4;
|
|
44
|
+
decoder.register(opcode, (regs, flags, bus) => {
|
|
45
|
+
const result = regs.a | getReg(regs, reg, bus);
|
|
46
|
+
flags.ac = false;
|
|
47
|
+
setLogicFlags(flags, result);
|
|
48
|
+
regs.a = u8(result);
|
|
49
|
+
return cycles;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// ORI d8 (0xF6)
|
|
53
|
+
decoder.register(0xf6, (regs, flags, bus) => {
|
|
54
|
+
const imm = bus.read(regs.pc);
|
|
55
|
+
regs.pc = u16(regs.pc + 1);
|
|
56
|
+
flags.ac = false;
|
|
57
|
+
const result = regs.a | imm;
|
|
58
|
+
setLogicFlags(flags, result);
|
|
59
|
+
regs.a = u8(result);
|
|
60
|
+
return 7;
|
|
61
|
+
});
|
|
62
|
+
// XRA r / XRA M (0xA8..0xAF)
|
|
63
|
+
for (let r = 0; r < 8; r++) {
|
|
64
|
+
const opcode = 0xa8 | r;
|
|
65
|
+
const reg = REG_ORDER[r];
|
|
66
|
+
const cycles = reg === 'M' ? 7 : 4;
|
|
67
|
+
decoder.register(opcode, (regs, flags, bus) => {
|
|
68
|
+
const result = regs.a ^ getReg(regs, reg, bus);
|
|
69
|
+
flags.ac = false;
|
|
70
|
+
setLogicFlags(flags, result);
|
|
71
|
+
regs.a = u8(result);
|
|
72
|
+
return cycles;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// XRI d8 (0xEE)
|
|
76
|
+
decoder.register(0xee, (regs, flags, bus) => {
|
|
77
|
+
const imm = bus.read(regs.pc);
|
|
78
|
+
regs.pc = u16(regs.pc + 1);
|
|
79
|
+
flags.ac = false;
|
|
80
|
+
const result = regs.a ^ imm;
|
|
81
|
+
setLogicFlags(flags, result);
|
|
82
|
+
regs.a = u8(result);
|
|
83
|
+
return 7;
|
|
84
|
+
});
|
|
85
|
+
// CMP r / CMP M (0xB8..0xBF)
|
|
86
|
+
for (let r = 0; r < 8; r++) {
|
|
87
|
+
const opcode = 0xb8 | r;
|
|
88
|
+
const reg = REG_ORDER[r];
|
|
89
|
+
const cycles = reg === 'M' ? 7 : 4;
|
|
90
|
+
decoder.register(opcode, (regs, flags, bus) => {
|
|
91
|
+
const a = regs.a;
|
|
92
|
+
const b = getReg(regs, reg, bus);
|
|
93
|
+
const result = a - b;
|
|
94
|
+
flags.cy = result < 0;
|
|
95
|
+
flags.ac = ((a & 0xf) - (b & 0xf)) < 0;
|
|
96
|
+
setLogicFlags(flags, result);
|
|
97
|
+
flags.cy = a < b;
|
|
98
|
+
return cycles;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// CPI d8 (0xFE)
|
|
102
|
+
decoder.register(0xfe, (regs, flags, bus) => {
|
|
103
|
+
const a = regs.a;
|
|
104
|
+
const b = bus.read(regs.pc);
|
|
105
|
+
regs.pc = u16(regs.pc + 1);
|
|
106
|
+
const result = a - b;
|
|
107
|
+
flags.cy = a < b;
|
|
108
|
+
flags.ac = ((a & 0xf) - (b & 0xf)) < 0;
|
|
109
|
+
setLogicFlags(flags, result);
|
|
110
|
+
flags.cy = a < b;
|
|
111
|
+
return 7;
|
|
112
|
+
});
|
|
113
|
+
// CMA (0x2F) — Complement A
|
|
114
|
+
decoder.register(0x2f, (regs, _flags, _bus) => {
|
|
115
|
+
regs.a = u8(~regs.a);
|
|
116
|
+
return 4;
|
|
117
|
+
});
|
|
118
|
+
// CMC (0x3F) — Complement Carry
|
|
119
|
+
decoder.register(0x3f, (_regs, flags, _bus) => {
|
|
120
|
+
flags.cy = !flags.cy;
|
|
121
|
+
return 4;
|
|
122
|
+
});
|
|
123
|
+
// STC (0x37) — Set Carry
|
|
124
|
+
decoder.register(0x37, (_regs, flags, _bus) => {
|
|
125
|
+
flags.cy = true;
|
|
126
|
+
return 4;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=logical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logical.js","sourceRoot":"","sources":["../../../src/cpu/instructions/logical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotate.d.ts","sourceRoot":"","sources":["../../../src/cpu/instructions/rotate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkCrD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { u8 } from '../../util/bits.js';
|
|
2
|
+
export function registerRotate(decoder) {
|
|
3
|
+
// RLC (0x07) — Rotate A left; CY = bit7
|
|
4
|
+
decoder.register(0x07, (regs, flags, _bus) => {
|
|
5
|
+
const a = regs.a;
|
|
6
|
+
flags.cy = (a & 0x80) !== 0;
|
|
7
|
+
regs.a = u8((a << 1) | (flags.cy ? 1 : 0));
|
|
8
|
+
return 4;
|
|
9
|
+
});
|
|
10
|
+
// RRC (0x0F) — Rotate A right; CY = bit0
|
|
11
|
+
decoder.register(0x0f, (regs, flags, _bus) => {
|
|
12
|
+
const a = regs.a;
|
|
13
|
+
flags.cy = (a & 0x01) !== 0;
|
|
14
|
+
regs.a = u8((a >> 1) | (flags.cy ? 0x80 : 0));
|
|
15
|
+
return 4;
|
|
16
|
+
});
|
|
17
|
+
// RAL (0x17) — Rotate A left through carry
|
|
18
|
+
decoder.register(0x17, (regs, flags, _bus) => {
|
|
19
|
+
const a = regs.a;
|
|
20
|
+
const newCY = (a & 0x80) !== 0;
|
|
21
|
+
regs.a = u8((a << 1) | (flags.cy ? 1 : 0));
|
|
22
|
+
flags.cy = newCY;
|
|
23
|
+
return 4;
|
|
24
|
+
});
|
|
25
|
+
// RAR (0x1F) — Rotate A right through carry
|
|
26
|
+
decoder.register(0x1f, (regs, flags, _bus) => {
|
|
27
|
+
const a = regs.a;
|
|
28
|
+
const newCY = (a & 0x01) !== 0;
|
|
29
|
+
regs.a = u8((a >> 1) | (flags.cy ? 0x80 : 0));
|
|
30
|
+
flags.cy = newCY;
|
|
31
|
+
return 4;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=rotate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotate.js","sourceRoot":"","sources":["../../../src/cpu/instructions/rotate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,2CAA2C;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC;QACjB,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC;QACjB,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../src/cpu/instructions/stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0EpD"}
|