commit f8453cb
Devine Lu Linvega
·
2025-08-21 17:14:00 +0000 UTC
parent 3a3c0b7
Added console test
8 files changed,
+152,
-69
+83,
-0
1@@ -0,0 +1,83 @@
2+( usage: uxncli console.rom foo "bar baz"
3+| Prints Welcome to Uxn!, and listens for incoming stdin events on enter. )
4+
5+|10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1
6+
7+|000
8+
9+ @arg $40
10+ @std $40
11+
12+|100
13+
14+@on-reset ( -> )
15+ ;Dict/hello <print-str>
16+ .Console/type DEI ?{
17+ ( | no arguments )
18+ ;on-std .Console/vector DEO2
19+ BRK }
20+ ;on-arg .Console/vector DEO2
21+ BRK
22+
23+@on-arg ( -> )
24+ [ LIT2 02 -Console/type ] DEI NEQ ?{
25+ .Console/read DEI [ LIT2 00 &ptr -arg ] INCk ,&ptr STR
26+ STZ2
27+ BRK }
28+ ;arg ;Dict/yousent <print-result>
29+ [ LIT2 -arg _&ptr ] STR
30+ [ LIT2 04 -Console/type ] DEI NEQ ?{ ;on-std .Console/vector DEO2 }
31+ BRK
32+
33+@on-std ( -> )
34+ [ LIT2 0a -Console/read ] DEI EQU ?{
35+ .Console/read DEI [ LIT2 00 &ptr -std ] INCk ,&ptr STR
36+ STZ2
37+ BRK }
38+ ;std DUP2 ;Dict/yousaid <print-result>
39+ ;Dict/quit scmp ?{
40+ [ LIT2 -std _&ptr ] STR
41+ BRK }
42+ ( quit ) #800f DEO
43+ BRK
44+
45+@<print-result> ( buf* name* -- )
46+ <print-str>
47+ [ LIT2 "" 18 ] DEO
48+ <print-str>/
49+ [ LIT2 "" 18 ] DEO
50+ [ LIT2 00 -Console/type ] DEI DUP ADD ;Types ADD2 LDA2 <print-str>/
51+ #0a18 DEO
52+ JMP2r
53+
54+@<print-str> ( str* -- )
55+ LDAk #18 DEO
56+ INC2 & LDAk ?<print-str>
57+ POP2 JMP2r
58+
59+@scmp ( a* b* -- f )
60+ STH2
61+ &l ( a* b* -- f )
62+ LDAk LDAkr STHr NEQk ?&d
63+ DUP EOR EQUk ?&d
64+ POP2 INC2 INC2r !&l
65+
66+ &d ( a* c1 c2 b* -- f )
67+ NIP2 POP2r EQU JMP2r
68+
69+(
70+@|assets )
71+
72+@Types =Dict/arg-none =Dict/arg-stdin =Dict/arg-data =Dict/arg-spacer =Dict/arg-end
73+
74+@Dict
75+ &hello "Welcome 20 "to 20 "Uxn! 0a $1
76+ &yousaid "You 20 "said: 20 $1
77+ &yousent "You 20 "sent: 20 $1
78+ &quit "quit $1
79+ &arg-none "<none> $1
80+ &arg-stdin "<stdin> $1
81+ &arg-data "<data> $1
82+ &arg-spacer "<spacer> $1
83+ &arg-end "<end> $1
84+
+28,
-65
1@@ -1,83 +1,46 @@
2-( usage: uxncli console.rom foo "bar baz"
3-| Prints Welcome to Uxn!, and listens for incoming stdin events on enter. )
4+( echo "foobar" | uxncli console.rom "baz" "qux" )
5
6-|10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1
7-
8-|000
9-
10- @arg $40
11- @std $40
12+|10 @Console/vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1
13
14 |100
15
16 @on-reset ( -> )
17- ;Dict/hello <print-str>
18- .Console/type DEI ?{
19- ( | no arguments )
20- ;on-std .Console/vector DEO2
21- BRK }
22- ;on-arg .Console/vector DEO2
23+ ;on-console .Console/vector DEO2
24 BRK
25
26-@on-arg ( -> )
27- [ LIT2 02 -Console/type ] DEI NEQ ?{
28- .Console/read DEI [ LIT2 00 &ptr -arg ] INCk ,&ptr STR
29- STZ2
30- BRK }
31- ;arg ;Dict/yousent <print-result>
32- [ LIT2 -arg _&ptr ] STR
33- [ LIT2 04 -Console/type ] DEI NEQ ?{ ;on-std .Console/vector DEO2 }
34+@on-console ( -> )
35+ .Console/type DEI .Console/read DEI
36+ ( inc ) [ LIT2 &ptr =expect ] INC2k INC2 ,&ptr STR2
37+ LDA2 NEQ2 ?fail
38+ [ LIT2 04 -Console/type ] DEI EQU ?pass
39 BRK
40
41-@on-std ( -> )
42- [ LIT2 0a -Console/read ] DEI EQU ?{
43- .Console/read DEI [ LIT2 00 &ptr -std ] INCk ,&ptr STR
44- STZ2
45- BRK }
46- ;std DUP2 ;Dict/yousaid <print-result>
47- ;Dict/quit scmp ?{
48- [ LIT2 -std _&ptr ] STR
49- BRK }
50- ( quit ) #800f DEO
51+@pass ( -> )
52+ ;dict/pass str/<print>
53+ #800f DEO
54 BRK
55
56-@<print-result> ( buf* name* -- )
57- <print-str>
58- [ LIT2 "" 18 ] DEO
59- <print-str>/
60- [ LIT2 "" 18 ] DEO
61- [ LIT2 00 -Console/type ] DEI DUP ADD ;Types ADD2 LDA2 <print-str>/
62- #0a18 DEO
63- JMP2r
64-
65-@<print-str> ( str* -- )
66- LDAk #18 DEO
67- INC2 & LDAk ?<print-str>
68- POP2 JMP2r
69+@fail ( -> )
70+ ;dict/fail str/<print>
71+ #010f DEO
72+ BRK
73
74-@scmp ( a* b* -- f )
75- STH2
76- &l ( a* b* -- f )
77- LDAk LDAkr STHr NEQk ?&d
78- DUP EOR EQUk ?&d
79- POP2 INC2 INC2r !&l
80+(
81+@|Utils )
82
83- &d ( a* c1 c2 b* -- f )
84- NIP2 POP2r EQU JMP2r
85+@str/<print> ( str* -- )
86+ LDAk DUP ?{ POP POP2 JMP2r }
87+ #18 DEO
88+ INC2 !/<print>
89
90 (
91-@|assets )
92+@|Data )
93
94-@Types =Dict/arg-none =Dict/arg-stdin =Dict/arg-data =Dict/arg-spacer =Dict/arg-end
95+@expect [
96+ 0262 0261 027a 030a 0271 0275 0278 040a
97+ 0166 016f 016f 0162 0161 0172 010a 0400 ]
98
99-@Dict
100- &hello "Welcome 20 "to 20 "Uxn! 0a $1
101- &yousaid "You 20 "said: 20 $1
102- &yousent "You 20 "sent: 20 $1
103- &quit "quit $1
104- &arg-none "<none> $1
105- &arg-stdin "<stdin> $1
106- &arg-data "<data> $1
107- &arg-spacer "<spacer> $1
108- &arg-end "<end> $1
109+@dict
110+ &pass "Console: 20 "pass 0a $1
111+ &fail "Console: 20 "fail 0a $1
112
+33,
-0
1@@ -0,0 +1,33 @@
2+|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &exit $1
3+|10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1
4+|80 @Controller &vector $2 &button $1 &key $1
5+
6+|0100
7+ ;on-controller .Controller/vector DEO2
8+ BRK
9+
10+@on-controller ( -> BRK )
11+ .Controller/button DEI
12+ DUP #07 SFT #30 ADD .Console/write DEO
13+ DUP #06 SFT #01 AND #30 ADD .Console/write DEO
14+ DUP #05 SFT #01 AND #30 ADD .Console/write DEO
15+ DUP #04 SFT #01 AND #30 ADD .Console/write DEO
16+ #20 .Console/write DEO
17+ DUP #03 SFT #01 AND #30 ADD .Console/write DEO
18+ DUP #02 SFT #01 AND #30 ADD .Console/write DEO
19+ DUP #01 SFT #01 AND #30 ADD .Console/write DEO
20+ #01 AND #30 ADD .Console/write DEO
21+ #20 .Console/write DEO
22+ .Controller/key DEI
23+ DUP emit-byte
24+ #20 .Console/write DEO
25+ #27 .Console/write DEO
26+ .Console/write DEO
27+ #27 .Console/write DEO
28+ #0a .Console/write DEO
29+
30+ .Controller/key DEI LIT "q NEQ ?{ #80 .System/exit DEO }
31+ BRK
32+
33+@emit-byte DUP #04 SFT ,&hex JSR #0f AND !&hex
34+&hex #30 ADD DUP #39 GTH #27 MUL ADD #18 DEO JMP2r
R etc/examples/festival.tal =>
etc/ext/festival.tal
+0,
-0
R etc/examples/mp3.tal =>
etc/ext/mp3.tal
+0,
-0
R etc/examples/pwd.tal =>
etc/ext/pwd.tal
+0,
-0
R etc/examples/xclock.tal =>
etc/ext/xclock.tal
+0,
-0
M
makefile
+8,
-4
1@@ -21,6 +21,9 @@ gui: bin/uxncli bin/uxn11 bin/uxn11-debug bin/screen.rom
2 system: bin/uxncli-debug bin/system.rom
3 @ bin/uxncli-debug bin/system.rom
4
5+console: bin/uxncli-debug bin/console.rom
6+ @ echo "foobar" | bin/uxncli-debug bin/console.rom "baz" "qux"
7+
8 mouse: bin/uxn11-debug bin/mouse.rom
9 @ bin/uxn11-debug bin/mouse.rom
10
11@@ -32,9 +35,10 @@ file: bin/uxncli-debug bin/file.rom
12
13 test: bin/uxncli-debug bin/uxn11-debug tests
14 @ bin/uxncli-debug bin/test_opcodes.rom
15+ @ bin/uxn11-debug bin/test_opcodes.rom
16 @ bin/uxncli-debug bin/system.rom
17+ @ echo "foobar" | bin/uxncli-debug bin/console.rom "baz" "qux"
18 @ bin/uxncli-debug bin/file.rom
19- @ bin/uxn11-debug bin/test_opcodes.rom
20
21 format:
22 @ clang-format -i src/uxncli.c src/uxn11.c
23@@ -91,15 +95,15 @@ bin/test_opcodes.rom: etc/tests/opctest.tal
24 bin/system.rom: bin/uxncli bin/drifblim.rom etc/examples/system.tal
25 @ bin/uxncli bin/drifblim.rom etc/examples/system.tal bin/system.rom
26
27+bin/console.rom: bin/uxncli bin/drifblim.rom etc/examples/console.tal
28+ @ bin/uxncli bin/drifblim.rom etc/examples/console.tal bin/console.rom
29+
30 bin/mouse.rom: bin/uxncli bin/drifblim.rom etc/examples/mouse.tal
31 @ bin/uxncli bin/drifblim.rom etc/examples/mouse.tal bin/mouse.rom
32
33 bin/controller.rom: bin/uxncli bin/drifblim.rom etc/examples/controller.tal
34 @ bin/uxncli bin/drifblim.rom etc/examples/controller.tal bin/controller.rom
35
36-bin/console.rom: bin/uxncli bin/drifblim.rom etc/examples/console.tal
37- @ bin/uxncli bin/drifblim.rom etc/examples/console.tal bin/console.rom
38-
39 bin/screen.rom: bin/uxncli bin/drifblim.rom etc/examples/screen.tal
40 @ bin/uxncli bin/drifblim.rom etc/examples/screen.tal bin/screen.rom
41