From c0a340c0261b99cf1fb086e1dd3bcf150464a343 Mon Sep 17 00:00:00 2001 From: Luigi Thirty Date: Sat, 12 Aug 2017 20:24:30 -0400 Subject: [PATCH] weirdo swift thing --- FruitMachine.xcodeproj/project.pbxproj | 2 +- .../xcschemes/xcschememanagement.plist | 2 +- FruitMachine/AppleII/AppleII.swift | 5 +++-- FruitMachine/AppleII/AppleIIBase.swift | 16 +++++++-------- FruitMachine/AppleII/AppleIIPlus.swift | 2 +- .../AppleII/Peripherals/DiskII/DiskII.swift | 20 +++++++++++++------ .../Peripherals/DiskII/DiskImage.swift | 1 + FruitMachine/AppleIIViewController.swift | 6 ++++-- 8 files changed, 33 insertions(+), 21 deletions(-) diff --git a/FruitMachine.xcodeproj/project.pbxproj b/FruitMachine.xcodeproj/project.pbxproj index faccc14..7f92441 100644 --- a/FruitMachine.xcodeproj/project.pbxproj +++ b/FruitMachine.xcodeproj/project.pbxproj @@ -567,7 +567,7 @@ GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = s; + GCC_OPTIMIZATION_LEVEL = 0; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; diff --git a/FruitMachine.xcodeproj/xcuserdata/luigi.xcuserdatad/xcschemes/xcschememanagement.plist b/FruitMachine.xcodeproj/xcuserdata/luigi.xcuserdatad/xcschemes/xcschememanagement.plist index 4c4af6a..6f37536 100644 --- a/FruitMachine.xcodeproj/xcuserdata/luigi.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/FruitMachine.xcodeproj/xcuserdata/luigi.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,7 +4,7 @@ SchemeUserState - FruitMachine Release.xcscheme + Copy of FruitMachine.xcscheme orderHint 1 diff --git a/FruitMachine/AppleII/AppleII.swift b/FruitMachine/AppleII/AppleII.swift index 6bc0bc3..9e5f93e 100644 --- a/FruitMachine/AppleII/AppleII.swift +++ b/FruitMachine/AppleII/AppleII.swift @@ -37,10 +37,11 @@ class AppleII: AppleIIBase { } override func installOverrides() { - for (_, peripheral) in backplane { + for peripheral in backplane { if(peripheral != nil) { - peripheral!.installOverrides() + peripheral!.installOverrides() } + } CPU.sharedInstance.memoryInterface.read_overrides.append(SoftswitchOverrides.readKeyboard) diff --git a/FruitMachine/AppleII/AppleIIBase.swift b/FruitMachine/AppleII/AppleIIBase.swift index 18bb97f..b260dfb 100644 --- a/FruitMachine/AppleII/AppleIIBase.swift +++ b/FruitMachine/AppleII/AppleIIBase.swift @@ -22,7 +22,8 @@ var EmulatedSystemInstance: AppleIIBase? class AppleIIBase: NSObject, EmulatedSystem { //Peripherals - var backplane = [Int: Peripheral?]() + //var backplane = [Int: Peripheral]() + var backplane = [Peripheral?](repeating: nil, count: 8) var frameCounter: Int = 0 var CPU_FREQUENCY: Double @@ -106,18 +107,17 @@ class AppleIIBase: NSObject, EmulatedSystem { let slot6 = defaults.string(forKey: "a2_Peripherals_Slot6") if(slot6 == "Disk II") { backplane[6] = DiskII(slot: 6, romPath: "/Users/luigi/apple2/341-0027-a.p5") + //(backplane[6] as! DiskII).attachDiskImage(imagePath: "/Users/luigi/apple2/Prodos_2_4_1.po") } - - //(backplane[6] as! DiskII).attachDiskImage(imagePath: "/Users/luigi/apple2/Prodos_2_4_1.po") - (backplane[6] as! DiskII).attachDiskImage(imagePath: "/Users/luigi/apple2/clean332sysmas.do") + } + + func attachImageToDiskDrive(drive: Peripheral, image: String) { + print("drive is \(drive)") + (drive as! DiskII).attachDiskImage(imagePath: image) } func doColdReset() { CPU.sharedInstance.coldReset() - - //Reinitialize peripherals in case they changed. - setupPeripherals() - doReset() } diff --git a/FruitMachine/AppleII/AppleIIPlus.swift b/FruitMachine/AppleII/AppleIIPlus.swift index bd5d362..9f31905 100644 --- a/FruitMachine/AppleII/AppleIIPlus.swift +++ b/FruitMachine/AppleII/AppleIIPlus.swift @@ -38,7 +38,7 @@ class AppleIIPlus: AppleIIBase { } override func installOverrides() { - for (_, peripheral) in backplane { + for peripheral in backplane { if(peripheral != nil) { peripheral!.installOverrides() } diff --git a/FruitMachine/AppleII/Peripherals/DiskII/DiskII.swift b/FruitMachine/AppleII/Peripherals/DiskII/DiskII.swift index ad12fe1..431aa7f 100644 --- a/FruitMachine/AppleII/Peripherals/DiskII/DiskII.swift +++ b/FruitMachine/AppleII/Peripherals/DiskII/DiskII.swift @@ -35,7 +35,7 @@ import Cocoa */ class DiskII: NSObject, Peripheral, HasROM { - let debug = false + let debug = true enum MotorPhase { case Phase0 @@ -86,6 +86,7 @@ class DiskII: NSObject, Peripheral, HasROM { init(slot: Int, romPath: String) { slotNumber = slot romManager = ROMManager(path: romPath, atAddress: 0x0, size: 256) + diskImage = nil super.init() @@ -106,7 +107,9 @@ class DiskII: NSObject, Peripheral, HasROM { } func attachDiskImage(imagePath: String) { - diskImage = DiskImage(diskPath: imagePath) + let image = DiskImage(diskPath: imagePath) + self.diskImage = image + print("attached image to DiskII \(self)") } //http://ftp.twaren.net/NetBSD/misc/wrstuden/Apple_PDFs/Software%20control%20of%20IWM.pdf @@ -215,7 +218,12 @@ class DiskII: NSObject, Peripheral, HasROM { let blkLo: UInt8 let blkHi: UInt8 - if(diskImage!.image is Dos33Image) { + if(diskImage == nil) { + print("No disk inserted, aborting. DiskII \(self)") + return 0x00 + } + + if(diskImage?.image is Dos33Image) { trk = CPU.sharedInstance.memoryInterface.readByte(offset: 0xB7EC, bypassOverrides: true) sec = CPU.sharedInstance.memoryInterface.readByte(offset: 0xB7ED, bypassOverrides: true) mode = CPU.sharedInstance.memoryInterface.readByte(offset: 0xB7F4, bypassOverrides: true) @@ -223,7 +231,7 @@ class DiskII: NSObject, Peripheral, HasROM { blkLo = 0 blkHi = 0 } - else if(diskImage!.image is ProdosImage) { + else if(diskImage?.image is ProdosImage) { trk = CPU.sharedInstance.memoryInterface.readByte(offset: 0x41, bypassOverrides: true) sec = CPU.sharedInstance.memoryInterface.readByte(offset: 0x3D, bypassOverrides: true) mode = CPU.sharedInstance.memoryInterface.readByte(offset: 0x42, bypassOverrides: true) @@ -258,9 +266,9 @@ class DiskII: NSObject, Peripheral, HasROM { } if(debug) { - if(diskImage!.image is Dos33Image) { + if(diskImage?.image is Dos33Image) { print("Head is at nibble \(mediaPosition) of track \(currentTrack). DOS is trying to \(modeString) T\(trk) S\(sec).") - } else if(diskImage!.image is ProdosImage) { + } else if(diskImage?.image is ProdosImage) { print("Head is at nibble \(mediaPosition) of track \(currentTrack). ProDOS is trying to \(modeString) Block $\(blkHi.asHexString())\(blkLo.asHexString()) (T\(trk) S\(sec)).") if(mode == 1) { diff --git a/FruitMachine/AppleII/Peripherals/DiskII/DiskImage.swift b/FruitMachine/AppleII/Peripherals/DiskII/DiskImage.swift index 768be0e..599e157 100644 --- a/FruitMachine/AppleII/Peripherals/DiskII/DiskImage.swift +++ b/FruitMachine/AppleII/Peripherals/DiskII/DiskImage.swift @@ -138,6 +138,7 @@ class DiskImage: NSObject { print("Couldn't load disk image") return } + if(filename.contains(".do")) { //Is this a DOS 3.3 format image? Read one sector from track $11. image = Dos33Image() diff --git a/FruitMachine/AppleIIViewController.swift b/FruitMachine/AppleIIViewController.swift index 958b649..dae74e8 100644 --- a/FruitMachine/AppleIIViewController.swift +++ b/FruitMachine/AppleIIViewController.swift @@ -94,7 +94,8 @@ class AppleIIViewController: NSViewController { } @IBAction func doColdReset(_ sender: Any) { - setModel() //In case it changed + setModel() + EmulatedSystemInstance!.setupPeripherals() EmulatedSystemInstance!.doColdReset() } @@ -109,7 +110,8 @@ class AppleIIViewController: NSViewController { picker.allowedFileTypes = ["do", "po"] if(picker.runModal() == .OK) { - (EmulatedSystemInstance!.backplane[6] as! DiskII).attachDiskImage(imagePath: picker.url!.path) + print("insertDiskIntoDrive1: \(EmulatedSystemInstance!.backplane[6]!)") + EmulatedSystemInstance!.attachImageToDiskDrive(drive: EmulatedSystemInstance!.backplane[6]!, image: picker.url!.path) } }