first public release
This commit is contained in:
43
ldi_ldir_tests.go
Normal file
43
ldi_ldir_tests.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package z80
|
||||
|
||||
import "testing"
|
||||
|
||||
// LDI/LDDR/LDIR correctness: registers, memory effects, PV from BC!=0, and timing totals.
|
||||
func TestLDI_Registers_Flags_Memory(t *testing.T) {
|
||||
cpu, mem, _ := testCPU()
|
||||
cpu.SetHL(0x4000)
|
||||
cpu.SetDE(0x4100)
|
||||
cpu.SetBC(3)
|
||||
mem.WriteByte(0x4000, 0x11)
|
||||
loadProgram(cpu, mem, 0x0000, 0xED, 0xA0) // LDI
|
||||
c := mustStep(t, cpu)
|
||||
assertEq(t, c, 16, "LDI cycles")
|
||||
assertEq(t, mem.ReadByte(0x4100), byte(0x11), "LDI moved byte")
|
||||
assertEq(t, cpu.GetHL(), uint16(0x4001), "HL++")
|
||||
assertEq(t, cpu.GetDE(), uint16(0x4101), "DE++")
|
||||
assertEq(t, cpu.GetBC(), uint16(2), "BC--")
|
||||
assertFlag(t, cpu, FLAG_N, false, "N cleared")
|
||||
assertFlag(t, cpu, FLAG_H, false, "H cleared")
|
||||
assertFlag(t, cpu, FLAG_PV, true, "PV mirrors BC!=0")
|
||||
|
||||
// LDIR for 2 bytes: expect 21 + 16 = 37 cycles and final regs.
|
||||
cpu, mem, _ = testCPU()
|
||||
cpu.SetHL(0x5000)
|
||||
cpu.SetDE(0x6000)
|
||||
cpu.SetBC(2)
|
||||
mem.WriteByte(0x5000, 0xAA)
|
||||
mem.WriteByte(0x5001, 0xBB)
|
||||
loadProgram(cpu, mem, 0x0000, 0xED, 0xB0) // LDIR
|
||||
total := 0
|
||||
for {
|
||||
total += mustStep(t, cpu)
|
||||
if cpu.GetBC() == 0 {
|
||||
break
|
||||
}
|
||||
}
|
||||
assertEq(t, total, 37, "LDIR total cycles for 2 bytes")
|
||||
assertEq(t, mem.ReadByte(0x6000), byte(0xAA), "LDIR first byte")
|
||||
assertEq(t, mem.ReadByte(0x6001), byte(0xBB), "LDIR second byte")
|
||||
assertEq(t, cpu.GetHL(), uint16(0x5002), "HL end")
|
||||
assertEq(t, cpu.GetDE(), uint16(0x6002), "DE end")
|
||||
}
|
||||
Reference in New Issue
Block a user