(screen.tal) Starting new auto-byte high nibble implementation

This commit is contained in:
neauoire 2022-03-06 09:56:50 -08:00
parent 1b04e0814b
commit 941ac55f1f
1 changed files with 146 additions and 49 deletions

View File

@ -4,10 +4,23 @@
%2/ { #01 SFT } %2/ { #01 SFT }
%4/ { #02 SFT } %4/ { #02 SFT }
%+ { ADD } %- { SUB } %* { MUL } %/ { DIV }
%< { LTH } %> { GTH } %= { EQU } %! { NEQ }
%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
%AUTO-NONE { #00 .Screen/auto DEO }
%AUTO-X { #01 .Screen/auto DEO }
%AUTO-Y { #02 .Screen/auto DEO }
%AUTO-XY { #03 .Screen/auto DEO }
%AUTO-ADDR { #04 .Screen/auto DEO }
%AUTO-XADDR { #05 .Screen/auto DEO }
%AUTO-YADDR { #06 .Screen/auto DEO }
( devices ) ( devices )
|00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 ] |00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 ]
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 ] |20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
( variables ) ( variables )
@ -30,7 +43,7 @@
#f0c0 .System/b DEO2 #f0c0 .System/b DEO2
( find screen center ) ( find screen center )
.Screen/width DEI2 #01 SFT2 #0020 SUB2 .center/x STZ2 .Screen/width DEI2 #01 SFT2 #0020 -- .center/x STZ2
.Screen/height DEI2 #01 SFT2 .center/y STZ2 .Screen/height DEI2 #01 SFT2 .center/y STZ2
( draw ) ( draw )
@ -39,6 +52,7 @@
;draw-1bpp JSR2 ;draw-1bpp JSR2
;draw-2bpp JSR2 ;draw-2bpp JSR2
;draw-pixels JSR2 ;draw-pixels JSR2
;draw-autobytes JSR2
BRK BRK
@ -46,22 +60,22 @@ BRK
.count LDZ2 INC2 [ DUP2 ] .count STZ2 .count LDZ2 INC2 [ DUP2 ] .count STZ2
.center/x LDZ2 #0048 ADD2 .Screen/x DEO2 .center/x LDZ2 #0048 ++ .Screen/x DEO2
.center/y LDZ2 #0050 SUB2 .Screen/y DEO2 .center/y LDZ2 #0050 -- .Screen/y DEO2
( color ) #01 STH ( color ) #01 STH
SWP SWP
DUP #04 SFT [ #00 SWP ] #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2 DUP #04 SFT [ #00 SWP ] #30 SFT2 ;font-hex ++ .Screen/addr DEO2
( draw ) STHkr .Screen/sprite DEO ( draw ) STHkr .Screen/sprite DEO
#0f AND [ #00 SWP ] #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2 #0f AND [ #00 SWP ] #30 SFT2 ;font-hex ++ .Screen/addr DEO2
.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2
( draw ) STHkr .Screen/sprite DEO ( draw ) STHkr .Screen/sprite DEO
DUP #04 SFT [ #00 SWP ] #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2 DUP #04 SFT [ #00 SWP ] #30 SFT2 ;font-hex ++ .Screen/addr DEO2
.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2
( draw ) STHkr .Screen/sprite DEO ( draw ) STHkr .Screen/sprite DEO
#0f AND [ #00 SWP ] #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2 #0f AND [ #00 SWP ] #30 SFT2 ;font-hex ++ .Screen/addr DEO2
.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2
( draw ) STHr .Screen/sprite DEO ( draw ) STHr .Screen/sprite DEO
BRK BRK
@ -70,16 +84,16 @@ BRK
#10 #00 #10 #00
&loop &loop
DUP #30 SFT #00 SWP ;font-hex ADD2 .Screen/addr DEO2 DUP #30 SFT #00 SWP ;font-hex ++ .Screen/addr DEO2
( x-axis ) ( x-axis )
DUP #30 SFT #00 SWP DUP #30 SFT #00 SWP
.center/x LDZ2 #0040 SUB2 ADD2 .Screen/x DEO2 .center/x LDZ2 #0040 -- ++ .Screen/x DEO2
.center/y LDZ2 #0050 SUB2 .Screen/y DEO2 .center/y LDZ2 #0050 -- .Screen/y DEO2
( draw ) #01 .Screen/sprite DEO ( draw ) #01 .Screen/sprite DEO
( y-axis ) ( y-axis )
DUP #30 SFT #00 SWP DUP #30 SFT #00 SWP
.center/y LDZ2 #0040 SUB2 ADD2 .Screen/y DEO2 .center/y LDZ2 #0040 -- ++ .Screen/y DEO2
.center/x LDZ2 #0050 SUB2 .Screen/x DEO2 .center/x LDZ2 #0050 -- .Screen/x DEO2
( draw ) #01 .Screen/sprite DEO ( draw ) #01 .Screen/sprite DEO
INC GTHk ,&loop JCN INC GTHk ,&loop JCN
POP2 POP2
@ -92,9 +106,9 @@ RTN
#00 #00 #00 #00
&loop &loop
( move ) DUP #0f AND #40 SFT 2/ #00 SWP ( move ) DUP #0f AND #40 SFT 2/ #00 SWP
.center/x LDZ2 #0040 SUB2 ADD2 .Screen/x DEO2 .center/x LDZ2 #0040 -- ++ .Screen/x DEO2
( move ) DUP #f0 AND 2/ #00 SWP ( move ) DUP #f0 AND 2/ #00 SWP
.center/y LDZ2 #0040 SUB2 ADD2 .Screen/y DEO2 .center/y LDZ2 #0040 -- ++ .Screen/y DEO2
( draw ) DUP .Screen/sprite DEO ( draw ) DUP .Screen/sprite DEO
INC NEQk ,&loop JCN INC NEQk ,&loop JCN
POP2 POP2
@ -107,9 +121,9 @@ RTN
&loop &loop
( color ) STHk ( color ) STHk
( y ) DUP 4/ [ #00 SWP ] #40 SFT2 ( y ) DUP 4/ [ #00 SWP ] #40 SFT2
[ .center/y LDZ2 #0040 SUB2 ADD2 ] STH2 [ .center/y LDZ2 #0040 -- ++ ] STH2
( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ADD2 ( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ++
[ .center/x LDZ2 #0008 ADD2 ADD2 ] [ .center/x LDZ2 #0008 ++ ++ ]
STH2r STHr #00 ;draw-circle JSR2 STH2r STHr #00 ;draw-circle JSR2
INC GTHk ,&loop JCN INC GTHk ,&loop JCN
POP2 POP2
@ -122,15 +136,32 @@ RTN
&loop &loop
( color ) STHk ( color ) STHk
( y ) DUP 4/ [ #00 SWP ] #40 SFT2 ( y ) DUP 4/ [ #00 SWP ] #40 SFT2
[ .center/y LDZ2 ADD2 ] STH2 [ .center/y LDZ2 ++ ] STH2
( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ADD2 ( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ++
[ .center/x LDZ2 #0008 ADD2 ADD2 ] [ .center/x LDZ2 #0008 ++ ++ ]
STH2r STHr #80 ;draw-circle JSR2 STH2r STHr #80 ;draw-circle JSR2
INC GTHk ,&loop JCN INC GTHk ,&loop JCN
POP2 POP2
RTN RTN
@draw-autobytes ( -- )
.center/x LDZ2 #0090 ++ .Screen/x DEO2
.center/y LDZ2 #0040 -- .Screen/y DEO2
#02 #03 ;23x-icns #04 ;draw-x JSR2
.center/x LDZ2 #00a8 ++ .Screen/x DEO2
.center/y LDZ2 #0030 -- .Screen/y DEO2
#02 #03 ;23y-icns #0c ;draw-y JSR2
.center/x LDZ2 #00a0 ++ .Screen/x DEO2
.center/y LDZ2 #0040 -- .Screen/y DEO2
#03 #02 ;32x-icns #01 ;draw-x JSR2
.center/x LDZ2 #0090 ++ .Screen/x DEO2
.center/y LDZ2 #0028 -- .Screen/y DEO2
#03 #02 ;32y-icns #03 ;draw-y JSR2
RTN
@draw-circle ( x* y* color depth -- ) @draw-circle ( x* y* color depth -- )
ADD STH ADD STH
@ -138,32 +169,78 @@ RTN
.Screen/y DEO2 .Screen/y DEO2
.Screen/x DEO2 .Screen/x DEO2
#00 STHkr ADD .Screen/sprite DEO #00 STHkr + .Screen/sprite DEO
.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2
#10 STHkr ADD .Screen/sprite DEO #10 STHkr + .Screen/sprite DEO
.Screen/x DEI2 #0008 SUB2 .Screen/x DEO2 .Screen/x DEI2 #0008 -- .Screen/x DEO2
.Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 .Screen/y DEI2 #0008 ++ .Screen/y DEO2
#20 STHkr ADD .Screen/sprite DEO #20 STHkr + .Screen/sprite DEO
.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 .Screen/x DEI2 #0008 ++ .Screen/x DEO2
#30 STHr ADD .Screen/sprite DEO #30 STHr + .Screen/sprite DEO
RTN RTN
@draw-pixels ( -- ) @draw-pixels ( -- )
.center/y LDZ2 #0040 SUB2 .Screen/y DEO2 .center/y LDZ2 #0040 -- .Screen/y DEO2
.center/x LDZ2 #0048 ADD2 .Screen/x DEO2 .center/x LDZ2 #0048 ++ .Screen/x DEO2
#00 .Screen/pixel DEO #00 .Screen/pixel DEO
.center/x LDZ2 #0049 ADD2 .Screen/x DEO2 .center/x LDZ2 #0049 ++ .Screen/x DEO2
#01 .Screen/pixel DEO #01 .Screen/pixel DEO
.center/x LDZ2 #004a ADD2 .Screen/x DEO2 .center/x LDZ2 #004a ++ .Screen/x DEO2
#02 .Screen/pixel DEO #02 .Screen/pixel DEO
.center/x LDZ2 #004b ADD2 .Screen/x DEO2 .center/x LDZ2 #004b ++ .Screen/x DEO2
#03 .Screen/pixel DEO #03 .Screen/pixel DEO
RTN RTN
@preview_icn [ @draw-x ( w h addr* color -- )
STH
.Screen/addr DEO2
SWP ,&w STR
.Screen/x DEI2 ,&x STR2
AUTO-XADDR
#00
&ver
[ LIT &w $1 ] #00
&hor
STHkr .Screen/sprite DEO
INC GTHk ,&hor JCN
POP2
.Screen/y DEI2k #0008 ++ ROT DEO2
[ LIT2 &x $2 ] .Screen/x DEO2
INC GTHk ,&ver JCN
POP2
POPr
AUTO-NONE
RTN
@draw-y ( w h addr* color -- )
STH
.Screen/addr DEO2
,&h STR
.Screen/y DEI2 ,&y STR2
AUTO-YADDR
#00
&hor
[ LIT &h $1 ] #00
&ver
STHkr .Screen/sprite DEO
INC GTHk ,&ver JCN
POP2
.Screen/x DEI2k #0008 ++ ROT DEO2
[ LIT2 &y $2 ] .Screen/y DEO2
INC GTHk ,&hor JCN
POP2
POPr
AUTO-NONE
RTN
@preview_icn
0f38 675f dfbf bfbf 0007 1820 2344 4848 0f38 675f dfbf bfbf 0007 1820 2344 4848
@font-hex @font-hex
@ -175,3 +252,23 @@ RTN
007c 8202 7e82 827e 00fc 8282 fc82 82fc 007c 8202 7e82 827e 00fc 8282 fc82 82fc
007c 8280 8080 827c 00fc 8282 8282 82fc 007c 8280 8080 827c 00fc 8282 8282 82fc
007c 8280 f080 827c 007c 8280 f080 8080 007c 8280 f080 827c 007c 8280 f080 8080
@23x-icns
0010 2847 2810 0001 0000 00e0 2040 8000
0204 080f 0000 0001 0000 00e0 2040 8000
0204 080f 0000 0000 0010 28c4 2810 0000
@23y-icns
0010 2844 2810 1111 1111 1111 1111 1111
1112 1418 0000 0000 0000 0030 5090 1010
1010 1010 1010 1010 1010 2844 2810 0000
@32x-icns
0010 2847 2810 0001 0000 00ff 0000 00ff
0000 00f0 1020 4080 0204 080f 0000 0000
0000 00ff 0000 0000 0010 28c4 2810 0000
@32y-icns
0010 2844 2810 1011 1214 1800 0000 0000
0000 0000 3050 9011 1214 1800 0000 0000
0000 0000 3050 9010 1010 2844 2810 0000