FruitMachine-Swift/FruitMachine/AppleII/Video/Modes/LoresMode.swift

94 lines
4.5 KiB
Swift

//
// LoresMode.swift
// FruitMachine
//
// Created by Christopher Rohl on 8/2/17.
// Copyright © 2017 Christopher Rohl. All rights reserved.
//
import Cocoa
extension AppleIIBase {
class LoresMode: NSObject {
static func putLoresPixel(buffer: UnsafeMutablePointer<BitmapPixelsLE555.PixelData>?, pixel: UInt8, address: UInt16) {
let pageOffset = address - 0x400
let pixelPosition = VideoHelpers.getPixelOffset(memoryOffset: Int(pageOffset))
if(pixelPosition.x == -1 && pixelPosition.y == -1) {
return
}
let pixelNybbleHi = pixel & 0x0F
let pixelNybbleLo = (pixel & 0xF0) >> 4
let colorHi = AppleIIBase.LoresMode.Colors.getColor(index: pixelNybbleHi)
let colorLo = AppleIIBase.LoresMode.Colors.getColor(index: pixelNybbleLo)
//One lores pixel is 7px wide and 4px tall for a resolution of 40x48.
let baseOffset = EmulatedSystemInstance!.emulatorViewDelegate.scanlineOffsets[Int(pixelPosition.y)] + Int(pixelPosition.x)
for charY in 0..<5 {
let offsetHi = baseOffset + (AppleII.ScreenDelegate.PIXEL_WIDTH * charY)
for charX in 0..<7 {
buffer![offsetHi + 6 - charX] = colorHi
}
}
for charY in 4..<8 {
let offsetLo = baseOffset + (AppleII.ScreenDelegate.PIXEL_WIDTH * charY)
for charX in 0..<7 {
buffer![offsetLo + 6 - charX] = colorLo
}
}
}
struct Colors {
static let Black = BitmapPixelsLE555.RGB32toLE555(r: 0, g: 0, b: 0)
static let Magenta = BitmapPixelsLE555.RGB32toLE555(r: 227, g: 30, b: 96)
static let DarkBlue = BitmapPixelsLE555.RGB32toLE555(r: 96, g: 78, b: 189)
static let Purple = BitmapPixelsLE555.RGB32toLE555(r: 255, g: 68, b: 253)
static let DarkGreen = BitmapPixelsLE555.RGB32toLE555(r: 0, g: 163, b: 96)
static let Gray1 = BitmapPixelsLE555.RGB32toLE555(r: 156, g: 156, b: 156)
static let MediumBlue = BitmapPixelsLE555.RGB32toLE555(r: 20, g: 207, b: 253)
static let LightBlue = BitmapPixelsLE555.RGB32toLE555(r: 208, g: 195, b: 255)
static let Brown = BitmapPixelsLE555.RGB32toLE555(r: 96, g: 114, b: 3)
static let Orange = BitmapPixelsLE555.RGB32toLE555(r: 255, g: 106, b: 60)
static let Gray2 = BitmapPixelsLE555.RGB32toLE555(r: 156, g: 156, b: 156)
static let Pink = BitmapPixelsLE555.RGB32toLE555(r: 255, g: 160, b: 208)
static let LightGreen = BitmapPixelsLE555.RGB32toLE555(r: 20, g: 245, b: 60)
static let Yellow = BitmapPixelsLE555.RGB32toLE555(r: 208, g: 221, b: 141)
static let Aquamarine = BitmapPixelsLE555.RGB32toLE555(r: 114, g: 255, b: 208)
static let White = BitmapPixelsLE555.RGB32toLE555(r: 255, g: 255, b: 255)
static func getColor(index: UInt8) -> BitmapPixelsLE555.PixelData {
switch index {
case 0: return AppleIIBase.LoresMode.Colors.Black
case 1: return AppleIIBase.LoresMode.Colors.Magenta
case 2: return AppleIIBase.LoresMode.Colors.DarkBlue
case 3: return AppleIIBase.LoresMode.Colors.Purple
case 4: return AppleIIBase.LoresMode.Colors.DarkGreen
case 5: return AppleIIBase.LoresMode.Colors.Gray1
case 6: return AppleIIBase.LoresMode.Colors.MediumBlue
case 7: return AppleIIBase.LoresMode.Colors.LightBlue
case 8: return AppleIIBase.LoresMode.Colors.Brown
case 9: return AppleIIBase.LoresMode.Colors.Orange
case 10: return AppleIIBase.LoresMode.Colors.Gray2
case 11: return AppleIIBase.LoresMode.Colors.Pink
case 12: return AppleIIBase.LoresMode.Colors.LightGreen
case 13: return AppleIIBase.LoresMode.Colors.Yellow
case 14: return AppleIIBase.LoresMode.Colors.Aquamarine
case 15: return AppleIIBase.LoresMode.Colors.White
default:
print("tried to get color > 15")
return AppleIIBase.LoresMode.Colors.Black
}
}
}
}
}