From cfb764b85aca78ea97be0b0bc94be51e39be4a06 Mon Sep 17 00:00:00 2001 From: Luigi Thirty Date: Thu, 10 Aug 2017 18:59:55 -0400 Subject: [PATCH] page 2 --- FruitMachine/AppleII/AppleIIBase.swift | 33 +++++++++++-------- .../AppleII/SoftswitchOverrides.swift | 2 +- .../AppleII/Video/Modes/LoresMode.swift | 1 + .../AppleII/Video/Modes/TextMode.swift | 6 +++- .../AppleII/Video/Modes/VideoModes.swift | 3 ++ 5 files changed, 30 insertions(+), 15 deletions(-) diff --git a/FruitMachine/AppleII/AppleIIBase.swift b/FruitMachine/AppleII/AppleIIBase.swift index 42ee388..8faf9cd 100644 --- a/FruitMachine/AppleII/AppleIIBase.swift +++ b/FruitMachine/AppleII/AppleIIBase.swift @@ -142,30 +142,37 @@ class AppleIIBase: NSObject, EmulatedSystem { videoMode = getCurrentVideoMode(switches: videoSoftswitches) + let videoMemoryStart: Address + if(videoSoftswitches.PAGE_2) { + videoMemoryStart = 0x800 + } else { + videoMemoryStart = 0x400 + } + if(videoMode == .Text) { //Text mode: Get character codes from $0400-$07FF - putGlyphs(buffer: buf!, start: 0x400, end: 0x7F8) + putGlyphs(buffer: buf!, start: videoMemoryStart, end: videoMemoryStart + 0x3F8) } else if(videoMode == .Lores) { - putLoresPixels(buffer: buf!, start: 0x400, end: 0x7F8) + putLoresPixels(buffer: buf!, start: videoMemoryStart, end: videoMemoryStart + 0x3F8) } else if(videoMode == .MixedLores) { //Draw the lores pixel rows. - putLoresPixels(buffer: buf!, start: 0x400, end: 0x650) - putLoresPixels(buffer: buf!, start: 0x680, end: 0x6A8) - putLoresPixels(buffer: buf!, start: 0x700, end: 0x728) - putLoresPixels(buffer: buf!, start: 0x780, end: 0x7A8) - putLoresPixels(buffer: buf!, start: 0x6A8, end: 0x6D0) - putLoresPixels(buffer: buf!, start: 0x728, end: 0x750) - putLoresPixels(buffer: buf!, start: 0x7A8, end: 0x7D0) + putLoresPixels(buffer: buf!, start: videoMemoryStart, end: videoMemoryStart + 0x250) + putLoresPixels(buffer: buf!, start: videoMemoryStart + 0x280, end: videoMemoryStart + 0x2A8) + putLoresPixels(buffer: buf!, start: videoMemoryStart + 0x300, end: videoMemoryStart + 0x328) + putLoresPixels(buffer: buf!, start: videoMemoryStart + 0x380, end: videoMemoryStart + 0x3A8) + putLoresPixels(buffer: buf!, start: videoMemoryStart + 0x2A8, end: videoMemoryStart + 0x2D0) + putLoresPixels(buffer: buf!, start: videoMemoryStart + 0x328, end: videoMemoryStart + 0x350) + putLoresPixels(buffer: buf!, start: videoMemoryStart + 0x3A8, end: videoMemoryStart + 0x3D0) //Draw the bottom 4 text rows. - putGlyphs(buffer: buf!, start: 0x650, end: 0x678) - putGlyphs(buffer: buf!, start: 0x6D0, end: 0x6F8) - putGlyphs(buffer: buf!, start: 0x750, end: 0x778) - putGlyphs(buffer: buf!, start: 0x7D0, end: 0x7F8) + putGlyphs(buffer: buf!, start: videoMemoryStart + 0x250, end: videoMemoryStart + 0x278) + putGlyphs(buffer: buf!, start: videoMemoryStart + 0x2D0, end: videoMemoryStart + 0x2F8) + putGlyphs(buffer: buf!, start: videoMemoryStart + 0x350, end: videoMemoryStart + 0x378) + putGlyphs(buffer: buf!, start: videoMemoryStart + 0x3D0, end: videoMemoryStart + 0x3F8) } else { print("Unimplemented video mode!") } diff --git a/FruitMachine/AppleII/SoftswitchOverrides.swift b/FruitMachine/AppleII/SoftswitchOverrides.swift index 249c34a..a9fef2d 100644 --- a/FruitMachine/AppleII/SoftswitchOverrides.swift +++ b/FruitMachine/AppleII/SoftswitchOverrides.swift @@ -75,7 +75,7 @@ extension AppleIIBase { static let switchC055R = ReadOverride(start: 0xC055, end: 0xC055, readAnyway: false, action: SoftswitchOverrides.actionSwitchC055) static let switchC055W = WriteOverride(start: 0xC055, end: 0xC055, writeAnyway: false, action: SoftswitchOverrides.actionSwitchC055) static func actionSwitchC055(dummy: AnyObject, address: UInt16, byte: UInt8?) -> UInt8? { - EmulatedSystemInstance!.videoSoftswitches.MIX_MODE = true + EmulatedSystemInstance!.videoSoftswitches.PAGE_2 = true return 0x00 } diff --git a/FruitMachine/AppleII/Video/Modes/LoresMode.swift b/FruitMachine/AppleII/Video/Modes/LoresMode.swift index bb16b5d..d074f9e 100644 --- a/FruitMachine/AppleII/Video/Modes/LoresMode.swift +++ b/FruitMachine/AppleII/Video/Modes/LoresMode.swift @@ -12,6 +12,7 @@ extension AppleIIBase { class LoresMode: NSObject { static func putLoresPixel(buffer: UnsafeMutablePointer?, pixel: UInt8, address: UInt16) { + let pageOffset = address - 0x400 let pixelPosition = VideoHelpers.getPixelOffset(memoryOffset: Int(pageOffset)) if(pixelPosition.x == -1 && pixelPosition.y == -1) { diff --git a/FruitMachine/AppleII/Video/Modes/TextMode.swift b/FruitMachine/AppleII/Video/Modes/TextMode.swift index 4163711..0e18616 100644 --- a/FruitMachine/AppleII/Video/Modes/TextMode.swift +++ b/FruitMachine/AppleII/Video/Modes/TextMode.swift @@ -25,7 +25,11 @@ extension AppleIIBase { } //Calculate the offset to reach the desired position. - let baseOffset = EmulatedSystemInstance!.emulatorViewDelegate.scanlineOffsets[Int(pixelPosition.y)] + Int(pixelPosition.x) + var baseOffset = EmulatedSystemInstance!.emulatorViewDelegate.scanlineOffsets[Int(pixelPosition.y) % 192] + Int(pixelPosition.x) + + if(EmulatedSystemInstance!.videoSoftswitches.PAGE_2) { + baseOffset += 0x400 + } for charY in 0..