uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 0114af1a10254de26f95aad0645729a7dfb7eb02
parent 10aec891e7d38b00972ccaaba7eed0728ab0b165
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date:   Tue, 16 Nov 2021 10:35:11 -0500

Added nametable demo

Diffstat:
Aprojects/examples/demos/nametable.tal | 232+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aprojects/pictures/bulma37x29.chr | 0
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.