From 21281ceeadaac591dcc4d8202183a3b28020e26c Mon Sep 17 00:00:00 2001 From: d6 Date: Thu, 3 Feb 2022 01:10:35 -0500 Subject: [PATCH] little ANSI/uxn proof of concept --- rainbow.tal | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 rainbow.tal diff --git a/rainbow.tal b/rainbow.tal new file mode 100644 index 0000000..e14f09e --- /dev/null +++ b/rainbow.tal @@ -0,0 +1,66 @@ +( rainbow.tal ) + +%emit { #18 DEO } +%rows { #0018 } +%cols { #0050 } +%mod { DIVk MUL SUB } +%mod2 { DIV2k MUL2 SUB2 } + +|0000 + +( pseudo-random number generator ) +@rng [ &x $2 &y $2 ] + +( read in regular expressions ) +( and emit internal structures parsed ) +|0100 + ;init-rng JSR2 ;draw #20 DEO2 BRK + +( works for 0 <= n < 100 ) +@emit-decimal ( n^ -> ) + STHk #0a LTH ,&small JCN + STHkr #0a DIV LIT '0 ADD emit + &small STHr #0a mod LIT '0 ADD emit + JMP2r + +( move to random spot, choose random color, draw char ) +@random-pixel + #5b1b emit emit ( esc [ ) + ;random-short JSR2 rows mod2 NIP ;emit-decimal JSR2 + LIT '; emit + ;random-short JSR2 cols mod2 NIP ;emit-decimal JSR2 + LIT 'H emit + + #5b1b emit emit ( esc [ ) + #3b31 emit emit ( 1 ; ) + ;random-short JSR2 #000a mod2 NIP #1e ADD ;emit-decimal JSR2 + LIT 'm emit + + LIT '# emit JMP2r + +@draw ( -> ) + ;random-pixel JSR2 + ;random-pixel JSR2 + ;random-pixel JSR2 + ;random-pixel JSR2 + BRK + +@init-rng ( -> ) + #00 #b5 DEI #003c MUL2 + #00 #b6 DEI ADD2 + #0001 ORA2 .rng/x STZ2 + + #00 #b3 DEI #0018 MUL2 + #00 #b4 DEI ADD2 + #0001 ORA2 .rng/y STZ2 JMP2r + +@random-byte ( -> val^ ) + ;random-short JSR2 POP JMP2r + +@random-short ( -> val* ) + .rng/x LDZ2 DUP2 #50 SFT2 EOR2 ( tmp: x^[x<<5] ) + .rng/y LDZ2 DUP2 .rng/x STZ2 ( tmp y ) + DUP2 #01 SFT2 EOR2 ( tmp y^[y>>1] ) + SWP2 DUP2 #03 SFT2 EOR2 ( y^[y>>1] tmp^[tmp>>3] ) + EOR2 DUP2 .rng/y STZ2 ( y^[y>>1] ^ tmp^[tmp>>3] ) + JMP2r