1
0
mirror of https://github.com/dschmenk/PLASMA.git synced 2026-01-22 18:15:59 +00:00

Use high precision cos for RGB->DHGR Conversion

Add some raster op routines for FORTH turtle graphcis
This commit is contained in:
David Schmenk
2025-12-10 15:23:30 -08:00
parent f987458a15
commit d35774eac4
4 changed files with 12 additions and 42 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -2,6 +2,7 @@ include "inc/cmdsys.plh"
include "inc/args.plh"
include "inc/fileio.plh"
include "inc/int32.plh"
include "inc/sincos.plh"
include "dhgr.tk/inc/dhgrlib.plh"
include "dhgr.tk/inc/dhgrutils.plh"
@@ -55,19 +56,6 @@ 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
var = 9032, 9580, 10125, 10668, 11207, 11743, 12275, 12803
var = 13327, 13848, 14364, 14876, 15383, 15886, 16383, 16876
var = 17364, 17846, 18323, 18794, 19260, 19720, 20173, 20621
var = 21062, 21497, 21926, 22347, 22762, 23170, 23571, 23964
var = 24351, 24730, 25101, 25465, 25821, 26169, 26509, 26841
var = 27165, 27481, 27788, 28087, 28377, 28659, 28932, 29196
var = 29451, 29697, 29935, 30163, 30381, 30591, 30791, 30982
var = 31164, 31336, 31498, 31651, 31794, 31928, 32051, 32165
var = 32270, 32364, 32449, 32523, 32588, 32643, 32688, 32723
var = 32748, 32763, 32767
word hgrScan[] // HGR scanline order for saving memory buffer as DHGR
word = $0000,$0400,$0800,$0C00,$1000,$1400,$1800,$1C00
word = $0080,$0480,$0880,$0C80,$1080,$1480,$1880,$1C80
@@ -117,23 +105,6 @@ def max(a, b)#1
return a > b ?? a :: b
end
def sin(deg)#1
while deg > 360; deg = deg - 360; loop
while deg < 0; deg = deg + 360; loop
if deg <= 90
return sin90[deg]
elsif deg <= 180
return sin90[180 - deg]
elsif deg <= 270
return -sin90[deg - 180]
fin
return -sin90[360 - deg]
end
def cos(deg)#1
return sin(deg + 90)
end
def dist(dr, dg, db)#2 // Linear distance
res[t_i32] rr, gg
@@ -180,16 +151,12 @@ def calcChroma(angle)#0
for i = 0 to 3
// Calculate RGB for this DHGR pixel
//r = max(0, (saturation + (cos(angle - phase[RED]) >> 7)))
//g = max(0, (saturation + (cos(angle - phase[GRN]) >> 7)))
//b = max(0, (saturation + (cos(angle - phase[BLU]) >> 7)))
r = saturation + (cos(angle - phase[RED]) >> 7)
g = saturation + (cos(angle - phase[GRN]) >> 7)
b = saturation + (cos(angle - phase[BLU]) >> 7)
// Make chroma add up to white
ntscChroma[i*3 + RED] = (r + 2) / 4
ntscChroma[i*3 + GRN] = (g + 2) / 4
ntscChroma[i*3 + BLU] = (b + 2) / 4
r = saturation + mulcos(255, angle - phase[RED])
g = saturation + mulcos(255, angle - phase[GRN])
b = saturation + mulcos(255, angle - phase[BLU])
ntscChroma[i*3 + RED] = min(255, max(0, (r + 2) / 4))
ntscChroma[i*3 + GRN] = min(255, max(0, (g + 2) / 4))
ntscChroma[i*3 + BLU] = min(255, max(0, (b + 2) / 4))
// Next NTSC chroma pixel
angle = angle - 90
next
@@ -484,7 +451,7 @@ def rgbImportExport(rgbfile, dhgrfile)#0
fin
end
puts("DHGR RGB converter 1.1\n")
puts("DHGR RGB converter 1.2\n")
arg = argNext(argFirst)
if ^arg
while ^(arg + 1) == '-'

View File

@@ -24,6 +24,9 @@ LOOKUP HGRDRAWBUF PLASMA HGRDRAWBUF
LOOKUP HGRCOLOR PLASMA HGRCOLOR
LOOKUP SETLINESPANS PLASMA SETLINESPANS
LOOKUP LINESPANS PLASMA HGRLINE
LOOKUP HGRHLIN LOOKUP HGRVLIN SETLINESPANS
: SETLINE [ LOOKUP HGRHLIN ] LITERAL [ LOOKUP HGRVLIN ] LITERAL SETLINESPANS ;
: SETXORLINE [ LOOKUP HGRXORHLIN ] LITERAL [ LOOKUP HGRXORVLIN ] LITERAL SETLINESPANS ;
: SETORLINE [ LOOKUP HGRORHLIN ] LITERAL [ LOOKUP HGRORVLIN ] LITERAL SETLINESPANS ;
SETLINE
' TEXT 0= ?ENDSRC
: TEXT -1 HGRMODE DROP TEXT ;