From 4017d12dc885c5172f376f2e60641f29f0cdc846 Mon Sep 17 00:00:00 2001 From: tudnai Date: Wed, 6 May 2020 09:56:21 -0700 Subject: [PATCH] - Optimized Text Rendering - Optimized HiRes screen hiding --- .../xcshareddata/xcschemes/Debug.xcscheme | 2 +- A2Mac/Base.lproj/Main.storyboard | 2 +- A2Mac/ViewController.swift | 72 +++++++++++-------- 3 files changed, 45 insertions(+), 31 deletions(-) diff --git a/A2Mac.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme b/A2Mac.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme index 8cb0447..cb832e9 100644 --- a/A2Mac.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme +++ b/A2Mac.xcodeproj/xcshareddata/xcschemes/Debug.xcscheme @@ -81,7 +81,7 @@ - + 1234567890123456789012345678901234567890 @@@@@@@@@1@@@@@@@@@2@@@@@@@@@3@@@@@@@@@4 diff --git a/A2Mac/ViewController.swift b/A2Mac/ViewController.swift index aa48dd1..888d8c3 100644 --- a/A2Mac/ViewController.swift +++ b/A2Mac/ViewController.swift @@ -383,8 +383,9 @@ class ViewController: NSViewController { var currentVideoMode = videoMode var lastFrameTime = CACurrentMediaTime() as Double - var frameCounter : UInt = 0 + var frameCounter : UInt32 = 0 var clkCounter : Double = 0 + let fpsHalf = fps / 2 var halted = true; @@ -397,7 +398,7 @@ class ViewController: NSViewController { frameCounter += 1 - if ( frameCounter % UInt(fps) == 0 ) { + if ( frameCounter % fps == 0 ) { let currentTime = CACurrentMediaTime() as Double let elpasedTime = currentTime - lastFrameTime lastFrameTime = currentTime @@ -413,7 +414,7 @@ class ViewController: NSViewController { frameCnt += 1 - if ( frameCnt == fps / 2 ) { + if ( frameCnt == fpsHalf ) { // flashingSpace = blockChar ViewController.charConvTbl = ViewController.charConvTblFlashOn } @@ -445,44 +446,50 @@ class ViewController: NSViewController { self.txtArr = self.txtClear // render an empty space to eiminate displaying text portion of the screen covered by graphics + let charDisposition = videoMode.col80 == 0 ? 1 : 2 for y in 0 ..< fromLines { - if videoMode.col80 == 0 { - self.txtArr[ y * (self.textCols + self.lineEndChars) + self.textCols ] = "\n" - } - else { - self.txtArr[ y * (self.textCols * 2 + self.lineEndChars) + self.textCols * 2] = "\n" - } + self.txtArr[ y * (self.textCols * 2 + self.lineEndChars) + self.textCols * charDisposition] = "\n" } - // render the rest of the text screen - for y in fromLines ..< toLines { - for x in 0 ..< self.textCols { - let byte = self.textBufferPointer[ self.textLineOfs[y] + x ] - let idx = Int(byte); - let chr = ViewController.charConvTbl[idx] - - if videoMode.col80 == 0 { - self.txtArr[ y * (self.textCols + self.lineEndChars) + x ] = chr - } - else { - self.txtArr[ y * (self.textCols * 2 + self.lineEndChars) + x * 2 + 1] = chr - let byte = self.textAuxBufferPointer[ self.textLineOfs[y] + x ] + // 40 col + if videoMode.col80 == 0 { + // render the rest of the text screen + for y in fromLines ..< toLines { + for x in 0 ..< self.textCols { + let byte = self.textBufferPointer[ self.textLineOfs[y] + x ] let idx = Int(byte); let chr = ViewController.charConvTbl[idx] - self.txtArr[ y * (self.textCols * 2 + self.lineEndChars) + x * 2] = chr + self.txtArr[ y * (self.textCols + self.lineEndChars) + x ] = chr } - } - - if videoMode.col80 == 0 { + self.txtArr[ y * (self.textCols + self.lineEndChars) + self.textCols ] = "\n" } - else { + } + // 80 col + else { + // render the rest of the text screen + for y in fromLines ..< toLines { + for x in 0 ..< self.textCols { + let byte = self.textBufferPointer[ self.textLineOfs[y] + x ] + let idx = Int(byte); + let chr = ViewController.charConvTbl[idx] + + self.txtArr[ y * (self.textCols * 2 + self.lineEndChars) + x * 2 + 1] = chr + + let byte2 = self.textAuxBufferPointer[ self.textLineOfs[y] + x ] + let idx2 = Int(byte2); + let chr2 = ViewController.charConvTbl[idx2] + + self.txtArr[ y * (self.textCols * 2 + self.lineEndChars) + x * 2] = chr2 + } + self.txtArr[ y * (self.textCols * 2 + self.lineEndChars) + self.textCols * 2] = "\n" } } + txt = String(self.txtArr) if videoMode.col80 != self.currentVideoMode.col80 { @@ -570,8 +577,15 @@ class ViewController: NSViewController { if self.savedVideoMode.text != videoMode.text { self.savedVideoMode.text = videoMode.text - - self.hires.clearScreen() + +// self.hires.clearScreen() + + if ( videoMode.text == 0 ) { + self.hires.isHidden = false + } + else { + self.hires.isHidden = true + } } // only refresh graphics view when needed (aka not in text mode)