mirror of
https://github.com/trudnai/Steve2.git
synced 2024-06-15 21:29:31 +00:00
- Proper Graphics - Text switching
- Suports graphics buffer (Page) changes - Supports Mixed mode
This commit is contained in:
parent
16cc896c0c
commit
44968a5db3
|
@ -20,6 +20,45 @@
|
||||||
325EB64F23FBBAD100C6B4A4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 325EB64D23FBBAD100C6B4A4 /* LaunchScreen.storyboard */; };
|
325EB64F23FBBAD100C6B4A4 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 325EB64D23FBBAD100C6B4A4 /* LaunchScreen.storyboard */; };
|
||||||
325EB65A23FBBAD100C6B4A4 /* A2iOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325EB65923FBBAD100C6B4A4 /* A2iOSTests.swift */; };
|
325EB65A23FBBAD100C6B4A4 /* A2iOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325EB65923FBBAD100C6B4A4 /* A2iOSTests.swift */; };
|
||||||
325EB66523FBBAD100C6B4A4 /* A2iOSUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325EB66423FBBAD100C6B4A4 /* A2iOSUITests.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 */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
32C4530B2331F7220000EBA1 /* 6502.c in Sources */ = {isa = PBXBuildFile; fileRef = 32439F7422ECD8AD0077AAE0 /* 6502.c */; };
|
||||||
32C4530C2331F7220000EBA1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5C22EACC630003B53F /* ViewController.swift */; };
|
32C4530C2331F7220000EBA1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5C22EACC630003B53F /* ViewController.swift */; };
|
||||||
32C4530D2331F7220000EBA1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5A22EACC630003B53F /* AppDelegate.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 */; };
|
32C453112331F7220000EBA1 /* fail1.txt in Resources */ = {isa = PBXBuildFile; fileRef = 32EDB7A123272CA80073AF2D /* fail1.txt */; };
|
||||||
32C453122331F7220000EBA1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB5E22EACC660003B53F /* Assets.xcassets */; };
|
32C453122331F7220000EBA1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB5E22EACC660003B53F /* Assets.xcassets */; };
|
||||||
32C453132331F7220000EBA1 /* apple.rom in Resources */ = {isa = PBXBuildFile; fileRef = 32439F8422ECD8AD0077AAE0 /* apple.rom */; };
|
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 */; };
|
32C4531D2331FED90000EBA1 /* 6502.c in Sources */ = {isa = PBXBuildFile; fileRef = 32439F7422ECD8AD0077AAE0 /* 6502.c */; };
|
||||||
32C4531E2331FED90000EBA1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5C22EACC630003B53F /* ViewController.swift */; };
|
32C4531E2331FED90000EBA1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5C22EACC630003B53F /* ViewController.swift */; };
|
||||||
32C4531F2331FED90000EBA1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32BFFB5A22EACC630003B53F /* AppDelegate.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 */; };
|
32C453232331FED90000EBA1 /* fail1.txt in Resources */ = {isa = PBXBuildFile; fileRef = 32EDB7A123272CA80073AF2D /* fail1.txt */; };
|
||||||
32C453242331FED90000EBA1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB5E22EACC660003B53F /* Assets.xcassets */; };
|
32C453242331FED90000EBA1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB5E22EACC660003B53F /* Assets.xcassets */; };
|
||||||
32C453252331FED90000EBA1 /* apple.rom in Resources */ = {isa = PBXBuildFile; fileRef = 32439F8422ECD8AD0077AAE0 /* apple.rom */; };
|
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 */; };
|
32C4533123335E560000EBA1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 32BFFB6022EACC660003B53F /* Main.storyboard */; };
|
||||||
32C4533223335E570000EBA1 /* 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 */; };
|
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 */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy 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; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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 */ = {
|
325EB63723F9492200C6B4A4 /* util */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
32C45305232E3EEF0000EBA1 /* RepeatingTimer.swift */,
|
||||||
32439F8622ECD8AD0077AAE0 /* common.h */,
|
32439F8622ECD8AD0077AAE0 /* common.h */,
|
||||||
325EB63823F9E48100C6B4A4 /* common.c */,
|
325EB63823F9E48100C6B4A4 /* common.c */,
|
||||||
32DBF76723373FB400DD50E7 /* disassembler.h */,
|
32DBF76723373FB400DD50E7 /* disassembler.h */,
|
||||||
|
@ -310,6 +360,7 @@
|
||||||
325EB64B23FBBAD100C6B4A4 /* Assets.xcassets */,
|
325EB64B23FBBAD100C6B4A4 /* Assets.xcassets */,
|
||||||
325EB64D23FBBAD100C6B4A4 /* LaunchScreen.storyboard */,
|
325EB64D23FBBAD100C6B4A4 /* LaunchScreen.storyboard */,
|
||||||
325EB65023FBBAD100C6B4A4 /* Info.plist */,
|
325EB65023FBBAD100C6B4A4 /* Info.plist */,
|
||||||
|
325EB67323FBBF0C00C6B4A4 /* A2iOS-Bridging-Header.h */,
|
||||||
);
|
);
|
||||||
path = A2iOS;
|
path = A2iOS;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -337,6 +388,22 @@
|
||||||
children = (
|
children = (
|
||||||
3262F37423E169F8008BDB95 /* spk_dn.wav */,
|
3262F37423E169F8008BDB95 /* spk_dn.wav */,
|
||||||
3262F37523E169F8008BDB95 /* spk_up.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;
|
path = Resources;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -377,16 +444,14 @@
|
||||||
32BFFB5922EACC630003B53F /* A2Mac */ = {
|
32BFFB5922EACC630003B53F /* A2Mac */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
32439F8422ECD8AD0077AAE0 /* apple.rom */,
|
|
||||||
326ED2EE232D7A0000A41337 /* 6502_functional_test.bin */,
|
326ED2EE232D7A0000A41337 /* 6502_functional_test.bin */,
|
||||||
32B18438233FAB3900DBB4AB /* verticies.swift */,
|
32B18438233FAB3900DBB4AB /* verticies.swift */,
|
||||||
32BFFB5A22EACC630003B53F /* AppDelegate.swift */,
|
32BFFB5A22EACC630003B53F /* AppDelegate.swift */,
|
||||||
32BFFB5C22EACC630003B53F /* ViewController.swift */,
|
32BFFB5C22EACC630003B53F /* ViewController.swift */,
|
||||||
32B18435233F10BC00DBB4AB /* Shaders.metal */,
|
32B18435233F10BC00DBB4AB /* Shaders.metal */,
|
||||||
32C4532D233345420000EBA1 /* MonitorView.swift */,
|
32C4532D233345420000EBA1 /* MonitorView.swift */,
|
||||||
32DBF7632334657900DD50E7 /* HiRes.swift */,
|
|
||||||
32C453072331C0910000EBA1 /* NSLayoutManager-Extension.swift */,
|
32C453072331C0910000EBA1 /* NSLayoutManager-Extension.swift */,
|
||||||
32C45305232E3EEF0000EBA1 /* RepeatingTimer.swift */,
|
32DBF7632334657900DD50E7 /* HiRes.swift */,
|
||||||
32EDB7A123272CA80073AF2D /* fail1.txt */,
|
32EDB7A123272CA80073AF2D /* fail1.txt */,
|
||||||
32BFFB5E22EACC660003B53F /* Assets.xcassets */,
|
32BFFB5E22EACC660003B53F /* Assets.xcassets */,
|
||||||
32BFFB6022EACC660003B53F /* Main.storyboard */,
|
32BFFB6022EACC660003B53F /* Main.storyboard */,
|
||||||
|
@ -623,9 +688,27 @@
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
325EB6A22401118300C6B4A4 /* Wavy Navy.woz in Resources */,
|
||||||
|
325EB67E23FBDEE700C6B4A4 /* apple.rom in Resources */,
|
||||||
325EB64F23FBBAD100C6B4A4 /* LaunchScreen.storyboard 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 */,
|
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 */,
|
325EB64A23FBBACF00C6B4A4 /* Main.storyboard in Resources */,
|
||||||
|
325EB67A23FBC48400C6B4A4 /* spk_up.wav in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -647,10 +730,24 @@
|
||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
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 */,
|
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 */,
|
32C4533123335E560000EBA1 /* Main.storyboard in Resources */,
|
||||||
32BFFB5F22EACC660003B53F /* Assets.xcassets 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 */,
|
32439F8822ECD8AD0077AAE0 /* apple.rom in Resources */,
|
||||||
326ED2EF232D7A0000A41337 /* 6502_functional_test.bin in Resources */,
|
326ED2EF232D7A0000A41337 /* 6502_functional_test.bin in Resources */,
|
||||||
3262F37623E169F8008BDB95 /* spk_dn.wav in Resources */,
|
3262F37623E169F8008BDB95 /* spk_dn.wav in Resources */,
|
||||||
|
@ -702,9 +799,14 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
325EB67623FBC44400C6B4A4 /* common.c in Sources */,
|
||||||
|
325EB67523FBC43E00C6B4A4 /* 6502.c in Sources */,
|
||||||
|
325EB67823FBC45300C6B4A4 /* disk.c in Sources */,
|
||||||
325EB64723FBBACF00C6B4A4 /* ViewController.swift in Sources */,
|
325EB64723FBBACF00C6B4A4 /* ViewController.swift in Sources */,
|
||||||
325EB64323FBBACF00C6B4A4 /* AppDelegate.swift in Sources */,
|
325EB64323FBBACF00C6B4A4 /* AppDelegate.swift in Sources */,
|
||||||
|
325EB67723FBC45300C6B4A4 /* woz.c in Sources */,
|
||||||
325EB64523FBBACF00C6B4A4 /* SceneDelegate.swift in Sources */,
|
325EB64523FBBACF00C6B4A4 /* SceneDelegate.swift in Sources */,
|
||||||
|
325EB67423FBC0AA00C6B4A4 /* RepeatingTimer.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -729,10 +831,10 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
32439F8722ECD8AD0077AAE0 /* 6502.c in Sources */,
|
32439F8722ECD8AD0077AAE0 /* 6502.c in Sources */,
|
||||||
32DBF7642334657900DD50E7 /* HiRes.swift in Sources */,
|
|
||||||
325EB63623F8F78300C6B4A4 /* disk.c in Sources */,
|
325EB63623F8F78300C6B4A4 /* disk.c in Sources */,
|
||||||
325EB63923F9E48100C6B4A4 /* common.c in Sources */,
|
325EB63923F9E48100C6B4A4 /* common.c in Sources */,
|
||||||
32BFFB5D22EACC630003B53F /* ViewController.swift in Sources */,
|
32BFFB5D22EACC630003B53F /* ViewController.swift in Sources */,
|
||||||
|
325EB69323FE6C6200C6B4A4 /* HiRes.swift in Sources */,
|
||||||
32C4532E233345430000EBA1 /* MonitorView.swift in Sources */,
|
32C4532E233345430000EBA1 /* MonitorView.swift in Sources */,
|
||||||
325EB62F23F8856F00C6B4A4 /* woz.c in Sources */,
|
325EB62F23F8856F00C6B4A4 /* woz.c in Sources */,
|
||||||
32BFFB5B22EACC630003B53F /* AppDelegate.swift in Sources */,
|
32BFFB5B22EACC630003B53F /* AppDelegate.swift in Sources */,
|
||||||
|
@ -761,11 +863,9 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
32C4530B2331F7220000EBA1 /* 6502.c in Sources */,
|
32C4530B2331F7220000EBA1 /* 6502.c in Sources */,
|
||||||
32DBF7652334657900DD50E7 /* HiRes.swift in Sources */,
|
|
||||||
32C4530C2331F7220000EBA1 /* ViewController.swift in Sources */,
|
32C4530C2331F7220000EBA1 /* ViewController.swift in Sources */,
|
||||||
32C4532F233345820000EBA1 /* MonitorView.swift in Sources */,
|
32C4532F233345820000EBA1 /* MonitorView.swift in Sources */,
|
||||||
32C4530D2331F7220000EBA1 /* AppDelegate.swift in Sources */,
|
32C4530D2331F7220000EBA1 /* AppDelegate.swift in Sources */,
|
||||||
32C4530E2331F7220000EBA1 /* RepeatingTimer.swift in Sources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -774,11 +874,9 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
32C4531D2331FED90000EBA1 /* 6502.c in Sources */,
|
32C4531D2331FED90000EBA1 /* 6502.c in Sources */,
|
||||||
32DBF7662334657900DD50E7 /* HiRes.swift in Sources */,
|
|
||||||
32C4531E2331FED90000EBA1 /* ViewController.swift in Sources */,
|
32C4531E2331FED90000EBA1 /* ViewController.swift in Sources */,
|
||||||
32C45330233345820000EBA1 /* MonitorView.swift in Sources */,
|
32C45330233345820000EBA1 /* MonitorView.swift in Sources */,
|
||||||
32C4531F2331FED90000EBA1 /* AppDelegate.swift in Sources */,
|
32C4531F2331FED90000EBA1 /* AppDelegate.swift in Sources */,
|
||||||
32C453202331FED90000EBA1 /* RepeatingTimer.swift in Sources */,
|
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -847,9 +945,11 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
|
OTHER_SWIFT_FLAGS = "-DHIRES -DHIRESDRAW -D_NO_HIRESLOW";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.gamealloy.A2iOS;
|
PRODUCT_BUNDLE_IDENTIFIER = com.gamealloy.A2iOS;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "A2iOS/A2iOS-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
};
|
};
|
||||||
|
@ -867,9 +967,11 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
|
OTHER_SWIFT_FLAGS = "-DHIRES -DHIRESDRAW -D_NO_HIRESLOW";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.gamealloy.A2iOS;
|
PRODUCT_BUNDLE_IDENTIFIER = com.gamealloy.A2iOS;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "A2iOS/A2iOS-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TARGETED_DEVICE_FAMILY = "1,2";
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
VALIDATE_PRODUCT = YES;
|
VALIDATE_PRODUCT = YES;
|
||||||
|
@ -1106,8 +1208,9 @@
|
||||||
OTHER_CFLAGS = (
|
OTHER_CFLAGS = (
|
||||||
"-DDISASSEMBLER",
|
"-DDISASSEMBLER",
|
||||||
"-DINTERRUPT_CHECK_PER_STEP",
|
"-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_BUNDLE_IDENTIFIER = com.gamealloy.A2Mac;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
@ -1141,8 +1244,9 @@
|
||||||
OTHER_CFLAGS = (
|
OTHER_CFLAGS = (
|
||||||
"-DDISASSEMBLER",
|
"-DDISASSEMBLER",
|
||||||
"-DINTERRUPT_CHECK_PER_STEP",
|
"-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_BUNDLE_IDENTIFIER = com.gamealloy.A2Mac;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "A2Mac/A2Mac-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "A2Mac/A2Mac-Bridging-Header.h";
|
||||||
|
|
|
@ -32,6 +32,21 @@
|
||||||
</dict>
|
</dict>
|
||||||
<key>SuppressBuildableAutocreation</key>
|
<key>SuppressBuildableAutocreation</key>
|
||||||
<dict>
|
<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>
|
<key>32BFFB5622EACC630003B53F</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>primary</key>
|
<key>primary</key>
|
||||||
|
|
|
@ -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.
|
// 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"
|
#import "6502.h"
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* A2Mac_Bridging_Header_h */
|
||||||
|
|
|
@ -756,6 +756,9 @@
|
||||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</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">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="mfd-12-bcR">
|
||||||
<rect key="frame" x="594" y="362" width="82" height="32"/>
|
<rect key="frame" x="594" y="362" width="82" height="32"/>
|
||||||
<constraints>
|
<constraints>
|
||||||
|
@ -782,24 +785,20 @@
|
||||||
</connections>
|
</connections>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
</button>
|
</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">
|
<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>
|
<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">
|
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="7Pw-e8-92m">
|
||||||
<rect key="frame" x="-1" y="119" width="55" height="18"/>
|
<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">
|
<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"/>
|
||||||
<integer value="1000"/>
|
<integer value="1000"/>
|
||||||
|
<integer value="1000"/>
|
||||||
</visibilityPriorities>
|
</visibilityPriorities>
|
||||||
<customSpacing>
|
<customSpacing>
|
||||||
<real value="3.4028234663852886e+38"/>
|
<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"/>
|
||||||
<real value="3.4028234663852886e+38"/>
|
<real value="3.4028234663852886e+38"/>
|
||||||
|
<real value="3.4028234663852886e+38"/>
|
||||||
</customSpacing>
|
</customSpacing>
|
||||||
</stackView>
|
</stackView>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FZk-VW-alq">
|
<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="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 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="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 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 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="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="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 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 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="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="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="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"/>
|
<constraint firstItem="mfd-12-bcR" firstAttribute="top" secondItem="m2S-Jp-Qdl" secondAttribute="top" constant="10" id="zDl-Cs-xmz"/>
|
||||||
</constraints>
|
</constraints>
|
||||||
|
|
|
@ -18,12 +18,17 @@ class HiRes: NSView {
|
||||||
static let PixelWidth = 280
|
static let PixelWidth = 280
|
||||||
static let PixelMixedHeight = 160
|
static let PixelMixedHeight = 160
|
||||||
static let PixelHeight = 192
|
static let PixelHeight = 192
|
||||||
|
static let MixedTextHeight = 4
|
||||||
|
static let MixedHeight = 160
|
||||||
static let blockRows = 24
|
static let blockRows = 24
|
||||||
static let blockCols = 40
|
static let blockCols = 40
|
||||||
static let blockWidth = PixelWidth / blockCols
|
static let blockWidth = PixelWidth / blockCols
|
||||||
static let blockHeight = PixelHeight / blockRows
|
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)
|
let HiResRawPointer = UnsafeRawPointer(RAM + Page1Addr)
|
||||||
|
|
||||||
#if METAL_YES
|
#if METAL_YES
|
||||||
|
@ -179,6 +184,7 @@ class HiRes: NSView {
|
||||||
|
|
||||||
|
|
||||||
func render() {
|
func render() {
|
||||||
|
|
||||||
guard let drawable = metalLayer?.nextDrawable() else { return }
|
guard let drawable = metalLayer?.nextDrawable() else { return }
|
||||||
let renderPassDescriptor = MTLRenderPassDescriptor()
|
let renderPassDescriptor = MTLRenderPassDescriptor()
|
||||||
renderPassDescriptor.colorAttachments[0].texture = drawable.texture
|
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))
|
let boundingBox = CGRect(x: 0, y: 0, width: CGFloat(HiRes.PixelWidth), height: CGFloat(HiRes.PixelHeight))
|
||||||
currentContext!.draw (image, in: boundingBox)
|
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) {
|
override func draw(_ rect: CGRect) {
|
||||||
// NSColor.green.setFill()
|
// 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.removeAllPoints()
|
||||||
path.lineWidth=1
|
path.lineWidth = 0.7
|
||||||
path.move(to: NSPoint(x: 0, y: 0))
|
path.move(to: NSPoint(x: 0, y: 0))
|
||||||
|
|
||||||
// path.appendRect(NSRect(x: 0, y: 0, width: 10, height: 10))
|
// path.appendRect(NSRect(x: 0, y: 0, width: 10, height: 10))
|
||||||
|
|
||||||
for y in 0 ..< HiRes.PixelHeight {
|
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
|
var inX = false
|
||||||
path.move(to: NSPoint(x: 0, y: y))
|
path.move(to: NSPoint(x: 0, y: y))
|
||||||
|
|
||||||
for blockX in 0 ..< HiRes.blockCols {
|
for blockX in 0 ..< HiRes.blockCols {
|
||||||
|
|
||||||
let lineAddr = HiResLineAddrTbl[y]
|
let lineAddr = HiResLineAddrTbl[y]
|
||||||
let block = Int(HiResBufferPointer[ Int(lineAddr + blockX) ])
|
let block = UInt(HiResBufferPointer[ Int(lineAddr + blockX) ])
|
||||||
|
|
||||||
// if( shadowScreen[ screenIdx ] != block ) {
|
// if( shadowScreen[ screenIdx ] != block ) {
|
||||||
// shadowScreen[ screenIdx ] = block
|
// shadowScreen[ screenIdx ] = block
|
||||||
//
|
//
|
||||||
var x = blockX * HiRes.blockWidth
|
var x = blockX * HiRes.blockWidth
|
||||||
for bit in stride(from: 0, through: 6, by: 1) {
|
if block != 0 && block != 0x80 {
|
||||||
let bitMask = 1 << bit
|
for bit in 0 ... 6 { // stride(from: 0, through: 6, by: 1) {
|
||||||
if (block & bitMask) == 0 {
|
let bitMask : UInt = 1 << bit
|
||||||
if inX {
|
if (block & bitMask) == 0 {
|
||||||
inX = false
|
if inX {
|
||||||
path.line(to: NSPoint(x: x, y: 192-y))
|
inX = false
|
||||||
|
path.line(to: NSPoint(x: x, y: 192-y))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
else { // 28CD41
|
||||||
else { // 28CD41
|
if ( inX == false ) {
|
||||||
if ( inX == false ) {
|
inX = true
|
||||||
inX = true
|
path.move(to: NSPoint(x: x, y: 192-y))
|
||||||
path.move(to: NSPoint(x: x, y: 192-y))
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
x += 1
|
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
|
} // x
|
||||||
|
// make sure we close the path at the end of the horizontal line
|
||||||
if inX {
|
if inX {
|
||||||
inX = false
|
inX = false
|
||||||
path.line(to: NSPoint(x: 279, y: 192-y))
|
path.line(to: NSPoint(x: 279, y: 192-y))
|
||||||
|
|
|
@ -9,7 +9,46 @@
|
||||||
import Cocoa
|
import Cocoa
|
||||||
|
|
||||||
class MonitorView: NSView {
|
class MonitorView: NSView {
|
||||||
override func performKeyEquivalent(with event: NSEvent) -> Bool {
|
// override func performKeyEquivalent(with event: NSEvent) -> Bool {
|
||||||
return true
|
// 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
|
||||||
|
//
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -112,7 +112,7 @@ class ViewController: NSViewController {
|
||||||
DispatchQueue.global().async(execute: workItem!);
|
DispatchQueue.global().async(execute: workItem!);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
m6502_ColdReset()
|
m6502_ColdReset( Bundle.main.resourcePath )
|
||||||
#endif
|
#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
|
// AppleScript Keycodes
|
||||||
let leftArrowKey = 123
|
let leftArrowKey = 123
|
||||||
let rightArrowKey = 124
|
let rightArrowKey = 124
|
||||||
let upArrowKey = 126
|
let upArrowKey = 126
|
||||||
let downArrowKey = 125
|
let downArrowKey = 125
|
||||||
|
|
||||||
|
var ddd = 9;
|
||||||
|
|
||||||
override func keyDown(with event: NSEvent) {
|
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) {
|
// switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
|
||||||
// case [.command] where event.characters == "l",
|
// case [.command] where event.characters == "l",
|
||||||
// [.command, .shift] where event.characters == "l":
|
// [.command, .shift] where event.characters == "l":
|
||||||
|
@ -154,12 +201,20 @@ class ViewController: NSViewController {
|
||||||
switch keyCode {
|
switch keyCode {
|
||||||
case leftArrowKey:
|
case leftArrowKey:
|
||||||
kbdInput(0x08)
|
kbdInput(0x08)
|
||||||
|
setIO(0xC064, 0);
|
||||||
|
print("LEFT", ddd);
|
||||||
case rightArrowKey:
|
case rightArrowKey:
|
||||||
kbdInput(0x15)
|
kbdInput(0x15)
|
||||||
case leftArrowKey:
|
setIO(0xC064, 255);
|
||||||
|
print("RIGHT")
|
||||||
|
case downArrowKey:
|
||||||
kbdInput(0x0B)
|
kbdInput(0x0B)
|
||||||
case rightArrowKey:
|
setIO(0xC065, 255);
|
||||||
|
print("DOWN")
|
||||||
|
case upArrowKey:
|
||||||
kbdInput(0x0A)
|
kbdInput(0x0A)
|
||||||
|
setIO(0xC065, 0);
|
||||||
|
print("UP")
|
||||||
default:
|
default:
|
||||||
// print("keycode: %d", keyCode)
|
// print("keycode: %d", keyCode)
|
||||||
if let chars = event.characters {
|
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) {
|
// override func flagsChanged(with event: NSEvent) {
|
||||||
// switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
|
// switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
|
||||||
// case [.shift]:
|
// 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;
|
var was = 0;
|
||||||
|
@ -277,42 +341,36 @@ class ViewController: NSViewController {
|
||||||
|
|
||||||
var txt : String = ""
|
var txt : String = ""
|
||||||
|
|
||||||
for y in 0...textLines-1 {
|
var fromLines = 0
|
||||||
// let textAddr = textBaseAddr + textLineOfs[y]
|
var toLines = textLines
|
||||||
|
|
||||||
// let linePointer = UnsafeMutableRawPointer( mutating: &RAM + textBaseAddr + y * textCols ) //( start: &RAM + 0x400, count: 0x400)
|
if videoMode.text == 0 {
|
||||||
// let lineStr = String(bytesNoCopy: linePointer, length: textCols, encoding: .ascii, freeWhenDone: false)!
|
if videoMode.mixed == 1 {
|
||||||
// txt += lineStr + "\n"
|
fromLines = toLines - 4
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
toLines = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for x in 0...textCols-1 {
|
txtArr = txtClear
|
||||||
|
|
||||||
|
for y in fromLines ..< toLines {
|
||||||
|
for x in 0 ..< textCols {
|
||||||
let byte = textBufferPointer[ textLineOfs[y] + x ]
|
let byte = textBufferPointer[ textLineOfs[y] + x ]
|
||||||
let idx = Int(byte);
|
let idx = Int(byte);
|
||||||
let chr = ViewController.charConvTbl[idx]
|
let chr = ViewController.charConvTbl[idx]
|
||||||
|
|
||||||
// is it a cursor? (slashing space)
|
// is it a cursor? (slashing space)
|
||||||
// if ( chr == "blockChar" ) {
|
// if ( chr == "blockChar" ) {
|
||||||
// chr = flashingSpace
|
// chr = flashingSpace
|
||||||
// }
|
// }
|
||||||
// print("byte \(index): \(chr)")
|
|
||||||
// txt = txt + "\(chr)"
|
|
||||||
txtArr[ y * (textCols + lineEndChars) + x ] = 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[ y * (textCols + lineEndChars) + textCols ] = "\n"
|
||||||
}
|
}
|
||||||
// txtArr[ textLines * (textCols+1) + textCols ] = "\0"
|
|
||||||
txt = String(txtArr)
|
txt = String(txtArr)
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
|
@ -362,6 +420,10 @@ class ViewController: NSViewController {
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.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_path = Bundle.main.path(forResource: "spk_up", ofType:"wav")!
|
||||||
let spk_up_url = URL(fileURLWithPath: spk_up_path)
|
let spk_up_url = URL(fileURLWithPath: spk_up_path)
|
||||||
|
|
20
A2iOS/A2iOS-Bridging-Header.h
Normal file
20
A2iOS/A2iOS-Bridging-Header.h
Normal 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 */
|
|
@ -1,24 +1,359 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?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>
|
<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="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<customFonts key="customFonts">
|
||||||
|
<array key="PrintChar21.ttf">
|
||||||
|
<string>PrintChar21</string>
|
||||||
|
</array>
|
||||||
|
</customFonts>
|
||||||
<scenes>
|
<scenes>
|
||||||
<!--View Controller-->
|
<!--View Controller-->
|
||||||
<scene sceneID="tne-QT-ifu">
|
<scene sceneID="tne-QT-ifu">
|
||||||
<objects>
|
<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">
|
<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"/>
|
<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"/>
|
||||||
|
<constraint firstItem="LWV-xR-zzl" firstAttribute="top" secondItem="Q9J-69-63J" secondAttribute="bottom" constant="8" id="4NL-Vb-Vk7"/>
|
||||||
|
<constraint firstItem="XuV-wg-S6w" firstAttribute="top" secondItem="DQV-kq-kpF" secondAttribute="bottom" constant="8" id="6RU-7x-2yY"/>
|
||||||
|
<constraint firstItem="lGY-TL-dYl" firstAttribute="top" secondItem="InU-ap-ckM" secondAttribute="bottom" constant="8" id="6tk-tJ-uYI"/>
|
||||||
|
<constraint firstItem="PL9-nx-yy4" firstAttribute="leading" secondItem="Wuq-OJ-QCj" secondAttribute="leading" id="9Uf-H3-eAP"/>
|
||||||
|
<constraint firstItem="NfH-Md-IFn" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="Aoh-dk-DVd"/>
|
||||||
|
<constraint firstItem="Wuq-OJ-QCj" firstAttribute="top" secondItem="xbl-kL-cRQ" secondAttribute="bottom" constant="8" id="BMr-YH-6Ti"/>
|
||||||
|
<constraint firstItem="InU-ap-ckM" firstAttribute="top" secondItem="UDx-40-ORS" secondAttribute="bottom" constant="8" id="GDb-b5-bkW"/>
|
||||||
|
<constraint firstItem="qNn-GH-aIG" firstAttribute="top" secondItem="TLZ-33-q0M" secondAttribute="bottom" constant="8" id="GE1-OV-Gi1"/>
|
||||||
|
<constraint firstItem="rYe-dy-hot" firstAttribute="top" secondItem="LWV-xR-zzl" secondAttribute="bottom" constant="8" id="Kac-Ry-igj"/>
|
||||||
|
<constraint firstItem="Q9J-69-63J" firstAttribute="top" secondItem="UDx-40-ORS" secondAttribute="bottom" constant="8" id="Ktm-nN-N77"/>
|
||||||
|
<constraint firstItem="TLZ-33-q0M" firstAttribute="trailing" secondItem="f9G-OM-FNm" secondAttribute="trailing" id="MI4-Vx-O13"/>
|
||||||
|
<constraint firstItem="0PZ-a6-C0R" firstAttribute="top" secondItem="nzo-cq-BqT" secondAttribute="bottom" constant="8" id="MRX-zF-SeM"/>
|
||||||
|
<constraint firstItem="f9G-OM-FNm" firstAttribute="trailing" secondItem="rYe-dy-hot" secondAttribute="trailing" id="MrH-wo-OSH"/>
|
||||||
|
<constraint firstItem="nMe-JQ-ldk" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" constant="8" id="Mt2-Db-3L6"/>
|
||||||
|
<constraint firstItem="xbl-kL-cRQ" firstAttribute="leading" secondItem="lBw-C9-kAw" secondAttribute="leading" id="NZn-bY-S54"/>
|
||||||
|
<constraint firstItem="lGY-TL-dYl" firstAttribute="leading" secondItem="InU-ap-ckM" secondAttribute="leading" id="OOP-99-iR6"/>
|
||||||
|
<constraint firstItem="lBw-C9-kAw" firstAttribute="top" secondItem="lGY-TL-dYl" secondAttribute="bottom" constant="8" id="R84-l7-gEy"/>
|
||||||
|
<constraint firstItem="PL9-nx-yy4" firstAttribute="top" secondItem="Wuq-OJ-QCj" secondAttribute="bottom" constant="8" id="RFb-zs-Rna"/>
|
||||||
|
<constraint firstItem="0PZ-a6-C0R" firstAttribute="trailing" secondItem="nzo-cq-BqT" secondAttribute="trailing" id="Wh0-fm-GSN"/>
|
||||||
|
<constraint firstItem="NfH-Md-IFn" firstAttribute="top" secondItem="8bC-Xf-vdC" secondAttribute="top" id="YPj-dz-79I"/>
|
||||||
|
<constraint firstItem="XuV-wg-S6w" firstAttribute="trailing" secondItem="DQV-kq-kpF" secondAttribute="trailing" id="Z1E-Ku-RdM"/>
|
||||||
|
<constraint firstItem="rYe-dy-hot" firstAttribute="trailing" secondItem="LWV-xR-zzl" secondAttribute="trailing" id="ZTR-lL-C7h"/>
|
||||||
|
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="NfH-Md-IFn" secondAttribute="trailing" id="btj-RB-kcG"/>
|
||||||
|
<constraint firstItem="UDx-40-ORS" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" id="cKh-cv-iHV"/>
|
||||||
|
<constraint firstItem="TLZ-33-q0M" firstAttribute="top" secondItem="f9G-OM-FNm" secondAttribute="bottom" constant="8" id="cjd-tY-Jkn"/>
|
||||||
|
<constraint firstItem="InU-ap-ckM" firstAttribute="leading" secondItem="nMe-JQ-ldk" secondAttribute="leading" id="cmC-jT-PSH"/>
|
||||||
|
<constraint firstItem="qNn-GH-aIG" firstAttribute="trailing" secondItem="TLZ-33-q0M" secondAttribute="trailing" id="ehL-FI-ZwW"/>
|
||||||
|
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="UDx-40-ORS" secondAttribute="trailing" id="fxO-d5-Mwe"/>
|
||||||
|
<constraint firstItem="nzo-cq-BqT" firstAttribute="top" secondItem="XuV-wg-S6w" secondAttribute="bottom" constant="8" id="i1h-cz-mLN"/>
|
||||||
|
<constraint firstItem="LWV-xR-zzl" firstAttribute="trailing" secondItem="Q9J-69-63J" secondAttribute="trailing" id="l9Q-fD-Bsy"/>
|
||||||
|
<constraint firstItem="DQV-kq-kpF" firstAttribute="trailing" secondItem="Q9J-69-63J" secondAttribute="trailing" id="mrN-Ds-KmE"/>
|
||||||
|
<constraint firstItem="6Tk-OE-BBY" firstAttribute="top" secondItem="UDx-40-ORS" secondAttribute="top" id="oLF-Sc-Qhf"/>
|
||||||
|
<constraint firstItem="nzo-cq-BqT" firstAttribute="trailing" secondItem="XuV-wg-S6w" secondAttribute="trailing" id="ohP-DX-JWl"/>
|
||||||
|
<constraint firstItem="f9G-OM-FNm" firstAttribute="top" secondItem="rYe-dy-hot" secondAttribute="bottom" constant="8" id="ovo-z1-d6N"/>
|
||||||
|
<constraint firstItem="6Tk-OE-BBY" firstAttribute="trailing" secondItem="Q9J-69-63J" secondAttribute="trailing" constant="20" id="rCg-Wp-oie"/>
|
||||||
|
<constraint firstItem="lBw-C9-kAw" firstAttribute="leading" secondItem="lGY-TL-dYl" secondAttribute="leading" id="ySo-8N-gmh"/>
|
||||||
|
<constraint firstItem="DQV-kq-kpF" firstAttribute="top" secondItem="PL9-nx-yy4" secondAttribute="bottom" constant="8" id="yX9-GM-OeU"/>
|
||||||
|
</constraints>
|
||||||
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||||
</view>
|
</view>
|
||||||
|
<connections>
|
||||||
|
<outlet property="diskAccel" destination="DQV-kq-kpF" id="C0C-uj-iFP"/>
|
||||||
|
<outlet property="displayField" destination="nMe-JQ-ldk" id="0o6-Wq-oQd"/>
|
||||||
|
<outlet property="hires" destination="Vi7-A0-0Jo" id="EgG-IA-7JU"/>
|
||||||
|
<outlet property="speedometer" destination="Q9J-69-63J" id="iyH-O7-jbd"/>
|
||||||
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
|
<point key="canvasLocation" x="131.8840579710145" y="105.80357142857143"/>
|
||||||
</scene>
|
</scene>
|
||||||
</scenes>
|
</scenes>
|
||||||
</document>
|
</document>
|
||||||
|
|
|
@ -60,5 +60,9 @@
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>UIAppFonts</key>
|
||||||
|
<array>
|
||||||
|
<string>PrintChar21.ttf</string>
|
||||||
|
</array>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -7,14 +7,465 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import AVFoundation
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let K : Double = 1000.0
|
||||||
|
let M : Double = (K * K)
|
||||||
|
let G : Double = (M * K)
|
||||||
|
let T : Double = (G * K)
|
||||||
|
|
||||||
|
let KB : Double = 1024.0
|
||||||
|
let MB : Double = (KB * KB)
|
||||||
|
let GB : Double = (MB * KB)
|
||||||
|
let TB : Double = (GB * KB)
|
||||||
|
|
||||||
|
|
||||||
|
var spk_up: AVAudioPlayer?
|
||||||
|
var spk_dn: AVAudioPlayer?
|
||||||
|
|
||||||
|
@_cdecl("ViewController_spk_up_play")
|
||||||
|
func spk_up_play() {
|
||||||
|
spk_up?.stop()
|
||||||
|
spk_dn?.stop()
|
||||||
|
spk_up?.play()
|
||||||
|
}
|
||||||
|
|
||||||
|
@_cdecl("ViewController_spk_dn_play")
|
||||||
|
func spk_dn_play() {
|
||||||
|
spk_up?.stop()
|
||||||
|
spk_dn?.stop()
|
||||||
|
spk_dn?.play()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if METAL_YES
|
||||||
|
import Metal
|
||||||
|
#endif
|
||||||
|
|
||||||
class ViewController: UIViewController {
|
class ViewController: UIViewController {
|
||||||
|
|
||||||
override func viewDidLoad() {
|
@IBOutlet weak var displayField: UITextView!
|
||||||
super.viewDidLoad()
|
@IBOutlet weak var display: UITableViewCell!
|
||||||
// Do any additional setup after loading the view.
|
@IBOutlet weak var speedometer: UILabel! // UITextFieldCell!
|
||||||
|
@IBOutlet weak var diskAccel: UILabel! // UITextFieldCell!
|
||||||
|
@IBOutlet weak var hires: HiRes!
|
||||||
|
|
||||||
|
|
||||||
|
// static let charConvStr : String =
|
||||||
|
// "@🄰🄱🄲🄳🄴🄵🄶🄷🄸🄹🄺🄻🄼🄽🄾🄿🅀🅁🅂🅃🅄🅅🅆🅇🅈🅉[\\]^_ !\"#$%&'()*+,-./0123456789:;<=>?" +
|
||||||
|
// "@🅰🅱🅲🅳🅴🅵🅶🅷🅸🅹🅺🅻🅼🅽🅾🅿🆀🆁🆂🆃🆄🆅🆆🆇🆈🆉[\\]^_⬛︎!\"#$%&'()*+,-./0123456789:;<=>?" + // FL
|
||||||
|
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ !\"#$%&'()*+,-./0123456789:;<=>?" +
|
||||||
|
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~?"
|
||||||
|
|
||||||
|
// static let charConvStr : String =
|
||||||
|
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ !\"#$%&'()*+,-./0123456789:;<=>?" +
|
||||||
|
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_░!\"#$%&'()*+,-./0123456789:;<=>?" + // FL
|
||||||
|
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\u{E0A0}!\"#$%&'()*+,-./0123456789:;<=>?" +
|
||||||
|
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~?"
|
||||||
|
|
||||||
|
// static let charConvStr : String =
|
||||||
|
// "\u{E140}\u{E141}\u{E142}\u{E143}\u{E144}\u{E145}\u{E146}\u{E147}\u{E148}\u{E149}\u{E14A}\u{E14B}\u{E14C}\u{E14D}\u{E14E}\u{E14F}\u{E150}\u{E151}\u{E152}\u{E153}\u{E154}\u{E155}\u{E156}\u{E157}\u{E158}\u{E159}\u{E15A}\u{E15B}\u{E15C}\u{E15D}\u{E15E}\u{E15F}\u{E120}\u{E121}\u{E122}\u{E123}\u{E124}\u{E125}\u{E126}\u{E127}\u{E128}\u{E129}\u{E12A}\u{E12B}\u{E12C}\u{E12D}\u{E12E}\u{E12F}\u{E130}\u{E131}\u{E132}\u{E133}\u{E134}\u{E135}\u{E136}\u{E137}\u{E138}\u{E139}\u{E13A}\u{E13B}\u{E13C}\u{E13D}\u{E13E}\u{E13F}" +
|
||||||
|
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_░!\"#$%&'()*+,-./0123456789:;<=>?" + // FL
|
||||||
|
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\u{E0A0}!\"#$%&'()*+,-./0123456789:;<=>?" +
|
||||||
|
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~?"
|
||||||
|
|
||||||
|
static let charConvStrFlashOff : String =
|
||||||
|
"\u{E140}\u{E141}\u{E142}\u{E143}\u{E144}\u{E145}\u{E146}\u{E147}\u{E148}\u{E149}\u{E14A}\u{E14B}\u{E14C}\u{E14D}\u{E14E}\u{E14F}\u{E150}\u{E151}\u{E152}\u{E153}\u{E154}\u{E155}\u{E156}\u{E157}\u{E158}\u{E159}\u{E15A}\u{E15B}\u{E15C}\u{E15D}\u{E15E}\u{E15F}\u{E120}\u{E121}\u{E122}\u{E123}\u{E124}\u{E125}\u{E126}\u{E127}\u{E128}\u{E129}\u{E12A}\u{E12B}\u{E12C}\u{E12D}\u{E12E}\u{E12F}\u{E130}\u{E131}\u{E132}\u{E133}\u{E134}\u{E135}\u{E136}\u{E137}\u{E138}\u{E139}\u{E13A}\u{E13B}\u{E13C}\u{E13D}\u{E13E}\u{E13F}" +
|
||||||
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ !\"#$%&'()*+,-./0123456789:;<=>?" + // FL
|
||||||
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ !\"#$%&'()*+,-./0123456789:;<=>?" +
|
||||||
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~?"
|
||||||
|
|
||||||
|
static let charConvStrFlashOn : String =
|
||||||
|
"\u{E140}\u{E141}\u{E142}\u{E143}\u{E144}\u{E145}\u{E146}\u{E147}\u{E148}\u{E149}\u{E14A}\u{E14B}\u{E14C}\u{E14D}\u{E14E}\u{E14F}\u{E150}\u{E151}\u{E152}\u{E153}\u{E154}\u{E155}\u{E156}\u{E157}\u{E158}\u{E159}\u{E15A}\u{E15B}\u{E15C}\u{E15D}\u{E15E}\u{E15F}\u{E120}\u{E121}\u{E122}\u{E123}\u{E124}\u{E125}\u{E126}\u{E127}\u{E128}\u{E129}\u{E12A}\u{E12B}\u{E12C}\u{E12D}\u{E12E}\u{E12F}\u{E130}\u{E131}\u{E132}\u{E133}\u{E134}\u{E135}\u{E136}\u{E137}\u{E138}\u{E139}\u{E13A}\u{E13B}\u{E13C}\u{E13D}\u{E13E}\u{E13F}" +
|
||||||
|
"\u{E140}\u{E141}\u{E142}\u{E143}\u{E144}\u{E145}\u{E146}\u{E147}\u{E148}\u{E149}\u{E14A}\u{E14B}\u{E14C}\u{E14D}\u{E14E}\u{E14F}\u{E150}\u{E151}\u{E152}\u{E153}\u{E154}\u{E155}\u{E156}\u{E157}\u{E158}\u{E159}\u{E15A}\u{E15B}\u{E15C}\u{E15D}\u{E15E}\u{E15F}\u{E120}\u{E121}\u{E122}\u{E123}\u{E124}\u{E125}\u{E126}\u{E127}\u{E128}\u{E129}\u{E12A}\u{E12B}\u{E12C}\u{E12D}\u{E12E}\u{E12F}\u{E130}\u{E131}\u{E132}\u{E133}\u{E134}\u{E135}\u{E136}\u{E137}\u{E138}\u{E139}\u{E13A}\u{E13B}\u{E13C}\u{E13D}\u{E13E}\u{E13F}" +
|
||||||
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ !\"#$%&'()*+,-./0123456789:;<=>?" +
|
||||||
|
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~?"
|
||||||
|
|
||||||
|
static let charConvTblFlashOn = Array( charConvStrFlashOn )
|
||||||
|
static let charConvTblFlashOff = Array( charConvStrFlashOff )
|
||||||
|
|
||||||
|
static var charConvTbl = charConvTblFlashOn
|
||||||
|
|
||||||
|
let textLineOfs : [Int] = [
|
||||||
|
0x000, 0x080, 0x100, 0x180, 0x200, 0x280, 0x300, 0x380, 0x028, 0x0A8, 0x128, 0x1A8,
|
||||||
|
0x228, 0x2A8, 0x328, 0x3A8, 0x050, 0x0D0, 0x150, 0x1D0, 0x250, 0x2D0, 0x350, 0x3D0
|
||||||
|
]
|
||||||
|
|
||||||
|
var workItem : DispatchWorkItem? = nil;
|
||||||
|
@IBAction func Power(_ sender: Any) {
|
||||||
|
|
||||||
|
|
||||||
|
#if SPEEDTEST
|
||||||
|
if ( workItem != nil ) {
|
||||||
|
workItem!.cancel();
|
||||||
|
workItem = nil;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
workItem = DispatchWorkItem {
|
||||||
|
DispatchQueue.global(qos: .userInteractive).async {
|
||||||
|
// DispatchQueue.global(qos: .userInitiated).async {
|
||||||
|
// DispatchQueue.global(qos: .background).async {
|
||||||
|
tst6502()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DispatchQueue.global().async(execute: workItem!);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
m6502_ColdReset( Bundle.main.bundlePath )
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func Reset(_ sender: Any) {
|
||||||
|
// let resetPointer = UnsafeRawBufferPointer(start: &RAM + 0x3F2, count: 2)
|
||||||
|
// let ral = UInt16(resetPointer[0])
|
||||||
|
// let rah = UInt16(resetPointer[1])
|
||||||
|
// let resetAddr = rah << 8 + ral
|
||||||
|
//
|
||||||
|
// let hex = String(resetAddr, radix: 16, uppercase: true)
|
||||||
|
// print("reset to:\(hex)\n")
|
||||||
|
// m6502.pc = resetAddr
|
||||||
|
|
||||||
|
m6502.interrupt = SOFTRESET;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@IBAction func Command(_ sender: UIButton) {
|
||||||
|
|
||||||
|
if let label = sender.titleLabel, let command = label.text {
|
||||||
|
for c in command {
|
||||||
|
kbdInput(c.asciiValue! + 128);
|
||||||
|
}
|
||||||
|
kbdInput(Character("\r").asciiValue! + 128);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// AppleScript Keycodes
|
||||||
|
let leftArrowKey = 123
|
||||||
|
let rightArrowKey = 124
|
||||||
|
let upArrowKey = 126
|
||||||
|
let downArrowKey = 125
|
||||||
|
|
||||||
|
// override func keyDown(with event: UIEvent) {
|
||||||
|
//// 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)
|
||||||
|
// case rightArrowKey:
|
||||||
|
// kbdInput(0x15)
|
||||||
|
// case leftArrowKey:
|
||||||
|
// kbdInput(0x0B)
|
||||||
|
// case rightArrowKey:
|
||||||
|
// 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
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
|
||||||
|
// override func flagsChanged(with event: NSEvent) {
|
||||||
|
// switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
|
||||||
|
// case [.shift]:
|
||||||
|
// print("shift key is pressed")
|
||||||
|
// case [.control]:
|
||||||
|
// print("control key is pressed")
|
||||||
|
// case [.option] :
|
||||||
|
// print("option key is pressed")
|
||||||
|
// case [.command]:
|
||||||
|
// print("Command key is pressed")
|
||||||
|
// case [.control, .shift]:
|
||||||
|
// print("control-shift keys are pressed")
|
||||||
|
// case [.option, .shift]:
|
||||||
|
// print("option-shift keys are pressed")
|
||||||
|
// case [.command, .shift]:
|
||||||
|
// print("command-shift keys are pressed")
|
||||||
|
// case [.control, .option]:
|
||||||
|
// print("control-option keys are pressed")
|
||||||
|
// case [.control, .command]:
|
||||||
|
// print("control-command keys are pressed")
|
||||||
|
// case [.option, .command]:
|
||||||
|
// print("option-command keys are pressed")
|
||||||
|
// case [.shift, .control, .option]:
|
||||||
|
// print("shift-control-option keys are pressed")
|
||||||
|
// case [.shift, .control, .command]:
|
||||||
|
// print("shift-control-command keys are pressed")
|
||||||
|
// case [.control, .option, .command]:
|
||||||
|
// print("control-option-command keys are pressed")
|
||||||
|
// case [.shift, .command, .option]:
|
||||||
|
// print("shift-command-option keys are pressed")
|
||||||
|
// case [.shift, .control, .option, .command]:
|
||||||
|
// print("shift-control-option-command keys are pressed")
|
||||||
|
// default:
|
||||||
|
// print("no modifier keys are pressed")
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
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)
|
||||||
|
let txtClear = [Character](repeating: " ", count: textBufferSize)
|
||||||
|
var txtArr = txtClear
|
||||||
|
|
||||||
|
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.displayField.text = txt
|
||||||
|
self.speedometer.text = String(format: "%0.3lf MHz", mhz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var was = 0;
|
||||||
|
|
||||||
|
func Update() {
|
||||||
|
|
||||||
|
#if SPEEDTEST
|
||||||
|
#else
|
||||||
|
m6502_Run()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// render()
|
||||||
|
// hires.compute()
|
||||||
|
|
||||||
|
// HexDump()
|
||||||
|
// return
|
||||||
|
|
||||||
|
frameCnt += 1
|
||||||
|
if ( frameCnt == fps / 2 ) {
|
||||||
|
// flashingSpace = blockChar
|
||||||
|
ViewController.charConvTbl = ViewController.charConvTblFlashOn
|
||||||
|
}
|
||||||
|
else if ( frameCnt >= fps ) {
|
||||||
|
// flashingSpace = spaceChar
|
||||||
|
ViewController.charConvTbl = ViewController.charConvTblFlashOff
|
||||||
|
frameCnt = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
for x in 0...textCols-1 {
|
||||||
|
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 {
|
||||||
|
self.displayField.text = txt
|
||||||
|
// self.display.stringValue = "testing\nit\nout"
|
||||||
|
|
||||||
|
if ( (mhz < 10) && (mhz != floor(mhz)) ) {
|
||||||
|
self.speedometer.text = String(format: "%0.3lf MHz", mhz);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
self.speedometer.text = String(format: "%.0lf MHz", mhz);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if HIRES
|
||||||
|
// if ( self.was < 300 ) {
|
||||||
|
// self.was += 1
|
||||||
|
//
|
||||||
|
// for x in stride(from: 0, to: 280, by: 7) {
|
||||||
|
// for y in stride(from: 0, to: 192, by: 8) {
|
||||||
|
// self.hires.setNeedsDisplay( CGRect(x: x, y: y, width: 7, height: 8) )
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// self.HiRes.setNeedsDisplay(self.HiRes.frame)
|
||||||
|
// self.hires.setNeedsDisplay( CGRect(x: 0, y: 191-50, width: 50, height: 50) )
|
||||||
|
self.hires.needsDisplay = true
|
||||||
|
// }
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// func FromBuf(ptr: UnsafeMutablePointer<UInt8>, length len: Int) -> String? {
|
||||||
|
// // convert the bytes using the UTF8 encoding
|
||||||
|
// if let theString = NSString(bytes: ptr, length: len, encoding: NSUTF8StringEncoding) {
|
||||||
|
// return theString as String
|
||||||
|
// } else {
|
||||||
|
// return nil // the bytes aren't valid UTF8
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
let upd = RepeatingTimer(timeInterval: 1/Double(fps))
|
||||||
|
|
||||||
|
|
||||||
|
override var prefersStatusBarHidden: Bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
let spk_up_path = Bundle.main.path(forResource: "spk_up", ofType:"wav")!
|
||||||
|
let spk_up_url = URL(fileURLWithPath: spk_up_path)
|
||||||
|
do {
|
||||||
|
spk_up = try AVAudioPlayer(contentsOf: spk_up_url)
|
||||||
|
// spk_up?.play()
|
||||||
|
} catch {
|
||||||
|
// couldn't load file :(
|
||||||
|
}
|
||||||
|
|
||||||
|
let spk_dn_path = Bundle.main.path(forResource: "spk_dn", ofType:"wav")!
|
||||||
|
let spk_dn_url = URL(fileURLWithPath: spk_dn_path)
|
||||||
|
do {
|
||||||
|
spk_dn = try AVAudioPlayer(contentsOf: spk_dn_url)
|
||||||
|
// spk_up?.play()
|
||||||
|
} catch {
|
||||||
|
// couldn't load file :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//view.frame = CGRect(origin: CGPoint(), size: NSScreen.main!.visibleFrame.size)
|
||||||
|
|
||||||
|
// createHiRes()
|
||||||
|
|
||||||
|
// self.displayField.scaleUnitSquare(to: NSSize(width: 1, height: 1))
|
||||||
|
|
||||||
|
// NSEvent.removeMonitor(NSEvent.EventType.flagsChanged)
|
||||||
|
// NSEvent.addLocalMonitorForEvents(matching: .flagsChanged) {
|
||||||
|
// self.flagsChanged(with: $0)
|
||||||
|
// return $0
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // NSEvent.removeMonitor(NSEvent.EventType.keyDown)
|
||||||
|
// NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
|
||||||
|
//// print("keyDown event")
|
||||||
|
// self.keyDown(with: $0)
|
||||||
|
// return $0
|
||||||
|
// }
|
||||||
|
|
||||||
|
displayField.textContainer.maximumNumberOfLines = textLines
|
||||||
|
// displayField.preferredMaxLayoutWidth = displayField.frame.width
|
||||||
|
|
||||||
|
// DispatchQueue.main.asyncAfter(deadline: .now() + 1/fps, execute: {
|
||||||
|
// self.update()
|
||||||
|
// })
|
||||||
|
|
||||||
|
// #if FUNCTIONTEST
|
||||||
|
// #else
|
||||||
|
// DispatchQueue.global(qos: .background).async {
|
||||||
|
// self.update()
|
||||||
|
// }
|
||||||
|
|
||||||
|
upd.eventHandler = {
|
||||||
|
self.Update()
|
||||||
|
}
|
||||||
|
upd.resume()
|
||||||
|
// #endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func setCPUClockSpeed( freq : Double ) {
|
||||||
|
mhz = freq
|
||||||
|
MHz_6502 = UInt64(mhz * M)
|
||||||
|
clk_6502_per_frm = MHz_6502 / UInt64(fps)
|
||||||
|
clk_6502_per_frm_set = clk_6502_per_frm
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func speedSelected(_ sender: UIButton) {
|
||||||
|
if ( sender.titleLabel?.text == "Max" ) {
|
||||||
|
clk_6502_per_frm = UINT64_MAX
|
||||||
|
}
|
||||||
|
else if let freqValue = sender.titleLabel?.text, let freq = Double( freqValue ) {
|
||||||
|
setCPUClockSpeed(freq: freq)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@IBAction func diskAccelSepected(_ sender: UIButton) {
|
||||||
|
if let freqValue = sender.titleLabel?.text, let freq = Int32( freqValue ) {
|
||||||
|
diskAccelerator_speed = freq
|
||||||
|
diskAccel.text = "Disk Accel: " + freqValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
Resources/Apple DOS 3.3 January 1983.woz
Normal file
BIN
Resources/Apple DOS 3.3 January 1983.woz
Normal file
Binary file not shown.
BIN
Resources/Crossfire.woz
Normal file
BIN
Resources/Crossfire.woz
Normal file
Binary file not shown.
BIN
Resources/DISK_II_C600.ROM
Normal file
BIN
Resources/DISK_II_C600.ROM
Normal file
Binary file not shown.
BIN
Resources/Donkey Kong.woz
Normal file
BIN
Resources/Donkey Kong.woz
Normal file
Binary file not shown.
BIN
Resources/Hard Hat Mack - Disk 1, Side A.woz
Normal file
BIN
Resources/Hard Hat Mack - Disk 1, Side A.woz
Normal file
Binary file not shown.
BIN
Resources/Lode Runner.woz
Normal file
BIN
Resources/Lode Runner.woz
Normal file
Binary file not shown.
BIN
Resources/Merlin-8 v2.48 (DOS 3.3).woz
Normal file
BIN
Resources/Merlin-8 v2.48 (DOS 3.3).woz
Normal file
Binary file not shown.
BIN
Resources/PrintChar21.ttf
Normal file
BIN
Resources/PrintChar21.ttf
Normal file
Binary file not shown.
BIN
Resources/ProDOS_312.woz
Normal file
BIN
Resources/ProDOS_312.woz
Normal file
Binary file not shown.
BIN
Resources/ProDOS_402_System.woz
Normal file
BIN
Resources/ProDOS_402_System.woz
Normal file
Binary file not shown.
BIN
Resources/Sneakers.woz
Normal file
BIN
Resources/Sneakers.woz
Normal file
Binary file not shown.
BIN
Resources/Wavy Navy.woz
Normal file
BIN
Resources/Wavy Navy.woz
Normal file
Binary file not shown.
BIN
Resources/Xonix.woz
Normal file
BIN
Resources/Xonix.woz
Normal file
Binary file not shown.
BIN
Resources/apple.rom
Normal file
BIN
Resources/apple.rom
Normal file
Binary file not shown.
BIN
Resources/qbit.woz
Normal file
BIN
Resources/qbit.woz
Normal file
Binary file not shown.
|
@ -14,14 +14,14 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "6502.h"
|
#include "6502.h"
|
||||||
#include "woz.h"
|
#include "../dev/disk/woz.h"
|
||||||
|
|
||||||
|
|
||||||
void ViewController_spk_up_play(void);
|
void ViewController_spk_up_play(void);
|
||||||
void ViewController_spk_dn_play(void);
|
void ViewController_spk_dn_play(void);
|
||||||
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "../util/common.h"
|
||||||
|
|
||||||
|
|
||||||
#define SOFTRESET_VECTOR 0x3F2
|
#define SOFTRESET_VECTOR 0x3F2
|
||||||
|
@ -43,12 +43,12 @@ unsigned long long clk_6502_per_frm_set = default_MHz_6502 / fps;
|
||||||
unsigned long long tick_per_sec = G;
|
unsigned long long tick_per_sec = G;
|
||||||
unsigned long long tick_6502_per_sec = 0;
|
unsigned long long tick_6502_per_sec = 0;
|
||||||
|
|
||||||
INLINE unsigned long long rdtsc(void)
|
//INLINE unsigned long long rdtsc(void)
|
||||||
{
|
//{
|
||||||
unsigned hi, lo;
|
// unsigned hi, lo;
|
||||||
__asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi) );
|
// __asm__ __volatile__ ("rdtsc" : "=a"(lo), "=d"(hi) );
|
||||||
return ( (unsigned long long)lo) | ( ((unsigned long long)hi) << 32 );
|
// return ( (unsigned long long)lo) | ( ((unsigned long long)hi) << 32 );
|
||||||
}
|
//}
|
||||||
|
|
||||||
m6502_t m6502 = {
|
m6502_t m6502 = {
|
||||||
0, // A
|
0, // A
|
||||||
|
@ -538,7 +538,7 @@ INLINE int m6502_Step() {
|
||||||
case 0x75: ADC( src_zp_X() ); return 4; // ADC zpg,X
|
case 0x75: ADC( src_zp_X() ); return 4; // ADC zpg,X
|
||||||
case 0x76: ROR( dest_zp_X() ); return 6; // ROR zpg,X
|
case 0x76: ROR( dest_zp_X() ); return 6; // ROR zpg,X
|
||||||
// case 0x77:
|
// case 0x77:
|
||||||
case 0x78: SEI(); break; // SEI
|
case 0x78: SEI(); return 2; // SEI
|
||||||
case 0x79: ADC( src_abs_Y() ); return 4; // ADC abs,Y
|
case 0x79: ADC( src_abs_Y() ); return 4; // ADC abs,Y
|
||||||
// case 0x7A:
|
// case 0x7A:
|
||||||
// case 0x7B:
|
// case 0x7B:
|
||||||
|
@ -610,8 +610,8 @@ INLINE int m6502_Step() {
|
||||||
case 0xBD: LDA( src_abs_X() ); return 4; // LDA abs,X
|
case 0xBD: LDA( src_abs_X() ); return 4; // LDA abs,X
|
||||||
case 0xBE: LDX( src_abs_Y() ); return 4; // LDX abs,Y
|
case 0xBE: LDX( src_abs_Y() ); return 4; // LDX abs,Y
|
||||||
// case 0xBF:
|
// case 0xBF:
|
||||||
case 0xC0: CPY( imm() ); break; // CPY imm
|
case 0xC0: CPY( imm() ); return 2; // CPY imm
|
||||||
case 0xC1: CMP( src_X_ind() ) ; break; // LDA X,ind
|
case 0xC1: CMP( src_X_ind() ) ; return 6; // LDA X,ind
|
||||||
// case 0xC2:
|
// case 0xC2:
|
||||||
// case 0xC3:
|
// case 0xC3:
|
||||||
case 0xC4: CPY( src_zp() ); return 3; // CPY zpg
|
case 0xC4: CPY( src_zp() ); return 3; // CPY zpg
|
||||||
|
@ -624,7 +624,7 @@ INLINE int m6502_Step() {
|
||||||
// case 0xCB:
|
// case 0xCB:
|
||||||
case 0xCC: CPY( src_abs() ); return 4; // CPY abs
|
case 0xCC: CPY( src_abs() ); return 4; // CPY abs
|
||||||
case 0xCD: CMP( src_abs() ); return 4; // CMP abs
|
case 0xCD: CMP( src_abs() ); return 4; // CMP abs
|
||||||
case 0xCE: DEC( dest_abs() ); return 4; // DEC abs
|
case 0xCE: DEC( dest_abs() ); return 6; // DEC abs
|
||||||
// case 0xCF:
|
// case 0xCF:
|
||||||
case 0xD0: BNE( rel_addr() ); return 2; // BNE rel
|
case 0xD0: BNE( rel_addr() ); return 2; // BNE rel
|
||||||
case 0xD1: CMP( src_ind_Y() ); return 5; // CMP ind,Y
|
case 0xD1: CMP( src_ind_Y() ); return 5; // CMP ind,Y
|
||||||
|
@ -672,7 +672,7 @@ INLINE int m6502_Step() {
|
||||||
// case 0xFB:
|
// case 0xFB:
|
||||||
// case 0xFC:
|
// case 0xFC:
|
||||||
case 0xFD: SBC( src_abs_X() ); return 4; // SBC abs,X
|
case 0xFD: SBC( src_abs_X() ); return 4; // SBC abs,X
|
||||||
case 0xFE: INC( dest_abs_X() ); return 6; // INC abs,X
|
case 0xFE: INC( dest_abs_X() ); return 7; // INC abs,X
|
||||||
// case 0xFF:
|
// case 0xFF:
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -804,6 +804,11 @@ void m6502_Run() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if ( m6502.clktime - disk.clk_last_access > clk_diskAcceleratorTimeout ) {
|
||||||
|
clk_6502_per_frm = clk_6502_per_frm_set;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
// clock_t end = clock();
|
// clock_t end = clock();
|
||||||
// double execution_time = ((double) (end - start)) / CLOCKS_PER_SEC;
|
// double execution_time = ((double) (end - start)) / CLOCKS_PER_SEC;
|
||||||
// unsigned long long e = rdtsc();
|
// unsigned long long e = rdtsc();
|
||||||
|
@ -814,10 +819,17 @@ void m6502_Run() {
|
||||||
// mhz = clktime / (execution_time * M);
|
// mhz = clktime / (execution_time * M);
|
||||||
}
|
}
|
||||||
|
|
||||||
void read_rom( const char * filename, uint8_t * rom, const uint16_t addr ) {
|
void read_rom( const char * bundlePath, const char * filename, uint8_t * rom, const uint16_t addr ) {
|
||||||
FILE * f = fopen(filename, "rb");
|
|
||||||
|
char fullPath[256];
|
||||||
|
|
||||||
|
strcpy( fullPath, bundlePath );
|
||||||
|
strcat(fullPath, "/");
|
||||||
|
strcat(fullPath, filename);
|
||||||
|
|
||||||
|
FILE * f = fopen(fullPath, "rb");
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
perror("Failed: ");
|
perror("Failed to read ROM: ");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -831,15 +843,17 @@ void read_rom( const char * filename, uint8_t * rom, const uint16_t addr ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void m6502_ColdReset() {
|
void m6502_ColdReset( const char * bundlePath ) {
|
||||||
inst_cnt = 0;
|
inst_cnt = 0;
|
||||||
mhz = (double)MHz_6502 / M;
|
mhz = (double)MHz_6502 / M;
|
||||||
|
|
||||||
epoch = rdtsc();
|
printf("Bundlepath: %s", bundlePath);
|
||||||
sleep(1);
|
|
||||||
unsigned long long e = rdtsc();
|
// epoch = rdtsc();
|
||||||
tick_per_sec = e - epoch;
|
// sleep(1);
|
||||||
tick_6502_per_sec = tick_per_sec / MHz_6502;
|
// unsigned long long e = rdtsc();
|
||||||
|
// tick_per_sec = e - epoch;
|
||||||
|
// tick_6502_per_sec = tick_per_sec / MHz_6502;
|
||||||
|
|
||||||
memset( RAM, 0, sizeof(Apple2_64K_RAM) );
|
memset( RAM, 0, sizeof(Apple2_64K_RAM) );
|
||||||
memset( RAM + 0xC000, 0, 0x1000 ); // I/O area should be 0
|
memset( RAM + 0xC000, 0, 0x1000 ); // I/O area should be 0
|
||||||
|
@ -865,10 +879,13 @@ void m6502_ColdReset() {
|
||||||
|
|
||||||
#else
|
#else
|
||||||
// Apple ][+ ROM
|
// Apple ][+ ROM
|
||||||
read_rom("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/Apple2Plus.rom", Apple2_12K_ROM, 0);
|
read_rom( bundlePath, "Apple2Plus.rom", Apple2_12K_ROM, 0);
|
||||||
|
// read_rom( "/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/", "Apple2Plus.rom", Apple2_12K_ROM, 0);
|
||||||
|
// read_rom("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/Apple2Plus.rom", Apple2_12K_ROM, 0);
|
||||||
memcpy(Apple2_64K_RAM + 0xD000, Apple2_12K_ROM, sizeof(Apple2_12K_ROM));
|
memcpy(Apple2_64K_RAM + 0xD000, Apple2_12K_ROM, sizeof(Apple2_12K_ROM));
|
||||||
// Disk ][ ROM in Slot 6
|
// Disk ][ ROM in Slot 6
|
||||||
read_rom("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/DISK_II_C600.ROM", Apple2_64K_RAM, 0xC600);
|
read_rom( bundlePath, "DISK_II_C600.ROM", Apple2_64K_RAM, 0xC600);
|
||||||
|
// read_rom( "/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/", "DISK_II_C600.ROM", Apple2_64K_RAM, 0xC600);
|
||||||
|
|
||||||
// WOZ DISK
|
// WOZ DISK
|
||||||
// woz_loadFile("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/DOS 3.3 System Master.woz");
|
// woz_loadFile("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/DOS 3.3 System Master.woz");
|
||||||
|
@ -876,7 +893,27 @@ void m6502_ColdReset() {
|
||||||
|
|
||||||
// woz_loadFile("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/Merlin-8 v2.48 (DOS 3.3).woz");
|
// woz_loadFile("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/Merlin-8 v2.48 (DOS 3.3).woz");
|
||||||
// woz_loadFile("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/DOS3.3.Launcher.2.2.woz");
|
// woz_loadFile("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/DOS3.3.Launcher.2.2.woz");
|
||||||
woz_loadFile("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/Apple DOS 3.3 January 1983.woz");
|
// woz_loadFile("/Users/trudnai/Library/Containers/com.gamealloy.A2Mac/Data/", "Apple DOS 3.3 January 1983.woz");
|
||||||
|
|
||||||
|
|
||||||
|
// GAMES
|
||||||
|
//woz_loadFile( bundlePath, "qbit.woz"); // Lode Runner, Hard Hat Mack, QBit, Crossfire, Heat Seaker, Flight Simulator
|
||||||
|
// woz_loadFile( bundlePath, "Donkey Kong.woz");
|
||||||
|
|
||||||
|
/**/// woz_loadFile( bundlePath, "Crossfire.woz");
|
||||||
|
// woz_loadFile( bundlePath, "Lode Runner.woz");
|
||||||
|
/**/// woz_loadFile( bundlePath, "Sneakers.woz");
|
||||||
|
/**/// woz_loadFile( bundlePath, "Wavy Navy.woz");
|
||||||
|
/**/// woz_loadFile( bundlePath, "Xonix.woz");
|
||||||
|
/**/// woz_loadFile( bundlePath, "Hard Hat Mack - Disk 1, Side A.woz");
|
||||||
|
|
||||||
|
|
||||||
|
// SYSTEM
|
||||||
|
/* Requires 64K */// woz_loadFile( bundlePath, "ProDOS_312.woz");
|
||||||
|
|
||||||
|
// woz_loadFile( bundlePath, "Merlin-8 v2.48 (DOS 3.3).woz");
|
||||||
|
woz_loadFile( bundlePath, "Apple DOS 3.3 January 1983.woz");
|
||||||
|
|
||||||
|
|
||||||
m6502.A = m6502.X = m6502.Y = 0xFF;
|
m6502.A = m6502.X = m6502.Y = 0xFF;
|
||||||
// reset vector
|
// reset vector
|
||||||
|
@ -1004,10 +1041,10 @@ void tst6502() {
|
||||||
// insert code here...
|
// insert code here...
|
||||||
printf("6502\n");
|
printf("6502\n");
|
||||||
|
|
||||||
m6502_ColdReset();
|
m6502_ColdReset( "" );
|
||||||
|
|
||||||
// clock_t start = clock();
|
// clock_t start = clock();
|
||||||
epoch = rdtsc();
|
// epoch = rdtsc();
|
||||||
m6502_Run();
|
m6502_Run();
|
||||||
// clock_t end = clock();
|
// clock_t end = clock();
|
||||||
// double execution_time = ((double) (end - start)) / CLOCKS_PER_SEC;
|
// double execution_time = ((double) (end - start)) / CLOCKS_PER_SEC;
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#define __6502_H__
|
#define __6502_H__
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "common.h"
|
#include "../../src/util/common.h"
|
||||||
|
|
||||||
|
|
||||||
extern unsigned long long MHz_6502;
|
extern unsigned long long MHz_6502;
|
||||||
|
@ -92,6 +92,21 @@ typedef struct disassembly_s {
|
||||||
} disassembly_t;
|
} disassembly_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef union videoMode_u {
|
||||||
|
struct {
|
||||||
|
uint8_t text : 1; // 0: graphics 1: text
|
||||||
|
uint8_t col80 : 1; // 0: 40 col 1: 80 col
|
||||||
|
uint8_t altChr : 1; // 0: normal 1: alternate character set
|
||||||
|
uint8_t mixed : 1; // 0: no mix 1: mixed graphics and text when in graphics mode
|
||||||
|
uint8_t hires : 1; // 0: loRes 1: hiRes
|
||||||
|
uint8_t page : 1; // 0: page 1 1: page 2 (aux video memory)
|
||||||
|
};
|
||||||
|
uint8_t mode;
|
||||||
|
} videoMode_t;
|
||||||
|
|
||||||
|
extern videoMode_t videoMode;
|
||||||
|
|
||||||
|
|
||||||
extern m6502_t m6502;
|
extern m6502_t m6502;
|
||||||
extern uint8_t * RAM;
|
extern uint8_t * RAM;
|
||||||
extern uint32_t * videoMemPtr;
|
extern uint32_t * videoMemPtr;
|
||||||
|
@ -101,12 +116,13 @@ extern void hires_Update(void);
|
||||||
extern double mips;
|
extern double mips;
|
||||||
extern double mhz;
|
extern double mhz;
|
||||||
|
|
||||||
#define fps 15
|
#define fps 30
|
||||||
|
|
||||||
extern void tst6502(void);
|
extern void tst6502(void);
|
||||||
extern void m6502_ColdReset(void);
|
extern void m6502_ColdReset( const char * bundlePath );
|
||||||
extern void m6502_Run(void);
|
extern void m6502_Run(void);
|
||||||
extern void kbdInput ( uint8_t code );
|
extern void kbdInput ( uint8_t code );
|
||||||
|
extern void setIO ( uint16_t ioaddr, uint8_t val );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,13 @@
|
||||||
#define __6502_INSTR_BRANCH_H__
|
#define __6502_INSTR_BRANCH_H__
|
||||||
|
|
||||||
INLINE void BRA( int8_t reladdr ) {
|
INLINE void BRA( int8_t reladdr ) {
|
||||||
|
uint8_t pg = m6502.PC >> 8;
|
||||||
m6502.PC += reladdr;
|
m6502.PC += reladdr;
|
||||||
|
#ifdef CLK_ABSOLUTE_PRECISE
|
||||||
|
m6502.clktime += m6502.PC >> 8 == pg ? 1 : 2;
|
||||||
|
#else
|
||||||
m6502.clktime++;
|
m6502.clktime++;
|
||||||
|
#endif
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if ( reladdr == -2 ) {
|
if ( reladdr == -2 ) {
|
||||||
dbgPrintf2("Infinite Loop at %04X!\n", m6502.PC);
|
dbgPrintf2("Infinite Loop at %04X!\n", m6502.PC);
|
||||||
|
|
|
@ -68,9 +68,9 @@ INLINE void RTS() {
|
||||||
|
|
||||||
// disk accelerator would only work for a certain amount of time
|
// disk accelerator would only work for a certain amount of time
|
||||||
// currently it is 200ms simulated times
|
// currently it is 200ms simulated times
|
||||||
if ( m6502.clktime - disk.clk_last_access > clk_diskAcceleratorTimeout ) {
|
// if ( m6502.clktime - disk.clk_last_access > clk_diskAcceleratorTimeout ) {
|
||||||
clk_6502_per_frm = clk_6502_per_frm_set;
|
// clk_6502_per_frm = clk_6502_per_frm_set;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "disk.h"
|
#include "disk.h"
|
||||||
#include "6502.h"
|
#include "../../cpu/6502.h"
|
||||||
#include "common.h"
|
#include "../../util/common.h"
|
||||||
#include "woz.h"
|
#include "woz.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,8 +17,9 @@ disk_t disk = {
|
||||||
0, // clk_since_last_read
|
0, // clk_since_last_read
|
||||||
};
|
};
|
||||||
|
|
||||||
const unsigned long long clk_6502_per_frm_diskAccelerator = 25 * M / fps; // disk acceleration bumps up CPU clock to 25 MHz
|
int diskAccelerator_speed = 25; // 0 means no acceleration
|
||||||
const unsigned long long clk_diskAcceleratorTimeout = 200000ULL;
|
//const unsigned long long clk_6502_per_frm_diskAccelerator = 25 * M / fps; // disk acceleration bumps up CPU clock to 25 MHz
|
||||||
|
//const unsigned long long clk_diskAcceleratorTimeout = 1000ULL;
|
||||||
|
|
||||||
|
|
||||||
// motor position from the magnet state
|
// motor position from the magnet state
|
||||||
|
@ -61,7 +62,10 @@ void disk_phase() {
|
||||||
// printf(", p:%d d:%d l:%d: ph:%u trk:%u)", position, direction, lastPosition, phase.count, woz_tmap.phase[phase.count]);
|
// printf(", p:%d d:%d l:%d: ph:%u trk:%u)", position, direction, lastPosition, phase.count, woz_tmap.phase[phase.count]);
|
||||||
|
|
||||||
disk.clk_last_access = m6502.clktime;
|
disk.clk_last_access = m6502.clktime;
|
||||||
clk_6502_per_frm = clk_6502_per_frm_diskAccelerator;
|
if ( diskAccelerator_speed > clk_6502_per_frm ) {
|
||||||
|
// clk_6502_per_frm = clk_6502_per_frm_diskAccelerator;
|
||||||
|
clk_6502_per_frm = diskAccelerator_speed * M / fps; // clk_6502_per_frm_diskAccelerator;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -75,7 +79,9 @@ void disk_phase() {
|
||||||
uint8_t disk_read() {
|
uint8_t disk_read() {
|
||||||
dbgPrintf("io_DISK_READ (S%u)\n", 6);
|
dbgPrintf("io_DISK_READ (S%u)\n", 6);
|
||||||
disk.clk_last_access = m6502.clktime;
|
disk.clk_last_access = m6502.clktime;
|
||||||
clk_6502_per_frm = clk_6502_per_frm_diskAccelerator;
|
if ( diskAccelerator_speed > 2 ) {
|
||||||
|
clk_6502_per_frm = diskAccelerator_speed * M / fps; // clk_6502_per_frm_diskAccelerator;
|
||||||
|
}
|
||||||
|
|
||||||
return woz_read();
|
return woz_read();
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#ifndef disk_h
|
#ifndef disk_h
|
||||||
#define disk_h
|
#define disk_h
|
||||||
|
|
||||||
#include "common.h"
|
#include "../../util/common.h"
|
||||||
|
|
||||||
|
|
||||||
#define minDiskTrackNum 0
|
#define minDiskTrackNum 0
|
||||||
|
@ -52,8 +52,10 @@ extern disk_t disk;
|
||||||
|
|
||||||
extern const int magnet_to_Poistion[16];
|
extern const int magnet_to_Poistion[16];
|
||||||
extern const int position_to_direction[8][8];
|
extern const int position_to_direction[8][8];
|
||||||
extern const unsigned long long clk_6502_per_frm_diskAccelerator;
|
|
||||||
extern const unsigned long long clk_diskAcceleratorTimeout;
|
extern int diskAccelerator_speed; // 0 means no acceleration
|
||||||
|
//extern const unsigned long long clk_6502_per_frm_diskAccelerator;
|
||||||
|
//extern const unsigned long long clk_diskAcceleratorTimeout;
|
||||||
|
|
||||||
extern void disk_phase(void);
|
extern void disk_phase(void);
|
||||||
extern uint8_t disk_read(void);
|
extern uint8_t disk_read(void);
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "woz.h"
|
#include "woz.h"
|
||||||
#include "disk.h"
|
#include "disk.h"
|
||||||
|
@ -85,13 +86,12 @@ uint8_t woz_read() {
|
||||||
return rand();
|
return rand();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WOZ_REAL_SPIN
|
||||||
if ( track != track_loaded ) {
|
if ( track != track_loaded ) {
|
||||||
woz_loadTrack(track);
|
woz_loadTrack(track);
|
||||||
track_loaded = track;
|
track_loaded = track;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef WOZ_REAL_SPIN
|
|
||||||
|
|
||||||
WOZread.shift32 = 0;
|
WOZread.shift32 = 0;
|
||||||
bitOffset = (m6502.clktime >> 2) & 7;
|
bitOffset = (m6502.clktime >> 2) & 7;
|
||||||
trackOffset = (m6502.clktime >> 5) % WOZ_TRACK_BYTE_COUNT;
|
trackOffset = (m6502.clktime >> 5) % WOZ_TRACK_BYTE_COUNT;
|
||||||
|
@ -254,22 +254,24 @@ uint8_t woz_read() {
|
||||||
clkelpased = m6502.clktime - m6502.clklast;
|
clkelpased = m6502.clktime - m6502.clklast;
|
||||||
m6502.clklast = m6502.clktime;
|
m6502.clklast = m6502.clktime;
|
||||||
|
|
||||||
|
uint16_t usedBytes = woz_trks[track].bytes_used < WOZ_TRACK_BYTE_COUNT ? woz_trks[track].bytes_used : WOZ_TRACK_BYTE_COUNT;
|
||||||
|
|
||||||
if ( clkelpased > 100 ) {
|
if ( clkelpased > 100 ) {
|
||||||
// printf("NEED SYNC : %llu\n", clkelpased);
|
// printf("NEED SYNC : %llu\n", clkelpased);
|
||||||
bitOffset = (clkelpased >> 2) & 7;
|
bitOffset = (clkelpased >> 2) & 7;
|
||||||
trackOffset += ((clkelpased >> 5) +100) % WOZ_TRACK_BYTE_COUNT;
|
trackOffset += ((clkelpased >> 5) +100) % usedBytes;
|
||||||
WOZread.data = woz_trks[track].data[trackOffset];
|
WOZread.data = woz_trks[track].data[trackOffset];
|
||||||
}
|
}
|
||||||
|
|
||||||
// to avoid infinite loop and to search for bit 7 high
|
// to avoid infinite loop and to search for bit 7 high
|
||||||
for ( int i = 0; i < WOZ_TRACK_BYTE_COUNT * 8; i++ ) {
|
for ( int i = 0; i < usedBytes * 8; i++ ) {
|
||||||
if ( ++bitOffset >= 8 ) {
|
if ( ++bitOffset >= 8 ) {
|
||||||
bitOffset = 0;
|
bitOffset = 0;
|
||||||
// if ( ++trackOffset >= WOZ_TRACK_BYTE_COUNT ) {
|
// if ( ++trackOffset >= WOZ_TRACK_BYTE_COUNT ) {
|
||||||
// trackOffset = 0;
|
// trackOffset = 0;
|
||||||
// }
|
// }
|
||||||
trackOffset++;
|
trackOffset++;
|
||||||
trackOffset %= WOZ_TRACK_BYTE_COUNT;
|
trackOffset %= usedBytes;
|
||||||
|
|
||||||
// printf("offs:%u\n", trackOffset);
|
// printf("offs:%u\n", trackOffset);
|
||||||
WOZread.data = woz_trks[track].data[trackOffset];
|
WOZread.data = woz_trks[track].data[trackOffset];
|
||||||
|
@ -292,10 +294,17 @@ uint8_t woz_read() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void woz_loadFile( const char * filename ) {
|
void woz_loadFile( const char * bundlePath, const char * filename ) {
|
||||||
FILE * f = fopen(filename, "rb");
|
|
||||||
|
char fullpath[256];
|
||||||
|
|
||||||
|
strcpy(fullpath, bundlePath);
|
||||||
|
strcat(fullpath, "/");
|
||||||
|
strcat(fullpath, filename);
|
||||||
|
|
||||||
|
FILE * f = fopen(fullpath, "rb");
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
perror("Failed: ");
|
perror("Failed to read WOZ: ");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,7 @@ extern uint8_t WOZlatch;
|
||||||
|
|
||||||
|
|
||||||
extern uint8_t woz_read(void);
|
extern uint8_t woz_read(void);
|
||||||
extern void woz_loadFile( const char * filename );
|
extern void woz_loadFile( const char * bundlePath, const char * filename );
|
||||||
|
|
||||||
|
|
||||||
#endif /* woz_h */
|
#endif /* woz_h */
|
||||||
|
|
|
@ -24,6 +24,8 @@ typedef union address16_u {
|
||||||
} address16_t;
|
} address16_t;
|
||||||
|
|
||||||
|
|
||||||
|
videoMode_t videoMode = { 1 }; // 40 col text, page 1
|
||||||
|
|
||||||
|
|
||||||
uint8_t Apple2_Dummy_Page[ 1 * PG ]; // Dummy Page for discarding data
|
uint8_t Apple2_Dummy_Page[ 1 * PG ]; // Dummy Page for discarding data
|
||||||
uint8_t Apple2_512_AUX[ 2 * PG ] = {0}; // Auxiliary bank for page 0 and 1
|
uint8_t Apple2_512_AUX[ 2 * PG ] = {0}; // Auxiliary bank for page 0 and 1
|
||||||
|
@ -178,11 +180,35 @@ struct MEMcfg_s {
|
||||||
} MEMcfg = { 1, 0, 0, 0, 0 };
|
} MEMcfg = { 1, 0, 0, 0, 0 };
|
||||||
|
|
||||||
enum mmio {
|
enum mmio {
|
||||||
|
// Keyboard
|
||||||
io_KBD = 0xC000,
|
io_KBD = 0xC000,
|
||||||
io_KBDSTRB = 0xC010,
|
io_KBDSTRB = 0xC010,
|
||||||
|
|
||||||
|
// Audio
|
||||||
io_SPKR = 0xC030,
|
io_SPKR = 0xC030,
|
||||||
|
|
||||||
|
// Video
|
||||||
|
io_VID_80col_OFF = 0xC00C,
|
||||||
|
io_VID_80col_ON = 0xC00D,
|
||||||
|
io_VID_AltChar_OFF = 0xC00E,
|
||||||
|
io_VID_AltChar_ON = 0xC00F,
|
||||||
|
io_VID_Text_OFF = 0xC050,
|
||||||
|
io_VID_Text_ON = 0xC051,
|
||||||
|
io_VID_Mixed_OFF = 0xC052,
|
||||||
|
io_VID_Mixed_ON = 0xC053,
|
||||||
|
io_VID_Page2_OFF = 0xC054,
|
||||||
|
io_VID_Page2_ON = 0xC055,
|
||||||
|
io_VID_Hires_OFF = 0xC056,
|
||||||
|
io_VID_Hires_ON = 0xC057,
|
||||||
|
|
||||||
|
// Game Controller
|
||||||
|
io_PDL0 = 0xC064,
|
||||||
|
io_PDL1 = 0xC065,
|
||||||
|
io_PDL2 = 0xC066,
|
||||||
|
io_PDL3 = 0xC067,
|
||||||
|
io_PDL_STROBE = 0xC070,
|
||||||
|
|
||||||
|
// Disk ][
|
||||||
io_DISK_PHASE0_OFF = 0xC080,
|
io_DISK_PHASE0_OFF = 0xC080,
|
||||||
io_DISK_PHASE0_ON = 0xC081,
|
io_DISK_PHASE0_ON = 0xC081,
|
||||||
io_DISK_PHASE1_OFF = 0xC082,
|
io_DISK_PHASE1_OFF = 0xC082,
|
||||||
|
@ -200,6 +226,7 @@ enum mmio {
|
||||||
io_DISK_CLEAR = 0xC08E,
|
io_DISK_CLEAR = 0xC08E,
|
||||||
io_DISK_SHIFT = 0xC08F,
|
io_DISK_SHIFT = 0xC08F,
|
||||||
|
|
||||||
|
// Memory
|
||||||
io_MEM_RDRAM_NOWR_2 = 0xC080,
|
io_MEM_RDRAM_NOWR_2 = 0xC080,
|
||||||
io_MEM_RDROM_WRAM_2 = 0xC081,
|
io_MEM_RDROM_WRAM_2 = 0xC081,
|
||||||
io_MEM_RDROM_NOWR_2 = 0xC082,
|
io_MEM_RDROM_NOWR_2 = 0xC082,
|
||||||
|
@ -239,6 +266,64 @@ INLINE uint8_t ioRead( uint16_t addr ) {
|
||||||
|
|
||||||
return RAM[io_SPKR];
|
return RAM[io_SPKR];
|
||||||
|
|
||||||
|
case io_VID_80col_OFF:
|
||||||
|
videoMode.col80 = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_80col_ON:
|
||||||
|
videoMode.col80 = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_AltChar_OFF:
|
||||||
|
videoMode.altChr = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_AltChar_ON:
|
||||||
|
videoMode.altChr = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_Text_OFF:
|
||||||
|
videoMode.text = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_Text_ON:
|
||||||
|
videoMode.text = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_Mixed_OFF:
|
||||||
|
videoMode.mixed = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_Mixed_ON:
|
||||||
|
videoMode.mixed = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_Page2_OFF:
|
||||||
|
videoMode.page = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_Page2_ON:
|
||||||
|
videoMode.page = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_Hires_OFF:
|
||||||
|
videoMode.hires = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case io_VID_Hires_ON:
|
||||||
|
videoMode.hires = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case io_PDL0:
|
||||||
|
case io_PDL1:
|
||||||
|
case io_PDL2:
|
||||||
|
case io_PDL3:
|
||||||
|
// if ( RAM[addr] > 127 ) {
|
||||||
|
// RAM[addr]--;
|
||||||
|
// }
|
||||||
|
return RAM[addr];
|
||||||
|
|
||||||
case io_MEM_RDRAM_NOWR_2:
|
case io_MEM_RDRAM_NOWR_2:
|
||||||
case io_MEM_RDROM_WRAM_2:
|
case io_MEM_RDROM_WRAM_2:
|
||||||
case io_MEM_RDROM_NOWR_2:
|
case io_MEM_RDROM_NOWR_2:
|
||||||
|
@ -380,6 +465,11 @@ INLINE uint8_t ioRead( uint16_t addr ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void setIO ( uint16_t ioaddr, uint8_t val ) {
|
||||||
|
RAM[ioaddr] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void kbdInput ( uint8_t code ) {
|
void kbdInput ( uint8_t code ) {
|
||||||
// printf("kbdInput: %02X ('%c')\n", code, isprint(code) ? code : ' ');
|
// printf("kbdInput: %02X ('%c')\n", code, isprint(code) ? code : ' ');
|
||||||
switch ( code ) {
|
switch ( code ) {
|
||||||
|
@ -397,7 +487,7 @@ void kbdInput ( uint8_t code ) {
|
||||||
|
|
||||||
code |= 0x80;
|
code |= 0x80;
|
||||||
|
|
||||||
while ( RAM[io_KBD] > 0x7F ) {
|
for( int i = 1000; i && ( RAM[io_KBD] > 0x7F ); --i ) {
|
||||||
usleep(10);
|
usleep(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,6 +573,11 @@ static void memwrite( uint16_t addr, uint8_t byte ) {
|
||||||
**/
|
**/
|
||||||
INLINE uint8_t fetch() {
|
INLINE uint8_t fetch() {
|
||||||
disHexB( disassembly.pOpcode, RAM[m6502.PC] );
|
disHexB( disassembly.pOpcode, RAM[m6502.PC] );
|
||||||
|
#ifdef CLK_ABSOLUTE_PRECISE
|
||||||
|
if ( (m6502.PC & 0xFF) >= 0xFF ) {
|
||||||
|
m6502.clktime++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return memread( m6502.PC++ );
|
return memread( m6502.PC++ );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,6 +588,11 @@ INLINE uint8_t fetch() {
|
||||||
INLINE uint16_t fetch16() {
|
INLINE uint16_t fetch16() {
|
||||||
uint16_t word = memread16( m6502.PC );
|
uint16_t word = memread16( m6502.PC );
|
||||||
// disPrintf(disassembly.comment, "fetch16:%04X", word);
|
// disPrintf(disassembly.comment, "fetch16:%04X", word);
|
||||||
|
#ifdef CLK_ABSOLUTE_PRECISE
|
||||||
|
if ( (m6502.PC & 0xFF) >= 0xFE ) {
|
||||||
|
m6502.clktime++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
m6502.PC += 2;
|
m6502.PC += 2;
|
||||||
disHexW( disassembly.pOpcode, word );
|
disHexW( disassembly.pOpcode, word );
|
||||||
return word;
|
return word;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user