From 9117737e27e78d886b5f19f0efa510ecae6a3165 Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Thu, 6 Feb 2025 20:57:44 -0800 Subject: [PATCH] Speed up DHGRRGB conversion a bit --- images/apple/PLASMA-2.20.po | Bin 33553920 -> 33553920 bytes src/dhgr.tk/utils/dhgrrgb.pla | 74 +++++++++++++++++----------------- src/libsrc/apple/vblank.pla | 4 ++ 3 files changed, 41 insertions(+), 37 deletions(-) diff --git a/images/apple/PLASMA-2.20.po b/images/apple/PLASMA-2.20.po index 7c810fa8741d9b78d9af13632eb23acd3b0c2513..a6bbe123fe99713ae6467c192f343d585ac68709 100644 GIT binary patch delta 8017 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 C0ec?+ diff --git a/src/dhgr.tk/utils/dhgrrgb.pla b/src/dhgr.tk/utils/dhgrrgb.pla index d81b755..25eb7ff 100644 --- a/src/dhgr.tk/utils/dhgrrgb.pla +++ b/src/dhgr.tk/utils/dhgrrgb.pla @@ -53,6 +53,10 @@ const RAW_INFILE = $04 // Raw 560x192 24BPP RGB values const MATCH_PREV = $00 // Match previous RGB const MATCH_NEXT = $08 // Match next pixel const MATCH_CYCLE = $10 // Match current cycle +const MATCH_ONE = 8 +const MATCH_ZERO = 0 +byte clrRot = $00,$02,$04,$06,$08,$0A,$0C,$0E +byte = $01,$03,$05,$07,$09,$0B,$0D,$0F var sin90[] // first 90 degrees of sin in fixed s.15 format var = 0, 571, 1143, 1714, 2285, 2855, 3425, 3993 var = 4560, 5126, 5690, 6252, 6812, 7371, 7927, 8480 @@ -257,7 +261,7 @@ def rgbMatchCycle(r, g, b, errptr, cx)#1 ntscCycle[i+RED] = ntscChroma[i+RED] ntscCycle[i+GRN] = ntscChroma[i+GRN] ntscCycle[i+BLU] = ntscChroma[i+BLU] - i = 1 + i = MATCH_ONE else // RGB closer to previous chroma color er = r - pr @@ -266,7 +270,7 @@ def rgbMatchCycle(r, g, b, errptr, cx)#1 ntscCycle[i+RED] = 0 ntscCycle[i+GRN] = 0 ntscCycle[i+BLU] = 0 - i = 0 + i = MATCH_ZERO fin errProp(er, eg, eb, errptr) return i @@ -325,7 +329,7 @@ def rgbMatchNext(r, g, b, errptr, cx)#1 ntscCycle[i+RED] = ntscChroma[i+RED] ntscCycle[i+GRN] = ntscChroma[i+GRN] ntscCycle[i+BLU] = ntscChroma[i+BLU] - i = 1 + i = MATCH_ONE else // RGB closer to previous chroma color er = r - pr @@ -334,7 +338,7 @@ def rgbMatchNext(r, g, b, errptr, cx)#1 ntscCycle[i+RED] = 0 ntscCycle[i+GRN] = 0 ntscCycle[i+BLU] = 0 - i = 0 + i = MATCH_ZERO fin errProp(er, eg, eb, errptr) return i @@ -363,9 +367,9 @@ def rgbMatchPrev(r, g, b, errptr, cx)#1 prevRed = cr prevGrn = cg prevBlu = cb - i = 1 + i = MATCH_ONE else - i = 0 + i = MATCH_ZERO fin // Propogate error down and forward er = r - prevRed @@ -374,10 +378,9 @@ def rgbMatchPrev(r, g, b, errptr, cx)#1 errptr=>[GRN] = eg eb = b - prevBlu errptr=>[BLU] = eb - errptr = errptr + 6 - errptr=>[RED] = er + errptr=>[RED] - errptr=>[GRN] = eg + errptr=>[GRN] - errptr=>[BLU] = eb + errptr=>[BLU] + errptr=>[RED+3] = er + errptr=>[RED+3] + errptr=>[GRN+3] = eg + errptr=>[GRN+3] + errptr=>[BLU+3] = eb + errptr=>[BLU+3] return i end @@ -597,7 +600,7 @@ end def rgbImportExport(rgbfile, dhgrfile)#0 byte refnum, chromaBits - var i, j, r, g, b + var i, j, c, r, g, b var rgbScanline, rgbptr, errptr refnum = fileio:open(rgbfile) @@ -621,34 +624,31 @@ def rgbImportExport(rgbfile, dhgrfile)#0 prevRed, prevGrn, prevBLu = 96, 96, 96 // Reset prev RGB rgbptr = rgbScanline errptr = rgbErr - for i = 0 to 559 - // Calc best match - chromaBits = chromaBits >> 1 - r = gammaRed[rgbptr->[RED]] - g = gammaGrn[rgbptr->[GRN]] - b = gammaBlu[rgbptr->[BLU]] - if errDiv - r = r + errptr=>[RED] / errDiv - g = g + errptr=>[GRN] / errDiv - b = b + errptr=>[BLU] / errDiv - fin - if rgbMatch(r, g, b, errptr, i & 3) - dhgrSet(i, j) - chromaBits = chromaBits | $08 - fin - // Map GREY1 -> GREY2 - if (i & 3) == 3 - if chromaBits == $0A // Bits are in reverse order from DCGR color value - dhgrOp(OP_SRC) - dcgrColor(CLR_GREY2) - dcgrPixel(i >> 2, j) - memset(@ntscCycle, GREY_CHROMA, 24) // Grey chroma cycle - elsif chromaBits == $05 - memset(@ntscCycle, GREY_CHROMA, 24) // Grey chroma cycle + for i = 0 to 139 + chromaBits = 0 + for c = 0 to 3 + // Calc best match + r = gammaRed[rgbptr->[RED]] + g = gammaGrn[rgbptr->[GRN]] + b = gammaBlu[rgbptr->[BLU]] + if errDiv + r = r + errptr=>[RED] / errDiv + g = g + errptr=>[GRN] / errDiv + b = b + errptr=>[BLU] / errDiv fin + chromaBits = (chromaBits >> 1) | rgbMatch(r, g, b, errptr, c) + rgbptr = rgbptr + 3 + errptr = errptr + 3 * 2 + next + // Map GREY1 -> GREY2 + if chromaBits == $0A // Bits are in reverse order from DCGR color value + chromaBits = $05 + memset(@ntscCycle, GREY_CHROMA, 24) // Grey chroma cycle + elsif chromaBits == $05 + memset(@ntscCycle, GREY_CHROMA, 24) // Grey chroma cycle fin - rgbptr = rgbptr + 3 - errptr = errptr + 3 * 2 + dcgrColor(clrRot[chromaBits]) + dcgrPixel(i, j) next if flags & MEM_MODE; putc('.'); fin if ^$C000 == $83 diff --git a/src/libsrc/apple/vblank.pla b/src/libsrc/apple/vblank.pla index 1a8ff8f..c3eb0a3 100644 --- a/src/libsrc/apple/vblank.pla +++ b/src/libsrc/apple/vblank.pla @@ -51,4 +51,8 @@ if MACHID & MACHID_MODEL == MACHID_IIE elsif MACHID & MACHID_MODEL <> MACHID_IIC memcpy(@waitVBL, @_vblnop, @_vblend-@_vblnop) fin +// +// Keep module in memory +// +return modkeep done