diff --git a/FruitMachine/AppleII/Peripherals/DiskII/DiskII.swift b/FruitMachine/AppleII/Peripherals/DiskII/DiskII.swift index 797fd82..f4126e5 100644 --- a/FruitMachine/AppleII/Peripherals/DiskII/DiskII.swift +++ b/FruitMachine/AppleII/Peripherals/DiskII/DiskII.swift @@ -77,8 +77,7 @@ class DiskII: NSObject, Peripheral { var mediaPosition: Int = 0 var motorPhase: MotorPhase = .Phase0 - var diskImage = DiskImage(diskPath: "/Users/luigi/apple2/clean332sysmas.do") - + var diskImage: DiskImage? init(slot: Int, romPath: String) { slotNumber = slot @@ -102,6 +101,10 @@ class DiskII: NSObject, Peripheral { action: actionDispatchOperation) } + func attachDiskImage(imagePath: String) { + diskImage = DiskImage(diskPath: imagePath) + } + //http://ftp.twaren.net/NetBSD/misc/wrstuden/Apple_PDFs/Software%20control%20of%20IWM.pdf private func actionDispatchOperation(something: AnyObject, address: UInt16, byte: UInt8?) -> UInt8? { let operationNumber = UInt8(address & 0xFF) - UInt8(0x80 & 0xFF) - UInt8(0x10 * slotNumber) @@ -224,7 +227,7 @@ class DiskII: NSObject, Peripheral { modeString = "???" } - print("Reading byte \(mediaPosition) of track \(currentTrack). DOS is \(modeString) T\(trk) S\(sec).") + print("Head is at nibble \(mediaPosition) of track \(currentTrack). DOS is \(modeString) T\(trk) S\(sec).") return readByteOfTrack(track: currentTrack, advance: softswitches.MotorPowered ? 1 : 0) } case 13: @@ -243,11 +246,14 @@ class DiskII: NSObject, Peripheral { } func readByteOfTrack(track: Int, advance: Int) -> UInt8 { - let trackData = diskImage.encodedTracks[track] + if(diskImage == nil) { return 0x00 } //No disk inserted, fail. - let result = trackData[mediaPosition] + let trackData = diskImage?.encodedTracks[track] + if(trackData == nil) { return 0x00 } //No disk inserted, fail. + + let result = trackData![mediaPosition] //Advance the drive to the next byte - mediaPosition = (mediaPosition + advance) % trackData.count + mediaPosition = (mediaPosition + advance) % trackData!.count return result } diff --git a/FruitMachine/AppleIIViewController.swift b/FruitMachine/AppleIIViewController.swift index 2d438d8..f53312f 100644 --- a/FruitMachine/AppleIIViewController.swift +++ b/FruitMachine/AppleIIViewController.swift @@ -25,13 +25,14 @@ class AppleIIViewController: NSViewController { // Do view setup here. preferencesWindowController = PreferencesWindowController() - self.view.addSubview(computer.emulatorView) setupDriveNotifications() - NotificationCenter.default.addObserver(self, selector: #selector(self.debuggerBreak), name: DebuggerNotifications.Break, object: nil) + let drive = computer.backplane[6]! as! DiskII + drive.attachDiskImage(imagePath: "/Users/luigi/apple2/clean332sysmas.do") + self.frameTimer = Timer.scheduledTimer(timeInterval: 1.0/60.0, target: self, selector: #selector(runEmulation), diff --git a/FruitMachine/FruitMachine.storyboard b/FruitMachine/FruitMachine.storyboard index 2fa1cf0..bbd8ce2 100644 --- a/FruitMachine/FruitMachine.storyboard +++ b/FruitMachine/FruitMachine.storyboard @@ -64,6 +64,12 @@ + + + + + +