HGR is so weird

This commit is contained in:
Luigi Thirty 2017-08-11 03:10:10 -04:00
parent ff51d2f4b2
commit 5fc2be1fdc
3 changed files with 132 additions and 50 deletions

View File

@ -108,7 +108,8 @@ class AppleIIBase: NSObject, EmulatedSystem {
backplane[6] = DiskII(slot: 6, romPath: "/Users/luigi/apple2/341-0027-a.p5") 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 doColdReset() { func doColdReset() {
@ -173,8 +174,16 @@ class AppleIIBase: NSObject, EmulatedSystem {
putGlyphs(buffer: buf!, start: videoMemoryStart + 0x2D0, end: videoMemoryStart + 0x2F8) putGlyphs(buffer: buf!, start: videoMemoryStart + 0x2D0, end: videoMemoryStart + 0x2F8)
putGlyphs(buffer: buf!, start: videoMemoryStart + 0x350, end: videoMemoryStart + 0x378) putGlyphs(buffer: buf!, start: videoMemoryStart + 0x350, end: videoMemoryStart + 0x378)
putGlyphs(buffer: buf!, start: videoMemoryStart + 0x3D0, end: videoMemoryStart + 0x3F8) putGlyphs(buffer: buf!, start: videoMemoryStart + 0x3D0, end: videoMemoryStart + 0x3F8)
} else { } else if(videoMode == .Hires) {
print("Unimplemented video mode!")
} else if(videoMode == .MixedHires) {
putHiresPixels(buffer: buf!, start: 0x2000, end: 0x3fff)
//Draw the bottom 4 text rows.
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)
} }
CVPixelBufferUnlockBaseAddress(emulatorViewDelegate.pixels!, CVPixelBufferLockFlags(rawValue: 0)) CVPixelBufferUnlockBaseAddress(emulatorViewDelegate.pixels!, CVPixelBufferLockFlags(rawValue: 0))
@ -183,6 +192,16 @@ class AppleIIBase: NSObject, EmulatedSystem {
} }
/* Video */ /* Video */
func putHiresPixels(buffer: UnsafeMutablePointer<BitmapPixelsLE555.PixelData>, start: UInt16, end: UInt16) {
for address in start ..< end {
let pixelData = CPU.sharedInstance.memoryInterface.readByte(offset: UInt16(address), bypassOverrides: true)
HiresMode.putHiresByte(buffer: buffer,
pixel: pixelData,
address: UInt16(address))
}
}
func putLoresPixels(buffer: UnsafeMutablePointer<BitmapPixelsLE555.PixelData>, start: UInt16, end: UInt16) { func putLoresPixels(buffer: UnsafeMutablePointer<BitmapPixelsLE555.PixelData>, start: UInt16, end: UInt16) {
for address in start ..< end { for address in start ..< end {
let pixelData = CPU.sharedInstance.memoryInterface.readByte(offset: UInt16(address), bypassOverrides: true) let pixelData = CPU.sharedInstance.memoryInterface.readByte(offset: UInt16(address), bypassOverrides: true)

View File

@ -74,8 +74,6 @@ class ProdosImage: DiskImageFormat {
var sector1 = 0 var sector1 = 0
var sector2 = 0 var sector2 = 0
//static let SECTOR_ORDER = [0, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8, 15]
switch blockOffset8 { switch blockOffset8 {
case 0: case 0:
sector1 = 0 sector1 = 0
@ -176,10 +174,6 @@ class DiskImage: NSObject {
var data = Data(buffer: ptr) var data = Data(buffer: ptr)
try! data.write(to: URL(fileURLWithPath: filename + ".blk")) try! data.write(to: URL(fileURLWithPath: filename + ".blk"))
ptr = UnsafeBufferPointer(start: nbls, count: nbls.count)
data = Data(buffer: ptr)
try! data.write(to: URL(fileURLWithPath: filename + ".nbl"))
} else { } else {
/* TODO: Hook up logic to figure out the disk format. */ /* TODO: Hook up logic to figure out the disk format. */
image = Dos33Image() image = Dos33Image()

View File

@ -8,8 +8,11 @@
import Cocoa import Cocoa
class HiresMode: NSObject { extension AppleIIBase {
static func putHiresPixel(buffer: UnsafeMutablePointer<BitmapPixelsLE555.PixelData>?, pixel: UInt8, address: UInt16) {
class HiresMode: NSObject {
static func putHiresByte(buffer: UnsafeMutablePointer<BitmapPixelsLE555.PixelData>?, pixel: UInt8, address: UInt16) {
let pageBase: Address let pageBase: Address
if(EmulatedSystemInstance!.videoSoftswitches.PAGE_2) { if(EmulatedSystemInstance!.videoSoftswitches.PAGE_2) {
@ -25,18 +28,19 @@ class HiresMode: NSObject {
} }
//Find the row number. //Find the row number.
var rowNumber = offset / 0x80 var rowNumber = 0
let lowByte = offset & 0x0FF let lowByte = UInt8(offset & 0xFF)
var columnByte: UInt8 = 0x00
if(0x28 ... 0x4F ~= lowByte || 0xA8 ... 0xCF ~= lowByte) { if(0x28 ... 0x4F ~= lowByte || 0xA8 ... 0xCF ~= lowByte) {
//Middle third. //Middle third.
rowNumber += 64 rowNumber += 64
//cellX = (lowByte & ~(0x80)) - 0x28 columnByte = (lowByte & 0x7F) - 0x28
} }
else if(0x50 ... 0x77 ~= lowByte || 0xD0 ... 0xF7 ~= lowByte) { else if(0x50 ... 0x77 ~= lowByte || 0xD0 ... 0xF7 ~= lowByte) {
//Bottom third. //Bottom third.
rowNumber += 64 rowNumber += 128
//cellX = (lowByte & ~(0x80)) - 0x50 columnByte = (lowByte & 0x7F) - 0x50
} }
else if(0x78 ... 0x7F ~= lowByte || 0xF8 ... 0xFF ~= lowByte) { else if(0x78 ... 0x7F ~= lowByte || 0xF8 ... 0xFF ~= lowByte) {
//Discard. //Discard.
@ -44,12 +48,77 @@ class HiresMode: NSObject {
else { else {
//Top third. //Top third.
rowNumber += 0 rowNumber += 0
//cellX = (lowByte & ~(0x80)) columnByte = lowByte & 0x7F
} }
rowNumber += offset / 0x400 rowNumber += Int(offset / 0x400) /* One line per 0x400 */
let columnByte = (offset & 0x0007) while offset > 0x400 {
offset -= 0x400
}
rowNumber += Int((offset / 0x80) * 8)
//if(pixel & 0x80)
let dot0 = (pixel & 0x01) == 0x01
let dot1 = (pixel & 0x02) == 0x02
let dot2 = (pixel & 0x04) == 0x04
let dot3 = (pixel & 0x08) == 0x08
let dot4 = (pixel & 0x10) == 0x10
let dot5 = (pixel & 0x20) == 0x20
let dot6 = (pixel & 0x40) == 0x40
//let dot7 = (pixel & 0x80) == 0x80
let pixelRowOffset = Int(rowNumber * AppleII.ScreenDelegate.PIXEL_WIDTH)
let pixelColumnOffset = Int(UInt16(columnByte) * 7)
if(pixelRowOffset + pixelColumnOffset == 17920) {
let x = 0
}
if(dot0) {
buffer![pixelRowOffset + 0 + pixelColumnOffset] = AppleII.LoresColors.White
} else {
buffer![pixelRowOffset + 0 + pixelColumnOffset] = AppleII.LoresColors.Black
}
if(dot1) {
buffer![pixelRowOffset + 1 + pixelColumnOffset] = AppleII.LoresColors.White
} else {
buffer![pixelRowOffset + 1 + pixelColumnOffset] = AppleII.LoresColors.Black
}
if(dot2) {
buffer![pixelRowOffset + 2 + pixelColumnOffset] = AppleII.LoresColors.White
} else {
buffer![pixelRowOffset + 2 + pixelColumnOffset] = AppleII.LoresColors.Black
}
if(dot3) {
buffer![pixelRowOffset + 3 + pixelColumnOffset] = AppleII.LoresColors.White
} else {
buffer![pixelRowOffset + 3 + pixelColumnOffset] = AppleII.LoresColors.Black
}
if(dot4) {
buffer![pixelRowOffset + 4 + pixelColumnOffset] = AppleII.LoresColors.White
} else {
buffer![pixelRowOffset + 4 + pixelColumnOffset] = AppleII.LoresColors.Black
}
if(dot5) {
buffer![pixelRowOffset + 5 + pixelColumnOffset] = AppleII.LoresColors.White
} else {
buffer![pixelRowOffset + 5 + pixelColumnOffset] = AppleII.LoresColors.Black
}
if(dot6) {
buffer![pixelRowOffset + 6 + pixelColumnOffset] = AppleII.LoresColors.White
} else {
buffer![pixelRowOffset + 6 + pixelColumnOffset] = AppleII.LoresColors.Black
}
} }
}
} }