commit 8ec8c7c1f49167a84a03d543e4ad5c881d01284d
parent 3293a1b6399d9160f4c4ad7af96e6d1990cd7229
Author: neauoire <aliceffekt@gmail.com>
Date: Mon, 14 Mar 2022 14:02:43 -0700
(screen.tal) Optimized to fit GBA screen
Diffstat:
3 files changed, 58 insertions(+), 147 deletions(-)
diff --git a/projects/examples/devices/screen.tal b/projects/examples/devices/screen.tal
@@ -1,140 +1,97 @@
-( dev/screen )
+( Screen )
-%RTN { JMP2r }
-%2/ { #01 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 )
-
-|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 )
+|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
|0000
@count $2
-@center
- &x $2 &y $2
-
-( init )
+@center &x $2 &y $2
|0100 ( -> )
( vector )
;on-frame .Screen/vector DEO2
-
( theme )
#f07f .System/r DEO2
#f0e0 .System/g 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 )
- .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
-
( draw )
- ;draw-table JSR2
;draw-sprites JSR2
;draw-1bpp JSR2
;draw-2bpp JSR2
- ;draw-pixels JSR2
- ;draw-autobytes JSR2
- AUTO-NONE
+ #00 .Screen/auto DEO
BRK
@on-frame ( -> )
- AUTO-X
+ #01 .Screen/auto DEO
.count LDZ2 INC2 [ DUP2 ] .count STZ2
- .center/x LDZ2 #0048 ++ .Screen/x DEO2
- .center/y LDZ2 #0050 -- .Screen/y DEO2
- SWP
- 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
+ .center/x LDZ2 #0040 ADD2 .Screen/x DEO2
+ .center/y LDZ2 #0048 SUB2 .Screen/y DEO2
+ ;draw-short JSR2
BRK
-@draw-table ( -- )
+@draw-sprites ( -- )
- .center/x LDZ2 #0040 -- .Screen/x DEO2
- .center/y LDZ2 #0050 -- .Screen/y DEO2
+ .center/x LDZ2 #0060 SUB2 .Screen/x DEO2
+ .center/y LDZ2 #0048 SUB2 .Screen/y DEO2
;font-hex .Screen/addr DEO2
#f6 .Screen/auto DEO
#01 .Screen/sprite DEO
- .center/x LDZ2 #0050 -- .Screen/x DEO2
- .center/y LDZ2 #0040 -- .Screen/y DEO2
- ;font-hex .Screen/addr DEO2
- #f5 .Screen/auto DEO
- #01 .Screen/sprite DEO
- AUTO-NONE
-
-RTN
-
-@draw-sprites ( -- )
-
+ #00 .Screen/auto DEO
+ ( table )
;preview_icn .Screen/addr DEO2
#00 #00
&loop
- ( move ) DUP #0f AND #40 SFT 2/ #00 SWP
- .center/x LDZ2 #0040 -- ++ .Screen/x DEO2
- ( move ) DUP #f0 AND 2/ #00 SWP
- .center/y LDZ2 #0040 -- ++ .Screen/y DEO2
+ ( move ) DUP #0f AND #40 SFT #01 SFT #00 SWP
+ .center/x LDZ2 #0060 SUB2 ADD2 .Screen/x DEO2
+ ( move ) DUP #f0 AND #01 SFT #00 SWP
+ .center/y LDZ2 #0038 SUB2 ADD2 .Screen/y DEO2
( draw ) DUP .Screen/sprite DEO
INC NEQk ,&loop JCN
POP2
-RTN
+JMP2r
@draw-1bpp ( -- )
#10 #00
&loop
( color ) STHk
- ( y ) DUP 4/ [ #00 SWP ] #40 SFT2
- [ .center/y LDZ2 #0040 -- ++ ] STH2
- ( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ++
- [ .center/x LDZ2 #0008 ++ ++ ]
+ ( y ) DUP #02 SFT [ #00 SWP ] #40 SFT2
+ [ .center/y LDZ2 #0038 SUB2 ADD2 ] STH2
+ ( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ADD2
+ [ .center/x LDZ2 #0020 SUB2 ADD2 ]
STH2r STHr #00 ,draw-circle JSR
INC GTHk ,&loop JCN
POP2
-RTN
+JMP2r
@draw-2bpp ( -- )
#10 #00
&loop
( color ) STHk
- ( y ) DUP 4/ [ #00 SWP ] #40 SFT2
- [ .center/y LDZ2 ++ ] STH2
- ( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ++
- [ .center/x LDZ2 #0008 ++ ++ ]
+ ( y ) DUP #02 SFT [ #00 SWP ] #40 SFT2
+ [ .center/y LDZ2 #0008 ADD2 ADD2 ] STH2
+ ( x ) DUP #03 AND [ #00 SWP ] #40 SFT2 #0040 ADD2
+ [ .center/x LDZ2 #0020 SUB2 ADD2 ]
STH2r STHr #80 ,draw-circle JSR
INC GTHk ,&loop JCN
POP2
-RTN
+JMP2r
@draw-circle ( x* y* color depth -- )
@@ -142,56 +99,31 @@ RTN
;preview_icn .Screen/addr DEO2
.Screen/y DEO2
.Screen/x DEO2
- AUTO-X
+ #01 .Screen/auto DEO
STHr .Screen/sprite DEOk
- AUTO-Y
- SWP #10 + SWP DEOk
- .Screen/x DEI2k #0008 -- ROT DEO2
- AUTO-X
- SWP #10 + SWP DEOk
- SWP #10 + SWP DEO
-
-RTN
-
-@draw-autobytes ( -- )
-
- .center/x LDZ2 #0090 ++ .Screen/x DEO2
- .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
- .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
- .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
- .center/y LDZ2 #0028 -- .Screen/y DEO2
- ;32y-icns .Screen/addr DEO2
- #15 .Screen/auto DEO
- #03 .Screen/sprite DEOk DEOk DEO
-
-RTN
-
-@draw-pixels ( -- )
-
- .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
+ #02 .Screen/auto DEO
+ SWP #10 ADD SWP DEOk
+ .Screen/x DEI2k #0008 SUB2 ROT DEO2
+ #01 .Screen/auto DEO
+ SWP #10 ADD SWP DEOk
+ SWP #10 ADD SWP DEO
+
+JMP2r
+
+@draw-short ( short* -- )
-RTN
+ SWP ,draw-byte JSR
+
+@draw-byte ( byte -- )
+
+ DUP #04 SFT ,draw-hex JSR #0f AND
+
+@draw-hex ( char -- )
+
+ #00 SWP #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
+ #01 .Screen/sprite DEO
+
+JMP2r
@preview_icn
0f38 675f dfbf bfbf 0007 1820 2344 4848
@@ -205,23 +137,3 @@ RTN
007c 8202 7e82 827e 00fc 8282 fc82 82fc
007c 8280 8080 827c 00fc 8282 8282 82fc
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
diff --git a/projects/software/calc.tal b/projects/software/calc.tal
@@ -754,4 +754,4 @@ RTN
@pointer-icn
80c0 e0f0 f8e0 1000
-@blank-icn
-\ No newline at end of file
+@blank-icn
diff --git a/projects/examples/demos/clock.tal b/projects/software/clock.tal