mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-26 08:49:37 +00:00
Adds LDI/LDD/LDIR/LDDR tests.
This commit is contained in:
parent
5998f3b35b
commit
3eec210b30
@ -54,6 +54,10 @@ struct CapturingZ80: public CPU::Z80::BusHandler {
|
|||||||
z80_.set_value_of_register(CPU::Z80::Register::StackPointer, initial_sp);
|
z80_.set_value_of_register(CPU::Z80::Register::StackPointer, initial_sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void set_de(uint16_t value) {
|
||||||
|
z80_.set_value_of_register(CPU::Z80::Register::DE, value);
|
||||||
|
}
|
||||||
|
|
||||||
void run_for(int cycles) {
|
void run_for(int cycles) {
|
||||||
z80_.run_for(HalfCycles(Cycles(cycles)));
|
z80_.run_for(HalfCycles(Cycles(cycles)));
|
||||||
XCTAssertEqual(bus_records_.size(), cycles * 2);
|
XCTAssertEqual(bus_records_.size(), cycles * 2);
|
||||||
@ -1219,6 +1223,72 @@ struct ContentionCheck {
|
|||||||
{initial_sp+1, 3},
|
{initial_sp+1, 3},
|
||||||
{initial_sp, 5},
|
{initial_sp, 5},
|
||||||
} z80:z80];
|
} z80:z80];
|
||||||
}}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testLDILDD {
|
||||||
|
for(const auto &sequence : std::vector<std::vector<uint8_t>>{
|
||||||
|
{0xed, 0xa0}, // LDI
|
||||||
|
{0xed, 0xa8}, // LDD
|
||||||
|
}) {
|
||||||
|
CapturingZ80 z80(sequence);
|
||||||
|
|
||||||
|
// Establish a distinct value for DE.
|
||||||
|
constexpr uint16_t de = 0x9876;
|
||||||
|
z80.set_de(de);
|
||||||
|
|
||||||
|
z80.run_for(16);
|
||||||
|
|
||||||
|
[self validate48Contention:{
|
||||||
|
{initial_pc, 4},
|
||||||
|
{initial_pc+1, 4},
|
||||||
|
{initial_bc_de_hl, 3},
|
||||||
|
{de, 3},
|
||||||
|
{de, 1},
|
||||||
|
{de, 1},
|
||||||
|
} z80:z80];
|
||||||
|
[self validatePlus3Contention:{
|
||||||
|
{initial_pc, 4},
|
||||||
|
{initial_pc+1, 4},
|
||||||
|
{initial_bc_de_hl, 3},
|
||||||
|
{de, 5},
|
||||||
|
} z80:z80];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testLDIRLDDR {
|
||||||
|
for(const auto &sequence : std::vector<std::vector<uint8_t>>{
|
||||||
|
{0xed, 0xb0}, // LDIR
|
||||||
|
{0xed, 0xb8}, // LDDR
|
||||||
|
}) {
|
||||||
|
CapturingZ80 z80(sequence);
|
||||||
|
|
||||||
|
// Establish a distinct value for DE.
|
||||||
|
constexpr uint16_t de = 0x9876;
|
||||||
|
z80.set_de(de);
|
||||||
|
|
||||||
|
z80.run_for(21);
|
||||||
|
|
||||||
|
[self validate48Contention:{
|
||||||
|
{initial_pc, 4},
|
||||||
|
{initial_pc+1, 4},
|
||||||
|
{initial_bc_de_hl, 3},
|
||||||
|
{de, 3},
|
||||||
|
{de, 1},
|
||||||
|
{de, 1},
|
||||||
|
{de, 1},
|
||||||
|
{de, 1},
|
||||||
|
{de, 1},
|
||||||
|
{de, 1},
|
||||||
|
{de, 1},
|
||||||
|
} z80:z80];
|
||||||
|
[self validatePlus3Contention:{
|
||||||
|
{initial_pc, 4},
|
||||||
|
{initial_pc+1, 4},
|
||||||
|
{initial_bc_de_hl, 3},
|
||||||
|
{de, 10},
|
||||||
|
} z80:z80];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
Loading…
Reference in New Issue
Block a user