... | ... |
@@ -47,7 +47,7 @@ Program p; |
47 | 47 |
char ops[][4] = { |
48 | 48 |
"BRK", "NOP", "LIT", "LDR", "STR", "JMP", "JSR", "RTN", |
49 | 49 |
"EQU", "NEQ", "GTH", "LTH", "AND", "XOR", "ROL", "ROR", |
50 |
- "POP", "DUP", "SWP", "OVR", "ROT", "---", "WSR", "RSW", |
|
50 |
+ "POP", "DUP", "SWP", "OVR", "ROT", "CLN", "WSR", "RSW", |
|
51 | 51 |
"ADD", "SUB", "MUL", "DIV", "---", "---", "---", "---" |
52 | 52 |
}; |
53 | 53 |
|
... | ... |
@@ -20,5 +20,5 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr |
20 | 20 |
# cc uxn.c emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -o bin/emulator |
21 | 21 |
|
22 | 22 |
# run |
23 |
-./bin/assembler projects/software/left.usm bin/boot.rom |
|
23 |
+./bin/assembler projects/software/nasu.usm bin/boot.rom |
|
24 | 24 |
./bin/emulator bin/boot.rom |
... | ... |
@@ -15,7 +15,7 @@ |
15 | 15 |
$draw-hor NOP |
16 | 16 |
( draw ) #01 =Screen.color |
17 | 17 |
( incr ) SWP2 #0002 ADD2 DUP2 =Screen.x SWP2 |
18 |
- OVR2 OVR2 LTH2 ^$draw-hor SWP JMPS? |
|
18 |
+ OVR2 OVR2 LTH2 ^$draw-hor SWP JMP? |
|
19 | 19 |
POP2 POP2 |
20 | 20 |
|
21 | 21 |
( draw ver line ) |
... | ... |
@@ -24,7 +24,7 @@ |
24 | 24 |
$draw-ver NOP |
25 | 25 |
( draw ) #02 =Screen.color |
26 | 26 |
( incr ) SWP2 #0002 ADD2 DUP2 =Screen.y SWP2 |
27 |
- OVR2 OVR2 LTH2 ^$draw-ver SWP JMPS? |
|
27 |
+ OVR2 OVR2 LTH2 ^$draw-ver SWP JMP? |
|
28 | 28 |
POP2 POP2 |
29 | 29 |
|
30 | 30 |
( draw blending modes ) |
... | ... |
@@ -34,7 +34,7 @@ |
34 | 34 |
( move ) OVR #00 SWP #0008 MUL2 #0020 ADD2 =Sprite.x |
35 | 35 |
( draw ) OVR =Sprite.color |
36 | 36 |
( incr ) SWP #01 ADD SWP |
37 |
- DUP2 LTH ^$draw-blends SWP JMPS? |
|
37 |
+ DUP2 LTH ^$draw-blends SWP JMP? |
|
38 | 38 |
POP POP |
39 | 39 |
|
40 | 40 |
BRK |
... | ... |
@@ -104,7 +104,7 @@ RTN |
104 | 104 |
( draw ) DUP2 LDR #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color |
105 | 105 |
( incr ) #0001 ADD2 |
106 | 106 |
( incr ) ~Sprite.x #0007 ADD2 =Sprite.x |
107 |
- DUP2 LDR #00 NEQ ^$loop MUL JMPS |
|
107 |
+ DUP2 LDR #00 NEQ ^$loop MUL JMP |
|
108 | 108 |
POP2 |
109 | 109 |
|
110 | 110 |
RTN |
... | ... |
@@ -117,9 +117,9 @@ RTN |
117 | 117 |
$hor NOP |
118 | 118 |
( draw ) ~color =Screen.color |
119 | 119 |
( incr ) ~Screen.x #0001 ADD2 =Screen.x |
120 |
- ~Screen.x ~rect.x2 LTH2 ^$hor MUL JMPS |
|
120 |
+ ~Screen.x ~rect.x2 LTH2 ^$hor MUL JMP |
|
121 | 121 |
( incr ) ~Screen.y #0001 ADD2 =Screen.y |
122 |
- ~Screen.y ~rect.y2 LTH2 ^$ver MUL JMPS |
|
122 |
+ ~Screen.y ~rect.y2 LTH2 ^$ver MUL JMP |
|
123 | 123 |
|
124 | 124 |
RTN |
125 | 125 |
|
... | ... |
@@ -130,13 +130,13 @@ RTN |
130 | 130 |
( incr ) ~Screen.x #0001 ADD2 =Screen.x |
131 | 131 |
( draw ) ~rect.y1 =Screen.y ~color =Screen.color |
132 | 132 |
( draw ) ~rect.y2 =Screen.y ~color =Screen.color |
133 |
- ~Screen.x ~rect.x2 LTH2 ^$hor MUL JMPS |
|
133 |
+ ~Screen.x ~rect.x2 LTH2 ^$hor MUL JMP |
|
134 | 134 |
~rect.y1 =Screen.y |
135 | 135 |
$ver NOP |
136 | 136 |
( draw ) ~rect.x1 =Screen.x ~color =Screen.color |
137 | 137 |
( draw ) ~rect.x2 =Screen.x ~color =Screen.color |
138 | 138 |
( incr ) ~Screen.y #0001 ADD2 =Screen.y |
139 |
- ~Screen.y ~rect.y2 #0001 ADD2 LTH2 ^$ver MUL JMPS |
|
139 |
+ ~Screen.y ~rect.y2 #0001 ADD2 LTH2 ^$ver MUL JMP |
|
140 | 140 |
|
141 | 141 |
RTN |
142 | 142 |
|
... | ... |
@@ -148,9 +148,9 @@ RTN |
148 | 148 |
$hor NOP |
149 | 149 |
( draw ) ~color =Sprite.color |
150 | 150 |
( incr ) ~Sprite.x #0008 ADD2 =Sprite.x |
151 |
- ~Sprite.x ~rect.x2 LTH2 ^$hor MUL JMPS |
|
151 |
+ ~Sprite.x ~rect.x2 LTH2 ^$hor MUL JMP |
|
152 | 152 |
( incr ) ~Sprite.y #0008 ADD2 =Sprite.y |
153 |
- ~Sprite.y ~rect.y2 LTH2 ^$ver MUL JMPS |
|
153 |
+ ~Sprite.y ~rect.y2 LTH2 ^$ver MUL JMP |
|
154 | 154 |
|
155 | 155 |
RTN |
156 | 156 |
|
... | ... |
@@ -170,11 +170,11 @@ BRK |
170 | 170 |
|
171 | 171 |
,$no-up ~Mouse.y #0008 GTH2 JMP2? |
172 | 172 |
( decr ) ~scroll.y #00 ~scroll.y #0000 NEQ2 SUB2 =scroll.y |
173 |
- ^$end JMPS |
|
173 |
+ ^$end JMP |
|
174 | 174 |
$no-up |
175 | 175 |
,$no-down ~Mouse.y ~Screen.height #0008 SUB2 LTH2 JMP2? |
176 | 176 |
( incr ) ~scroll.y #0001 ADD2 =scroll.y |
177 |
- ^$end JMPS |
|
177 |
+ ^$end JMP |
|
178 | 178 |
$no-down |
179 | 179 |
~Mouse.y #0008 SUB2 =scroll.y |
180 | 180 |
$end |
... | ... |
@@ -200,12 +200,12 @@ RTN |
200 | 200 |
,$no-chord-cut ~Mouse.chord #01 NEQ JMP2? |
201 | 201 |
,cut JSR2 |
202 | 202 |
( release ) #00 DUP =Mouse.state =Mouse.chord |
203 |
- ^$end JMPS |
|
203 |
+ ^$end JMP |
|
204 | 204 |
$no-chord-cut |
205 | 205 |
,$no-chord-paste ~Mouse.chord #10 NEQ JMP2? |
206 | 206 |
,paste JSR2 |
207 | 207 |
( release ) #00 DUP =Mouse.state =Mouse.chord |
208 |
- ^$end JMPS |
|
208 |
+ ^$end JMP |
|
209 | 209 |
$no-chord-paste |
210 | 210 |
|
211 | 211 |
,$end ~Mouse.state #11 EQU JMP2? |
... | ... |
@@ -214,7 +214,7 @@ RTN |
214 | 214 |
( on drag ) |
215 | 215 |
,find-selection JSR2 #0001 ADD2 =selection.to |
216 | 216 |
,clamp-selection JSR2 |
217 |
- ^$end JMPS |
|
217 |
+ ^$end JMP |
|
218 | 218 |
$no-drag |
219 | 219 |
( on click ) |
220 | 220 |
,find-selection JSR2 DUP2 =selection.from #0001 ADD2 =selection.to |
... | ... |
@@ -231,7 +231,7 @@ RTN |
231 | 231 |
,document.body =document.eof |
232 | 232 |
$loop NOP |
233 | 233 |
( incr ) ~document.eof #0001 ADD2 =document.eof |
234 |
- ~document.eof LDR #00 NEQ ^$loop MUL JMPS |
|
234 |
+ ~document.eof LDR #00 NEQ ^$loop MUL JMP |
|
235 | 235 |
|
236 | 236 |
RTN |
237 | 237 |
|
... | ... |
@@ -258,7 +258,7 @@ RTN |
258 | 258 |
$loop NOP |
259 | 259 |
( move ) ~j ~i ADD2 LDR ~j STR |
260 | 260 |
( incr ) ~j #0001 ADD2 =j |
261 |
- ~j ~document.eof LTH2 ^$loop MUL JMPS |
|
261 |
+ ~j ~document.eof LTH2 ^$loop MUL JMP |
|
262 | 262 |
~document.eof ~i SUB2 =document.eof |
263 | 263 |
|
264 | 264 |
RTN |
... | ... |
@@ -270,7 +270,7 @@ RTN |
270 | 270 |
$loop NOP |
271 | 271 |
( move ) ~j ~i SUB2 LDR ~j STR |
272 | 272 |
( decr ) ~j #0001 SUB2 =j |
273 |
- ~j ~selection.from GTH2 ^$loop MUL JMPS |
|
273 |
+ ~j ~selection.from GTH2 ^$loop MUL JMP |
|
274 | 274 |
~document.eof ~i ADD2 =document.eof |
275 | 275 |
|
276 | 276 |
RTN |
... | ... |
@@ -299,7 +299,7 @@ RTN |
299 | 299 |
~selection.from #0001 SUB2 LDR #0a EQU RTN? |
300 | 300 |
~selection.from #0001 SUB2 LDR #0d EQU RTN? |
301 | 301 |
( decr ) ~selection.from DUP2 =selection.to #0001 SUB2 =selection.from |
302 |
- ~selection.from LDR #00 NEQ ^$loop MUL JMPS |
|
302 |
+ ~selection.from LDR #00 NEQ ^$loop MUL JMP |
|
303 | 303 |
( clamp at document body ) |
304 | 304 |
~selection.from ,document.body GTH2 RTN? |
305 | 305 |
,document.body DUP2 =selection.from #0001 ADD2 =selection.to |
... | ... |
@@ -312,7 +312,7 @@ RTN |
312 | 312 |
~selection.from LDR #0a EQU RTN? |
313 | 313 |
~selection.from LDR #0d EQU RTN? |
314 | 314 |
( incr ) ~selection.from #0001 ADD2 DUP2 #0001 ADD2 =selection.to =selection.from |
315 |
- ~selection.from LDR #00 NEQ ^$loop MUL JMPS |
|
315 |
+ ~selection.from LDR #00 NEQ ^$loop MUL JMP |
|
316 | 316 |
( clamp at document body ) |
317 | 317 |
~selection.from ,document.eof LTH2 RTN? |
318 | 318 |
,document.eof #0001 SUB2 DUP2 =selection.from #0001 ADD2 =selection.to |
... | ... |
@@ -327,7 +327,7 @@ RTN |
327 | 327 |
,$end ~j LDR #20 EQU JMP2? |
328 | 328 |
,$end ~j LDR #0a EQU JMP2? |
329 | 329 |
,$end ~j LDR #0d EQU JMP2? |
330 |
- ~j ,document.body GTH2 ^$loop MUL JMPS |
|
330 |
+ ~j ,document.body GTH2 ^$loop MUL JMP |
|
331 | 331 |
$end |
332 | 332 |
( return ) ~j #0001 SUB2 |
333 | 333 |
|
... | ... |
@@ -341,7 +341,7 @@ RTN |
341 | 341 |
,$end ~j LDR #20 EQU JMP2? |
342 | 342 |
,$end ~j LDR #0a EQU JMP2? |
343 | 343 |
,$end ~j LDR #0d EQU JMP2? |
344 |
- ~j ,document.body GTH2 ^$loop MUL JMPS |
|
344 |
+ ~j ,document.body GTH2 ^$loop MUL JMP |
|
345 | 345 |
$end |
346 | 346 |
( return ) ~j #0001 ADD2 |
347 | 347 |
|
... | ... |
@@ -354,7 +354,7 @@ RTN |
354 | 354 |
( incr ) ~j #0001 ADD2 =j |
355 | 355 |
,$end ~selection.from ~j SUB2 LDR #0a EQU JMP2? |
356 | 356 |
,$end ~selection.from ~j SUB2 LDR #0d EQU JMP2? |
357 |
- ~selection.from ~j SUB2 ,document.body GTH2 ^$loop MUL JMPS |
|
357 |
+ ~selection.from ~j SUB2 ,document.body GTH2 ^$loop MUL JMP |
|
358 | 358 |
$end |
359 | 359 |
( return ) ~j |
360 | 360 |
|
... | ... |
@@ -369,7 +369,7 @@ RTN |
369 | 369 |
( incr ) ~pt.y #0001 ADD2 =pt.y |
370 | 370 |
$no-space |
371 | 371 |
( incr ) ~j #0001 ADD2 =j |
372 |
- ~j LDR #00 NEQ ^$loop MUL JMPS |
|
372 |
+ ~j LDR #00 NEQ ^$loop MUL JMP |
|
373 | 373 |
$end |
374 | 374 |
( return ) ~j |
375 | 375 |
|
... | ... |
@@ -383,7 +383,7 @@ RTN |
383 | 383 |
,$end ~j ~pt.x ADD2 LDR #0a EQU JMP2? |
384 | 384 |
,$end ~j ~pt.x ADD2 LDR #0d EQU JMP2? |
385 | 385 |
( incr ) ~pt.x #0001 ADD2 =pt.x |
386 |
- ~pt.x ~position.x #0001 SUB2 LTH2 ^$loop MUL JMPS |
|
386 |
+ ~pt.x ~position.x #0001 SUB2 LTH2 ^$loop MUL JMP |
|
387 | 387 |
$end |
388 | 388 |
( return ) ~pt.x ADD2 |
389 | 389 |
|
... | ... |
@@ -405,7 +405,7 @@ RTN |
405 | 405 |
$loop NOP |
406 | 406 |
~selection.from ~i ADD2 LDR ,clip.body ~i ADD2 STR |
407 | 407 |
( incr ) ~i #0001 ADD2 =i |
408 |
- ~i ~j LTH2 ^$loop MUL JMPS |
|
408 |
+ ~i ~j LTH2 ^$loop MUL JMP |
|
409 | 409 |
|
410 | 410 |
RTN |
411 | 411 |
|
... | ... |
@@ -417,7 +417,7 @@ RTN |
417 | 417 |
$loop NOP |
418 | 418 |
,clip.body ~i ADD2 LDR ~selection.from ~i ADD2 STR |
419 | 419 |
( incr ) ~i #0001 ADD2 =i |
420 |
- ~i ~j LTH2 ^$loop MUL JMPS |
|
420 |
+ ~i ~j LTH2 ^$loop MUL JMP |
|
421 | 421 |
|
422 | 422 |
RTN |
423 | 423 |
|
... | ... |
@@ -512,7 +512,7 @@ RTN |
512 | 512 |
( incr ) ~j #0001 ADD2 =j |
513 | 513 |
$no-break |
514 | 514 |
( incr ) ~textarea.addr #0001 ADD2 =textarea.addr |
515 |
- ~textarea.addr LDR #00 NEQ ^$find-offset MUL JMPS |
|
515 |
+ ~textarea.addr LDR #00 NEQ ^$find-offset MUL JMP |
|
516 | 516 |
$find-offset-end |
517 | 517 |
|
518 | 518 |
#0018 =Sprite.x #0000 =Sprite.y |
... | ... |
@@ -577,7 +577,7 @@ RTN |
577 | 577 |
$loop NOP |
578 | 578 |
( draw ) #08 =Sprite.color |
579 | 579 |
( incr ) ~Sprite.y #0008 ADD2 =Sprite.y |
580 |
- ~Sprite.y ~Screen.height LTH2 ^$loop MUL JMPS |
|
580 |
+ ~Sprite.y ~Screen.height LTH2 ^$loop MUL JMP |
|
581 | 581 |
|
582 | 582 |
#0000 =Sprite.y |
583 | 583 |
,arrowup_icn =Sprite.addr |
... | ... |
@@ -603,7 +603,7 @@ RTN |
603 | 603 |
( draw ) DUP2 LDR #00 SWP #20 SUB #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color |
604 | 604 |
( incr ) #0001 ADD2 |
605 | 605 |
( incr ) ~Sprite.x #0008 ADD2 =Sprite.x |
606 |
- DUP2 LDR #00 NEQ ^$loop MUL JMPS |
|
606 |
+ DUP2 LDR #00 NEQ ^$loop MUL JMP |
|
607 | 607 |
POP2 |
608 | 608 |
( selection ) |
609 | 609 |
~selection.from ,document.body SUB2 ,draw-short JSR2 |
... | ... |
@@ -109,7 +109,7 @@ BRK |
109 | 109 |
~MOUS.y ~bankview.y SUB2 #0008 DIV2 #0008 MUL2 #0010 MUL2 ADD2 |
110 | 110 |
~bankview.addr ADD2 #00 ~i ADD2 STR |
111 | 111 |
( incr ) ~i #01 ADD =i |
112 |
- ~i #08 LTH ^copy-loop MUL JMPS |
|
112 |
+ ~i #08 LTH ^copy-loop MUL JMP |
|
113 | 113 |
,redraw JSR2 ,click-end JMP2 |
114 | 114 |
@not-copy-mode |
115 | 115 |
|
... | ... |
@@ -122,7 +122,7 @@ BRK |
122 | 122 |
~MOUS.y ~bankview.y SUB2 #0008 DIV2 #0008 MUL2 #0010 MUL2 ADD2 |
123 | 123 |
~bankview.addr ADD2 #00 ~i ADD2 STR |
124 | 124 |
( incr ) ~i #01 ADD =i |
125 |
- ~i #08 LTH ^erase-loop MUL JMPS |
|
125 |
+ ~i #08 LTH ^erase-loop MUL JMP |
|
126 | 126 |
,redraw JSR2 ,click-end JMP2 |
127 | 127 |
@not-erase-mode |
128 | 128 |
|
... | ... |
@@ -460,13 +460,13 @@ RTN |
460 | 460 |
( incr ) ~SCRN.x #0001 ADD2 =SCRN.x |
461 | 461 |
( draw ) ~rect.y1 =SCRN.y ~color =SCRN.color |
462 | 462 |
( draw ) ~rect.y2 =SCRN.y ~color =SCRN.color |
463 |
- ~SCRN.x ~rect.x2 LTH2 ^$hor MUL JMPS |
|
463 |
+ ~SCRN.x ~rect.x2 LTH2 ^$hor MUL JMP |
|
464 | 464 |
~rect.y1 =SCRN.y |
465 | 465 |
$ver NOP |
466 | 466 |
( draw ) ~rect.x1 =SCRN.x ~color =SCRN.color |
467 | 467 |
( draw ) ~rect.x2 =SCRN.x ~color =SCRN.color |
468 | 468 |
( incr ) ~SCRN.y #0001 ADD2 =SCRN.y |
469 |
- ~SCRN.y ~rect.y2 #0001 ADD2 LTH2 ^$ver MUL JMPS |
|
469 |
+ ~SCRN.y ~rect.y2 #0001 ADD2 LTH2 ^$ver MUL JMP |
|
470 | 470 |
|
471 | 471 |
RTN |
472 | 472 |
|
... | ... |
@@ -1,16 +1,27 @@ |
1 | 1 |
( tests/cond ) |
2 | 2 |
|
3 |
+%RTN { RSW2 JMP2 } |
|
4 |
+%RTN? { CLN2 JMP2? } |
|
5 |
+ |
|
3 | 6 |
|0100 @RESET |
4 | 7 |
|
5 | 8 |
#00 #d0 |
9 |
+ |
|
6 | 10 |
$loop NOP |
7 | 11 |
( incr ) SWP #01 ADD SWP |
8 |
- DUP2 LTH ^$loop SWP JMPS? |
|
12 |
+ DUP2 LTH ^$loop SWP JMP? |
|
9 | 13 |
POP =Console.byte |
10 | 14 |
|
15 |
+ ,routine JSR2 |
|
16 |
+ |
|
11 | 17 |
BRK |
12 | 18 |
|
13 | 19 |
@routine |
20 |
+ |
|
21 |
+ |
|
22 |
+ CLN2 JMP2 |
|
23 |
+ |
|
24 |
+ #aa |
|
14 | 25 |
|
15 | 26 |
|
16 | 27 |
RTN |
... | ... |
@@ -12,12 +12,12 @@ BRK |
12 | 12 |
( should print 11, 22, 33, 44 ) |
13 | 13 |
|
14 | 14 |
#11 =Console.byte |
15 |
- #03 JMPS BRK BRK BRK |
|
15 |
+ #03 JMP BRK BRK BRK |
|
16 | 16 |
|
17 | 17 |
( skip foward with id ) |
18 | 18 |
|
19 | 19 |
#22 =Console.byte |
20 |
- ^jump JMPS BRK BRK BRK @jump |
|
20 |
+ ^jump JMP BRK BRK BRK @jump |
|
21 | 21 |
|
22 | 22 |
( skip patterns ) |
23 | 23 |
|
... | ... |
@@ -27,7 +27,7 @@ BRK |
27 | 27 |
#ff =Console.byte |
28 | 28 |
@skip1 |
29 | 29 |
|
30 |
- #12 #34 LTH ^skip2 #04 SUB MUL JMPS |
|
30 |
+ #12 #34 LTH ^skip2 #04 SUB MUL JMP |
|
31 | 31 |
#ff =Console.byte |
32 | 32 |
@skip2 |
33 | 33 |
|
... | ... |
@@ -41,9 +41,9 @@ RTN |
41 | 41 |
|
42 | 42 |
( should print aa, bb, cc, dd ) |
43 | 43 |
|
44 |
- @label1 #aa =Console.byte ^label3 JMPS |
|
45 |
- @label2 #cc =Console.byte ^label4 JMPS |
|
46 |
- @label3 #bb =Console.byte ^label2 JMPS |
|
44 |
+ @label1 #aa =Console.byte ^label3 JMP |
|
45 |
+ @label2 #cc =Console.byte ^label4 JMP |
|
46 |
+ @label3 #bb =Console.byte ^label2 JMP |
|
47 | 47 |
@label4 #dd =Console.byte BRK |
48 | 48 |
|
49 | 49 |
@end |
... | ... |
@@ -16,7 +16,7 @@ BRK |
16 | 16 |
|
17 | 17 |
$loop NOP |
18 | 18 |
~a #01 ADD =a |
19 |
- ~a #d0 LTH ^$loop MUL JMPS |
|
19 |
+ ~a #d0 LTH ^$loop MUL JMP |
|
20 | 20 |
~a =Console.byte |
21 | 21 |
|
22 | 22 |
RTN |
... | ... |
@@ -34,7 +34,7 @@ RTN |
34 | 34 |
|
35 | 35 |
$loop NOP |
36 | 36 |
~c #01 ADD =c |
37 |
- ~c #d0 LTH ^$loop SWP JMPS? |
|
37 |
+ ~c #d0 LTH ^$loop SWP JMP? |
|
38 | 38 |
~c =Console.byte |
39 | 39 |
|
40 | 40 |
RTN |
... | ... |
@@ -44,7 +44,7 @@ RTN |
44 | 44 |
#00 #d0 |
45 | 45 |
$loop NOP |
46 | 46 |
( incr ) SWP #01 ADD SWP |
47 |
- DUP2 LTH ^$loop SWP JMPS? |
|
47 |
+ DUP2 LTH ^$loop SWP JMP? |
|
48 | 48 |
POP =Console.byte |
49 | 49 |
|
50 | 50 |
RTN |
... | ... |
@@ -54,7 +54,7 @@ RTN |
54 | 54 |
#0000 #0d00 |
55 | 55 |
$loop NOP |
56 | 56 |
( incr ) SWP2 #0001 ADD2 SWP2 |
57 |
- OVR2 OVR2 LTH2 ^$loop SWP JMPS? |
|
57 |
+ OVR2 OVR2 LTH2 ^$loop SWP JMP? |
|
58 | 58 |
POP2 =Console.short |
59 | 59 |
|
60 | 60 |
RTN |
... | ... |
@@ -33,9 +33,8 @@ Uint16 peek16(Stack *s, Uint8 a) { return peek8(s, a * 2) + (peek8(s, a * 2 + 1) |
33 | 33 |
void op_brk(Uxn *u) { setflag(&u->status, FLAG_HALT, 1); } |
34 | 34 |
void op_lit(Uxn *u) { u->literal += 1; } |
35 | 35 |
void op_nop(Uxn *u) { (void)u; } |
36 |
-void op_jmp(Uxn *u) { Uint8 a = pop8(&u->wst); u->ram.ptr += getflag(&u->status, FLAG_SIGN) ? (Sint8)a : a; } |
|
37 |
- |
|
38 |
-void op_jsr(Uxn *u) { Uint8 a = pop8(&u->wst); push16(&u->rst, u->ram.ptr); u->ram.ptr += getflag(&u->status, FLAG_SIGN) ? (Sint8)a : a; } |
|
36 |
+void op_jmp(Uxn *u) { Uint8 a = pop8(&u->wst); u->ram.ptr += (Sint8)a; } |
|
37 |
+void op_jsr(Uxn *u) { Uint8 a = pop8(&u->wst); push16(&u->rst, u->ram.ptr); u->ram.ptr += (Sint8)a; } |
|
39 | 38 |
void op_rtn(Uxn *u) { u->ram.ptr = pop16(&u->rst); } |
40 | 39 |
void op_ldr(Uxn *u) { Uint16 a = pop16(&u->wst); push8(&u->wst, mempeek8(u, a)); } |
41 | 40 |
void op_str(Uxn *u) { Uint16 a = pop16(&u->wst); Uint8 b = pop8(&u->wst); mempoke8(u, a, b); } |
... | ... |
@@ -50,6 +49,7 @@ void op_dup(Uxn *u) { push8(&u->wst, peek8(&u->wst, 0)); } |
50 | 49 |
void op_swp(Uxn *u) { Uint8 b = pop8(&u->wst), a = pop8(&u->wst); push8(&u->wst, b); push8(&u->wst, a); } |
51 | 50 |
void op_ovr(Uxn *u) { push8(&u->wst, peek8(&u->wst, 1)); } |
52 | 51 |
void op_rot(Uxn *u) { Uint8 c = pop8(&u->wst), b = pop8(&u->wst), a = pop8(&u->wst); push8(&u->wst, b); push8(&u->wst, c); push8(&u->wst, a); } |
52 |
+void op_cln(Uxn *u) { push8(&u->wst, peek8(&u->rst, 0)); } |
|
53 | 53 |
void op_wsr(Uxn *u) { Uint8 a = pop8(&u->wst); push8(&u->rst, a); } |
54 | 54 |
void op_rsw(Uxn *u) { Uint8 a = pop8(&u->rst); push8(&u->wst, a); } |
55 | 55 |
/* Arithmetic */ |
... | ... |
@@ -78,6 +78,7 @@ void op_dup16(Uxn *u) { push16(&u->wst, peek16(&u->wst, 0)); } |
78 | 78 |
void op_swp16(Uxn *u) { Uint16 b = pop16(&u->wst), a = pop16(&u->wst); push16(&u->wst, b); push16(&u->wst, a); } |
79 | 79 |
void op_ovr16(Uxn *u) { push16(&u->wst, peek16(&u->wst, 1)); } |
80 | 80 |
void op_rot16(Uxn *u) { Uint16 c = pop16(&u->wst), b = pop16(&u->wst), a = pop16(&u->wst); push16(&u->wst, b); push16(&u->wst, c); push16(&u->wst, a); } |
81 |
+void op_cln16(Uxn *u) { push16(&u->wst, peek16(&u->rst, 0)); } |
|
81 | 82 |
void op_wsr16(Uxn *u) { Uint16 a = pop16(&u->wst); push16(&u->rst, a); } |
82 | 83 |
void op_rsw16(Uxn *u) { Uint16 a = pop16(&u->rst); push16(&u->wst, a); } |
83 | 84 |
/* Arithmetic(16-bits) */ |
... | ... |
@@ -93,12 +94,12 @@ void op_lth16(Uxn *u) { Uint16 a = pop16(&u->wst), b = pop16(&u->wst); push8(&u- |
93 | 94 |
void (*ops[])(Uxn *u) = { |
94 | 95 |
op_brk, op_nop, op_lit, op_ldr, op_str, op_jmp, op_jsr, op_rtn, |
95 | 96 |
op_equ, op_neq, op_gth, op_lth, op_and, op_xor, op_rol, op_ror, |
96 |
- op_pop, op_dup, op_swp, op_ovr, op_rot, op_nop, op_wsr, op_rsw, |
|
97 |
+ op_pop, op_dup, op_swp, op_ovr, op_rot, op_cln, op_wsr, op_rsw, |
|
97 | 98 |
op_add, op_sub, op_mul, op_div, op_nop, op_nop, op_nop, op_nop, |
98 | 99 |
/* 16-bit */ |
99 | 100 |
op_brk, op_nop16, op_lit16, op_ldr16, op_str16, op_jmp16, op_jsr16, op_rtn, |
100 | 101 |
op_equ16, op_neq16, op_gth16, op_lth16, op_and16, op_xor16, op_rol16, op_ror16, |
101 |
- op_pop16, op_dup16, op_swp16, op_ovr16, op_rot16, op_nop, op_wsr16, op_rsw16, |
|
102 |
+ op_pop16, op_dup16, op_swp16, op_ovr16, op_rot16, op_cln16, op_wsr16, op_rsw16, |
|
102 | 103 |
op_add16, op_sub16, op_mul16, op_div16, op_nop, op_nop, op_nop, op_nop |
103 | 104 |
}; |
104 | 105 |
|
... | ... |
@@ -155,7 +156,7 @@ opcuxn(Uxn *u, Uint8 instr) |
155 | 156 |
return haltuxn(u, "Return-stack overflow", instr); |
156 | 157 |
if(!fcond || (fcond && pop8(&u->wst))) |
157 | 158 |
(*ops[op])(u); |
158 |
- else if(opr[op][0] >= opr[op][1]) |
|
159 |
+ else |
|
159 | 160 |
u->wst.ptr -= opr[op][0] - opr[op][1]; |
160 | 161 |
return 1; |
161 | 162 |
} |