FruitMachine-Swift/FruitMachine/AppleII/Peripherals/DiskII.swift

46 lines
1.4 KiB
Swift

//
// DiskII.swift
// FruitMachine
//
// Created by Christopher Rohl on 8/2/17.
// Copyright © 2017 Christopher Rohl. All rights reserved.
//
import Cocoa
class DiskII: NSObject, Peripheral {
let slotNumber: Int
let romManager: ROMManager
var readMemoryOverride: ReadOverride? = nil
var writeMemoryOverride: WriteOverride? = nil
init(slot: Int, romPath: String) {
slotNumber = slot
romManager = ROMManager(path: romPath, atAddress: 0x0, size: 256)
super.init()
readMemoryOverride = ReadOverride(start: UInt16(0xC000 + (0x100 * slotNumber)),
end: UInt16(0xC0FF + (0x100 * slotNumber)),
readAnyway: false,
action: actionReadMemory)
}
func actionReadMemory(something: AnyObject, address: UInt16, byte: UInt8?) -> UInt8? {
let offset: UInt16 = 0xC000 + UInt16(slotNumber*0x100)
let local = address - offset
return getMemoryMappedByte(address: local)
}
private func getMemoryMappedByte(address: UInt16) -> UInt8 {
//Disk II just maps its ROM to the memory addressed by the slot.
return romManager.ROM[Int(address)]
}
func installOverrides() {
CPU.sharedInstance.memoryInterface.read_overrides.append(readMemoryOverride!)
}
}