@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,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zilog Z80 flags register (F).
|
|
3
|
+
*
|
|
4
|
+
* Byte layout: S Z Y H X PV N C (bit 7 → bit 0)
|
|
5
|
+
* S (0x80) Sign
|
|
6
|
+
* Z (0x40) Zero
|
|
7
|
+
* Y (0x20) undocumented copy of result bit 5
|
|
8
|
+
* H (0x10) Half-carry
|
|
9
|
+
* X (0x08) undocumented copy of result bit 3
|
|
10
|
+
* PV (0x04) Parity / overflow (context-dependent)
|
|
11
|
+
* N (0x02) Add/Subtract (set by subtractions)
|
|
12
|
+
* C (0x01) Carry
|
|
13
|
+
*/
|
|
14
|
+
export class FlagsZ80 {
|
|
15
|
+
s = false;
|
|
16
|
+
z = false;
|
|
17
|
+
y = false;
|
|
18
|
+
h = false;
|
|
19
|
+
x = false;
|
|
20
|
+
pv = false;
|
|
21
|
+
n = false;
|
|
22
|
+
c = false;
|
|
23
|
+
toByte() {
|
|
24
|
+
return ((this.s ? 0x80 : 0) |
|
|
25
|
+
(this.z ? 0x40 : 0) |
|
|
26
|
+
(this.y ? 0x20 : 0) |
|
|
27
|
+
(this.h ? 0x10 : 0) |
|
|
28
|
+
(this.x ? 0x08 : 0) |
|
|
29
|
+
(this.pv ? 0x04 : 0) |
|
|
30
|
+
(this.n ? 0x02 : 0) |
|
|
31
|
+
(this.c ? 0x01 : 0));
|
|
32
|
+
}
|
|
33
|
+
fromByte(b) {
|
|
34
|
+
this.s = (b & 0x80) !== 0;
|
|
35
|
+
this.z = (b & 0x40) !== 0;
|
|
36
|
+
this.y = (b & 0x20) !== 0;
|
|
37
|
+
this.h = (b & 0x10) !== 0;
|
|
38
|
+
this.x = (b & 0x08) !== 0;
|
|
39
|
+
this.pv = (b & 0x04) !== 0;
|
|
40
|
+
this.n = (b & 0x02) !== 0;
|
|
41
|
+
this.c = (b & 0x01) !== 0;
|
|
42
|
+
}
|
|
43
|
+
reset() {
|
|
44
|
+
this.s = this.z = this.y = this.h = this.x = this.pv = this.n = this.c = false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=FlagsZ80.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlagsZ80.js","sourceRoot":"","sources":["../../../src/cpu/z80/FlagsZ80.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,QAAQ;IACnB,CAAC,GAAG,KAAK,CAAC;IACV,CAAC,GAAG,KAAK,CAAC;IACV,CAAC,GAAG,KAAK,CAAC;IACV,CAAC,GAAG,KAAK,CAAC;IACV,CAAC,GAAG,KAAK,CAAC;IACV,EAAE,GAAG,KAAK,CAAC;IACX,CAAC,GAAG,KAAK,CAAC;IACV,CAAC,GAAG,KAAK,CAAC;IAEV,MAAM;QACJ,OAAO,CACL,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACpB,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,CAAS;QAChB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;IACjF,CAAC;CACF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zilog Z80 register file.
|
|
3
|
+
*
|
|
4
|
+
* Main 8-bit registers A,B,C,D,E,H,L plus the flags register F (held separately
|
|
5
|
+
* in {@link FlagsZ80}). The shadow set (A',F',B',C',D',E',H',L') is stored as raw
|
|
6
|
+
* bytes here — F' as a byte since it is only ever bulk-swapped by EX AF,AF'.
|
|
7
|
+
* Index registers IX/IY are 16-bit with byte accessors for the undocumented
|
|
8
|
+
* IXH/IXL/IYH/IYL operations. I is the interrupt vector base; R the refresh
|
|
9
|
+
* counter (bit 7 sticky). WZ is the internal MEMPTR register, observable only
|
|
10
|
+
* through the X/Y flags of `BIT n,(HL)` and a few other quirks.
|
|
11
|
+
*/
|
|
12
|
+
export declare class RegistersZ80 {
|
|
13
|
+
a: number;
|
|
14
|
+
b: number;
|
|
15
|
+
c: number;
|
|
16
|
+
d: number;
|
|
17
|
+
e: number;
|
|
18
|
+
h: number;
|
|
19
|
+
l: number;
|
|
20
|
+
a2: number;
|
|
21
|
+
f2: number;
|
|
22
|
+
b2: number;
|
|
23
|
+
c2: number;
|
|
24
|
+
d2: number;
|
|
25
|
+
e2: number;
|
|
26
|
+
h2: number;
|
|
27
|
+
l2: number;
|
|
28
|
+
ix: number;
|
|
29
|
+
iy: number;
|
|
30
|
+
sp: number;
|
|
31
|
+
pc: number;
|
|
32
|
+
i: number;
|
|
33
|
+
r: number;
|
|
34
|
+
wz: number;
|
|
35
|
+
/** BC register pair */
|
|
36
|
+
get bc(): number;
|
|
37
|
+
set bc(v: number);
|
|
38
|
+
/** DE register pair */
|
|
39
|
+
get de(): number;
|
|
40
|
+
set de(v: number);
|
|
41
|
+
/** HL register pair */
|
|
42
|
+
get hl(): number;
|
|
43
|
+
set hl(v: number);
|
|
44
|
+
/** IX high/low bytes (undocumented IXH/IXL) */
|
|
45
|
+
get ixh(): number;
|
|
46
|
+
set ixh(v: number);
|
|
47
|
+
get ixl(): number;
|
|
48
|
+
set ixl(v: number);
|
|
49
|
+
/** IY high/low bytes (undocumented IYH/IYL) */
|
|
50
|
+
get iyh(): number;
|
|
51
|
+
set iyh(v: number);
|
|
52
|
+
get iyl(): number;
|
|
53
|
+
set iyl(v: number);
|
|
54
|
+
/** M1 refresh tick: low 7 bits increment, bit 7 preserved. */
|
|
55
|
+
incR(): void;
|
|
56
|
+
/** EXX: swap BC/DE/HL with their shadows (AF is separate, via EX AF,AF'). */
|
|
57
|
+
exx(): void;
|
|
58
|
+
reset(): void;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=RegistersZ80.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegistersZ80.d.ts","sourceRoot":"","sources":["../../../src/cpu/z80/RegistersZ80.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,qBAAa,YAAY;IACvB,CAAC,SAAK;IACN,CAAC,SAAK;IACN,CAAC,SAAK;IACN,CAAC,SAAK;IACN,CAAC,SAAK;IACN,CAAC,SAAK;IACN,CAAC,SAAK;IAGN,EAAE,SAAK;IACP,EAAE,SAAK;IACP,EAAE,SAAK;IACP,EAAE,SAAK;IACP,EAAE,SAAK;IACP,EAAE,SAAK;IACP,EAAE,SAAK;IACP,EAAE,SAAK;IAEP,EAAE,SAAK;IACP,EAAE,SAAK;IACP,EAAE,SAAK;IACP,EAAE,SAAK;IAEP,CAAC,SAAK;IACN,CAAC,SAAK;IACN,EAAE,SAAK;IAEP,uBAAuB;IACvB,IAAI,EAAE,IAAI,MAAM,CAAmC;IACnD,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAkD;IAElE,uBAAuB;IACvB,IAAI,EAAE,IAAI,MAAM,CAAmC;IACnD,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAkD;IAElE,uBAAuB;IACvB,IAAI,EAAE,IAAI,MAAM,CAAmC;IACnD,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAkD;IAElE,+CAA+C;IAC/C,IAAI,GAAG,IAAI,MAAM,CAAkC;IACnD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAAqD;IACtE,IAAI,GAAG,IAAI,MAAM,CAA2B;IAC5C,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAAgD;IAEjE,+CAA+C;IAC/C,IAAI,GAAG,IAAI,MAAM,CAAkC;IACnD,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAAqD;IACtE,IAAI,GAAG,IAAI,MAAM,CAA2B;IAC5C,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,EAAgD;IAEjE,8DAA8D;IAC9D,IAAI,IAAI,IAAI;IAIZ,6EAA6E;IAC7E,GAAG,IAAI,IAAI;IASX,KAAK,IAAI,IAAI;CASd"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zilog Z80 register file.
|
|
3
|
+
*
|
|
4
|
+
* Main 8-bit registers A,B,C,D,E,H,L plus the flags register F (held separately
|
|
5
|
+
* in {@link FlagsZ80}). The shadow set (A',F',B',C',D',E',H',L') is stored as raw
|
|
6
|
+
* bytes here — F' as a byte since it is only ever bulk-swapped by EX AF,AF'.
|
|
7
|
+
* Index registers IX/IY are 16-bit with byte accessors for the undocumented
|
|
8
|
+
* IXH/IXL/IYH/IYL operations. I is the interrupt vector base; R the refresh
|
|
9
|
+
* counter (bit 7 sticky). WZ is the internal MEMPTR register, observable only
|
|
10
|
+
* through the X/Y flags of `BIT n,(HL)` and a few other quirks.
|
|
11
|
+
*/
|
|
12
|
+
export class RegistersZ80 {
|
|
13
|
+
a = 0;
|
|
14
|
+
b = 0;
|
|
15
|
+
c = 0;
|
|
16
|
+
d = 0;
|
|
17
|
+
e = 0;
|
|
18
|
+
h = 0;
|
|
19
|
+
l = 0;
|
|
20
|
+
// Shadow set (swapped by EXX / EX AF,AF'). F' is a raw PSW byte.
|
|
21
|
+
a2 = 0;
|
|
22
|
+
f2 = 0;
|
|
23
|
+
b2 = 0;
|
|
24
|
+
c2 = 0;
|
|
25
|
+
d2 = 0;
|
|
26
|
+
e2 = 0;
|
|
27
|
+
h2 = 0;
|
|
28
|
+
l2 = 0;
|
|
29
|
+
ix = 0;
|
|
30
|
+
iy = 0;
|
|
31
|
+
sp = 0;
|
|
32
|
+
pc = 0;
|
|
33
|
+
i = 0; // interrupt vector base
|
|
34
|
+
r = 0; // refresh counter (bit 7 preserved across increments)
|
|
35
|
+
wz = 0; // MEMPTR — internal 16-bit temp
|
|
36
|
+
/** BC register pair */
|
|
37
|
+
get bc() { return (this.b << 8) | this.c; }
|
|
38
|
+
set bc(v) { this.b = (v >> 8) & 0xff; this.c = v & 0xff; }
|
|
39
|
+
/** DE register pair */
|
|
40
|
+
get de() { return (this.d << 8) | this.e; }
|
|
41
|
+
set de(v) { this.d = (v >> 8) & 0xff; this.e = v & 0xff; }
|
|
42
|
+
/** HL register pair */
|
|
43
|
+
get hl() { return (this.h << 8) | this.l; }
|
|
44
|
+
set hl(v) { this.h = (v >> 8) & 0xff; this.l = v & 0xff; }
|
|
45
|
+
/** IX high/low bytes (undocumented IXH/IXL) */
|
|
46
|
+
get ixh() { return (this.ix >> 8) & 0xff; }
|
|
47
|
+
set ixh(v) { this.ix = ((v & 0xff) << 8) | (this.ix & 0xff); }
|
|
48
|
+
get ixl() { return this.ix & 0xff; }
|
|
49
|
+
set ixl(v) { this.ix = (this.ix & 0xff00) | (v & 0xff); }
|
|
50
|
+
/** IY high/low bytes (undocumented IYH/IYL) */
|
|
51
|
+
get iyh() { return (this.iy >> 8) & 0xff; }
|
|
52
|
+
set iyh(v) { this.iy = ((v & 0xff) << 8) | (this.iy & 0xff); }
|
|
53
|
+
get iyl() { return this.iy & 0xff; }
|
|
54
|
+
set iyl(v) { this.iy = (this.iy & 0xff00) | (v & 0xff); }
|
|
55
|
+
/** M1 refresh tick: low 7 bits increment, bit 7 preserved. */
|
|
56
|
+
incR() {
|
|
57
|
+
this.r = (this.r & 0x80) | ((this.r + 1) & 0x7f);
|
|
58
|
+
}
|
|
59
|
+
/** EXX: swap BC/DE/HL with their shadows (AF is separate, via EX AF,AF'). */
|
|
60
|
+
exx() {
|
|
61
|
+
let t = this.b;
|
|
62
|
+
this.b = this.b2;
|
|
63
|
+
this.b2 = t;
|
|
64
|
+
t = this.c;
|
|
65
|
+
this.c = this.c2;
|
|
66
|
+
this.c2 = t;
|
|
67
|
+
t = this.d;
|
|
68
|
+
this.d = this.d2;
|
|
69
|
+
this.d2 = t;
|
|
70
|
+
t = this.e;
|
|
71
|
+
this.e = this.e2;
|
|
72
|
+
this.e2 = t;
|
|
73
|
+
t = this.h;
|
|
74
|
+
this.h = this.h2;
|
|
75
|
+
this.h2 = t;
|
|
76
|
+
t = this.l;
|
|
77
|
+
this.l = this.l2;
|
|
78
|
+
this.l2 = t;
|
|
79
|
+
}
|
|
80
|
+
reset() {
|
|
81
|
+
this.a = this.b = this.c = this.d = this.e = this.h = this.l = 0;
|
|
82
|
+
this.a2 = this.f2 = this.b2 = this.c2 = this.d2 = this.e2 = this.h2 = this.l2 = 0;
|
|
83
|
+
this.ix = this.iy = 0;
|
|
84
|
+
this.sp = 0;
|
|
85
|
+
this.pc = 0;
|
|
86
|
+
this.i = this.r = 0;
|
|
87
|
+
this.wz = 0;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=RegistersZ80.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RegistersZ80.js","sourceRoot":"","sources":["../../../src/cpu/z80/RegistersZ80.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { FlagsZ80 } from './FlagsZ80.js';
|
|
2
|
+
export declare function parityEven(v: number): boolean;
|
|
3
|
+
/** Set S, Z, Y, X from a result byte (PV/H/N/C left to the caller). */
|
|
4
|
+
export declare function setSzyx(f: FlagsZ80, r: number): void;
|
|
5
|
+
/** Set S, Z, Y, X, PV(parity) from a result byte — the "logic/rotate" flag shape. */
|
|
6
|
+
export declare function setSzyxp(f: FlagsZ80, r: number): void;
|
|
7
|
+
/** 8-bit ADD / ADC. Returns the truncated result. */
|
|
8
|
+
export declare function add8(f: FlagsZ80, a: number, b: number, cIn: 0 | 1): number;
|
|
9
|
+
/** 8-bit SUB / SBC. `cIn` is the incoming borrow. Returns the truncated result. */
|
|
10
|
+
export declare function sub8(f: FlagsZ80, a: number, b: number, cIn: 0 | 1): number;
|
|
11
|
+
/** CP: like SUB but the result is discarded and X/Y come from the operand, not the result. */
|
|
12
|
+
export declare function cp8(f: FlagsZ80, a: number, b: number): void;
|
|
13
|
+
/** INC r: C is preserved, so it is not touched here. */
|
|
14
|
+
export declare function inc8(f: FlagsZ80, v: number): number;
|
|
15
|
+
/** DEC r: C is preserved, so it is not touched here. */
|
|
16
|
+
export declare function dec8(f: FlagsZ80, v: number): number;
|
|
17
|
+
/** AND/OR/XOR result flags. `hVal` is true for AND (H=1), false for OR/XOR (H=0). */
|
|
18
|
+
export declare function setLogicFlags(f: FlagsZ80, r: number, hVal: boolean): void;
|
|
19
|
+
/** ADD HL,rr (and ADD IX/IY,rr): affects H, N, C, X, Y only. Returns 16-bit result. */
|
|
20
|
+
export declare function add16(f: FlagsZ80, a: number, b: number): number;
|
|
21
|
+
/** ADC HL,rr: full flags; Z from the whole 16-bit result. */
|
|
22
|
+
export declare function adc16(f: FlagsZ80, a: number, b: number, cIn: 0 | 1): number;
|
|
23
|
+
/** SBC HL,rr: full flags; `cIn` is incoming borrow. */
|
|
24
|
+
export declare function sbc16(f: FlagsZ80, a: number, b: number, cIn: 0 | 1): number;
|
|
25
|
+
//# sourceMappingURL=flagHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flagHelpers.d.ts","sourceRoot":"","sources":["../../../src/cpu/z80/flagHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAyB9C,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAKpD;AAED,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED,qDAAqD;AACrD,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAS1E;AAED,mFAAmF;AACnF,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAS1E;AAED,8FAA8F;AAC9F,wBAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAW3D;AAED,wDAAwD;AACxD,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,wDAAwD;AACxD,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,qFAAqF;AACrF,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAKzE;AAED,uFAAuF;AACvF,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAS/D;AAED,6DAA6D;AAC7D,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAY3E;AAED,uDAAuD;AACvD,wBAAgB,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAY3E"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Z80 flag computations. Every arithmetic/logic result funnels through
|
|
3
|
+
* one of these so the undocumented X (bit 3) and Y (bit 5) flags — copied from
|
|
4
|
+
* the result byte — are handled uniformly.
|
|
5
|
+
*
|
|
6
|
+
* Conventions: `cIn` is the incoming carry (0|1) for adds and the incoming
|
|
7
|
+
* borrow (0|1) for subtracts. Signed-overflow (PV) uses the classic
|
|
8
|
+
* `(~(a^b) & (a^r))` for adds and `((a^b) & (a^r))` for subtracts.
|
|
9
|
+
*/
|
|
10
|
+
/** Precomputed even-parity table (true = even number of set bits). */
|
|
11
|
+
const PARITY = (() => {
|
|
12
|
+
const t = new Array(256);
|
|
13
|
+
for (let v = 0; v < 256; v++) {
|
|
14
|
+
let x = v;
|
|
15
|
+
x ^= x >> 4;
|
|
16
|
+
x ^= x >> 2;
|
|
17
|
+
x ^= x >> 1;
|
|
18
|
+
t[v] = (x & 1) === 0;
|
|
19
|
+
}
|
|
20
|
+
return t;
|
|
21
|
+
})();
|
|
22
|
+
export function parityEven(v) {
|
|
23
|
+
return PARITY[v & 0xff];
|
|
24
|
+
}
|
|
25
|
+
/** Set S, Z, Y, X from a result byte (PV/H/N/C left to the caller). */
|
|
26
|
+
export function setSzyx(f, r) {
|
|
27
|
+
f.s = (r & 0x80) !== 0;
|
|
28
|
+
f.z = (r & 0xff) === 0;
|
|
29
|
+
f.y = (r & 0x20) !== 0;
|
|
30
|
+
f.x = (r & 0x08) !== 0;
|
|
31
|
+
}
|
|
32
|
+
/** Set S, Z, Y, X, PV(parity) from a result byte — the "logic/rotate" flag shape. */
|
|
33
|
+
export function setSzyxp(f, r) {
|
|
34
|
+
setSzyx(f, r);
|
|
35
|
+
f.pv = PARITY[r & 0xff];
|
|
36
|
+
}
|
|
37
|
+
/** 8-bit ADD / ADC. Returns the truncated result. */
|
|
38
|
+
export function add8(f, a, b, cIn) {
|
|
39
|
+
const sum = a + b + cIn;
|
|
40
|
+
const r = sum & 0xff;
|
|
41
|
+
setSzyx(f, r);
|
|
42
|
+
f.h = ((a & 0xf) + (b & 0xf) + cIn) > 0xf;
|
|
43
|
+
f.pv = (~(a ^ b) & (a ^ r) & 0x80) !== 0;
|
|
44
|
+
f.n = false;
|
|
45
|
+
f.c = sum > 0xff;
|
|
46
|
+
return r;
|
|
47
|
+
}
|
|
48
|
+
/** 8-bit SUB / SBC. `cIn` is the incoming borrow. Returns the truncated result. */
|
|
49
|
+
export function sub8(f, a, b, cIn) {
|
|
50
|
+
const diff = a - b - cIn;
|
|
51
|
+
const r = diff & 0xff;
|
|
52
|
+
setSzyx(f, r);
|
|
53
|
+
f.h = ((a & 0xf) - (b & 0xf) - cIn) < 0;
|
|
54
|
+
f.pv = ((a ^ b) & (a ^ r) & 0x80) !== 0;
|
|
55
|
+
f.n = true;
|
|
56
|
+
f.c = diff < 0;
|
|
57
|
+
return r;
|
|
58
|
+
}
|
|
59
|
+
/** CP: like SUB but the result is discarded and X/Y come from the operand, not the result. */
|
|
60
|
+
export function cp8(f, a, b) {
|
|
61
|
+
const diff = a - b;
|
|
62
|
+
const r = diff & 0xff;
|
|
63
|
+
f.s = (r & 0x80) !== 0;
|
|
64
|
+
f.z = r === 0;
|
|
65
|
+
f.y = (b & 0x20) !== 0;
|
|
66
|
+
f.x = (b & 0x08) !== 0;
|
|
67
|
+
f.h = ((a & 0xf) - (b & 0xf)) < 0;
|
|
68
|
+
f.pv = ((a ^ b) & (a ^ r) & 0x80) !== 0;
|
|
69
|
+
f.n = true;
|
|
70
|
+
f.c = diff < 0;
|
|
71
|
+
}
|
|
72
|
+
/** INC r: C is preserved, so it is not touched here. */
|
|
73
|
+
export function inc8(f, v) {
|
|
74
|
+
const r = (v + 1) & 0xff;
|
|
75
|
+
setSzyx(f, r);
|
|
76
|
+
f.h = (v & 0xf) === 0xf;
|
|
77
|
+
f.pv = v === 0x7f;
|
|
78
|
+
f.n = false;
|
|
79
|
+
return r;
|
|
80
|
+
}
|
|
81
|
+
/** DEC r: C is preserved, so it is not touched here. */
|
|
82
|
+
export function dec8(f, v) {
|
|
83
|
+
const r = (v - 1) & 0xff;
|
|
84
|
+
setSzyx(f, r);
|
|
85
|
+
f.h = (v & 0xf) === 0;
|
|
86
|
+
f.pv = v === 0x80;
|
|
87
|
+
f.n = true;
|
|
88
|
+
return r;
|
|
89
|
+
}
|
|
90
|
+
/** AND/OR/XOR result flags. `hVal` is true for AND (H=1), false for OR/XOR (H=0). */
|
|
91
|
+
export function setLogicFlags(f, r, hVal) {
|
|
92
|
+
setSzyxp(f, r);
|
|
93
|
+
f.h = hVal;
|
|
94
|
+
f.n = false;
|
|
95
|
+
f.c = false;
|
|
96
|
+
}
|
|
97
|
+
/** ADD HL,rr (and ADD IX/IY,rr): affects H, N, C, X, Y only. Returns 16-bit result. */
|
|
98
|
+
export function add16(f, a, b) {
|
|
99
|
+
const sum = a + b;
|
|
100
|
+
const r = sum & 0xffff;
|
|
101
|
+
f.h = ((a & 0xfff) + (b & 0xfff)) > 0xfff;
|
|
102
|
+
f.n = false;
|
|
103
|
+
f.c = sum > 0xffff;
|
|
104
|
+
f.y = (r & 0x2000) !== 0; // bit 13 = bit 5 of high byte
|
|
105
|
+
f.x = (r & 0x0800) !== 0; // bit 11 = bit 3 of high byte
|
|
106
|
+
return r;
|
|
107
|
+
}
|
|
108
|
+
/** ADC HL,rr: full flags; Z from the whole 16-bit result. */
|
|
109
|
+
export function adc16(f, a, b, cIn) {
|
|
110
|
+
const sum = a + b + cIn;
|
|
111
|
+
const r = sum & 0xffff;
|
|
112
|
+
f.s = (r & 0x8000) !== 0;
|
|
113
|
+
f.z = r === 0;
|
|
114
|
+
f.h = ((a & 0xfff) + (b & 0xfff) + cIn) > 0xfff;
|
|
115
|
+
f.pv = (~(a ^ b) & (a ^ r) & 0x8000) !== 0;
|
|
116
|
+
f.n = false;
|
|
117
|
+
f.c = sum > 0xffff;
|
|
118
|
+
f.y = (r & 0x2000) !== 0;
|
|
119
|
+
f.x = (r & 0x0800) !== 0;
|
|
120
|
+
return r;
|
|
121
|
+
}
|
|
122
|
+
/** SBC HL,rr: full flags; `cIn` is incoming borrow. */
|
|
123
|
+
export function sbc16(f, a, b, cIn) {
|
|
124
|
+
const diff = a - b - cIn;
|
|
125
|
+
const r = diff & 0xffff;
|
|
126
|
+
f.s = (r & 0x8000) !== 0;
|
|
127
|
+
f.z = r === 0;
|
|
128
|
+
f.h = ((a & 0xfff) - (b & 0xfff) - cIn) < 0;
|
|
129
|
+
f.pv = ((a ^ b) & (a ^ r) & 0x8000) !== 0;
|
|
130
|
+
f.n = true;
|
|
131
|
+
f.c = diff < 0;
|
|
132
|
+
f.y = (r & 0x2000) !== 0;
|
|
133
|
+
f.x = (r & 0x0800) !== 0;
|
|
134
|
+
return r;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=flagHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flagHelpers.js","sourceRoot":"","sources":["../../../src/cpu/z80/flagHelpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alu16.d.ts","sourceRoot":"","sources":["../../../../src/cpu/z80/instructions/alu16.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIzD,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAwBxE"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { add16 } from '../flagHelpers.js';
|
|
2
|
+
import { u16 } from '../../../util/bits.js';
|
|
3
|
+
/** 16-bit INC/DEC and ADD HL,rr in the main table (view-parameterized). */
|
|
4
|
+
export function registerAlu16(table, view) {
|
|
5
|
+
// INC rr
|
|
6
|
+
table[0x03] = (cpu) => { cpu.regs.bc = u16(cpu.regs.bc + 1); return 6; };
|
|
7
|
+
table[0x13] = (cpu) => { cpu.regs.de = u16(cpu.regs.de + 1); return 6; };
|
|
8
|
+
table[0x23] = (cpu) => { view.setPair(cpu.regs, u16(view.getPair(cpu.regs) + 1)); return 6; };
|
|
9
|
+
table[0x33] = (cpu) => { cpu.regs.sp = u16(cpu.regs.sp + 1); return 6; };
|
|
10
|
+
// DEC rr
|
|
11
|
+
table[0x0b] = (cpu) => { cpu.regs.bc = u16(cpu.regs.bc - 1); return 6; };
|
|
12
|
+
table[0x1b] = (cpu) => { cpu.regs.de = u16(cpu.regs.de - 1); return 6; };
|
|
13
|
+
table[0x2b] = (cpu) => { view.setPair(cpu.regs, u16(view.getPair(cpu.regs) - 1)); return 6; };
|
|
14
|
+
table[0x3b] = (cpu) => { cpu.regs.sp = u16(cpu.regs.sp - 1); return 6; };
|
|
15
|
+
// ADD HL,rr (ADD IX,rr / ADD IY,rr) — WZ = HL(before) + 1
|
|
16
|
+
const addHl = (getOperand) => (cpu) => {
|
|
17
|
+
const hl = view.getPair(cpu.regs);
|
|
18
|
+
cpu.regs.wz = u16(hl + 1);
|
|
19
|
+
view.setPair(cpu.regs, add16(cpu.flags, hl, getOperand(cpu)));
|
|
20
|
+
return 11;
|
|
21
|
+
};
|
|
22
|
+
table[0x09] = addHl((cpu) => cpu.regs.bc);
|
|
23
|
+
table[0x19] = addHl((cpu) => cpu.regs.de);
|
|
24
|
+
table[0x29] = addHl((cpu) => view.getPair(cpu.regs));
|
|
25
|
+
table[0x39] = addHl((cpu) => cpu.regs.sp);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=alu16.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alu16.js","sourceRoot":"","sources":["../../../../src/cpu/z80/instructions/alu16.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alu8.d.ts","sourceRoot":"","sources":["../../../../src/cpu/z80/instructions/alu8.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAW,MAAM,aAAa,CAAC;AAoBlE,mFAAmF;AACnF,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CA6DvE"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { getR, setR } from '../regcodes.js';
|
|
2
|
+
import { add8, sub8, cp8, setLogicFlags, inc8, dec8 } from '../flagHelpers.js';
|
|
3
|
+
/** Apply ALU operation `kind` (0=ADD..7=CP) of `v` onto the accumulator. */
|
|
4
|
+
function applyAlu(cpu, kind, v) {
|
|
5
|
+
const f = cpu.flags;
|
|
6
|
+
const regs = cpu.regs;
|
|
7
|
+
switch (kind) {
|
|
8
|
+
case 0:
|
|
9
|
+
regs.a = add8(f, regs.a, v, 0);
|
|
10
|
+
break; // ADD
|
|
11
|
+
case 1:
|
|
12
|
+
regs.a = add8(f, regs.a, v, f.c ? 1 : 0);
|
|
13
|
+
break; // ADC
|
|
14
|
+
case 2:
|
|
15
|
+
regs.a = sub8(f, regs.a, v, 0);
|
|
16
|
+
break; // SUB
|
|
17
|
+
case 3:
|
|
18
|
+
regs.a = sub8(f, regs.a, v, f.c ? 1 : 0);
|
|
19
|
+
break; // SBC
|
|
20
|
+
case 4:
|
|
21
|
+
regs.a = regs.a & v;
|
|
22
|
+
setLogicFlags(f, regs.a, true);
|
|
23
|
+
break; // AND
|
|
24
|
+
case 5:
|
|
25
|
+
regs.a = regs.a ^ v;
|
|
26
|
+
setLogicFlags(f, regs.a, false);
|
|
27
|
+
break; // XOR
|
|
28
|
+
case 6:
|
|
29
|
+
regs.a = regs.a | v;
|
|
30
|
+
setLogicFlags(f, regs.a, false);
|
|
31
|
+
break; // OR
|
|
32
|
+
case 7:
|
|
33
|
+
cp8(f, regs.a, v);
|
|
34
|
+
break; // CP
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** 8-bit arithmetic/logic and INC/DEC r in the main table (view-parameterized). */
|
|
38
|
+
export function registerAlu8(table, view) {
|
|
39
|
+
// ALU A,r / ALU A,(HL) (0x80..0xBF)
|
|
40
|
+
for (let op = 0x80; op <= 0xbf; op++) {
|
|
41
|
+
const kind = (op >> 3) & 7;
|
|
42
|
+
const reg = op & 7;
|
|
43
|
+
if (reg === 6) {
|
|
44
|
+
table[op] = (cpu) => {
|
|
45
|
+
const addr = view.memAddr(cpu);
|
|
46
|
+
applyAlu(cpu, kind, cpu.bus.read(addr));
|
|
47
|
+
return 7 + view.memExtra;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
table[op] = (cpu) => {
|
|
52
|
+
applyAlu(cpu, kind, getR(cpu.regs, view, reg));
|
|
53
|
+
return 4;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// ALU A,n (0xC6,0xCE,0xD6,0xDE,0xE6,0xEE,0xF6,0xFE)
|
|
58
|
+
for (const op of [0xc6, 0xce, 0xd6, 0xde, 0xe6, 0xee, 0xf6, 0xfe]) {
|
|
59
|
+
const kind = (op >> 3) & 7;
|
|
60
|
+
table[op] = (cpu) => {
|
|
61
|
+
applyAlu(cpu, kind, cpu.fetchByte());
|
|
62
|
+
return 7;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// INC r (0x04|r<<3)
|
|
66
|
+
for (let r = 0; r < 8; r++) {
|
|
67
|
+
const op = 0x04 | (r << 3);
|
|
68
|
+
if (r === 6) {
|
|
69
|
+
table[op] = (cpu) => {
|
|
70
|
+
const addr = view.memAddr(cpu);
|
|
71
|
+
cpu.bus.write(addr, inc8(cpu.flags, cpu.bus.read(addr)));
|
|
72
|
+
return 11 + view.memExtra;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
table[op] = (cpu) => {
|
|
77
|
+
setR(cpu.regs, view, r, inc8(cpu.flags, getR(cpu.regs, view, r)));
|
|
78
|
+
return 4;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// DEC r (0x05|r<<3)
|
|
83
|
+
for (let r = 0; r < 8; r++) {
|
|
84
|
+
const op = 0x05 | (r << 3);
|
|
85
|
+
if (r === 6) {
|
|
86
|
+
table[op] = (cpu) => {
|
|
87
|
+
const addr = view.memAddr(cpu);
|
|
88
|
+
cpu.bus.write(addr, dec8(cpu.flags, cpu.bus.read(addr)));
|
|
89
|
+
return 11 + view.memExtra;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
table[op] = (cpu) => {
|
|
94
|
+
setR(cpu.regs, view, r, dec8(cpu.flags, getR(cpu.regs, view, r)));
|
|
95
|
+
return 4;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=alu8.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alu8.js","sourceRoot":"","sources":["../../../../src/cpu/z80/instructions/alu8.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Z80Handler, Z80IndexedCbHandler } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registers the plain CB table and the DDCB/FDCB (indexed) bodies.
|
|
4
|
+
*
|
|
5
|
+
* Plain CB handlers return the FULL T-state count (the CB dispatcher does not add
|
|
6
|
+
* the prefix). Indexed handlers return the count minus the DD/FD prefix (which
|
|
7
|
+
* step() adds): rot/shift/res/set = 19 (→23), BIT = 16 (→20).
|
|
8
|
+
*/
|
|
9
|
+
export declare function registerBits(cb: Z80Handler[], idxCb: Z80IndexedCbHandler[]): void;
|
|
10
|
+
//# sourceMappingURL=bits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bits.d.ts","sourceRoot":"","sources":["../../../../src/cpu/z80/instructions/bits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAW,MAAM,aAAa,CAAC;AAuC5E;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAiGjF"}
|