From 4a87aa06a5780871b96c995dc26f0602cdb09168 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 21 Sep 2023 10:07:09 -0400 Subject: [PATCH] Add use of AHX/TAS/SHX/SHY pagecross test. Which fails. --- .../Mac/Clock SignalTests/NeskellTests.swift | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/OSBindings/Mac/Clock SignalTests/NeskellTests.swift b/OSBindings/Mac/Clock SignalTests/NeskellTests.swift index 523bb5170..dfc449fe0 100644 --- a/OSBindings/Mac/Clock SignalTests/NeskellTests.swift +++ b/OSBindings/Mac/Clock SignalTests/NeskellTests.swift @@ -13,16 +13,16 @@ import XCTest // https://github.com/blitzcode/neskell/blob/b4bfec6d6f0cf88d8d2de61585017d16a37e3b9a/src/Test.hs class NeskellTests: XCTestCase { - private func runTest(resource: String) -> CSTestMachine6502? { + private func runTest(resource: String, codeAddress: UInt32) -> CSTestMachine6502? { if let filename = Bundle(for: type(of: self)).path(forResource: resource, ofType: "bin") { if let functionalTest = try? Data(contentsOf: URL(fileURLWithPath: filename)) { let machine = CSTestMachine6502(processor: .processorNES6502) - machine.setData(functionalTest, atAddress: 0x0600) - machine.setValue(0x0600, for: .programCounter) + machine.setData(functionalTest, atAddress: codeAddress) + machine.setValue(UInt16(codeAddress), for: .programCounter) // Install the halt-forever trailer. - let targetAddress = UInt32(0x0600 + functionalTest.count) + let targetAddress = UInt32(codeAddress + UInt32(functionalTest.count)) let infiniteStop = Data([0x38, 0xb0, 0xfe]) // i.e. SEC; BCS -2 machine.setData(infiniteStop, atAddress: targetAddress) @@ -41,13 +41,24 @@ class NeskellTests: XCTestCase { return nil } - func testAHX_TAS_SHX_SHY() { - if let result = runTest(resource: "ahx_tas_shx_shy_test") { - XCTAssertEqual(result.value(for: .stackPointer), 0xf2) + private func assertStack(machine: CSTestMachine6502, contents: [UInt8]) { + let stackStart = UInt32(0x101 + machine.value(for: .stackPointer)) + let stackLength = UInt32(0x200 - stackStart) + let stackData = machine.data(atAddress: stackStart, length: stackLength) + XCTAssertEqual(stackData, Data(contents)); + } - let stackData = result.data(atAddress: 0x1f3, length: 0x200 - 0x1f3) - XCTAssertEqual(stackData, - Data([0x01, 0xC9, 0x01, 0x80, 0xC0, 0xE0, 0x01, 0x55, 0x80, 0x80, 0x01, 0x34, 0x10])); + func testAHX_TAS_SHX_SHY() { + if let result = runTest(resource: "ahx_tas_shx_shy_test", codeAddress: 0x600) { + XCTAssertEqual(result.value(for: .stackPointer), 0xf2) + assertStack(machine: result, contents: [0x01, 0xC9, 0x01, 0x80, 0xC0, 0xE0, 0x01, 0x55, 0x80, 0x80, 0x01, 0x34, 0x10]); + } + } + + func testAHX_TAS_SHX_SHY_pagecross() { + if let result = runTest(resource: "ahx_tas_shx_shy_pagecross_test", codeAddress: 0x600) { + XCTAssertEqual(result.value(for: .stackPointer), 0xf5) + assertStack(machine: result, contents: [0x42, 0x42, 0x41, 0x41, 0x00, 0x01, 0xCE, 0xCF, 0xC0, 0xD0]); } } }