From 9347fe5f44051206a9dafbc39675a2506774e5f7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 12 Apr 2021 17:11:58 -0400 Subject: [PATCH] Advances to next failing test: `LD (ii+n), n`. --- .../Clock SignalTests/Z80ContentionTests.mm | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/OSBindings/Mac/Clock SignalTests/Z80ContentionTests.mm b/OSBindings/Mac/Clock SignalTests/Z80ContentionTests.mm index 5d33fab1c..a12b18195 100644 --- a/OSBindings/Mac/Clock SignalTests/Z80ContentionTests.mm +++ b/OSBindings/Mac/Clock SignalTests/Z80ContentionTests.mm @@ -602,4 +602,79 @@ struct ContentionCheck { } } +- (void)testLDJPJRnn { + for(uint8_t opcode : { + // LD rr, dd + 0x01, 0x11, 0x21, 0x31, + + // JP nn, JP cc, nn + 0xc2, 0xc3, 0xd2, 0xe2, 0xf2, + }) { + const std::initializer_list opcodes = {opcode}; + CapturingZ80 z80(opcodes); + z80.run_for(10); + + [self validate48Contention:{ + {initial_pc, 4}, + {initial_pc+1, 3}, + {initial_pc+2, 3}, + } z80:z80]; + [self validatePlus3Contention:{ + {initial_pc, 4}, + {initial_pc+1, 3}, + {initial_pc+2, 3}, + } z80:z80]; + } +} + +- (void)testLDindHLn { + for(uint8_t opcode : { + // LD (HL), n + 0x36 + }) { + const std::initializer_list opcodes = {opcode}; + CapturingZ80 z80(opcodes); + z80.run_for(10); + + [self validate48Contention:{ + {initial_pc, 4}, + {initial_pc+1, 3}, + {initial_bc_de_hl, 3}, + } z80:z80]; + [self validatePlus3Contention:{ + {initial_pc, 4}, + {initial_pc+1, 3}, + {initial_bc_de_hl, 3}, + } z80:z80]; + } +} + +- (void)testLDiiPlusnn { + constexpr uint8_t offset = 0x10; + for(const auto &sequence : std::vector>{ + // LD (ii+n), n + {0xdd, 0x36, offset}, {0xfd, 0x36, offset}, + }) { + CapturingZ80 z80(sequence); + z80.run_for(19); + + [self validate48Contention:{ + {initial_pc, 4}, + {initial_pc+1, 4}, + {initial_pc+2, 3}, + {initial_pc+3, 3}, + {initial_pc+3, 1}, + {initial_pc+3, 1}, + {initial_ix_iy + offset, 3}, + } z80:z80]; + [self validatePlus3Contention:{ + {initial_pc, 4}, + {initial_pc+1, 4}, + {initial_pc+2, 3}, + {initial_pc+3, 5}, + {initial_ix_iy + offset, 3}, + } z80:z80]; + } +} + @end