uxn-utils/cli/stdlib/stdlib.tal

184 lines
3.2 KiB
Tal
Raw Permalink Normal View History

2024-03-17 14:55:25 -04:00
|0100 @on-reset ( -> )
2023-04-10 18:02:25 -04:00
;tests/end ;tests
&l ( -- )
2024-03-17 14:55:25 -04:00
LDA2k JSR2 test INC2 INC2 GTH2k ?&l
2023-04-10 18:02:25 -04:00
POP2 POP2
2024-01-08 23:08:24 -05:00
( lb ) #0a18 DEO
( debugger ) #010e DEO
( exit ) #800f DEO
BRK
2023-04-10 18:02:25 -04:00
@test ( f -- )
#30 ADD #18 DEO
JMP2r
2023-04-10 18:02:25 -04:00
(
@|tests )
2023-04-10 18:02:25 -04:00
2023-04-10 18:09:17 -04:00
@tests [
=test-dec1 =test-dec2 =test-dec3 =test-dec4
2024-01-08 23:08:24 -05:00
=test-hex1 =test-hex2 =test-hex3 =test-hex4
2024-01-09 23:27:57 -05:00
=test-scmp1 =test-scmp2 =test-scmp3 =test-scmp4
2024-03-17 14:55:25 -04:00
=test-scpy1 =test-spal1 =test-spal2 ]
&end
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@test-dec1 #0a18 DEO
;dict/dec1 sdec #1234 EQU2 JMP2r
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@test-dec2 ;dict/dec2 sdec #0123 EQU2 JMP2r
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@test-dec3 ;dict/dec3 sdec #0000 EQU2 JMP2r
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@test-dec4 ;dict/dec4 sdec #0000 EQU2 JMP2r
2023-04-10 22:59:42 -04:00
2024-03-17 14:55:25 -04:00
@test-hex1 #0a18 DEO
;dict/hex1 shex #12c0 EQU2 JMP2r
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@test-hex2 ;dict/hex2 shex #034f EQU2 JMP2r
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@test-hex3 ;dict/dec3 sdec #0000 EQU2 JMP2r
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@test-hex4 ;dict/dec4 sdec #0000 EQU2 JMP2r
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@test-scmp1 #0a18 DEO
2024-01-08 23:08:24 -05:00
{ "text 00 }
STH2r { "text 00 }
STH2r scmp #01 EQU JMP2r
2024-03-17 14:55:25 -04:00
@test-scmp2 { "text 00 }
2024-01-08 23:08:24 -05:00
STH2r { "te 00 }
STH2r scmp #00 EQU JMP2r
2024-03-17 14:55:25 -04:00
@test-scmp3 { "textext 00 }
2024-01-08 23:08:24 -05:00
STH2r { "text 00 }
STH2r scmp #00 EQU JMP2r
2024-03-17 14:55:25 -04:00
@test-scmp4 { 00 "ext 00 }
2024-01-08 23:08:24 -05:00
STH2r { "text 00 }
STH2r scmp #00 EQU JMP2r
2024-03-17 14:55:25 -04:00
@test-scpy1 #0a18 DEO
2024-01-09 23:27:57 -05:00
{ "hello 00 }
STH2kr ;&buf <scpy>
STH2r ;&buf scmp #01 EQU JMP2r
&buf $10
2024-03-17 14:55:25 -04:00
@test-pal1 { "racecar 00 }
STH2r spal #01 EQU JMP2r
@test-pal2 { "racecat 00 }
STH2r spal #00 EQU JMP2r
(
@|stdlib )
2024-01-09 23:21:14 -05:00
@scap ( str* -: end* )
INC2 & LDAk ?scap
JMP2r
2024-03-17 14:55:25 -04:00
@palindrome? ( str* -- f )
scap/
( TODO ) JMP2r
2024-01-09 23:21:14 -05:00
@slen ( str* -: len* )
DUP2 scap/ SWP2 SUB2 JMP2r
2024-01-09 23:21:14 -05:00
@<scpy> ( src* dst* -: )
STH2
&w ( src* `dst* -- )
2024-03-17 14:55:25 -04:00
LDAk #00 STH2kr STA2
INC2r INC2 LDAk ?&w
2024-01-09 23:21:14 -05:00
POP2 POP2r JMP2r
@<sput> ( chr str* -: )
STH2
#00 STH2r scap/ STA2
JMP2r
2024-03-17 14:55:25 -04:00
@<sclr> ( str* -- )
2024-01-09 23:21:14 -05:00
STH2
#00 STH2r
&w ( -- )
2024-03-17 14:55:25 -04:00
STAk INC2 LDAk ?&w
2024-01-09 23:21:14 -05:00
STA
JMP2r
2023-04-10 18:02:25 -04:00
@scmp ( a* b* -- f )
2024-01-09 11:22:32 -05:00
STH2
&l ( -- )
2024-03-17 14:55:25 -04:00
LDAk ?{
&d LDA LDAr STHr EQU JMP2r }
LDAk LDAkr STHr NEQ ?&d
2024-01-09 11:22:32 -05:00
INC2 INC2r !&l
@sdec ( str* -- val* )
[ LIT2r 0000 ]
&w ( -- )
2024-03-17 14:55:25 -04:00
( validate ) LDAk [ LIT "0 ] SUB #09 GTH ?&end
( accumulate ) [ LIT2r 000a ] MUL2r
( combine ) LDAk [ LIT "0 ] SUB [ LITr 00 ] STH
ADD2r
( continue ) INC2 LDAk ?&w
&end POP2 STH2r JMP2r
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@shex ( str* -: val* )
[ LIT2r 0000 ]
2024-03-17 14:55:25 -04:00
&w ( str* `acc* -: val* )
LDAk chex INC #00 EQU ?{
[ LITr 40 ] SFT2r LDAk chex [ LITr 00 ] STH
ADD2r INC2 LDAk ?&w }
POP2 STH2r JMP2r
2023-04-10 18:02:25 -04:00
2024-03-17 14:55:25 -04:00
@chex ( c -: val! )
( dec ) [ LIT "0 ] SUB DUP #09 GTH ?{ JMP2r }
( hex ) #27 SUB DUP #0f GTH ?{ JMP2r }
( err ) POP #ff JMP2r
2024-03-17 14:55:25 -04:00
( return 1 if string is palindrome, otherwise 0 )
(
@|print )
2024-03-17 14:55:25 -04:00
@<pstr> ( str* -: )
LDAk #18 DEO
INC2 & LDAk ?<pstr>
POP2 JMP2r
2024-03-17 14:55:25 -04:00
@<phex> ( short* -: )
SWP /b
&b ( byte -: )
DUP #04 SFT /c
&c ( byte -: )
#0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #18 DEO
JMP2r
2024-03-17 14:55:25 -04:00
@<pdec> ( short* -: )
#2710 [ LIT2r 00fb ]
2024-03-17 14:55:25 -04:00
&>w ( short* size* `acc* -: )
DIV2k #000a DIV2k MUL2 SUB2 SWPr EQUk OVR STHkr EQU AND ?&e
DUP [ LIT "0 ] ADD #19 DEO
INCr
&e ( short* size* `acc* -: )
POP2 #000a DIV2 SWPr INCr STHkr ?&>w
POP2r POP2 POP2 JMP2r
@<pmem> ( addr* -- )
#0000
&l ( -- )
2024-03-17 14:55:25 -04:00
ADD2k LDA <phex>/b
DUP #0f AND #0f NEQ #16 MUL #0a ADD #18 DEO
INC NEQk ?&l
POP2 POP2 JMP2r
2023-04-10 18:02:25 -04:00
2023-04-10 22:59:42 -04:00
(
@|assets )
@dict &dec1 "4660 $1
2023-04-10 18:02:25 -04:00
&dec2 "291 $1
2023-04-10 18:09:17 -04:00
&dec3 "0 $1
&dec4 "q2x*63? $1
2023-04-10 18:02:25 -04:00
&hex1 "12c0 $1
&hex2 "34f $1
2023-04-10 18:09:17 -04:00
&hex3 "0 $1
&hex4 "q2x*63? $1
2023-04-10 18:02:25 -04:00