mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-27 01:31:42 +00:00
Corrects test cases, as far as they go.
This commit is contained in:
parent
a3569d7201
commit
7ac0ea8529
@ -44,7 +44,7 @@ class Z80MemptrTester: XCTestCase {
|
|||||||
let result = test(program: program, initialValue: expectedResult)
|
let result = test(program: program, initialValue: expectedResult)
|
||||||
XCTAssertEqual(result, expectedResult, "Failed for opcode \(String(opcode, radix:16))")
|
XCTAssertEqual(result, expectedResult, "Failed for opcode \(String(opcode, radix:16))")
|
||||||
|
|
||||||
// One failure will do.
|
// One failure per opcode will do.
|
||||||
if result != expectedResult {
|
if result != expectedResult {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -72,6 +72,7 @@ class Z80MemptrTester: XCTestCase {
|
|||||||
0x22, // LD (nn), HL
|
0x22, // LD (nn), HL
|
||||||
0x28, // JR Z
|
0x28, // JR Z
|
||||||
0x29, // ADD HL, HL
|
0x29, // ADD HL, HL
|
||||||
|
0x2a, // LD HL, (nn)
|
||||||
0x30, // JR NC
|
0x30, // JR NC
|
||||||
0x32, // LD (nn), A
|
0x32, // LD (nn), A
|
||||||
0x38, // JR C
|
0x38, // JR C
|
||||||
@ -87,29 +88,47 @@ class Z80MemptrTester: XCTestCase {
|
|||||||
|
|
||||||
func testEDPageOthers() {
|
func testEDPageOthers() {
|
||||||
testPage(0xed, exclusions: [
|
testPage(0xed, exclusions: [
|
||||||
|
0x40, // IN B, (C)
|
||||||
|
0x41, // OUT (C), B
|
||||||
0x42, // SBC HL, BC
|
0x42, // SBC HL, BC
|
||||||
0x43, // LD (nn), HL
|
0x43, // LD (nn), HL
|
||||||
0x45, // RETN (??)
|
0x45, // RETN (??)
|
||||||
|
0x48, // IN C, (C)
|
||||||
|
0x49, // OUT (C), C
|
||||||
0x4a, // ADC HL, BC
|
0x4a, // ADC HL, BC
|
||||||
|
0x4b, // LD BC, (nn)
|
||||||
0x4d, // RETI
|
0x4d, // RETI
|
||||||
|
0x50, // IN D, (C)
|
||||||
|
0x51, // OUT (C), D
|
||||||
0x52, // SBC HL, DE
|
0x52, // SBC HL, DE
|
||||||
0x53, // LD (nn), DE
|
0x53, // LD (nn), DE
|
||||||
0x55, // RETN (??)
|
0x55, // RETN (??)
|
||||||
|
0x58, // IN E, (C)
|
||||||
|
0x59, // OUT (C), E
|
||||||
0x5a, // ADC HL, DE
|
0x5a, // ADC HL, DE
|
||||||
|
0x5b, // LD DE, (nn)
|
||||||
0x5d, // RETN (??)
|
0x5d, // RETN (??)
|
||||||
|
0x60, // IN H, (C)
|
||||||
|
0x61, // OUT (C), H
|
||||||
0x62, // SBC HL, HL
|
0x62, // SBC HL, HL
|
||||||
0x63, // LD (nn), HL
|
0x63, // LD (nn), HL
|
||||||
0x65, // RETN (??)
|
0x65, // RETN (??)
|
||||||
0x67, // RRD
|
0x67, // RRD
|
||||||
|
0x68, // IN L, (C)
|
||||||
|
0x69, // OUT (C), L
|
||||||
0x6a, // ADC HL, HL
|
0x6a, // ADC HL, HL
|
||||||
|
0x6b, // LD HL, (nn)
|
||||||
0x6d, // RETN (??)
|
0x6d, // RETN (??)
|
||||||
0x6f, // RLD
|
0x6f, // RLD
|
||||||
|
0x70, // IN (C)
|
||||||
|
0x71, // OUT (C), 0
|
||||||
0x72, // SBC HL, SP
|
0x72, // SBC HL, SP
|
||||||
0x73, // LD (nn), SP
|
0x73, // LD (nn), SP
|
||||||
0x75, // RETN (??)
|
0x75, // RETN (??)
|
||||||
0x78, // IN A, (C)
|
0x78, // IN A, (C)
|
||||||
0x79, // OUT (C), A
|
0x79, // OUT (C), A
|
||||||
0x7a, // ADC HL, SP
|
0x7a, // ADC HL, SP
|
||||||
|
0x7b, // LD SP, (nn)
|
||||||
0x7d, // RETN (??)
|
0x7d, // RETN (??)
|
||||||
0xa1, // CPI
|
0xa1, // CPI
|
||||||
0xa2, // INI
|
0xa2, // INI
|
||||||
@ -117,10 +136,14 @@ class Z80MemptrTester: XCTestCase {
|
|||||||
0xa9, // CPD
|
0xa9, // CPD
|
||||||
0xaa, // IND
|
0xaa, // IND
|
||||||
0xab, // OUTD
|
0xab, // OUTD
|
||||||
|
0xb0, // LDIR
|
||||||
0xb1, // CPIR
|
0xb1, // CPIR
|
||||||
|
0xb2, // INIR
|
||||||
0xb3, // OUIR
|
0xb3, // OUIR
|
||||||
|
0xb8, // LDDR
|
||||||
0xb9, // CPDR
|
0xb9, // CPDR
|
||||||
0xbb // OTDR
|
0xba, // INDR
|
||||||
|
0xbb, // OTDR
|
||||||
])
|
])
|
||||||
// testPage(0xcb, exclusions: [])
|
// testPage(0xcb, exclusions: [])
|
||||||
// testPage(0xdd, exclusions: [])
|
// testPage(0xdd, exclusions: [])
|
||||||
@ -391,7 +414,7 @@ class Z80MemptrTester: XCTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testJRcc() {
|
func testJRcc() {
|
||||||
func testJR(instruction: UInt8) {
|
func testJR(instruction: UInt8, shouldPass: Bool) {
|
||||||
var program: [UInt8] = [
|
var program: [UInt8] = [
|
||||||
instruction, 0x00
|
instruction, 0x00
|
||||||
]
|
]
|
||||||
@ -399,37 +422,37 @@ class Z80MemptrTester: XCTestCase {
|
|||||||
for offset in 0 ..< 256 {
|
for offset in 0 ..< 256 {
|
||||||
program[1] = UInt8(offset)
|
program[1] = UInt8(offset)
|
||||||
let result = test(program: program, initialValue: 0xffff)
|
let result = test(program: program, initialValue: 0xffff)
|
||||||
XCTAssertEqual(result, machine.value(for: .programCounter))
|
XCTAssertEqual(result, shouldPass ? machine.value(for: .programCounter) : 0xffff)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// JR NZ.
|
// JR NZ.
|
||||||
machine.setValue(0x00, for: .AF)
|
machine.setValue(0x00, for: .AF)
|
||||||
testJR(instruction: 0x20)
|
testJR(instruction: 0x20, shouldPass: true)
|
||||||
|
|
||||||
machine.setValue(0xff, for: .AF)
|
machine.setValue(0xff, for: .AF)
|
||||||
testJR(instruction: 0x20)
|
testJR(instruction: 0x20, shouldPass: false)
|
||||||
|
|
||||||
// JR NC
|
// JR NC
|
||||||
machine.setValue(0x00, for: .AF)
|
machine.setValue(0x00, for: .AF)
|
||||||
testJR(instruction: 0x30)
|
testJR(instruction: 0x30, shouldPass: true)
|
||||||
|
|
||||||
machine.setValue(0xff, for: .AF)
|
machine.setValue(0xff, for: .AF)
|
||||||
testJR(instruction: 0x30)
|
testJR(instruction: 0x30, shouldPass: false)
|
||||||
|
|
||||||
// JR Z
|
// JR Z
|
||||||
machine.setValue(0x00, for: .AF)
|
machine.setValue(0x00, for: .AF)
|
||||||
testJR(instruction: 0x28)
|
testJR(instruction: 0x28, shouldPass: false)
|
||||||
|
|
||||||
machine.setValue(0xff, for: .AF)
|
machine.setValue(0xff, for: .AF)
|
||||||
testJR(instruction: 0x28)
|
testJR(instruction: 0x28, shouldPass: true)
|
||||||
|
|
||||||
// JR C
|
// JR C
|
||||||
machine.setValue(0x00, for: .AF)
|
machine.setValue(0x00, for: .AF)
|
||||||
testJR(instruction: 0x38)
|
testJR(instruction: 0x38, shouldPass: false)
|
||||||
|
|
||||||
machine.setValue(0xff, for: .AF)
|
machine.setValue(0xff, for: .AF)
|
||||||
testJR(instruction: 0x38)
|
testJR(instruction: 0x38, shouldPass: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
func testRST() {
|
func testRST() {
|
||||||
|
Loading…
Reference in New Issue
Block a user