From c097886d001ec4c92de870ab7ccf63d3d8a8e88e Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 4 Oct 2016 07:52:44 -0400 Subject: [PATCH] Installed hoglet's BCDTest as a formal part of the test suite; removed some redundant semicolons in the Wolfgang Lorenz tests while I was here. --- .../Clock Signal.xcodeproj/project.pbxproj | 8 +++ OSBindings/Mac/Clock SignalTests/BCDTEST_beeb | Bin 0 -> 999 bytes .../Mac/Clock SignalTests/BCDTest.swift | 58 ++++++++++++++++++ .../WolfgangLorenzTests.swift | 10 +-- 4 files changed, 71 insertions(+), 5 deletions(-) create mode 100755 OSBindings/Mac/Clock SignalTests/BCDTEST_beeb create mode 100644 OSBindings/Mac/Clock SignalTests/BCDTest.swift diff --git a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj index f340bb52b..a7ea419a9 100644 --- a/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj +++ b/OSBindings/Mac/Clock Signal.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 4B049CDD1DA3C82F00322067 /* BCDTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B049CDC1DA3C82F00322067 /* BCDTest.swift */; }; + 4B049CDF1DA3C85B00322067 /* BCDTEST_beeb in Resources */ = {isa = PBXBuildFile; fileRef = 4B049CDE1DA3C85B00322067 /* BCDTEST_beeb */; }; 4B0BE4281D3481E700D5256B /* DigitalPhaseLockedLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0BE4261D3481E700D5256B /* DigitalPhaseLockedLoop.cpp */; }; 4B0CCC451C62D0B3001CAC5F /* CRT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0CCC421C62D0B3001CAC5F /* CRT.cpp */; }; 4B14145B1B58879D00E04248 /* CPU6502.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B1414571B58879D00E04248 /* CPU6502.cpp */; }; @@ -389,6 +391,8 @@ /* Begin PBXFileReference section */ 4B046DC31CFE651500E9E45E /* CRTMachine.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CRTMachine.hpp; sourceTree = ""; }; + 4B049CDC1DA3C82F00322067 /* BCDTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BCDTest.swift; sourceTree = ""; }; + 4B049CDE1DA3C85B00322067 /* BCDTEST_beeb */ = {isa = PBXFileReference; lastKnownFileType = file; path = BCDTEST_beeb; sourceTree = ""; }; 4B0B6E121C9DBD5D00FFB60D /* CRTConstants.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = CRTConstants.hpp; sourceTree = ""; }; 4B0BE4261D3481E700D5256B /* DigitalPhaseLockedLoop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DigitalPhaseLockedLoop.cpp; sourceTree = ""; }; 4B0BE4271D3481E700D5256B /* DigitalPhaseLockedLoop.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DigitalPhaseLockedLoop.hpp; sourceTree = ""; }; @@ -898,6 +902,7 @@ 4B1414631B588A1100E04248 /* Test Binaries */ = { isa = PBXGroup; children = ( + 4B049CDE1DA3C85B00322067 /* BCDTEST_beeb */, 4BB297E01B587D8300A49093 /* 6502_functional_test.bin */, 4BB297E11B587D8300A49093 /* AllSuiteA.bin */, 4BB297E41B587D8300A49093 /* Wolfgang Lorenz 6502 test suite */, @@ -1522,6 +1527,7 @@ 4BC751B11D157E61006C31D9 /* 6522Tests.swift */, 4B1E85801D176468001EF87D /* 6532Tests.swift */, 4BB73EB61B587A5100552FC2 /* AllSuiteATests.swift */, + 4B049CDC1DA3C82F00322067 /* BCDTest.swift */, 4B3BA0C21D318AEB005DD7A7 /* C1540Tests.swift */, 4BEF6AAB1D35D1C400E73575 /* DPLLTests.swift */, 4B1414611B58888700E04248 /* KlausDormannTests.swift */, @@ -1930,6 +1936,7 @@ 4BB299641B587D8400A49093 /* insiy in Resources */, 4BB299E61B587D8400A49093 /* trap10 in Resources */, 4BB299651B587D8400A49093 /* insz in Resources */, + 4B049CDF1DA3C85B00322067 /* BCDTEST_beeb in Resources */, 4BB299161B587D8400A49093 /* bccr in Resources */, 4BB299211B587D8400A49093 /* bvsr in Resources */, 4BB2991F1B587D8400A49093 /* brkn in Resources */, @@ -2227,6 +2234,7 @@ 4B3BA0C31D318AEC005DD7A7 /* C1540Tests.swift in Sources */, 4B1414621B58888700E04248 /* KlausDormannTests.swift in Sources */, 4B1414601B58885000E04248 /* WolfgangLorenzTests.swift in Sources */, + 4B049CDD1DA3C82F00322067 /* BCDTest.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/OSBindings/Mac/Clock SignalTests/BCDTEST_beeb b/OSBindings/Mac/Clock SignalTests/BCDTEST_beeb new file mode 100755 index 0000000000000000000000000000000000000000..77ec9e2965f198808a2ef9d04c2ed336a7664334 GIT binary patch literal 999 zcmb7?O^DM#7>3ijEo&guqj;KYYN$m}memDg5^Xh`mL?VT(ul04(39Xj{h96m->xej z%R&ypOTBp2i$X!9dh)1;mbQl_7s1>5<)^h`F3w?QzW06ekZ)#8;=(A0}e9UsB^QhY?O$0awuO6R@wGdB%UMUa)GbQ`fe z=Mo2jO2s5_6*r6q9l=eQE!;gD!9Al2bsc64*U-}_ddwi=;y5?0jwjQ`_)G2F=QW;u z^Z$6Sqv(mli>&eBKPpCLOaV8|%Cf*yY;Qpg@G$DtjxFskS+116}c zw2)yX-ccJ%m18rR2Pi4osaX_!qq^6?rA-Z&zj+0QVjuSPz2=BKCVJsnK14^h zLbd1J&Edvq&^wdQZDAc!MGd!I#$=rVg~L#7$fS8p48yZIAkK$sKfA-=Jcso^*2Zkj z_)b{Cc^GV?^g*|h&=B;O-OY-ulFA@1A#iumEjB3%JV^=n)6T=#hVFH@rE72;N|qIE zskG|S45&s~Xwka013<|a0Peqt@=~;4n*(XnHyp@4UkJE<5Kmk|I&{#1JoJTt>j&|~ z6{JW9tn1JY=L-SX58{a~q;NoFo`x-tN5YzrRI6ZjNkB8C8srZ#C^oifQe0_cZ literal 0 HcmV?d00001 diff --git a/OSBindings/Mac/Clock SignalTests/BCDTest.swift b/OSBindings/Mac/Clock SignalTests/BCDTest.swift new file mode 100644 index 000000000..5a4945fad --- /dev/null +++ b/OSBindings/Mac/Clock SignalTests/BCDTest.swift @@ -0,0 +1,58 @@ +// +// BCDTest.swift +// Clock Signal +// +// Created by Thomas Harte on 04/10/2016. +// Copyright © 2016 Thomas Harte. All rights reserved. +// + +import Foundation +import XCTest + +class BCDTest: XCTestCase, CSTestMachineJamHandler { + + func testBCD() { + if let filename = Bundle(for: type(of: self)).path(forResource: "BCDTEST_beeb", ofType: nil) { + if let bcdTest = try? Data(contentsOf: URL(fileURLWithPath: filename)) { + let machine = CSTestMachine() + machine.jamHandler = self + + machine.setData(bcdTest, atAddress: 0x2900) + + // install a launchpad + machine.setValue(0x20, forAddress:0x200) // JSR 0x2900 + machine.setValue(0x00, forAddress:0x201) + machine.setValue(0x29, forAddress:0x202) + machine.setValue(0x4c, forAddress:0x203) // JMP 0x0203 + machine.setValue(0x03, forAddress:0x204) + machine.setValue(0x02, forAddress:0x205) + + machine.setValue(0x200, for: CSTestMachineRegister.programCounter) + + machine.setValue(CSTestMachineJamOpcode, forAddress:0xffee) // OSWRCH + machine.setValue(CSTestMachineJamOpcode, forAddress:0xffff) // end of test + + while(machine.value(for: .programCounter) != 0x203) { + machine.runForNumber(ofCycles: 1000) + } + XCTAssert(machine.value(forAddress:0x84) == 0, output) + } + } + } + + fileprivate var output: String = "" + func testMachine(_ machine: CSTestMachine!, didJamAtAddress address: UInt16) { + + switch address { + case 0xffee: + let character = machine.value(for: CSTestMachineRegister.A) + output.append(Character(UnicodeScalar(character)!)) + + machine.returnFromSubroutine() + + default: + let hexAddress = String(format:"%04x", address) + NSException(name: NSExceptionName(rawValue: "Failed Test"), reason: "Processor jammed unexpectedly at \(hexAddress)", userInfo: nil).raise() + } + } +} diff --git a/OSBindings/Mac/Clock SignalTests/WolfgangLorenzTests.swift b/OSBindings/Mac/Clock SignalTests/WolfgangLorenzTests.swift index e30dae422..c98236820 100644 --- a/OSBindings/Mac/Clock SignalTests/WolfgangLorenzTests.swift +++ b/OSBindings/Mac/Clock SignalTests/WolfgangLorenzTests.swift @@ -226,11 +226,11 @@ class WolfgangLorenzTests: XCTestCase, CSTestMachineJamHandler { ] as [UInt8]), count: 19) machine.setData( irqHandler, atAddress: 0xff48) - machine.setValue(CSTestMachineJamOpcode, forAddress:0xffd2); // print character - machine.setValue(CSTestMachineJamOpcode, forAddress:0xe16f); // load - machine.setValue(CSTestMachineJamOpcode, forAddress:0xffe4); // scan keyboard - machine.setValue(CSTestMachineJamOpcode, forAddress:0x8000); // exit - machine.setValue(CSTestMachineJamOpcode, forAddress:0xa474); // exit + machine.setValue(CSTestMachineJamOpcode, forAddress:0xffd2) // print character + machine.setValue(CSTestMachineJamOpcode, forAddress:0xe16f) // load + machine.setValue(CSTestMachineJamOpcode, forAddress:0xffe4) // scan keyboard + machine.setValue(CSTestMachineJamOpcode, forAddress:0x8000) // exit + machine.setValue(CSTestMachineJamOpcode, forAddress:0xa474) // exit machine.setValue(0x0801, for: CSTestMachineRegister.programCounter) machine.setValue(0xfd, for: CSTestMachineRegister.stackPointer)