( 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