(screen.tal) Optimized to fit GBA screen

This commit is contained in:
neauoire 2022-03-14 14:02:43 -07:00
parent 3293a1b639
commit 8ec8c7c1f4
3 changed files with 51 additions and 139 deletions

View File

@ -1,140 +1,97 @@
( dev/screen ) ( Screen )
%RTN { JMP2r } |00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
%2/ { #01 SFT } |20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
%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 )
|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 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
( variables )
|0000 |0000
@count $2 @count $2
@center @center &x $2 &y $2
&x $2 &y $2
( init )
|0100 ( -> ) |0100 ( -> )
( vector ) ( vector )
;on-frame .Screen/vector DEO2 ;on-frame .Screen/vector DEO2
( theme ) ( theme )
#f07f .System/r DEO2 #f07f .System/r DEO2
#f0e0 .System/g DEO2 #f0e0 .System/g DEO2
#f0c0 .System/b DEO2 #f0c0 .System/b DEO2
( gba screen size 00c0 x 00a0 )
( nds screen size 0100 x 00c0 )
#0100 .Screen/width DEO2
#00c0 .Screen/height DEO2
( find screen center ) ( find screen center )
.Screen/width DEI2 #01 SFT2 #0020 -- .center/x STZ2 .Screen/width DEI2 #01 SFT2 .center/x STZ2
.Screen/height DEI2 #01 SFT2 .center/y STZ2 .Screen/height DEI2 #01 SFT2 .center/y STZ2
( draw ) ( draw )
;draw-table JSR2
;draw-sprites JSR2 ;draw-sprites JSR2
;draw-1bpp JSR2 ;draw-1bpp JSR2
;draw-2bpp JSR2 ;draw-2bpp JSR2
;draw-pixels JSR2 #00 .Screen/auto DEO
;draw-autobytes JSR2
AUTO-NONE
BRK BRK
@on-frame ( -> ) @on-frame ( -> )
AUTO-X #01 .Screen/auto DEO
.count LDZ2 INC2 [ DUP2 ] .count STZ2 .count LDZ2 INC2 [ DUP2 ] .count STZ2
.center/x LDZ2 #0048 ++ .Screen/x DEO2 .center/x LDZ2 #0040 ADD2 .Screen/x DEO2
.center/y LDZ2 #0050 -- .Screen/y DEO2 .center/y LDZ2 #0048 SUB2 .Screen/y DEO2
SWP ;draw-short JSR2
DUP #04 SFT [ #00 SWP ] #30 SFT2 ;font-hex ++ .Screen/addr DEO2
#01 .Screen/sprite DEO
#0f AND [ #00 SWP ] #30 SFT2 ;font-hex ++ .Screen/addr DEO2
#01 .Screen/sprite DEO
DUP #04 SFT [ #00 SWP ] #30 SFT2 ;font-hex ++ .Screen/addr DEO2
#01 .Screen/sprite DEO
#0f AND [ #00 SWP ] #30 SFT2 ;font-hex ++ .Screen/addr DEO2
#01 .Screen/sprite DEO
BRK BRK
@draw-table ( -- ) @draw-sprites ( -- )
.center/x LDZ2 #0040 -- .Screen/x DEO2 .center/x LDZ2 #0060 SUB2 .Screen/x DEO2
.center/y LDZ2 #0050 -- .Screen/y DEO2 .center/y LDZ2 #0048 SUB2 .Screen/y DEO2
;font-hex .Screen/addr DEO2 ;font-hex .Screen/addr DEO2
#f6 .Screen/auto DEO #f6 .Screen/auto DEO
#01 .Screen/sprite DEO #01 .Screen/sprite DEO
.center/x LDZ2 #0050 -- .Screen/x DEO2 #00 .Screen/auto DEO
.center/y LDZ2 #0040 -- .Screen/y DEO2 ( table )
;font-hex .Screen/addr DEO2
#f5 .Screen/auto DEO
#01 .Screen/sprite DEO
AUTO-NONE
RTN
@draw-sprites ( -- )
;preview_icn .Screen/addr DEO2 ;preview_icn .Screen/addr DEO2
#00 #00 #00 #00
&loop &loop
( move ) DUP #0f AND #40 SFT 2/ #00 SWP ( move ) DUP #0f AND #40 SFT #01 SFT #00 SWP
.center/x LDZ2 #0040 -- ++ .Screen/x DEO2 .center/x LDZ2 #0060 SUB2 ADD2 .Screen/x DEO2
( move ) DUP #f0 AND 2/ #00 SWP ( move ) DUP #f0 AND #01 SFT #00 SWP
.center/y LDZ2 #0040 -- ++ .Screen/y DEO2 .center/y LDZ2 #0038 SUB2 ADD2 .Screen/y DEO2
( draw ) DUP .Screen/sprite DEO ( draw ) DUP .Screen/sprite DEO
INC NEQk ,&loop JCN INC NEQk ,&loop JCN
POP2 POP2
RTN JMP2r
@draw-1bpp ( -- ) @draw-1bpp ( -- )
#10 #00 #10 #00
&loop &loop
( color ) STHk ( color ) STHk
( y ) DUP 4/ [ #00 SWP ] #40 SFT2 ( y ) DUP #02 SFT [ #00 SWP ] #40 SFT2
[ .center/y LDZ2 #0040 -- ++ ] STH2 [ .center/y LDZ2 #0038 SUB2 ADD2 ] STH2
( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ++ ( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ADD2
[ .center/x LDZ2 #0008 ++ ++ ] [ .center/x LDZ2 #0020 SUB2 ADD2 ]
STH2r STHr #00 ,draw-circle JSR STH2r STHr #00 ,draw-circle JSR
INC GTHk ,&loop JCN INC GTHk ,&loop JCN
POP2 POP2
RTN JMP2r
@draw-2bpp ( -- ) @draw-2bpp ( -- )
#10 #00 #10 #00
&loop &loop
( color ) STHk ( color ) STHk
( y ) DUP 4/ [ #00 SWP ] #40 SFT2 ( y ) DUP #02 SFT [ #00 SWP ] #40 SFT2
[ .center/y LDZ2 ++ ] STH2 [ .center/y LDZ2 #0008 ADD2 ADD2 ] STH2
( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ++ ( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ADD2
[ .center/x LDZ2 #0008 ++ ++ ] [ .center/x LDZ2 #0020 SUB2 ADD2 ]
STH2r STHr #80 ,draw-circle JSR STH2r STHr #80 ,draw-circle JSR
INC GTHk ,&loop JCN INC GTHk ,&loop JCN
POP2 POP2
RTN JMP2r
@draw-circle ( x* y* color depth -- ) @draw-circle ( x* y* color depth -- )
@ -142,56 +99,31 @@ RTN
;preview_icn .Screen/addr DEO2 ;preview_icn .Screen/addr DEO2
.Screen/y DEO2 .Screen/y DEO2
.Screen/x DEO2 .Screen/x DEO2
AUTO-X #01 .Screen/auto DEO
STHr .Screen/sprite DEOk STHr .Screen/sprite DEOk
AUTO-Y #02 .Screen/auto DEO
SWP #10 + SWP DEOk SWP #10 ADD SWP DEOk
.Screen/x DEI2k #0008 -- ROT DEO2 .Screen/x DEI2k #0008 SUB2 ROT DEO2
AUTO-X #01 .Screen/auto DEO
SWP #10 + SWP DEOk SWP #10 ADD SWP DEOk
SWP #10 + SWP DEO SWP #10 ADD SWP DEO
RTN JMP2r
@draw-autobytes ( -- ) @draw-short ( short* -- )
.center/x LDZ2 #0090 ++ .Screen/x DEO2 SWP ,draw-byte JSR
.center/y LDZ2 #0040 -- .Screen/y DEO2
;23x-icns .Screen/addr DEO2
#16 .Screen/auto DEO
#04 .Screen/sprite DEOk DEOk DEO
.center/x LDZ2 #00a8 ++ .Screen/x DEO2 @draw-byte ( byte -- )
.center/y LDZ2 #0030 -- .Screen/y DEO2
;23y-icns .Screen/addr DEO2
#25 .Screen/auto DEO
#0c .Screen/sprite DEOk DEO
.center/x LDZ2 #00a0 ++ .Screen/x DEO2 DUP #04 SFT ,draw-hex JSR #0f AND
.center/y LDZ2 #0040 -- .Screen/y DEO2
;32x-icns .Screen/addr DEO2
#26 .Screen/auto DEO
#01 .Screen/sprite DEOk DEO
.center/x LDZ2 #0090 ++ .Screen/x DEO2 @draw-hex ( char -- )
.center/y LDZ2 #0028 -- .Screen/y DEO2
;32y-icns .Screen/addr DEO2
#15 .Screen/auto DEO
#03 .Screen/sprite DEOk DEOk DEO
RTN #00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
#01 .Screen/sprite DEO
@draw-pixels ( -- ) JMP2r
.center/y LDZ2 #0040 -- .Screen/y DEO2
.center/x LDZ2 #0048 ++ .Screen/x DEO2
AUTO-X
#00 .Screen/pixel DEO
#01 .Screen/pixel DEO
#02 .Screen/pixel DEO
#03 .Screen/pixel DEO
RTN
@preview_icn @preview_icn
0f38 675f dfbf bfbf 0007 1820 2344 4848 0f38 675f dfbf bfbf 0007 1820 2344 4848
@ -205,23 +137,3 @@ 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