commit 07112d8f264ecb423a9cadf403c224a8a0eac3cb
parent 598846a1b820b398e820d53c060a360d5ead9e18
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date: Fri, 14 Jun 2024 10:46:12 -0800
(neralie) Moved to uxn-utils
Diffstat:
2 files changed, 6 insertions(+), 287 deletions(-)
diff --git a/projects/examples/demos/hilbert.tal b/projects/examples/demos/hilbert.tal
@@ -1,7 +1,6 @@
|00 @System &vector $2 &wst $1 &rst $1 &eaddr $2 &ecode $1 &pad $1 &r $2 &g $2 &b $2 &debug $1 &halt $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
-
-|0100
+|100
@on-reset ( -> )
( | theme )
@@ -31,16 +30,15 @@
.Screen/y DEI2 diff ,&y STR2
.Screen/x DEI2 diff ,&x STR2
#0400
- &l ( -- )
+ &>l ( -- )
.Screen/x DEI2k [ LIT2 &x $2 ] ADD2 ROT DEO2
.Screen/y DEI2k [ LIT2 &y $2 ] ADD2 ROT DEO2
[ LIT2 01 -Screen/pixel ] DEO
- INC GTHk ?&l
+ INC GTHk ?&>l
POP2 BRK
@diff ( a* b* -- dir* )
- EQU2k ?{
- LTH2 ?{ #0001 JMP2r }
+ EQU2k ?{ LTH2 ?{ #0001 JMP2r }
#ffff JMP2r }
POP2 POP2 #0000 JMP2r
@@ -50,7 +48,7 @@
( ) DUP2 ,&x STR2
( ) ,&y STR2
#2001
- &l ( -- )
+ &>l ( -- )
#00 OVR STH2
[ LIT2 &t $2 ] DUP2 #02 SFT2 ,&t STR2
( ) DUP2 #01 SFT2 #0001 AND2 DUP2 ,&rx STR2
@@ -66,7 +64,7 @@
POP2r
( ) STH2kr ,&ry LDR2 MUL2 ADD2 ,&y STR2
( ) STH2r ,&rx LDR2 MUL2 ADD2 ,&x STR2
- DUP ADD GTHk ?&l
+ DUP ADD GTHk ?&>l
POP2
( ) ,&x LDR2 #20 SFT2 #0020 ADD2
( ) ,&y LDR2 #20 SFT2 #0020 ADD2 JMP2r
diff --git a/projects/software/neralie.tal b/projects/software/neralie.tal
@@ -1,279 +0,0 @@
-( app/neralie : clock with arvelie date )
-
-( devices )
-
-|00 @System [ &vector $2 &pad $6 &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 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 ]
-|c0 @DateTime [ &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ]
-
-( variables )
-
-|0000
-
-@fps [ ¤t $1 &next $1 &second $1 ]
-@number [ &started $1 &count $1 ]
-@lines [ &addr $1 ]
-@neralie [ &n0123 $2 &n4 $1 &n5 $1 &n6 $1 &n7 $1 &n8 $1 &n9 $1 &color $1 &x $2 &y $2 &w $2 &h $2 ]
-@mul [ &ahi $1 &alo $1 &bhi $1 &blo $1 ]
-@frame
- &x1 $2 &x2 $2 &y1 $2 &y2 $2
-
-( program )
-
-|0100
-
- ( theme )
- #0f3d .System/r DEO2
- #0fe3 .System/g DEO2
- #0fb2 .System/b DEO2
-
- ( vectors )
- ;on-screen .Screen/vector DEO2
-
- ( window )
- #0160 .Screen/width DEO2
- #0110 .Screen/height DEO2
-
- #01 .fps/current STZ
-
- ( set size )
- #0018 ( padding )
- DUP2 .frame/x1 STZ2
- DUP2 .frame/y1 STZ2
- DUP2 .Screen/width DEI2 SWP2 SUB2 #0001 SUB2 .frame/x2 STZ2
- .Screen/height DEI2 SWP2 SUB2 .frame/y2 STZ2
-
- #01 .neralie/color STZ
-
- .frame/x1 LDZ2 .frame/x2 LDZ2
- OVR2 OVR2 .frame/y1 LDZ2 ;h JSR2
- .frame/y2 LDZ2 ;h JSR2
- .frame/y1 LDZ2 #0001 SUB2 .frame/y2 LDZ2 INC2
- OVR2 OVR2 .frame/x1 LDZ2 ;v JSR2
- .frame/x2 LDZ2 ;v JSR2
-
-@on-screen ( -> )
-
- ;update-fps JSR2
-
- #00 .neralie/color STZ
- ;draw-clock JSR2
- ;neralie-calc JSR2
-
- #01 .neralie/color STZ
- ;draw-date JSR2
- ;draw-clock JSR2
-
-BRK
-
-@neralie-calc ( -- )
-
- ( add up fractions of a pulse, store tenths in n6 )
- #0120 #00 .DateTime/hour DEI MUL2
- #00c0 #00 .DateTime/minute DEI MUL2 ADD2
- #00f8 #00 .DateTime/second DEI MUL2 ADD2
- #0271 #00 .fps/next LDZ MUL2 #00 .fps/current LDZ DIV2 #30 SFT2 ADD2
- #01b0 ;modf JSR2 SWP2 #0017 MUL2 #03e8 DIV2 .neralie/n6 STZ POP
-
- ( add up units and tens of pulses, store in n5 and n4 )
- #0042 #00 .DateTime/hour DEI MUL2 ADD2
- #005e #00 .DateTime/minute DEI MUL2 ADD2
- #000b #00 .DateTime/second DEI MUL2 ADD2
- #000a ;modf JSR2 SWP2 .neralie/n5 STZ POP
- #000a ;modf JSR2 SWP2 .neralie/n4 STZ POP
-
- ( add up hundreds of pulses + 10 x beats, store in n0123 )
- #01a0 #00 .DateTime/hour DEI MUL2 ADD2
- #0006 #00 .DateTime/minute DEI MUL2 ADD2 .neralie/n0123 STZ2
-
-JMP2r
-
-@draw-date ( -- )
-
- ( auto x ) #01 .Screen/auto DEO
-
- .Screen/width DEI2 #01 SFT2 #0034 SUB2 .Screen/x DEO2
- .Screen/height DEI2 #0010 SUB2 .Screen/y DEO2
-
- ( arvelie )
- .DateTime/year DEI2 #07d6 SUB2 NIP
- DUP #0a DIV #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2
- #01 .Screen/sprite DEO
- #0a DIVk MUL SUB #00 SWP #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2
- #01 .Screen/sprite DEO
- .DateTime/doty DEI2
- DUP2 #000e DIV2 #30 SFT2 ;font-letters ADD2 .Screen/addr DEO2
- #01 .Screen/sprite DEO
- #000e DIV2k MUL2 SUB2
- DUP2 #000a DIV2 ,digit JSR
- #000a DIV2k MUL2 SUB2 ,digit JSR
-
- .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
-
- ( neralie )
- .neralie/n0123 LDZ2
- #03e8 ;modf JSR2 ,digit JSR
- #0064 ;modf JSR2 ,digit JSR
- #000a ;modf JSR2 ,digit JSR
- #000b ,digit JSR ( the colon )
- ,digit JSR
- #00 .neralie/n4 LDZ ,digit JSR
- #00 .neralie/n5 LDZ ,digit JSR
-
- ( auto none ) #00 .Screen/auto DEO
-
-JMP2r
-
-@digit ( index* -- )
-
- #30 SFT2 ;font-numbers ADD2 .Screen/addr DEO2
- .neralie/color LDZ .Screen/sprite DEO
-
-JMP2r
-
-@draw-clock ( -- )
-
- .frame/x2 LDZ2 .frame/x1 LDZ2
- DUP2 .neralie/x STZ2 SUB2 .neralie/w STZ2
- .frame/y2 LDZ2 .frame/y1 LDZ2
- DUP2 .neralie/y STZ2 SUB2 .neralie/h STZ2
-
- ;neralie/n4 NIP .neralie/n0123 LDZ2
-
- DUP2 ;&h JSR2
-
- ;&next JSR2 #0008 .Screen/x DEO2 .neralie/y LDZ2 #0003 SUB2 .Screen/y DEO2 ,digit JSR
-
- DUP2 ;&v JSR2
- #04 ;v/spacing STA
- .frame/y1 LDZ2 #0003 SUB2 .neralie/y LDZ2 .neralie/x LDZ2 ;v JSR2
- #01 ;v/spacing STA
- ,&next JSR #0008 .Screen/y DEO2 .neralie/x LDZ2 #0003 SUB2 .Screen/x DEO2 ;digit JSR2
- DUP2 ,&h JSR
- ,&next JSR .Screen/width DEI2 #0010 SUB2 .Screen/x DEO2 .neralie/y LDZ2 #0003 SUB2 .Screen/y DEO2 ;digit JSR2
- DUP2 ,&v JSR
- ,&next JSR POP2
- DUP2 ,&h JSR
- ,&next JSR POP2
- DUP2 ,&v JSR
- POP2 POP
- JMP2r
-
- &next ( digit-addr number* -- next-digit-addr next-number* prev-digit* )
- #03e8 ;modf JSR2 STH2 #000a MUL2
- ROT STHk INC ROT ROT
- #00 STHr LDZ ADD2
- STH2r
- JMP2r
-
- &h ( number* -- )
- ,scale JSR
- .neralie/h LDZ2 ;mul2hi JSR2
- ORAk #02 JCN POP2 JMP2r
- DUP2 .neralie/y LDZ2 ADD2 .neralie/y STZ2
- .neralie/h LDZ2 SWP2 SUB2 .neralie/h STZ2
- .neralie/x LDZ2 DUP2 .neralie/w LDZ2 ADD2 .neralie/y LDZ2 ,h JMP
-
- &v ( number* -- )
- ,scale JSR
- .neralie/w LDZ2 ;mul2hi JSR2
- ORAk #02 JCN POP2 JMP2r
- DUP2 .neralie/x LDZ2 ADD2 .neralie/x STZ2
- .neralie/w LDZ2 SWP2 SUB2 .neralie/w STZ2
- .neralie/y LDZ2 DUP2 .neralie/h LDZ2 ADD2 .neralie/x LDZ2 ,v JMP
-
-@scale ( 0..10000* -- 0..65535* )
- DUP2 #8db8 ;mul2hi JSR2
- SWP2 #0006 MUL2 ADD2
- JMP2r
-
-@h ( x1* x2* y* -- )
- .Screen/y DEO2
- .Screen/x .lines/addr STZ
- ,v/draw-line JMP
-
-@v ( y1* y2* x* -- )
- .Screen/x DEO2
- .Screen/y .lines/addr STZ
-
- &draw-line ( v1* v2* -- )
- LTH2k #01 JCN SWP2
- STH2
-
- &loop
- LIT2 [ 00 ] &spacing [ 01 ] ADD2
- DUP2 DUP2r STH2r LTH2 ,&keep-going JCN
- POP2 POP2r
- JMP2r
-
- &keep-going
- DUP2 .lines/addr LDZ DEO2
- .neralie/color LDZ .Screen/pixel DEO
- ,&loop JMP
-
-@update-fps ( -- )
- .fps/next LDZ INC .fps/next STZ
- .DateTime/second DEI .fps/second LDZ NEQ JMP JMP2r
- .DateTime/second DEI .fps/second STZ
- .fps/next LDZ .fps/current STZ
-
- #00 .fps/next STZ
- JMP2r
-
-@modf ( dividend* divisor* SUB2 remainder* quotient* )
- DIV2k STH2k MUL2 SUB2 STH2r JMP2r
-
-@mul2hi ( a* b* -- product-top-16-bits* )
- (
- Multiplying two 16-bit numbers yields a 32-bit number.
- MUL2 returns the lowest 16 bits, we want the highest.
-
- We split each short into hi and lo bytes, then sum
- the following multiplications:
-
- 31..24 23..16 15..08 07..00
- { ahi * bhi }
- { alo * bhi }
- { ahi * blo }
- { alo * blo }
-
- Bits 07..00 can be ignored, but each sum in bits 23..16
- can end up overflowing into bit 24.
- )
-
- ;mul/bhi STA2 ;mul/ahi STA2
- #00
- #00
- #00 .mul/alo LDZ #00 .mul/blo LDZ MUL2
- POP
- #00 .mul/ahi LDZ #00 .mul/blo LDZ MUL2 ,&adc JSR
- #00 .mul/alo LDZ #00 .mul/bhi LDZ MUL2 ,&adc JSR
- POP
- #00 .mul/ahi LDZ #00 .mul/bhi LDZ MUL2 ADD2
- JMP2r
-
- &adc ( 31..24 a* b* -- 31..24 sum* )
- OVR2 ADD2 SWP2 OVR2
- GTH2 ,&carry JCN
- JMP2r
- &carry
- ROT INC ROT ROT
- JMP2r
-
-@font-numbers
- 7cc6 ced6 e6c6 7c00 1838 1818 1818 7e00 3c66 063c 6066 7e00
- 3c66 061c 0666 3c00 1c3c 6ccc fe0c 1e00 7e62 607c 0666 3c00
- 3c66 607c 6666 3c00 7e66 060c 1818 1800 3c66 663c 6666 3c00
- 3c66 663e 0666 3c00 7cc6 ced6 e6c6 7c00 0018 1800 1818 0000
-
-@font-letters
- 183c 6666 7e66 6600 fc66 667c 6666 fc00 3c66 c0c0 c066 3c00
- f86c 6666 666c f800 fe62 6878 6862 fe00 fe62 6878 6860 f000
- 3c66 c0c0 ce66 3e00 6666 667e 6666 6600 7e18 1818 1818 7e00
- 1e0c 0c0c cccc 7800 e666 6c78 6c66 e600 f060 6060 6266 fe00
- c6ee fefe d6c6 c600 c6e6 f6de cec6 c600 386c c6c6 c66c 3800
- fc66 667c 6060 f000 386c c6c6 dacc 7600 fc66 667c 6c66 e600
- 3c66 603c 0666 3c00 7e5a 1818 1818 3c00 6666 6666 6666 3c00
- 6666 6666 663c 1800 c6c6 c6d6 feee c600 c66c 3838 6cc6 c600
- 6666 663c 1818 3c00 fec6 8c18 3266 fe00 0018 187e 1818 0000