From 67cc9d23595cb5c42a0c1d5cb28a8b7aa1dea566 Mon Sep 17 00:00:00 2001 From: Tamas Rudnai Date: Sun, 14 Jan 2024 20:48:18 -0800 Subject: [PATCH] Rudimentary implementation of DGR / Double LoRes --- A2Mac/LoRes.swift | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/A2Mac/LoRes.swift b/A2Mac/LoRes.swift index 6cc91bb..e62da7c 100644 --- a/A2Mac/LoRes.swift +++ b/A2Mac/LoRes.swift @@ -41,6 +41,8 @@ class LoRes: NSView { let LoResIntBuffer1 = UnsafeRawBufferPointer(start: RAM + Page1Addr, count: PageSize * 2) let LoResIntBuffer2 = UnsafeRawBufferPointer(start: RAM + Page2Addr, count: PageSize * 2) + let LoResAuxBuffer1 = UnsafeRawBufferPointer(start: AUX + Page1Addr, count: PageSize * 2) + let LoResAuxBuffer2 = UnsafeRawBufferPointer(start: AUX + Page2Addr, count: PageSize * 2) let LoResBuffer1 = UnsafeRawBufferPointer(start: MEM + Page1Addr, count: PageSize * 2) let LoResBuffer2 = UnsafeRawBufferPointer(start: MEM + Page2Addr, count: PageSize * 2) var LoResBufferPointer1 = UnsafeRawBufferPointer(start: MEM + Page1Addr, count: PageSize * 2) @@ -339,6 +341,11 @@ class LoRes: NSView { func colorPixel ( pixelAddr : Int, color : Int ) { LoRes.pixelsSRGB[pixelAddr] = colorTable[color] } + + + func rot4bit(_ i : Int) -> Int { + return ((i << 1) | ((i & 0x08) >> 3)) & 0x0F + } func Render() { @@ -354,21 +361,21 @@ class LoRes: NSView { } if MEMcfg.txt_page_2 == 1 { if (MEMcfg.RD_AUX_MEM == 0) { - LoResBufferPointer1 = LoResBuffer2 + LoResBufferPointer1 = LoResAuxBuffer2 LoResBufferPointer2 = LoResBuffer2 } else { - LoResBufferPointer1 = LoResIntBuffer2 + LoResBufferPointer1 = LoResBuffer2 LoResBufferPointer2 = LoResIntBuffer2 } } else { if (MEMcfg.RD_AUX_MEM == 0) { - LoResBufferPointer1 = LoResBuffer1 + LoResBufferPointer1 = LoResAuxBuffer1 LoResBufferPointer2 = LoResBuffer1 } else { - LoResBufferPointer1 = LoResIntBuffer1 + LoResBufferPointer1 = LoResAuxBuffer1 LoResBufferPointer2 = LoResIntBuffer1 } } @@ -407,8 +414,8 @@ class LoRes: NSView { shadowScreen[ screenIdx ] = block1 shadowScreen[ screenIdx + 1] = block2 - colorPixel(pixelAddr: pixelHAddr, color: block1 & 0x0F ) - colorPixel(pixelAddr: pixelLAddr, color: (block1 >> 4) & 0x0F ) + colorPixel(pixelAddr: pixelHAddr, color: rot4bit(block1)) + colorPixel(pixelAddr: pixelLAddr, color: rot4bit(block1 >> 4)) colorPixel(pixelAddr: pixelHAddr + 1, color: block2 & 0x0F ) colorPixel(pixelAddr: pixelLAddr + 1, color: (block2 >> 4) & 0x0F ) @@ -446,7 +453,7 @@ class LoRes: NSView { } } -// needsDisplay = true // refresh the entire screen + needsDisplay = true // refresh the entire screen }