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
+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