| ... | ... |
@@ -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 |
} |