uxn

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

commit 24e1820d129e790877ffae5093e363d28f6b851b
parent 6996f1b4f544ff4165519183e2c824c7113f59b2
Author: Andrew Alderwick <andrew@alderwick.co.uk>
Date:   Fri, 26 Nov 2021 22:29:20 +0000

Add RLE text import to life.tal

Diffstat:
Mprojects/examples/demos/life.tal | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+), 0 deletions(-)

diff --git a/projects/examples/demos/life.tal b/projects/examples/demos/life.tal @@ -22,6 +22,7 @@ %WIDTH { #40 } %HEIGHT { #40 } %WIDTH-MOD { #3f AND } %HEIGHT-MOD { #3f AND } +%IN-RANGE { INCk SWP SUB2 GTH } %BANK1 { #8000 } %BANK2 { #a000 } @@ -32,6 +33,7 @@ ( devices ) |00 @System [ &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 ] +|10 @Console [ &vector $2 &read $1 &pad $5 &write $1 &error $1 ] |20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 ] |30 @Audio0 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ] |80 @Controller [ &vector $2 &button $1 &key $1 ] @@ -44,6 +46,7 @@ @world [ &frame $1 &count $2 ] @anchor [ &x $2 &y $2 ] @pointer [ &x $2 &y $2 ] +@rle [ &x $1 &y $1 &n $1 ] ( program ) @@ -55,6 +58,7 @@ #024f .System/b DEO2 ( vectors ) + ;on-input .Console/vector DEO2 ;on-frame .Screen/vector DEO2 ;on-mouse .Mouse/vector DEO2 ;on-control .Controller/vector DEO2 @@ -229,6 +233,15 @@ RTN RTN +@unset-cell ( x y -- ) + + DUP2 ,get-index JSR STH2 + POP 8MOD #01 SWP SFL #ff EOR + LDAkr STHr SWP AND + STH2r STA + +RTN + @get-cell ( x y -- cell ) DUP2 ,get-index JSR LDA @@ -269,6 +282,67 @@ RTN RTN +@on-input ( -> ) + ,&main JSR + BRK + + &main + .Console/read DEI #20 GTH JMP JMP2r ( ignore whitespace ) + .Console/read DEI LIT 'b EQU ,unset-run JCN + .Console/read DEI LIT 'o EQU ,set-run JCN + .Console/read DEI LIT '$ EQU ,input-eol JCN + .Console/read DEI LIT '! EQU ,input-eop JCN + LIT2 '0 '9 .Console/read DEI IN-RANGE ,input-number JCN + #44 .Console/write DEO + ;on-ignore-until-eol .Console/vector DEO2 + JMP2r + +@unset-run ( -- ) + ;unset-cell ,run JMP ( tail call ) + +@set-run ( -- ) + ;set-cell ( fall through ) + +@run ( cell-fn* -- ) + STH2 + ;on-frame-paused .Screen/vector DEO2 + .rle/n LDZk #00 ROT STZ + DUP #00 NEQ JMP INC + &loop ( count / cell-fn* ) + DUP #00 EQU ,&end JCN + .rle/x LDZ .rle/y LDZ STH2kr JSR2 + .rle/x LDZk INC SWP STZ + #01 SUB + ,&loop JMP + &end + POP POP2r + JMP2r + +@input-number ( -- ) + .rle/n LDZk #0a MUL + .Console/read DEI LIT '0 SUB + ADD SWP STZ + JMP2r + +@input-eol ( -- ) + WIDTH .rle/x LDZ SUB .rle/n STZ + ,unset-run JSR + #00 .rle/x STZ + .rle/y LDZk INC SWP STZ + JMP2r + +@input-eop ( -- ) + ,input-eol JSR + HEIGHT .rle/y LDZ GTH ,input-eop JCN + ;on-frame .Screen/vector DEO2 + #00 .rle/y STZ + BRK + +@on-ignore-until-eol ( -> ) + .Console/read DEI #0a EQU JMP BRK + ;on-input .Console/vector DEO2 + BRK + @cursor 80c0 e0f0 f8e0 1000