commit 9989ffa

neauoire  ·  2022-03-30 20:28:03 +0000 UTC
parent 359b240
Starting work on a REPL
2 files changed,  +285, -1
+1, -1
1@@ -20,4 +20,4 @@ else
2 fi
3 
4 echo "Running.."
5-bin/uxn11 ~/roms/left.rom # etc/mouse.rom
6+uxnasm etc/repl.tal bin/repl.rom && bin/uxn11 bin/repl.rom
+284, -0
  1@@ -0,0 +1,284 @@
  2+( Test )
  3+
  4+|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2
  5+|10 @Console &vector $2 &read $1 &pad $5 &write $1
  6+|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
  7+|80 @Controller &vector $2 &button  $1 &key $1
  8+|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &chord $1
  9+|a0 @File &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2
 10+
 11+|0000
 12+
 13+	@input $80
 14+
 15+|0100 ( -> )
 16+
 17+	( theme )
 18+	#07a6 .System/r DEO2
 19+	#075c .System/g DEO2
 20+	#07ca .System/b DEO2
 21+	( vectors )
 22+	;on-button .Controller/vector DEO2
 23+	( move stacks into ram )
 24+	#fe .System/wst DEO
 25+	#ff .System/rst DEO
 26+	( put something in the stack )
 27+	#1234 #abcd
 28+	( draw )
 29+	#fe00 ;draw-stack JSR2
 30+
 31+BRK
 32+
 33+@on-button ( -> )
 34+
 35+	#00 ;draw-input JSR2
 36+	.Controller/key DEI
 37+	[ #08 ] NEQk NIP ,&no-pop JCN ;input ;spop JSR2 &no-pop
 38+	[ #0d ] NEQk NIP ,&no-load JCN ;send JSR2 &no-load
 39+	DUP #20 LTH ,&end JCN
 40+	DUP #7e GTH ,&end JCN
 41+	;input ;slen JSR2 NIP #7f EQU ,&no-push JCN
 42+		DUP ;input ROT ;sput JSR2
 43+		&no-push
 44+	&end
 45+	POP
 46+	#01 ;draw-input JSR2
 47+
 48+BRK
 49+
 50+@send ( -- )
 51+
 52+	;input ;print-str JSR2 #0a18 DEO
 53+	;input ;parse JSR2
 54+	;input #0080 ;mclr JSR2
 55+	#01 ;draw-input JSR2
 56+
 57+JMP2r
 58+
 59+@parse ( addr* -- )
 60+
 61+	LDAk LIT '# NEQ ,&no-lit JCN 
 62+		
 63+
 64+	&no-lit
 65+
 66+	POP2
 67+
 68+	#2222
 69+	#fe00 ;draw-stack JSR2
 70+
 71+JMP2r
 72+
 73+@draw-input ( color -- )
 74+
 75+	STH
 76+	#0020 .Screen/x DEO2
 77+	#0010 .Screen/y DEO2
 78+	#3e #02 STHkr MUL ;draw-char JSR2
 79+	;input #01 STHr MUL ;draw-str JSR2
 80+
 81+JMP2r
 82+
 83+@draw-stack ( addr* -- )
 84+
 85+	( position )
 86+	#0020 .Screen/x DEO2
 87+	#0020 .Screen/y DEO2
 88+
 89+	STH2k
 90+	#00ff ADD2 LDA ,&length STR
 91+	#01 .Screen/auto DEO
 92+	.Screen/x DEI2 ,&anchor STR2
 93+	#00
 94+	&loop
 95+		( linebreak )
 96+		DUP #0f AND ,&skip JCN
 97+			[ LIT2 &anchor $2 ] .Screen/x DEO2
 98+			.Screen/y DEI2k #000a ADD2 ROT DEO2
 99+			&skip
100+		( byte ) #00 OVR STH2kr ADD2 LDA
101+		( color ) OVR [ LIT &length $1 ] STH2k LTH INC STH2r EQU #02 MUL ADD
102+			;draw-byte JSR2
103+		.Screen/x DEI2k #0002 ADD2 ROT DEO2
104+		INC DUP ,&loop JCN
105+	POP
106+	POP2r
107+
108+JMP2r
109+
110+@draw-short ( short* color -- )
111+
112+	STH SWP STHkr ,draw-byte JSR STHr
113+
114+@draw-byte ( byte color -- )
115+
116+	STH DUP #04 SFT STHkr ,draw-hex JSR #0f AND STHr
117+
118+@draw-hex ( char color -- )
119+
120+	SWP #0f AND [ DUP #09 GTH #07 MUL ADD #30 ADD ] SWP
121+
122+@draw-char ( char color -- )
123+
124+	SWP #20 SUB #00 SWP #30 SFT2 ;font ADD2 .Screen/addr DEO2
125+	.Screen/sprite DEO
126+
127+JMP2r
128+
129+@draw-str ( text* color -- )
130+
131+	STH
132+	&while
133+		LDAk STHkr ,draw-char JSR
134+		INC2 LDAk ,&while JCN
135+	POP2
136+	POPr
137+
138+JMP2r
139+
140+@scat ( src* dst* -- )
141+
142+	DUP2 ,slen JSR ADD2
143+
144+@scpy ( src* dst* -- )
145+	
146+	STH2
147+	&while
148+		LDAk STH2kr STA INC2r
149+		INC2 LDAk ,&while JCN
150+	POP2
151+	#00 STH2r STA
152+
153+JMP2r
154+
155+@slen ( str* -- len* )
156+
157+	DUP2 ,scap JSR SWP2 SUB2
158+
159+JMP2r
160+
161+@scap ( str* -- end* )
162+
163+	LDAk #00 NEQ JMP JMP2r
164+	&while INC2 LDAk ,&while JCN
165+
166+JMP2r
167+
168+@sput ( str* char -- )
169+
170+	ROT ROT ,scap JSR STA
171+
172+JMP2r
173+
174+@spop ( str* -- )
175+
176+	LDAk ,&no-null JCN
177+		POP2 JMP2r &no-null
178+	#00 ROT ROT ,scap JSR #0001 SUB2 STA
179+
180+JMP2r
181+
182+@mclr ( addr* len* -- )
183+
184+	OVR2 ADD2 SWP2
185+	&loop
186+		STH2k #00 STH2r STA
187+		INC2 GTH2k ,&loop JCN
188+	POP2 POP2
189+
190+JMP2r
191+
192+@mcpy ( src* dst* len* -- )
193+
194+	SWP2 STH2
195+	OVR2 ADD2 SWP2
196+	&loop
197+		LDAk STH2kr STA INC2r
198+		INC2 GTH2k ,&loop JCN
199+	POP2 POP2
200+	POP2r
201+
202+JMP2r
203+
204+@print ( short* -- )
205+
206+	&short ( short* -- ) SWP ,&byte JSR
207+	&byte ( byte -- ) DUP #04 SFT ,&char JSR
208+	&char ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD #18 DEO
209+
210+JMP2r
211+
212+@print-str ( str* -- )
213+
214+	&while
215+		LDAk #18 DEO
216+		INC2 LDAk ,&while JCN
217+	POP2
218+
219+JMP2r
220+
221+@font ( acorn8 )
222+	0000 0000 0000 0000 1818 1818 1800 1800
223+	3636 3600 0000 0000 3636 7f36 7f36 3600
224+	0c3f 683e 0b7e 1800 0063 660c 1833 6300
225+	386c 6c38 6d66 3b00 0c0c 0c00 0000 0000
226+	060c 1818 180c 0600 3018 0c0c 0c18 3000
227+	0066 3cff 3c66 0000 000c 0c3f 0c0c 0000
228+	0000 0000 0018 1830 0000 007f 0000 0000
229+	0000 0000 0018 1800 0003 060c 1830 6000
230+	3e63 676b 7363 3e00 0c1c 0c0c 0c0c 3f00
231+	3e63 031e 3060 7f00 3e63 030e 0363 3e00
232+	0e1e 3666 7f06 0600 7f60 7e03 0363 3e00
233+	1e30 607e 6363 3e00 7f03 060c 1818 1800
234+	3e63 633e 6363 3e00 3e63 633f 0306 3c00
235+	0000 1818 0018 1800 0000 1818 0018 1830
236+	060c 1830 180c 0600 0000 7f00 7f00 0000
237+	3018 0c06 0c18 3000 3e63 030e 1800 1800
238+	3c66 6e6a 6e60 3c00 3e63 637f 6363 6300
239+	7e63 637e 6363 7e00 1e33 6060 6033 1e00
240+	7c66 6363 6366 7c00 7f60 607c 6060 7f00
241+	7f60 607c 6060 6000 1e33 6067 6333 1e00
242+	6363 637f 6363 6300 3f0c 0c0c 0c0c 3f00
243+	7f0c 0c0c 0c6c 3800 6366 6c78 6c66 6300
244+	6060 6060 6060 7f00 6377 7f6b 6b63 6300
245+	6373 7b6f 6763 6300 3e63 6363 6363 3e00
246+	7e63 637e 6060 6000 3e63 6363 6566 3b00
247+	7e63 637e 6663 6300 3e63 603e 0363 3e00
248+	3f0c 0c0c 0c0c 0c00 6363 6363 6363 3e00
249+	6363 6363 6336 1c00 6363 6b6b 7f77 6300
250+	6336 1c1c 3663 6300 6363 633e 0c0c 0c00
251+	7f06 0c18 3060 7f00 3e30 3030 3030 3e00
252+	0060 3018 0c06 0300 7c0c 0c0c 0c0c 7c00
253+	1c36 6300 0000 0000 0000 0000 0000 00ff
254+	3018 0c00 0000 0000 0000 3e03 3f63 3f00
255+	6060 7e63 6363 7e00 0000 3e63 6063 3e00
256+	0303 3f63 6363 3f00 0000 3e63 7f60 3e00
257+	0f18 183e 1818 1800 0000 3f63 633f 033e
258+	6060 7e63 6363 6300 0c00 1c0c 0c0c 3f00
259+	0600 1e06 0606 063c 6060 6366 7c66 6300
260+	1c0c 0c0c 0c0c 1e00 0000 367f 6b6b 6300
261+	0000 7e63 6363 6300 0000 3e63 6363 3e00
262+	0000 7e63 637e 6060 0000 3f63 633f 0302
263+	0000 6e7b 6060 6000 0000 3f60 3e03 7e00
264+	1818 3f18 1818 0f00 0000 6363 6363 3f00
265+	0000 6363 6336 1c00 0000 636b 6b7f 3600
266+	0000 6336 1c36 6300 0000 6363 633f 033e
267+	0000 7f06 1c30 7f00 060c 0c38 0c0c 0600
268+	0c0c 0c0c 0c0c 0c00 3018 180e 1818 3000
269+	316b 4600 0000 0000 0303 0606 761c 0c00
270+	f090 f01f 1f1f 1f00 e0e0 e01f 1111 1f00
271+	fe92 92f2 8282 fe00 6699 8142 8199 6600
272+	fcfc ffe1 e121 3f00 0000 3c66 6066 3cff
273+	6060 7c66 6666 66ff 1828 4f81 4f28 1800
274+	1814 f281 f214 1800 3c24 24e7 4224 1800
275+	1824 42e7 2424 3c00 3030 7c30 3030 1cff
276+	0000 3c66 7e60 3cff 0000 6c76 6060 60ff
277+	0000 3e60 3c06 7cff 0000 0018 1800 00ff
278+	0000 3c06 3e66 3eff 0000 6c76 6060 60ff
279+	0000 3c66 7e60 3cff 0000 0018 1800 00ff
280+	0000 7c66 6666 66ff 0000 3c66 6666 3cff
281+	3030 7c30 3030 1cff 0000 0018 1800 00ff
282+	0606 3e66 6666 3eff 0000 3c66 7e60 3cff
283+	1c30 307c 3030 30ff 1800 3818 1818 3cff
284+	0000 7c66 6666 66ff 0000 3c66 7e60 3cff
285+	0606 3e66 6666 3eff 0000 0000 0000 0000