commit 9989ffa
neauoire
·
2022-03-30 20:28:03 +0000 UTC
parent 359b240
Starting work on a REPL
2 files changed,
+285,
-1
M
build.sh
M
build.sh
+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