1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-27 15:50:56 +00:00
CLK/OSBindings/Mac/Clock SignalTests/ZexallTests.swift

58 lines
1.5 KiB
Swift

//
// ZexallTests.swift
// Clock Signal
//
// Created by Thomas Harte on 16/05/2017.
// Copyright © 2017 Thomas Harte. All rights reserved.
//
import XCTest
import Foundation
class ZexallTests: XCTestCase, CSTestMachineTrapHandler {
func testZexall() {
if let filename = Bundle(for: type(of: self)).path(forResource: "zexall", ofType: "com") {
if let testData = try? Data(contentsOf: URL(fileURLWithPath: filename)) {
// install test program, at the usual CP/M place
let machine = CSTestMachineZ80()
machine.setData(testData, atAddress: 0x0100)
// add a RET at the CP/M entry location, and establish it as a trap location
machine.setValue(0xc9, atAddress: 0x0005)
machine.addTrapAddress(0x0005);
machine.trapHandler = self
// seed execution at 0x0100
machine.setValue(0x0100, for: .programCounter)
// run!
machine.runForNumber(ofCycles: 20)
}
}
}
func testMachine(_ testMachine: CSTestMachineZ80!, didTrapAtAddress address: UInt16) {
// only 0x0005 was registered as a trap address, so no need further to inspect
let cRegister = testMachine.value(for: .C)
if cRegister == 9 {
var address = testMachine.value(for: .DE)
var character: Character = " "
var output = ""
while true {
character = Character(UnicodeScalar(testMachine.value(atAddress: address)))
if character == "$" {
break
}
output = output + String(character)
address = address + 1
}
print(output)
}
if cRegister == 5 {
print(String(describing: UnicodeScalar(testMachine.value(for: .E))))
}
}
}