- Proper Graphics - Text switching

- Suports graphics buffer (Page) changes
- Supports Mixed mode
This commit is contained in:
Tamas Rudnai 2020-02-22 16:37:54 -08:00
parent 16cc896c0c
commit 44968a5db3
37 changed files with 1529 additions and 179 deletions

View File

@ -20,6 +20,45 @@
325EB64F23FBBAD100C6B4A4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 325EB64D23FBBAD100C6B4A4 /* LaunchScreen.storyboard */; };
325EB65A23FBBAD100C6B4A4 /* A2iOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325EB65923FBBAD100C6B4A4 /* A2iOSTests.swift */; };
325EB66523FBBAD100C6B4A4 /* A2iOSUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325EB66423FBBAD100C6B4A4 /* A2iOSUITests.swift */; };
325EB67423FBC0AA00C6B4A4 /* RepeatingTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C45305232E3EEF0000EBA1 /* RepeatingTimer.swift */; };
325EB67523FBC43E00C6B4A4 /* 6502.c in Sources */ = {isa = PBXBuildFile; fileRef = 32439F7422ECD8AD0077AAE0 /* 6502.c */; };
325EB67623FBC44400C6B4A4 /* common.c in Sources */ = {isa = PBXBuildFile; fileRef = 325EB63823F9E48100C6B4A4 /* common.c */; };
325EB67723FBC45300C6B4A4 /* woz.c in Sources */ = {isa = PBXBuildFile; fileRef = 325EB62E23F8856F00C6B4A4 /* woz.c */; };
325EB67823FBC45300C6B4A4 /* disk.c in Sources */ = {isa = PBXBuildFile; fileRef = 325EB63523F8F78300C6B4A4 /* disk.c */; };
325EB67923FBC48400C6B4A4 /* spk_dn.wav in Resources */ = {isa = PBXBuildFile; fileRef = 3262F37423E169F8008BDB95 /* spk_dn.wav */; };
325EB67A23FBC48400C6B4A4 /* spk_up.wav in Resources */ = {isa = PBXBuildFile; fileRef = 3262F37523E169F8008BDB95 /* spk_up.wav */; };
325EB67C23FBD43800C6B4A4 /* PrintChar21.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 325EB67B23FBD43800C6B4A4 /* PrintChar21.ttf */; };
325EB67D23FBD43800C6B4A4 /* PrintChar21.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 325EB67B23FBD43800C6B4A4 /* PrintChar21.ttf */; };
325EB67E23FBDEE700C6B4A4 /* apple.rom in Resources */ = {isa = PBXBuildFile; fileRef = 32439F8422ECD8AD0077AAE0 /* apple.rom */; };
325EB68023FBDF8F00C6B4A4 /* Apple2Plus.rom in Resources */ = {isa = PBXBuildFile; fileRef = 325EB67F23FBDF8F00C6B4A4 /* Apple2Plus.rom */; };
325EB68123FBDF8F00C6B4A4 /* Apple2Plus.rom in Resources */ = {isa = PBXBuildFile; fileRef = 325EB67F23FBDF8F00C6B4A4 /* Apple2Plus.rom */; };
325EB68323FBDFBB00C6B4A4 /* DISK_II_C600.ROM in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68223FBDFBA00C6B4A4 /* DISK_II_C600.ROM */; };
325EB68423FBDFBB00C6B4A4 /* DISK_II_C600.ROM in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68223FBDFBA00C6B4A4 /* DISK_II_C600.ROM */; };
325EB68623FC707A00C6B4A4 /* Apple DOS 3.3 January 1983.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68523FC707A00C6B4A4 /* Apple DOS 3.3 January 1983.woz */; };
325EB68723FC707A00C6B4A4 /* Apple DOS 3.3 January 1983.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68523FC707A00C6B4A4 /* Apple DOS 3.3 January 1983.woz */; };
325EB68923FDDF6200C6B4A4 /* Hard Hat Mack - Disk 1, Side A.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68823FDDF6200C6B4A4 /* Hard Hat Mack - Disk 1, Side A.woz */; };
325EB68A23FDDF6200C6B4A4 /* Hard Hat Mack - Disk 1, Side A.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68823FDDF6200C6B4A4 /* Hard Hat Mack - Disk 1, Side A.woz */; };
325EB68C23FDDFD200C6B4A4 /* Merlin-8 v2.48 (DOS 3.3).woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68B23FDDFD200C6B4A4 /* Merlin-8 v2.48 (DOS 3.3).woz */; };
325EB68D23FDDFD200C6B4A4 /* Merlin-8 v2.48 (DOS 3.3).woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68B23FDDFD200C6B4A4 /* Merlin-8 v2.48 (DOS 3.3).woz */; };
325EB69023FE028800C6B4A4 /* Donkey Kong.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68F23FE028800C6B4A4 /* Donkey Kong.woz */; };
325EB69123FE028800C6B4A4 /* Donkey Kong.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB68F23FE028800C6B4A4 /* Donkey Kong.woz */; };
325EB69323FE6C6200C6B4A4 /* HiRes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DBF7632334657900DD50E7 /* HiRes.swift */; };
325EB69D2401118300C6B4A4 /* Lode Runner.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6942401118200C6B4A4 /* Lode Runner.woz */; };
325EB69E2401118300C6B4A4 /* Lode Runner.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6942401118200C6B4A4 /* Lode Runner.woz */; };
325EB69F2401118300C6B4A4 /* Crossfire.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6952401118200C6B4A4 /* Crossfire.woz */; };
325EB6A02401118300C6B4A4 /* Crossfire.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6952401118200C6B4A4 /* Crossfire.woz */; };
325EB6A12401118300C6B4A4 /* Wavy Navy.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6962401118200C6B4A4 /* Wavy Navy.woz */; };
325EB6A22401118300C6B4A4 /* Wavy Navy.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6962401118200C6B4A4 /* Wavy Navy.woz */; };
325EB6A32401118300C6B4A4 /* qbit.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6972401118200C6B4A4 /* qbit.woz */; };
325EB6A42401118300C6B4A4 /* qbit.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6972401118200C6B4A4 /* qbit.woz */; };
325EB6A52401118300C6B4A4 /* ProDOS_312.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6982401118200C6B4A4 /* ProDOS_312.woz */; };
325EB6A62401118300C6B4A4 /* ProDOS_312.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6982401118200C6B4A4 /* ProDOS_312.woz */; };
325EB6A72401118300C6B4A4 /* ProDOS_402_System.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6992401118200C6B4A4 /* ProDOS_402_System.woz */; };
325EB6A82401118300C6B4A4 /* ProDOS_402_System.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB6992401118200C6B4A4 /* ProDOS_402_System.woz */; };
325EB6A92401118300C6B4A4 /* Sneakers.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB69A2401118300C6B4A4 /* Sneakers.woz */; };
325EB6AA2401118300C6B4A4 /* Sneakers.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB69A2401118300C6B4A4 /* Sneakers.woz */; };
325EB6AB2401118300C6B4A4 /* Xonix.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB69B2401118300C6B4A4 /* Xonix.woz */; };
325EB6AC2401118300C6B4A4 /* Xonix.woz in Resources */ = {isa = PBXBuildFile; fileRef = 325EB69B2401118300C6B4A4 /* Xonix.woz */; };
3262F37623E169F8008BDB95 /* spk_dn.wav in Resources */ = {isa = PBXBuildFile; fileRef = 3262F37423E169F8008BDB95 /* spk_dn.wav */; };
3262F37723E169F8008BDB95 /* spk_up.wav in Resources */ = {isa = PBXBuildFile; fileRef = 3262F37523E169F8008BDB95 /* spk_up.wav */; };
326ED2EF232D7A0000A41337 /* 6502_functional_test.bin in Resources */ = {isa = PBXBuildFile; fileRef = 326ED2EE232D7A0000A41337 /* 6502_functional_test.bin */; };
@ -32,7 +71,6 @@
32C4530B2331F7220000EBA1 /* 6502.c in Sources */ = {isa = PBXBuildFile; fileRef = 32439F7422ECD8AD0077AAE0 /* 6502.c */; };
32C4530C2331F7220000EBA1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5C22EACC630003B53F /* ViewController.swift */; };
32C4530D2331F7220000EBA1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5A22EACC630003B53F /* AppDelegate.swift */; };
32C4530E2331F7220000EBA1 /* RepeatingTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C45305232E3EEF0000EBA1 /* RepeatingTimer.swift */; };
32C453112331F7220000EBA1 /* fail1.txt in Resources */ = {isa = PBXBuildFile; fileRef = 32EDB7A123272CA80073AF2D /* fail1.txt */; };
32C453122331F7220000EBA1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB5E22EACC660003B53F /* Assets.xcassets */; };
32C453132331F7220000EBA1 /* apple.rom in Resources */ = {isa = PBXBuildFile; fileRef = 32439F8422ECD8AD0077AAE0 /* apple.rom */; };
@ -40,7 +78,6 @@
32C4531D2331FED90000EBA1 /* 6502.c in Sources */ = {isa = PBXBuildFile; fileRef = 32439F7422ECD8AD0077AAE0 /* 6502.c */; };
32C4531E2331FED90000EBA1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5C22EACC630003B53F /* ViewController.swift */; };
32C4531F2331FED90000EBA1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5A22EACC630003B53F /* AppDelegate.swift */; };
32C453202331FED90000EBA1 /* RepeatingTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C45305232E3EEF0000EBA1 /* RepeatingTimer.swift */; };
32C453232331FED90000EBA1 /* fail1.txt in Resources */ = {isa = PBXBuildFile; fileRef = 32EDB7A123272CA80073AF2D /* fail1.txt */; };
32C453242331FED90000EBA1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB5E22EACC660003B53F /* Assets.xcassets */; };
32C453252331FED90000EBA1 /* apple.rom in Resources */ = {isa = PBXBuildFile; fileRef = 32439F8422ECD8AD0077AAE0 /* apple.rom */; };
@ -51,10 +88,6 @@
32C4533123335E560000EBA1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB6022EACC660003B53F /* Main.storyboard */; };
32C4533223335E570000EBA1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB6022EACC660003B53F /* Main.storyboard */; };
32C4533323335E570000EBA1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB6022EACC660003B53F /* Main.storyboard */; };
32DBF7642334657900DD50E7 /* HiRes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DBF7632334657900DD50E7 /* HiRes.swift */; };
32DBF7652334657900DD50E7 /* HiRes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DBF7632334657900DD50E7 /* HiRes.swift */; };
32DBF7662334657900DD50E7 /* HiRes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DBF7632334657900DD50E7 /* HiRes.swift */; };
32EDB7A223272CA80073AF2D /* fail1.txt in Resources */ = {isa = PBXBuildFile; fileRef = 32EDB7A123272CA80073AF2D /* fail1.txt */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -128,6 +161,22 @@
325EB66023FBBAD100C6B4A4 /* A2iOSUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = A2iOSUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
325EB66423FBBAD100C6B4A4 /* A2iOSUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = A2iOSUITests.swift; sourceTree = "<group>"; };
325EB66623FBBAD100C6B4A4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
325EB67323FBBF0C00C6B4A4 /* A2iOS-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "A2iOS-Bridging-Header.h"; sourceTree = "<group>"; };
325EB67B23FBD43800C6B4A4 /* PrintChar21.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = PrintChar21.ttf; sourceTree = "<group>"; };
325EB67F23FBDF8F00C6B4A4 /* Apple2Plus.rom */ = {isa = PBXFileReference; lastKnownFileType = file; path = Apple2Plus.rom; sourceTree = "<group>"; };
325EB68223FBDFBA00C6B4A4 /* DISK_II_C600.ROM */ = {isa = PBXFileReference; lastKnownFileType = file; path = DISK_II_C600.ROM; sourceTree = "<group>"; };
325EB68523FC707A00C6B4A4 /* Apple DOS 3.3 January 1983.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Apple DOS 3.3 January 1983.woz"; sourceTree = "<group>"; };
325EB68823FDDF6200C6B4A4 /* Hard Hat Mack - Disk 1, Side A.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Hard Hat Mack - Disk 1, Side A.woz"; sourceTree = "<group>"; };
325EB68B23FDDFD200C6B4A4 /* Merlin-8 v2.48 (DOS 3.3).woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Merlin-8 v2.48 (DOS 3.3).woz"; sourceTree = "<group>"; };
325EB68F23FE028800C6B4A4 /* Donkey Kong.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Donkey Kong.woz"; sourceTree = "<group>"; };
325EB6942401118200C6B4A4 /* Lode Runner.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Lode Runner.woz"; sourceTree = "<group>"; };
325EB6952401118200C6B4A4 /* Crossfire.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = Crossfire.woz; sourceTree = "<group>"; };
325EB6962401118200C6B4A4 /* Wavy Navy.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Wavy Navy.woz"; sourceTree = "<group>"; };
325EB6972401118200C6B4A4 /* qbit.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = qbit.woz; sourceTree = "<group>"; };
325EB6982401118200C6B4A4 /* ProDOS_312.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = ProDOS_312.woz; sourceTree = "<group>"; };
325EB6992401118200C6B4A4 /* ProDOS_402_System.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = ProDOS_402_System.woz; sourceTree = "<group>"; };
325EB69A2401118300C6B4A4 /* Sneakers.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = Sneakers.woz; sourceTree = "<group>"; };
325EB69B2401118300C6B4A4 /* Xonix.woz */ = {isa = PBXFileReference; lastKnownFileType = file; path = Xonix.woz; sourceTree = "<group>"; };
3262F37423E169F8008BDB95 /* spk_dn.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = spk_dn.wav; sourceTree = "<group>"; };
3262F37523E169F8008BDB95 /* spk_up.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = spk_up.wav; sourceTree = "<group>"; };
3264261023284F6F008B615F /* Apple2_mmio_8bit_ioaddr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Apple2_mmio_8bit_ioaddr.h; sourceTree = "<group>"; };
@ -274,6 +323,7 @@
325EB63723F9492200C6B4A4 /* util */ = {
isa = PBXGroup;
children = (
32C45305232E3EEF0000EBA1 /* RepeatingTimer.swift */,
32439F8622ECD8AD0077AAE0 /* common.h */,
325EB63823F9E48100C6B4A4 /* common.c */,
32DBF76723373FB400DD50E7 /* disassembler.h */,
@ -310,6 +360,7 @@
325EB64B23FBBAD100C6B4A4 /* Assets.xcassets */,
325EB64D23FBBAD100C6B4A4 /* LaunchScreen.storyboard */,
325EB65023FBBAD100C6B4A4 /* Info.plist */,
325EB67323FBBF0C00C6B4A4 /* A2iOS-Bridging-Header.h */,
);
path = A2iOS;
sourceTree = "<group>";
@ -337,6 +388,22 @@
children = (
3262F37423E169F8008BDB95 /* spk_dn.wav */,
3262F37523E169F8008BDB95 /* spk_up.wav */,
325EB67B23FBD43800C6B4A4 /* PrintChar21.ttf */,
32439F8422ECD8AD0077AAE0 /* apple.rom */,
325EB67F23FBDF8F00C6B4A4 /* Apple2Plus.rom */,
325EB68223FBDFBA00C6B4A4 /* DISK_II_C600.ROM */,
325EB68523FC707A00C6B4A4 /* Apple DOS 3.3 January 1983.woz */,
325EB68823FDDF6200C6B4A4 /* Hard Hat Mack - Disk 1, Side A.woz */,
325EB68B23FDDFD200C6B4A4 /* Merlin-8 v2.48 (DOS 3.3).woz */,
325EB6952401118200C6B4A4 /* Crossfire.woz */,
325EB6942401118200C6B4A4 /* Lode Runner.woz */,
325EB6982401118200C6B4A4 /* ProDOS_312.woz */,
325EB68F23FE028800C6B4A4 /* Donkey Kong.woz */,
325EB6992401118200C6B4A4 /* ProDOS_402_System.woz */,
325EB6972401118200C6B4A4 /* qbit.woz */,
325EB69A2401118300C6B4A4 /* Sneakers.woz */,
325EB6962401118200C6B4A4 /* Wavy Navy.woz */,
325EB69B2401118300C6B4A4 /* Xonix.woz */,
);
path = Resources;
sourceTree = "<group>";
@ -377,16 +444,14 @@
32BFFB5922EACC630003B53F /* A2Mac */ = {
isa = PBXGroup;
children = (
32439F8422ECD8AD0077AAE0 /* apple.rom */,
326ED2EE232D7A0000A41337 /* 6502_functional_test.bin */,
32B18438233FAB3900DBB4AB /* verticies.swift */,
32BFFB5A22EACC630003B53F /* AppDelegate.swift */,
32BFFB5C22EACC630003B53F /* ViewController.swift */,
32B18435233F10BC00DBB4AB /* Shaders.metal */,
32C4532D233345420000EBA1 /* MonitorView.swift */,
32DBF7632334657900DD50E7 /* HiRes.swift */,
32C453072331C0910000EBA1 /* NSLayoutManager-Extension.swift */,
32C45305232E3EEF0000EBA1 /* RepeatingTimer.swift */,
32DBF7632334657900DD50E7 /* HiRes.swift */,
32EDB7A123272CA80073AF2D /* fail1.txt */,
32BFFB5E22EACC660003B53F /* Assets.xcassets */,
32BFFB6022EACC660003B53F /* Main.storyboard */,
@ -623,9 +688,27 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
325EB6A22401118300C6B4A4 /* Wavy Navy.woz in Resources */,
325EB67E23FBDEE700C6B4A4 /* apple.rom in Resources */,
325EB64F23FBBAD100C6B4A4 /* LaunchScreen.storyboard in Resources */,
325EB68423FBDFBB00C6B4A4 /* DISK_II_C600.ROM in Resources */,
325EB69E2401118300C6B4A4 /* Lode Runner.woz in Resources */,
325EB68123FBDF8F00C6B4A4 /* Apple2Plus.rom in Resources */,
325EB6AA2401118300C6B4A4 /* Sneakers.woz in Resources */,
325EB6A82401118300C6B4A4 /* ProDOS_402_System.woz in Resources */,
325EB69123FE028800C6B4A4 /* Donkey Kong.woz in Resources */,
325EB68A23FDDF6200C6B4A4 /* Hard Hat Mack - Disk 1, Side A.woz in Resources */,
325EB6A02401118300C6B4A4 /* Crossfire.woz in Resources */,
325EB67923FBC48400C6B4A4 /* spk_dn.wav in Resources */,
325EB64C23FBBAD100C6B4A4 /* Assets.xcassets in Resources */,
325EB68D23FDDFD200C6B4A4 /* Merlin-8 v2.48 (DOS 3.3).woz in Resources */,
325EB6A62401118300C6B4A4 /* ProDOS_312.woz in Resources */,
325EB6AC2401118300C6B4A4 /* Xonix.woz in Resources */,
325EB67D23FBD43800C6B4A4 /* PrintChar21.ttf in Resources */,
325EB6A42401118300C6B4A4 /* qbit.woz in Resources */,
325EB68723FC707A00C6B4A4 /* Apple DOS 3.3 January 1983.woz in Resources */,
325EB64A23FBBACF00C6B4A4 /* Main.storyboard in Resources */,
325EB67A23FBC48400C6B4A4 /* spk_up.wav in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -647,10 +730,24 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
32EDB7A223272CA80073AF2D /* fail1.txt in Resources */,
325EB6A12401118300C6B4A4 /* Wavy Navy.woz in Resources */,
325EB68023FBDF8F00C6B4A4 /* Apple2Plus.rom in Resources */,
325EB68323FBDFBB00C6B4A4 /* DISK_II_C600.ROM in Resources */,
325EB67C23FBD43800C6B4A4 /* PrintChar21.ttf in Resources */,
325EB69D2401118300C6B4A4 /* Lode Runner.woz in Resources */,
3262F37723E169F8008BDB95 /* spk_up.wav in Resources */,
325EB6A92401118300C6B4A4 /* Sneakers.woz in Resources */,
325EB6A72401118300C6B4A4 /* ProDOS_402_System.woz in Resources */,
325EB69023FE028800C6B4A4 /* Donkey Kong.woz in Resources */,
325EB68923FDDF6200C6B4A4 /* Hard Hat Mack - Disk 1, Side A.woz in Resources */,
325EB69F2401118300C6B4A4 /* Crossfire.woz in Resources */,
32C4533123335E560000EBA1 /* Main.storyboard in Resources */,
32BFFB5F22EACC660003B53F /* Assets.xcassets in Resources */,
325EB68C23FDDFD200C6B4A4 /* Merlin-8 v2.48 (DOS 3.3).woz in Resources */,
325EB6A52401118300C6B4A4 /* ProDOS_312.woz in Resources */,
325EB6AB2401118300C6B4A4 /* Xonix.woz in Resources */,
325EB68623FC707A00C6B4A4 /* Apple DOS 3.3 January 1983.woz in Resources */,
325EB6A32401118300C6B4A4 /* qbit.woz in Resources */,
32439F8822ECD8AD0077AAE0 /* apple.rom in Resources */,
326ED2EF232D7A0000A41337 /* 6502_functional_test.bin in Resources */,
3262F37623E169F8008BDB95 /* spk_dn.wav in Resources */,
@ -702,9 +799,14 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
325EB67623FBC44400C6B4A4 /* common.c in Sources */,
325EB67523FBC43E00C6B4A4 /* 6502.c in Sources */,
325EB67823FBC45300C6B4A4 /* disk.c in Sources */,
325EB64723FBBACF00C6B4A4 /* ViewController.swift in Sources */,
325EB64323FBBACF00C6B4A4 /* AppDelegate.swift in Sources */,
325EB67723FBC45300C6B4A4 /* woz.c in Sources */,
325EB64523FBBACF00C6B4A4 /* SceneDelegate.swift in Sources */,
325EB67423FBC0AA00C6B4A4 /* RepeatingTimer.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -729,10 +831,10 @@
buildActionMask = 2147483647;
files = (
32439F8722ECD8AD0077AAE0 /* 6502.c in Sources */,
32DBF7642334657900DD50E7 /* HiRes.swift in Sources */,
325EB63623F8F78300C6B4A4 /* disk.c in Sources */,
325EB63923F9E48100C6B4A4 /* common.c in Sources */,
32BFFB5D22EACC630003B53F /* ViewController.swift in Sources */,
325EB69323FE6C6200C6B4A4 /* HiRes.swift in Sources */,
32C4532E233345430000EBA1 /* MonitorView.swift in Sources */,
325EB62F23F8856F00C6B4A4 /* woz.c in Sources */,
32BFFB5B22EACC630003B53F /* AppDelegate.swift in Sources */,
@ -761,11 +863,9 @@
buildActionMask = 2147483647;
files = (
32C4530B2331F7220000EBA1 /* 6502.c in Sources */,
32DBF7652334657900DD50E7 /* HiRes.swift in Sources */,
32C4530C2331F7220000EBA1 /* ViewController.swift in Sources */,
32C4532F233345820000EBA1 /* MonitorView.swift in Sources */,
32C4530D2331F7220000EBA1 /* AppDelegate.swift in Sources */,
32C4530E2331F7220000EBA1 /* RepeatingTimer.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -774,11 +874,9 @@
buildActionMask = 2147483647;
files = (
32C4531D2331FED90000EBA1 /* 6502.c in Sources */,
32DBF7662334657900DD50E7 /* HiRes.swift in Sources */,
32C4531E2331FED90000EBA1 /* ViewController.swift in Sources */,
32C45330233345820000EBA1 /* MonitorView.swift in Sources */,
32C4531F2331FED90000EBA1 /* AppDelegate.swift in Sources */,
32C453202331FED90000EBA1 /* RepeatingTimer.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -847,9 +945,11 @@
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_SWIFT_FLAGS = "-DHIRES -DHIRESDRAW -D_NO_HIRESLOW";
PRODUCT_BUNDLE_IDENTIFIER = com.gamealloy.A2iOS;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_OBJC_BRIDGING_HEADER = "A2iOS/A2iOS-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
@ -867,9 +967,11 @@
"$(inherited)",
"@executable_path/Frameworks",
);
OTHER_SWIFT_FLAGS = "-DHIRES -DHIRESDRAW -D_NO_HIRESLOW";
PRODUCT_BUNDLE_IDENTIFIER = com.gamealloy.A2iOS;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = iphoneos;
SWIFT_OBJC_BRIDGING_HEADER = "A2iOS/A2iOS-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
@ -1106,8 +1208,9 @@
OTHER_CFLAGS = (
"-DDISASSEMBLER",
"-DINTERRUPT_CHECK_PER_STEP",
"-DCLK_ABSOLUTE_PRECISE",
);
OTHER_SWIFT_FLAGS = "-D_NO_HIRES -DHIRESDRAW -D_NO_HIRESLOW";
OTHER_SWIFT_FLAGS = "-DHIRES -DHIRESDRAW -D_NO_HIRESLOW";
PRODUCT_BUNDLE_IDENTIFIER = com.gamealloy.A2Mac;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
@ -1141,8 +1244,9 @@
OTHER_CFLAGS = (
"-DDISASSEMBLER",
"-DINTERRUPT_CHECK_PER_STEP",
"-DCLK_ABSOLUTE_PRECISE",
);
OTHER_SWIFT_FLAGS = "-D_NO_HIRES -DHIRESDRAW -D_NO_HIRESLOW";
OTHER_SWIFT_FLAGS = "-DHIRES -DHIRESDRAW -D_NO_HIRESLOW";
PRODUCT_BUNDLE_IDENTIFIER = com.gamealloy.A2Mac;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "A2Mac/A2Mac-Bridging-Header.h";

View File

@ -32,6 +32,21 @@
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>325EB63F23FBBACF00C6B4A4</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>325EB65423FBBAD100C6B4A4</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>325EB65F23FBBAD100C6B4A4</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>32BFFB5622EACC630003B53F</key>
<dict>
<key>primary</key>

View File

@ -1,5 +1,19 @@
//
// A2Mac-Bridging-Header.h
// A2Mac
//
// Created by Tamas Rudnai on 2/17/20.
// Copyright © 2020 GameAlloy. All rights reserved.
//
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#ifndef A2Mac_Bridging_Header_h
#define A2Mac_Bridging_Header_h
#import "6502.h"
#endif /* A2Mac_Bridging_Header_h */

View File

@ -756,6 +756,9 @@
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="LlM-EV-ruZ" customClass="HiRes" customModule="A2Mac" customModuleProvider="target">
<rect key="frame" x="16" y="8" width="568" height="384"/>
</customView>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mfd-12-bcR">
<rect key="frame" x="594" y="362" width="82" height="32"/>
<constraints>
@ -782,24 +785,20 @@
</connections>
</buttonCell>
</button>
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="LlM-EV-ruZ" customClass="HiRes" customModule="A2Mac" customModuleProvider="target">
<rect key="frame" x="16" y="8" width="568" height="384"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</customView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Fb7-Jc-jmt">
<rect key="frame" x="598" y="186" width="74" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="xCE-LE-hVy"/>
</constraints>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="left" title="CPU Speed" id="b3T-0k-ama">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" fixedFrame="YES" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lVP-FP-u6x">
<rect key="frame" x="600" y="44" width="52" height="136"/>
<rect key="frame" x="600" y="19" width="70" height="161"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Fb7-Jc-jmt">
<rect key="frame" x="-2" y="144" width="74" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="xCE-LE-hVy"/>
</constraints>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="left" title="CPU Speed" id="b3T-0k-ama">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7Pw-e8-92m">
<rect key="frame" x="-1" y="119" width="55" height="18"/>
<buttonCell key="cell" type="radio" title="1.023" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="AgQ-Np-TYQ">
@ -868,6 +867,7 @@
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
@ -876,6 +876,7 @@
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FZk-VW-alq">
@ -896,14 +897,18 @@
<constraint firstAttribute="trailing" secondItem="rR3-9T-NFu" secondAttribute="trailing" constant="10" id="68s-0C-BVZ"/>
<constraint firstAttribute="bottom" secondItem="FZk-VW-alq" secondAttribute="bottom" constant="20" id="E2f-MY-c2Y"/>
<constraint firstItem="iIF-Q5-Onc" firstAttribute="leading" secondItem="m2S-Jp-Qdl" secondAttribute="leading" id="LGA-tZ-gFh"/>
<constraint firstItem="LlM-EV-ruZ" firstAttribute="leading" secondItem="iIF-Q5-Onc" secondAttribute="leading" constant="16" id="Lak-zX-Szi"/>
<constraint firstItem="rR3-9T-NFu" firstAttribute="leading" secondItem="iIF-Q5-Onc" secondAttribute="trailing" constant="8" id="ON4-IE-HmP"/>
<constraint firstAttribute="trailing" secondItem="FZk-VW-alq" secondAttribute="trailing" constant="10" id="Q0s-uC-GPT"/>
<constraint firstItem="SEL-hl-0c0" firstAttribute="bottom" secondItem="iIF-Q5-Onc" secondAttribute="bottom" constant="-8" id="Q2B-a3-gBp"/>
<constraint firstItem="SEL-hl-0c0" firstAttribute="leading" secondItem="iIF-Q5-Onc" secondAttribute="leading" constant="16" id="QGx-a9-RR9"/>
<constraint firstItem="LlM-EV-ruZ" firstAttribute="bottom" secondItem="iIF-Q5-Onc" secondAttribute="bottom" constant="-8" id="Vfh-f8-sRz"/>
<constraint firstItem="SEL-hl-0c0" firstAttribute="top" secondItem="iIF-Q5-Onc" secondAttribute="top" constant="8" id="aWz-Ad-PIM"/>
<constraint firstAttribute="bottom" secondItem="iIF-Q5-Onc" secondAttribute="bottom" id="acb-Dy-fu5"/>
<constraint firstItem="SEL-hl-0c0" firstAttribute="trailing" secondItem="iIF-Q5-Onc" secondAttribute="trailing" constant="-8" id="cmY-Vb-ckJ"/>
<constraint firstItem="iIF-Q5-Onc" firstAttribute="top" secondItem="m2S-Jp-Qdl" secondAttribute="top" id="m3e-ww-N7S"/>
<constraint firstItem="LlM-EV-ruZ" firstAttribute="top" secondItem="iIF-Q5-Onc" secondAttribute="top" constant="8" id="mJ3-xG-dB3"/>
<constraint firstItem="LlM-EV-ruZ" firstAttribute="trailing" secondItem="iIF-Q5-Onc" secondAttribute="trailing" constant="-8" id="nCM-Ge-DZf"/>
<constraint firstItem="rR3-9T-NFu" firstAttribute="top" secondItem="mfd-12-bcR" secondAttribute="bottom" constant="10" id="ycb-iY-X4I"/>
<constraint firstItem="mfd-12-bcR" firstAttribute="top" secondItem="m2S-Jp-Qdl" secondAttribute="top" constant="10" id="zDl-Cs-xmz"/>
</constraints>

View File

@ -18,12 +18,17 @@ class HiRes: NSView {
static let PixelWidth = 280
static let PixelMixedHeight = 160
static let PixelHeight = 192
static let MixedTextHeight = 4
static let MixedHeight = 160
static let blockRows = 24
static let blockCols = 40
static let blockWidth = PixelWidth / blockCols
static let blockHeight = PixelHeight / blockRows
let HiResBufferPointer = UnsafeRawBufferPointer(start: RAM + Page1Addr, count: PageSize * 2)
let HiResBuffer1 = UnsafeRawBufferPointer(start: RAM + Page1Addr, count: PageSize * 2)
let HiResBuffer2 = UnsafeRawBufferPointer(start: RAM + Page2Addr, count: PageSize * 2)
var HiResBufferPointer = UnsafeRawBufferPointer(start: RAM + Page1Addr, count: PageSize * 2)
let HiResRawPointer = UnsafeRawPointer(RAM + Page1Addr)
#if METAL_YES
@ -179,6 +184,7 @@ class HiRes: NSView {
func render() {
guard let drawable = metalLayer?.nextDrawable() else { return }
let renderPassDescriptor = MTLRenderPassDescriptor()
renderPassDescriptor.colorAttachments[0].texture = drawable.texture
@ -459,48 +465,168 @@ class HiRes: NSView {
let boundingBox = CGRect(x: 0, y: 0, width: CGFloat(HiRes.PixelWidth), height: CGFloat(HiRes.PixelHeight))
currentContext!.draw (image, in: boundingBox)
}
#elseif HIRESDRAW
#elseif HIRESDRAWCOLOR
let colorPalette : [NSColor] = [
NSColor(calibratedRed: 0.0000, green: 0.000, blue: 0.000, alpha: 0.0), // black
NSColor(calibratedRed: 0.0314, green: 0.635, blue: 0.071, alpha: 1.0), // green
NSColor(calibratedRed: 0.0314, green: 0.635, blue: 0.071, alpha: 1.0), // purple
NSColor(calibratedRed: 1.0000, green: 1.000, blue: 1.000, alpha: 1.0), // white
NSColor(calibratedRed: 0.0000, green: 0.000, blue: 0.000, alpha: 0.0), // black
NSColor(calibratedRed: 0.0314, green: 0.635, blue: 0.071, alpha: 1.0), // orange
NSColor(calibratedRed: 0.0314, green: 0.635, blue: 0.071, alpha: 1.0), // blue
NSColor(calibratedRed: 1.0000, green: 1.000, blue: 1.000, alpha: 1.0), // white
]
let path = NSBezierPath()
override func draw(_ rect: CGRect) {
// NSColor.green.setFill()
NSColor(calibratedRed: 0.0314, green: 0.635, blue: 0.071, alpha: 0.5).setStroke()
NSColor(calibratedRed: 0.0314, green: 0.635, blue: 0.071, alpha: 1.0).setStroke()
let path = NSBezierPath()
path.lineWidth=1
path.removeAllPoints()
path.lineWidth = 0.7
path.move(to: NSPoint(x: 0, y: 0))
// path.appendRect(NSRect(x: 0, y: 0, width: 10, height: 10))
for y in 0 ..< HiRes.PixelHeight {
var color : UInt = 0
var lastColor : UInt = 0
path.move(to: NSPoint(x: 0, y: y))
// for color screen we need to process blocks in a pair
for blockX in 0 ..< HiRes.blockCols / 2 {
let lineAddr = HiResLineAddrTbl[y]
var x = blockX * HiRes.blockWidth * 2
var block0 = UInt(HiResBufferPointer[ Int(lineAddr + blockX * 2) + 0 ])
var block1 = UInt(HiResBufferPointer[ Int(lineAddr + blockX * 2) + 1 ])
let b70 : UInt = (block0 & 0x80) >> 5
let b71 : UInt = (block1 & 0x80) >> 5
var block7 : [UInt] = [0,0,0,0,0,0,0]
var i = 0
for _ in 0 ... 2 {
block7[i] = b70
block7[i] |= block0 & 3
block0 >>= 2
i += 1
}
block7[i] = b70
block7[i] |= ((block0 & 1) << 1) | (block1 & 1)
block1 >>= 1
i += 1
for _ in 0 ... 2 {
block7[i] = b71
block7[i] |= block1 & 3
block1 >>= 2
i += 1
}
for px in 0 ... 6 { // stride(from: 0, through: 6, by: 1) {
color = block7[px]
if (color != lastColor) {
colorPalette[Int(color)].setStroke()
path.line(to: NSPoint(x: x, y: y))
path.stroke()
path.removeAllPoints()
lastColor = color
}
x += 1
}
} // x
// make sure we close the path at the end of the horizontal line
if (color != lastColor) {
path.line(to: NSPoint(x: 279, y: y))
lastColor = color
}
}
// path.fill()
path.stroke()
}
#elseif HIRESDRAW
let path = NSBezierPath()
override func draw(_ rect: CGRect) {
// self.hidden = videoMode.text == 1
// NSColor.green.setFill()
NSColor(calibratedRed: 0.0314, green: 0.635, blue: 0.071, alpha: 1.0).setStroke()
path.removeAllPoints()
path.lineWidth=0.7
path.move(to: NSPoint(x: 0, y: 0))
// path.appendRect(NSRect(x: 0, y: 0, width: 10, height: 10))
var height = HiRes.PixelHeight
// do not even render it...
if videoMode.text == 1 {
return
}
else {
if videoMode.mixed == 1 {
height = HiRes.MixedHeight
}
if videoMode.page == 1 {
HiResBufferPointer = HiResBuffer2
}
else {
HiResBufferPointer = HiResBuffer1
}
}
for y in 0 ..< height {
var inX = false
path.move(to: NSPoint(x: 0, y: y))
for blockX in 0 ..< HiRes.blockCols {
let lineAddr = HiResLineAddrTbl[y]
let block = Int(HiResBufferPointer[ Int(lineAddr + blockX) ])
let block = UInt(HiResBufferPointer[ Int(lineAddr + blockX) ])
// if( shadowScreen[ screenIdx ] != block ) {
// shadowScreen[ screenIdx ] = block
//
var x = blockX * HiRes.blockWidth
for bit in stride(from: 0, through: 6, by: 1) {
let bitMask = 1 << bit
if (block & bitMask) == 0 {
if inX {
inX = false
path.line(to: NSPoint(x: x, y: 192-y))
if block != 0 && block != 0x80 {
for bit in 0 ... 6 { // stride(from: 0, through: 6, by: 1) {
let bitMask : UInt = 1 << bit
if (block & bitMask) == 0 {
if inX {
inX = false
path.line(to: NSPoint(x: x, y: 192-y))
}
}
}
else { // 28CD41
if ( inX == false ) {
inX = true
path.move(to: NSPoint(x: x, y: 192-y))
else { // 28CD41
if ( inX == false ) {
inX = true
path.move(to: NSPoint(x: x, y: 192-y))
}
}
x += 1
}
}
else {
// make sure we close the path if the next block is completely zero
if inX {
inX = false
path.line(to: NSPoint(x: x, y: 192-y))
}
x += 1
}
} // x
// make sure we close the path at the end of the horizontal line
if inX {
inX = false
path.line(to: NSPoint(x: 279, y: 192-y))

View File

@ -9,7 +9,46 @@
import Cocoa
class MonitorView: NSView {
override func performKeyEquivalent(with event: NSEvent) -> Bool {
return true
}
// override func performKeyEquivalent(with event: NSEvent) -> Bool {
// return true
// }
// override func keyDown(with event: NSEvent) {
// print("MV KBD Event")
// // switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
// // case [.command] where event.characters == "l",
// // [.command, .shift] where event.characters == "l":
// // print("command-l or command-shift-l")
// // default:
// // break
// // }
// // print( "key = " + (event.charactersIgnoringModifiers ?? ""))
// // print( "\ncharacter = " + (event.characters ?? ""))
//
// #if FUNCTIONTEST
// #else
// let keyCode = UInt32(event.keyCode)
// switch keyCode {
// case eLeftArrowKey:
// kbdInput(0x08)
// case eRightArrowKey:
// kbdInput(0x15)
// case eLeftArrowKey:
// kbdInput(0x0B)
// case eRightArrowKey:
// kbdInput(0x0A)
// default:
// // print("keycode: %d", keyCode)
// if let chars = event.characters {
// let char = chars.uppercased()[chars.startIndex]
// if let ascii = char.asciiValue {
// kbdInput(ascii)
// }
// }
// }
// #endif
//
// }
}

View File

@ -112,7 +112,7 @@ class ViewController: NSViewController {
DispatchQueue.global().async(execute: workItem!);
}
#else
m6502_ColdReset()
m6502_ColdReset( Bundle.main.resourcePath )
#endif
}
@ -130,14 +130,61 @@ class ViewController: NSViewController {
}
static let textBaseAddr = 0x400
static let textBufferSize = 0x400
let textLines = 24
let textCols = 40
let lineEndChars = 1
var frameCnt = 0
// let spaceChar : Character = "\u{E17F}"
// let blockChar : Character = "\u{E07F}"
let spaceChar : Character = " "
let blockChar : Character = ""
var flashingSpace : Character = " "
let ramBufferPointer = UnsafeRawBufferPointer(start: RAM, count: 64 * 1024)
let textBufferPointer = UnsafeRawBufferPointer(start: RAM + textBaseAddr, count: textBufferSize)
var txtClear = [Character](repeating: " ", count: textBufferSize)
var txtArr = [Character](repeating: " ", count: textBufferSize)
var s = String()
func HexDump() {
var txt : String = ""
for y in 0...textLines - 1 {
txt += String(format: "%04X: ", y * 16)
for x in 0...15 {
let byte = ramBufferPointer[ y * 16 + x ]
let chr = String(format: "%02X ", byte)
txt += chr
}
txt += "\n"
}
DispatchQueue.main.async {
self.display.stringValue = txt
self.speedometer.stringValue = String(format: "%0.3lf MHz", mhz);
}
}
// AppleScript Keycodes
let leftArrowKey = 123
let rightArrowKey = 124
let upArrowKey = 126
let downArrowKey = 125
var ddd = 9;
override func keyDown(with event: NSEvent) {
// print("KBD Event")
print("KBD Event")
for i in 0...65536 {
ddd = Int(event.keyCode) + i
}
ddd = ddd * 2
// switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
// case [.command] where event.characters == "l",
// [.command, .shift] where event.characters == "l":
@ -154,12 +201,20 @@ class ViewController: NSViewController {
switch keyCode {
case leftArrowKey:
kbdInput(0x08)
setIO(0xC064, 0);
print("LEFT", ddd);
case rightArrowKey:
kbdInput(0x15)
case leftArrowKey:
setIO(0xC064, 255);
print("RIGHT")
case downArrowKey:
kbdInput(0x0B)
case rightArrowKey:
setIO(0xC065, 255);
print("DOWN")
case upArrowKey:
kbdInput(0x0A)
setIO(0xC065, 0);
print("UP")
default:
// print("keycode: %d", keyCode)
if let chars = event.characters {
@ -173,6 +228,51 @@ class ViewController: NSViewController {
}
override func keyUp(with event: NSEvent) {
print("KBD Event")
// switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
// case [.command] where event.characters == "l",
// [.command, .shift] where event.characters == "l":
// print("command-l or command-shift-l")
// default:
// break
// }
// print( "key = " + (event.charactersIgnoringModifiers ?? ""))
// print( "\ncharacter = " + (event.characters ?? ""))
#if FUNCTIONTEST
#else
let keyCode = Int(event.keyCode)
switch keyCode {
case leftArrowKey:
// kbdInput(0x08)
setIO(0xC064, 127);
print("left")
case rightArrowKey:
// kbdInput(0x15)
setIO(0xC064, 128);
print("right")
case downArrowKey:
// kbdInput(0x0B)
setIO(0xC065, 127);
print("down")
case upArrowKey:
// kbdInput(0x0A)
setIO(0xC065, 128);
print("up")
default:
// print("keycode: %d", keyCode)
// if let chars = event.characters {
// let char = chars.uppercased()[chars.startIndex]
// if let ascii = char.asciiValue {
// kbdInput(ascii)
// }
// }
break
}
#endif
}
// override func flagsChanged(with event: NSEvent) {
// switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
// case [.shift]:
@ -210,43 +310,7 @@ class ViewController: NSViewController {
// }
// }
static let textBaseAddr = 0x400
static let textBufferSize = 0x400
let textLines = 24
let textCols = 40
let lineEndChars = 1
var frameCnt = 0
// let spaceChar : Character = "\u{E17F}"
// let blockChar : Character = "\u{E07F}"
let spaceChar : Character = " "
let blockChar : Character = ""
var flashingSpace : Character = " "
let ramBufferPointer = UnsafeRawBufferPointer(start: RAM, count: 64 * 1024)
let textBufferPointer = UnsafeRawBufferPointer(start: RAM + textBaseAddr, count: textBufferSize)
var txtArr = [Character](repeating: " ", count: textBufferSize)
var s = String()
func HexDump() {
var txt : String = ""
for y in 0...textLines - 1 {
txt += String(format: "%04X: ", y * 16)
for x in 0...15 {
let byte = ramBufferPointer[ y * 16 + x ]
let chr = String(format: "%02X ", byte)
txt += chr
}
txt += "\n"
}
DispatchQueue.main.async {
self.display.stringValue = txt
self.speedometer.stringValue = String(format: "%0.3lf MHz", mhz);
}
}
var was = 0;
@ -277,42 +341,36 @@ class ViewController: NSViewController {
var txt : String = ""
for y in 0...textLines-1 {
// let textAddr = textBaseAddr + textLineOfs[y]
// let linePointer = UnsafeMutableRawPointer( mutating: &RAM + textBaseAddr + y * textCols ) //( start: &RAM + 0x400, count: 0x400)
// let lineStr = String(bytesNoCopy: linePointer, length: textCols, encoding: .ascii, freeWhenDone: false)!
// txt += lineStr + "\n"
var fromLines = 0
var toLines = textLines
for x in 0...textCols-1 {
if videoMode.text == 0 {
if videoMode.mixed == 1 {
fromLines = toLines - 4
}
else {
toLines = 0
}
}
txtArr = txtClear
for y in fromLines ..< toLines {
for x in 0 ..< textCols {
let byte = textBufferPointer[ textLineOfs[y] + x ]
let idx = Int(byte);
let chr = ViewController.charConvTbl[idx]
// is it a cursor? (slashing space)
// if ( chr == "blockChar" ) {
// chr = flashingSpace
// }
// print("byte \(index): \(chr)")
// txt = txt + "\(chr)"
txtArr[ y * (textCols + lineEndChars) + x ] = chr
}
// for (_, byte) in textBufferPointer.enumerated() {
// let idx = Int(byte);
// var chr = ViewController.charConvTbl[idx]
// // is it a cursor? (slashing space)
// if ( chr == blockChar ) {
// chr = flashingSpace
// }
// // print("byte \(index): \(chr)")
// txt = txt + "\(chr)"
// }
// txt = txt + "\n"
txtArr[ y * (textCols + lineEndChars) + textCols ] = "\n"
}
// txtArr[ textLines * (textCols+1) + textCols ] = "\0"
txt = String(txtArr)
DispatchQueue.main.async {
@ -362,6 +420,10 @@ class ViewController: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
for y in 0 ... textLines - 1 {
txtClear[ y * (textCols + lineEndChars) + textCols ] = "\n"
}
let spk_up_path = Bundle.main.path(forResource: "spk_up", ofType:"wav")!
let spk_up_url = URL(fileURLWithPath: spk_up_path)

View File

@ -0,0 +1,20 @@
//
// A2iOS-Bridging-Header.h
// A2Mac
//
// Created by Tamas Rudnai on 2/17/20.
// Copyright © 2020 GameAlloy. All rights reserved.
//
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#ifndef A2iOS_Bridging_Header_h
#define A2iOS_Bridging_Header_h
#import "6502.h"
#import "disk.h"
#endif /* A2iOS_Bridging_Header_h */

View File

@ -1,24 +1,359 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15705" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15706"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<customFonts key="customFonts">
<array key="PrintChar21.ttf">
<string>PrintChar21</string>
</array>
</customFonts>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="A2iOS" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="UDx-40-ORS" userLabel="Background View">
<rect key="frame" x="0.0" y="44" width="414" height="294"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" textAlignment="natural" adjustsFontForContentSizeCategory="YES" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="nMe-JQ-ldk" userLabel="Display View">
<rect key="frame" x="8" y="8" width="398" height="278"/>
<string key="text">1234567890123456789012345678901234567890
@@@@@@@@@1@@@@@@@@@2@@@@@@@@@3@@@@@@@@@4
@@@@@@@@@@@@@@@@@@@3@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@4@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@5@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@6@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@7@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@8@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@9@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@10@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@11@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@12@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@13@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@14@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@15@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@16@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@17@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@18@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@19@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@20@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@21@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@22@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@23@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@24@@@@@@@@@@@@@@@@@@@@</string>
<color key="textColor" systemColor="systemGreenColor" red="0.20392156859999999" green="0.78039215689999997" blue="0.34901960780000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<fontDescription key="fontDescription" name="PrintChar21" family="Print Char 21" pointSize="11"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
<view alpha="0.5" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Vi7-A0-0Jo" userLabel="HiRes" customClass="HiRes" customModule="A2iOS" customModuleProvider="target">
<rect key="frame" x="8" y="8" width="568" height="384"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstAttribute="width" constant="568" id="Zt7-jR-A9l"/>
<constraint firstAttribute="height" constant="384" id="yhH-Mi-66m"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="Vi7-A0-0Jo" firstAttribute="leading" secondItem="nMe-JQ-ldk" secondAttribute="leading" id="4nE-P5-f7w"/>
<constraint firstItem="Vi7-A0-0Jo" firstAttribute="top" secondItem="nMe-JQ-ldk" secondAttribute="top" id="6Lq-A0-E1c"/>
<constraint firstAttribute="bottom" secondItem="nMe-JQ-ldk" secondAttribute="bottom" constant="8" id="DPv-PT-d2d"/>
<constraint firstAttribute="trailing" secondItem="nMe-JQ-ldk" secondAttribute="trailing" constant="8" id="GEu-gM-CNF"/>
<constraint firstAttribute="width" secondItem="UDx-40-ORS" secondAttribute="height" multiplier="69:49" id="RZg-ls-eky"/>
<constraint firstItem="nMe-JQ-ldk" firstAttribute="leading" secondItem="UDx-40-ORS" secondAttribute="leading" constant="8" id="t9T-Pg-eMl"/>
</constraints>
</view>
<navigationBar contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NfH-Md-IFn">
<rect key="frame" x="0.0" y="0.0" width="414" height="44"/>
<constraints>
<constraint firstAttribute="height" constant="44" id="wqp-NV-x0V"/>
</constraints>
<color key="barTintColor" cocoaTouchSystemColor="viewFlipsideBackgroundColor"/>
<textAttributes key="titleTextAttributes">
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</textAttributes>
<items>
<navigationItem title="A2iOS" id="vFD-A6-f26">
<barButtonItem key="leftBarButtonItem" title="Power" id="wzl-9p-KCO">
<connections>
<action selector="Power:" destination="BYZ-38-t0r" id="9BP-2y-d77"/>
</connections>
</barButtonItem>
<barButtonItem key="rightBarButtonItem" title="Reset" id="icP-Ci-Ygt">
<color key="tintColor" red="1" green="0.36774935790000002" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<connections>
<action selector="Reset:" destination="BYZ-38-t0r" id="xXh-Mp-ybp"/>
</connections>
</barButtonItem>
</navigationItem>
</items>
</navigationBar>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q9J-69-63J">
<rect key="frame" x="274" y="346" width="120" height="26"/>
<constraints>
<constraint firstAttribute="width" constant="120" id="Nub-YK-2HW"/>
<constraint firstAttribute="height" constant="26" id="f39-gy-BwM"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LWV-xR-zzl">
<rect key="frame" x="327" y="380" width="67" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="67" id="WHb-SE-Gkk"/>
<constraint firstAttribute="height" constant="30" id="qDC-k4-fB7"/>
</constraints>
<state key="normal" title="1.023">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="speedSelected:" destination="BYZ-38-t0r" eventType="touchUpInside" id="MTU-in-qfq"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rYe-dy-hot">
<rect key="frame" x="327" y="418" width="67" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="67" id="Mkd-qV-Kj1"/>
<constraint firstAttribute="height" constant="30" id="oKy-qh-d9O"/>
</constraints>
<state key="normal" title="4">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="speedSelected:" destination="BYZ-38-t0r" eventType="touchUpInside" id="ple-Iy-dbb"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="f9G-OM-FNm">
<rect key="frame" x="327" y="456" width="67" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="67" id="8Y3-Vw-dfz"/>
<constraint firstAttribute="height" constant="30" id="iTY-HK-wl7"/>
</constraints>
<state key="normal" title="10">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="speedSelected:" destination="BYZ-38-t0r" eventType="touchUpInside" id="qZz-rf-0Lj"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="TLZ-33-q0M">
<rect key="frame" x="327" y="494" width="67" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="8pg-Fn-9at"/>
<constraint firstAttribute="width" constant="67" id="9SL-QA-6sZ"/>
</constraints>
<state key="normal" title="100">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="speedSelected:" destination="BYZ-38-t0r" eventType="touchUpInside" id="y7q-kK-3h3"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qNn-GH-aIG">
<rect key="frame" x="327" y="532" width="67" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="67" id="mSD-q3-vE4"/>
<constraint firstAttribute="height" constant="30" id="rXv-K3-Vr2"/>
</constraints>
<state key="normal" title="666">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="speedSelected:" destination="BYZ-38-t0r" eventType="touchUpInside" id="ILu-FW-q5i"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="InU-ap-ckM">
<rect key="frame" x="8" y="346" width="67" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="ATG-c1-PNL"/>
<constraint firstAttribute="width" constant="67" id="hoo-za-ij5"/>
</constraints>
<state key="normal" title="CATALOG">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="Command:" destination="BYZ-38-t0r" eventType="touchUpInside" id="vew-QM-cMf"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lGY-TL-dYl">
<rect key="frame" x="8" y="384" width="67" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="67" id="TJ7-tO-TV6"/>
<constraint firstAttribute="height" constant="30" id="rNb-jZ-CLx"/>
</constraints>
<state key="normal" title="LIST">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="Command:" destination="BYZ-38-t0r" eventType="touchUpInside" id="y6a-4h-noZ"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lBw-C9-kAw">
<rect key="frame" x="8" y="422" width="67" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="67" id="C5g-6H-QPQ"/>
<constraint firstAttribute="height" constant="30" id="Xsx-5I-uow"/>
</constraints>
<state key="normal" title="NEW">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="Command:" destination="BYZ-38-t0r" eventType="touchUpInside" id="aMt-1f-TfX"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xbl-kL-cRQ">
<rect key="frame" x="8" y="460" width="280" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="280" id="4g2-2b-aRp"/>
<constraint firstAttribute="height" constant="30" id="gGm-Qo-Gvf"/>
</constraints>
<state key="normal" title="LOAD RENUMBER">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="Command:" destination="BYZ-38-t0r" eventType="touchUpInside" id="pC3-Ii-hiD"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Wuq-OJ-QCj">
<rect key="frame" x="8" y="498" width="280" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="280" id="RyG-XC-bdy"/>
<constraint firstAttribute="height" constant="30" id="yiN-OC-wrq"/>
</constraints>
<state key="normal" title="BLOAD INTBASIC">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="Command:" destination="BYZ-38-t0r" eventType="touchUpInside" id="pju-Np-drJ"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="PL9-nx-yy4">
<rect key="frame" x="8" y="536" width="280" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="280" id="VYA-Dc-Vyv"/>
<constraint firstAttribute="height" constant="30" id="Vc1-xv-qLq"/>
</constraints>
<state key="normal" title="FOR I = 1 TO 65536: PRINT I : NEXT">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="Command:" destination="BYZ-38-t0r" eventType="touchUpInside" id="gdZ-gr-yul"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Disk Accel" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DQV-kq-kpF">
<rect key="frame" x="274" y="574" width="120" height="26"/>
<constraints>
<constraint firstAttribute="height" constant="26" id="Bdd-pU-rtD"/>
<constraint firstAttribute="width" constant="120" id="CHD-6p-heI"/>
</constraints>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XuV-wg-S6w">
<rect key="frame" x="327" y="608" width="67" height="30"/>
<constraints>
<constraint firstAttribute="width" constant="67" id="8rZ-oM-unL"/>
<constraint firstAttribute="height" constant="30" id="Iho-Oo-RVC"/>
</constraints>
<state key="normal" title="1">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="diskAccelSepected:" destination="BYZ-38-t0r" eventType="touchUpInside" id="KV0-fG-qPP"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nzo-cq-BqT">
<rect key="frame" x="327" y="646" width="67" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="GZe-0n-i9h"/>
<constraint firstAttribute="width" constant="67" id="bfg-tJ-krJ"/>
</constraints>
<state key="normal" title="25">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="diskAccelSepected:" destination="BYZ-38-t0r" eventType="touchUpInside" id="mdd-la-FFe"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="right" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0PZ-a6-C0R">
<rect key="frame" x="327" y="684" width="67" height="30"/>
<constraints>
<constraint firstAttribute="height" constant="30" id="Ngo-hs-Tpl"/>
<constraint firstAttribute="width" constant="67" id="RIc-Ya-YCY"/>
</constraints>
<state key="normal" title="100">
<color key="titleColor" red="0.69019607839999997" green="0.90980392160000001" blue="0.51764705879999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</state>
<connections>
<action selector="diskAccelSepected:" destination="BYZ-38-t0r" eventType="touchUpInside" id="1fW-4M-Vme"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" cocoaTouchSystemColor="viewFlipsideBackgroundColor"/>
<constraints>
<constraint firstItem="xbl-kL-cRQ" firstAttribute="top" secondItem="lBw-C9-kAw" secondAttribute="bottom" constant="8" id="0oS-2D-WjN"/>
<constraint firstItem="Wuq-OJ-QCj" firstAttribute="leading" secondItem="xbl-kL-cRQ" secondAttribute="leading" id="1a6-oO-MR9"/>
<co