commit 0114af1a10254de26f95aad0645729a7dfb7eb02
parent 10aec891e7d38b00972ccaaba7eed0728ab0b165
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date: Tue, 16 Nov 2021 10:35:11 -0500
Added nametable demo
Diffstat:
2 files changed, 232 insertions(+), 0 deletions(-)
diff --git a/projects/examples/demos/nametable.tal b/projects/examples/demos/nametable.tal
@@ -0,0 +1,232 @@
+
+(
+ uxnasm projects/examples/demos/nametable.tal bin/nametable.rom
+ uxnemu bin/nametable.rom
+)
+
+%+ { ADD } %- { SUB } %/ { DIV }
+%< { LTH } %> { GTH } %= { EQU } %! { NEQ }
+%++ { ADD2 } %-- { SUB2 } %// { DIV2 }
+%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
+
+%2** { #10 SFT2 } %2// { #01 SFT2 }
+%8** { #30 SFT2 } %8// { #03 SFT2 }
+%10** { #40 SFT2 } %10// { #04 SFT2 }
+%MOD2 { DIV2k MUL2 SUB2 }
+%MOD { DIVk MUL SUB }
+%RTN { JMP2r }
+
+%WIDTH { #0037 }
+%HEIGHT { #0029 } ( 08cf )
+%LENGTH { WIDTH HEIGHT MUL2 10** }
+
+( devices )
+
+|00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 ]
+|10 @Console [ &vector $2 &read $1 &pad $5 &write $1 &error $1 ]
+|20 @Screen [ &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 ]
+|80 @Controller [ &vector $2 &button $1 &key $1 ]
+|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &wheel $1 ]
+|a0 @File [ &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 ]
+
+( variables )
+
+|0000
+
+( program )
+
+@tiles-frame
+ &x $2 &y $2
+@nametable-frame
+ &x $2 &y $2
+@buffer $10
+
+|0100 ( -> )
+
+ ( theme )
+ #34cd .System/r DEO2
+ #28ac .System/g DEO2
+ #297b .System/b DEO2
+
+ WIDTH 8** #0010 ++ .Screen/width DEO2
+ #01e8 .Screen/height DEO2
+
+ #0008 .tiles-frame/x STZ2
+ HEIGHT 8** #0008 ++ .tiles-frame/y STZ2
+ #0008 .nametable-frame/x STZ2
+ #0008 .nametable-frame/y STZ2
+
+ ;input-name
+ DUP2 ,load JSR
+ ;assoc JSR2
+
+ ;draw-tiles JSR2
+ ;draw-nametable JSR2
+ ;draw-short JSR2
+
+BRK
+
+@load ( filename* -- )
+
+ LIT2r 0000
+ .File/name DEO2
+ &stream
+ #0010 .File/length DEO2
+ ;buffer
+ DUP2 .File/read DEO2
+ ,find-tile JSR #ffff !! ,&skip JCN
+ ;buffer ;add-tile JSR2
+ &skip
+ INC2r
+ .File/success DEI2 #0000 !! ,&stream JCN
+ STH2r #0001 -- ;result/tiles STA2
+
+RTN
+
+@find-tile ( addr* -- addr* )
+
+ STH2
+ ;result/length LDA2 #0000
+ &loop
+ DUP2 10** ;result/data ++ STH2kr ;tiles-equal JSR2 #00 = ,&continue JCN
+ NIP2 POP2r RTN
+ &continue
+ INC2 GTH2k ,&loop JCN
+ POP2 POP2 POP2r
+ ( default ) #ffff
+
+RTN
+
+@tiles-equal ( a* b* -- bool )
+
+ STH2
+ DUP2 #0010 ++ SWP2
+ &loop
+ LDAk LDAkr STHr = ,&continue JCN
+ POP2 POP2 POP2r #00 RTN
+ &continue
+ INC2r
+ INC2 GTH2k ,&loop JCN
+ POP2 POP2 POP2r #01
+
+RTN
+
+@add-tile ( addr* -- addr* )
+
+ STH2
+ #0010 #0000
+ &loop
+ ( addr* ) DUP2 ;result/length LDA2 10** ;result/data ++ ++
+ ( data ) OVR2 STH2kr ++ LDA
+ ( order ) ROT ROT STA
+ INC2 GTH2k ,&loop JCN
+ POP2 POP2
+ POP2r
+ ( incr ) ;result/length LDA2 INC2 ;result/length STA2
+
+RTN
+
+@assoc ( -- length )
+
+ LIT2r 0000
+ .File/name DEO2
+ &stream
+ #0010 .File/length DEO2
+ ;buffer
+ DUP2 .File/read DEO2
+ ;find-tile JSR2 STH2kr SWP2 ;set-tile JSR2
+ INC2r
+ .File/success DEI2 #0000 !! ,&stream JCN
+ POP2r
+
+RTN
+
+( draw )
+
+@draw-tiles ( -- )
+
+ .tiles-frame/x LDZ2 .Screen/x DEO2
+ .tiles-frame/y LDZ2 .Screen/y DEO2
+ ;result/data .Screen/addr DEO2
+
+ ( width ) LITr 00
+ ( auto x addr ) #05 .Screen/auto DEO
+ ;result/data ;result/length LDA2 10** ++ ;result/data
+ &loop
+ STHkr WIDTH NIP MOD ,&continue JCN
+ .tiles-frame/x LDZ2 .Screen/x DEO2
+ .Screen/y DEI2 #0008 ++ .Screen/y DEO2
+ POPr LITr 00
+ &continue
+ INCr
+ #81 .Screen/sprite DEO
+ #0010 ++ GTH2k ,&loop JCN
+ POP2 POP2
+ ( auto none ) #00 .Screen/auto DEO
+ POPr
+
+RTN
+
+@set-tile ( id* addr* -- )
+
+ SWP2 2** ;result/data ++ ;result/length LDA2 10** ++ STA2
+
+RTN
+
+@get-tile ( id* -- addr* )
+
+ 2** ;result/length LDA2 10** ;result/data ++ ++ LDA2
+
+RTN
+
+@draw-nametable ( -- )
+
+ ;result/tiles LDA2 #0000
+ &loop
+ DUP2 WIDTH MOD2 8** .nametable-frame/x LDZ2 ++ .Screen/x DEO2
+ DUP2 WIDTH DIV2 8** .nametable-frame/y LDZ2 ++ .Screen/y DEO2
+ DUP2 ;get-tile JSR2 10** ;result/data ++ .Screen/addr DEO2
+ #81 .Screen/sprite DEO
+ INC2 GTH2k ,&loop JCN
+ POP2 POP2
+
+RTN
+
+@draw-short ( -- )
+
+ #0008 .Screen/x DEO2
+ #0008 .Screen/y DEO2
+ #01 .Screen/auto DEO
+ ;result/length LDA2 SWP
+ ( high ) ,&draw-byte JSR
+ ( low ) ,&draw-byte JSR
+ #05 .Screen/auto DEO
+
+RTN
+
+ &draw-byte ( byte -- )
+ DUP
+ ( high ) #04 SFT ,&draw-char JSR
+ ( low ) #0f AND ,&draw-char JSR
+ RTN
+ &draw-char ( num -- )
+ #30 SFT #00 SWP ;font-hex ADD2 .Screen/addr DEO2
+ #01 .Screen/sprite DEO
+ RTN
+
+@input-name "projects/pictures/bulma37x29.chr $1
+
+@font-hex ( 0-F )
+ 007c 8282 8282 827c 0030 1010 1010 1010
+ 007c 8202 7c80 80fe 007c 8202 1c02 827c
+ 000c 1424 4484 fe04 00fe 8080 7c02 827c
+ 007c 8280 fc82 827c 007c 8202 1e02 0202
+ 007c 8282 7c82 827c 007c 8282 7e02 827c
+ 007c 8202 7e82 827e 00fc 8282 fc82 82fc
+ 007c 8280 8080 827c 00fc 8282 8282 82fc
+ 007c 8280 f080 827c 007c 8280 f080 8080
+
+@result
+ &length $2
+ &tiles $2
+ &data
diff --git a/projects/pictures/bulma37x29.chr b/projects/pictures/bulma37x29.chr
Binary files differ.