| ... | ... |
@@ -46,7 +46,7 @@ Program p; |
| 46 | 46 |
|
| 47 | 47 |
char ops[][4] = {
|
| 48 | 48 |
"BRK", "NOP", "LIT", "LDR", "STR", "---", "JMP", "JSR", |
| 49 |
- "EQU", "NEQ", "GTH", "LTH", "AND", "XOR", "ROL", "ROR", |
|
| 49 |
+ "EQU", "NEQ", "GTH", "LTH", "AND", "XOR", "SHL", "SHR", |
|
| 50 | 50 |
"POP", "DUP", "SWP", "OVR", "ROT", "---", "CLN", "WSR", |
| 51 | 51 |
"ADD", "SUB", "MUL", "DIV", "---", "---", "---", "---" |
| 52 | 52 |
}; |
| ... | ... |
@@ -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 |
| ... | ... |
@@ -35,13 +35,13 @@ BRK |
| 35 | 35 |
|
| 36 | 36 |
( detect movement ) |
| 37 | 37 |
~Controller.buttons #f0 AND |
| 38 |
- DUP #04 ROR #01 AND #01 NEQ ,$no-up JMC2 |
|
| 38 |
+ DUP #04 SHR #01 AND #01 NEQ ,$no-up JMC2 |
|
| 39 | 39 |
( move ) ~Sprite.y DECR2 =Sprite.y ,up_icn =Sprite.addr $no-up |
| 40 |
- DUP #05 ROR #01 AND #01 NEQ ,$no-down JMC2 |
|
| 40 |
+ DUP #05 SHR #01 AND #01 NEQ ,$no-down JMC2 |
|
| 41 | 41 |
( move ) ~Sprite.y INCR2 =Sprite.y ,down_icn =Sprite.addr $no-down |
| 42 |
- DUP #06 ROR #01 AND #01 NEQ ,$no-left JMC2 |
|
| 42 |
+ DUP #06 SHR #01 AND #01 NEQ ,$no-left JMC2 |
|
| 43 | 43 |
( move ) ~Sprite.x DECR2 =Sprite.x ,left_icn =Sprite.addr $no-left |
| 44 |
- DUP #07 ROR #01 AND #01 NEQ ,$no-right JMC2 |
|
| 44 |
+ DUP #07 SHR #01 AND #01 NEQ ,$no-right JMC2 |
|
| 45 | 45 |
( move ) ~Sprite.x INCR2 =Sprite.x ,right_icn =Sprite.addr $no-right |
| 46 | 46 |
POP |
| 47 | 47 |
|
| ... | ... |
@@ -46,7 +46,7 @@ BRK |
| 46 | 46 |
,no-click ~Mouse.state #00 EQU JMP2? |
| 47 | 47 |
|
| 48 | 48 |
( load ) ~editor.addr ~Mouse.y ~editor.y1 SUB2 #0008 DIV2 ADD2 LDR |
| 49 |
- ( mask ) #01 #07 ~Mouse.x ~editor.x1 SUB2 #0008 DIV2 SWP POP SUB ROL |
|
| 49 |
+ ( mask ) #01 #07 ~Mouse.x ~editor.x1 SUB2 #0008 DIV2 SWP POP SUB SHL |
|
| 50 | 50 |
XOR |
| 51 | 51 |
( save ) ~editor.addr ~Mouse.y ~editor.y1 SUB2 #0008 DIV2 ADD2 STR |
| 52 | 52 |
|
| ... | ... |
@@ -81,7 +81,7 @@ RTN |
| 81 | 81 |
$hor |
| 82 | 82 |
( get bit ) |
| 83 | 83 |
,cell0_icn #00 |
| 84 |
- ~editor.addr #00 ~pixel.y ADD2 LDR #07 ~pixel.x SUB ROR #01 AND ( get bit ) |
|
| 84 |
+ ~editor.addr #00 ~pixel.y ADD2 LDR #07 ~pixel.x SUB SHR #01 AND ( get bit ) |
|
| 85 | 85 |
#0008 MUL2 ADD2 =Sprite.addr ( add *8 ) |
| 86 | 86 |
( draw ) #08 =Sprite.color |
| 87 | 87 |
( incr ) ~Sprite.x #0008 ADD2 =Sprite.x |
| ... | ... |
@@ -74,37 +74,37 @@ BRK |
| 74 | 74 |
@no-ctrl-right |
| 75 | 75 |
( alt ) |
| 76 | 76 |
,no-alt ~Controller #0f AND #02 NEQ JMP2? |
| 77 |
- ,no-aup ~Controller #04 ROR #01 NEQ JMP2? |
|
| 77 |
+ ,no-aup ~Controller #04 SHR #01 NEQ JMP2? |
|
| 78 | 78 |
,find-wordstart JSR2 =selection.to |
| 79 | 79 |
,clamp-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2 |
| 80 | 80 |
@no-aup |
| 81 |
- ,no-adown ~Controller #04 ROR #02 NEQ JMP2? |
|
| 81 |
+ ,no-adown ~Controller #04 SHR #02 NEQ JMP2? |
|
| 82 | 82 |
,find-wordend JSR2 =selection.to |
| 83 | 83 |
,clamp-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2 |
| 84 | 84 |
@no-adown |
| 85 |
- ,no-aleft ~Controller #04 ROR #04 NEQ JMP2? |
|
| 85 |
+ ,no-aleft ~Controller #04 SHR #04 NEQ JMP2? |
|
| 86 | 86 |
~selection.to #0001 SUB2 =selection.to |
| 87 | 87 |
,clamp-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2 |
| 88 | 88 |
@no-aleft |
| 89 |
- ,no-aright ~Controller #04 ROR #08 NEQ JMP2? |
|
| 89 |
+ ,no-aright ~Controller #04 SHR #08 NEQ JMP2? |
|
| 90 | 90 |
~selection.to #0001 ADD2 =selection.to |
| 91 | 91 |
,clamp-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2 |
| 92 | 92 |
@no-aright |
| 93 | 93 |
@no-alt |
| 94 | 94 |
( ctrl ) |
| 95 | 95 |
,no-ctrl ~Controller #0f AND #01 NEQ JMP2? |
| 96 |
- ,no-cup ~Controller #04 ROR #01 NEQ JMP2? |
|
| 96 |
+ ,no-cup ~Controller #04 SHR #01 NEQ JMP2? |
|
| 97 | 97 |
#0004 ,scroll-up JSR2 |
| 98 | 98 |
,redraw JSR2 ,ctrl-end JMP2 |
| 99 | 99 |
@no-cup |
| 100 |
- ,no-cdown ~Controller #04 ROR #02 NEQ JMP2? |
|
| 100 |
+ ,no-cdown ~Controller #04 SHR #02 NEQ JMP2? |
|
| 101 | 101 |
#0004 ,scroll-down JSR2 |
| 102 | 102 |
,redraw JSR2 ,ctrl-end JMP2 |
| 103 | 103 |
@no-cdown |
| 104 |
- ,no-cleft ~Controller #04 ROR #04 NEQ JMP2? |
|
| 104 |
+ ,no-cleft ~Controller #04 SHR #04 NEQ JMP2? |
|
| 105 | 105 |
,goto-linestart JSR2 ,redraw JSR2 ,ctrl-end JMP2 |
| 106 | 106 |
@no-cleft |
| 107 |
- ,no-cright ~Controller #04 ROR #08 NEQ JMP2? |
|
| 107 |
+ ,no-cright ~Controller #04 SHR #08 NEQ JMP2? |
|
| 108 | 108 |
,goto-lineend JSR2 ,redraw JSR2 ,ctrl-end JMP2 |
| 109 | 109 |
@no-cright |
| 110 | 110 |
@no-ctrl |
| ... | ... |
@@ -464,13 +464,13 @@ RTN |
| 464 | 464 |
@draw-short ( short ) |
| 465 | 465 |
|
| 466 | 466 |
=addr |
| 467 |
- ,font_hex #00 ,addr LDR #f0 AND #04 ROR #08 MUL ADD2 =Sprite.addr |
|
| 467 |
+ ,font_hex #00 ,addr LDR #f0 AND #04 SHR #08 MUL ADD2 =Sprite.addr |
|
| 468 | 468 |
( draw ) #0e =Sprite.color |
| 469 | 469 |
~Sprite.x #0008 ADD2 =Sprite.x |
| 470 | 470 |
,font_hex #00 ,addr LDR #0f AND #08 MUL ADD2 =Sprite.addr |
| 471 | 471 |
( draw ) #0e =Sprite.color |
| 472 | 472 |
~Sprite.x #0008 ADD2 =Sprite.x |
| 473 |
- ,font_hex #00 ,addr #0001 ADD2 LDR #f0 AND #04 ROR #08 MUL ADD2 =Sprite.addr |
|
| 473 |
+ ,font_hex #00 ,addr #0001 ADD2 LDR #f0 AND #04 SHR #08 MUL ADD2 =Sprite.addr |
|
| 474 | 474 |
( draw ) #0e =Sprite.color |
| 475 | 475 |
~Sprite.x #0008 ADD2 =Sprite.x |
| 476 | 476 |
,font_hex #00 ,addr #0001 ADD2 LDR #0f AND #08 MUL ADD2 =Sprite.addr |
| ... | ... |
@@ -552,7 +552,7 @@ RTN |
| 552 | 552 |
#0000 =Sprite.x |
| 553 | 553 |
~scroll.y ~Sprite.y #0008 DIV2 ADD2 DUP2 SWP POP =k |
| 554 | 554 |
~position.y EQU2 #0c MUL =l |
| 555 |
- ,font_hex #00 ~k #f0 AND #04 ROR #08 MUL ADD2 =Sprite.addr |
|
| 555 |
+ ,font_hex #00 ~k #f0 AND #04 SHR #08 MUL ADD2 =Sprite.addr |
|
| 556 | 556 |
#02 ~l ADD =Sprite.color |
| 557 | 557 |
#0008 =Sprite.x |
| 558 | 558 |
,font_hex #00 ~k #0f AND #08 MUL ADD2 =Sprite.addr |
| ... | ... |
@@ -157,7 +157,7 @@ BRK |
| 157 | 157 |
,redraw JSR2 ,click-end JMP2 |
| 158 | 158 |
@no-erase-mode |
| 159 | 159 |
( load ) ~addr ~pos.y #0008 DIV2 ADD2 LDR |
| 160 |
- ( mask ) #01 #07 ~pos.x #0008 DIV2 SWP POP SUB ROL |
|
| 160 |
+ ( mask ) #01 #07 ~pos.x #0008 DIV2 SWP POP SUB SHL |
|
| 161 | 161 |
XOR |
| 162 | 162 |
( save ) ~addr ~pos.y #0008 DIV2 ADD2 STR |
| 163 | 163 |
,redraw JSR2 ,click-end JMP2 |
| ... | ... |
@@ -354,7 +354,7 @@ RTN |
| 354 | 354 |
#00 =i |
| 355 | 355 |
$bytes |
| 356 | 356 |
~tileview.x #0088 ADD2 =SPRT.x |
| 357 |
- ,font_hex #00 ~tileview.addr #00 ~i ADD2 LDR #f0 AND #04 ROR #08 MUL ADD2 =SPRT.addr |
|
| 357 |
+ ,font_hex #00 ~tileview.addr #00 ~i ADD2 LDR #f0 AND #04 SHR #08 MUL ADD2 =SPRT.addr |
|
| 358 | 358 |
( draw ) #02 =SPRT.color |
| 359 | 359 |
~SPRT.x #0008 ADD2 =SPRT.x |
| 360 | 360 |
,font_hex #00 ~tileview.addr #00 ~i ADD2 LDR #0f AND #08 MUL ADD2 =SPRT.addr |
| ... | ... |
@@ -399,7 +399,7 @@ RTN |
| 399 | 399 |
$hor |
| 400 | 400 |
( get bit ) |
| 401 | 401 |
,blank_icn #00 |
| 402 |
- ~tileview.addr #00 ~pt.y ADD2 LDR #07 ~pt.x SUB ROR #01 AND ( get bit ) |
|
| 402 |
+ ~tileview.addr #00 ~pt.y ADD2 LDR #07 ~pt.x SUB SHR #01 AND ( get bit ) |
|
| 403 | 403 |
#0008 MUL2 ADD2 =SPRT.addr ( add *8 ) |
| 404 | 404 |
( draw ) #01 =SPRT.color |
| 405 | 405 |
( incr ) ~SPRT.x #0008 ADD2 =SPRT.x |
| ... | ... |
@@ -440,13 +440,13 @@ RTN |
| 440 | 440 |
@draw-short ( short ) |
| 441 | 441 |
|
| 442 | 442 |
=addr |
| 443 |
- ,font_hex #00 ,addr LDR #f0 AND #04 ROR #08 MUL ADD2 =SPRT.addr |
|
| 443 |
+ ,font_hex #00 ,addr LDR #f0 AND #04 SHR #08 MUL ADD2 =SPRT.addr |
|
| 444 | 444 |
( draw ) #02 =SPRT.color |
| 445 | 445 |
~SPRT.x #0008 ADD2 =SPRT.x |
| 446 | 446 |
,font_hex #00 ,addr LDR #0f AND #08 MUL ADD2 =SPRT.addr |
| 447 | 447 |
( draw ) #02 =SPRT.color |
| 448 | 448 |
~SPRT.x #0008 ADD2 =SPRT.x |
| 449 |
- ,font_hex #00 ,addr #0001 ADD2 LDR #f0 AND #04 ROR #08 MUL ADD2 =SPRT.addr |
|
| 449 |
+ ,font_hex #00 ,addr #0001 ADD2 LDR #f0 AND #04 SHR #08 MUL ADD2 =SPRT.addr |
|
| 450 | 450 |
( draw ) #02 =SPRT.color |
| 451 | 451 |
~SPRT.x #0008 ADD2 =SPRT.x |
| 452 | 452 |
,font_hex #00 ,addr #0001 ADD2 LDR #0f AND #08 MUL ADD2 =SPRT.addr |
| ... | ... |
@@ -40,8 +40,8 @@ void op_str(Uxn *u) { Uint16 a = pop16(u->src); Uint8 b = pop8(u->src); mempoke8
|
| 40 | 40 |
/* Logic */ |
| 41 | 41 |
void op_and(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b & a); }
|
| 42 | 42 |
void op_xor(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b | a); }
|
| 43 |
-void op_rol(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b << (a % 8)); }
|
|
| 44 |
-void op_ror(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b >> (a % 8)); }
|
|
| 43 |
+void op_shl(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b << (a % 8)); }
|
|
| 44 |
+void op_shr(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b >> (a % 8)); }
|
|
| 45 | 45 |
/* Stack */ |
| 46 | 46 |
void op_pop(Uxn *u) { pop8(u->src); }
|
| 47 | 47 |
void op_dup(Uxn *u) { push8(u->src, peek8(u->src, 0)); }
|
| ... | ... |
@@ -68,8 +68,8 @@ void op_ldr16(Uxn *u) { Uint16 a = pop16(u->src); push16(u->src, mempeek16(u, a)
|
| 68 | 68 |
void op_str16(Uxn *u) { Uint16 a = pop16(u->src); Uint16 b = pop16(u->src); mempoke16(u, a, b); }
|
| 69 | 69 |
void op_and16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b & a); }
|
| 70 | 70 |
void op_xor16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b ^ a); }
|
| 71 |
-void op_rol16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b << (a % 16)); }
|
|
| 72 |
-void op_ror16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b >> (a % 16)); }
|
|
| 71 |
+void op_shl16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b << (a % 16)); }
|
|
| 72 |
+void op_shr16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b >> (a % 16)); }
|
|
| 73 | 73 |
/* Stack(16-bits) */ |
| 74 | 74 |
void op_pop16(Uxn *u) { pop16(u->src); }
|
| 75 | 75 |
void op_dup16(Uxn *u) { push16(u->src, peek16(u->src, 0)); }
|
| ... | ... |
@@ -90,12 +90,12 @@ void op_lth16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push8(u->sr
|
| 90 | 90 |
|
| 91 | 91 |
void (*ops[])(Uxn *u) = {
|
| 92 | 92 |
op_brk, op_nop, op_lit, op_ldr, op_str, op_nop, op_jmp, op_jsr, |
| 93 |
- op_equ, op_neq, op_gth, op_lth, op_and, op_xor, op_rol, op_ror, |
|
| 93 |
+ op_equ, op_neq, op_gth, op_lth, op_and, op_xor, op_shl, op_shr, |
|
| 94 | 94 |
op_pop, op_dup, op_swp, op_ovr, op_rot, op_nop, op_cln, op_sth, |
| 95 | 95 |
op_add, op_sub, op_mul, op_div, op_nop, op_nop, op_nop, op_nop, |
| 96 | 96 |
/* 16-bit */ |
| 97 | 97 |
op_brk, op_nop16, op_lit16, op_ldr16, op_str16, op_nop, op_jmp16, op_jsr16, |
| 98 |
- op_equ16, op_neq16, op_gth16, op_lth16, op_and16, op_xor16, op_rol16, op_ror16, |
|
| 98 |
+ op_equ16, op_neq16, op_gth16, op_lth16, op_and16, op_xor16, op_shl16, op_shr16, |
|
| 99 | 99 |
op_pop16, op_dup16, op_swp16, op_ovr16, op_rot16, op_nop, op_cln16, op_sth16, |
| 100 | 100 |
op_add16, op_sub16, op_mul16, op_div16, op_nop, op_nop, op_nop, op_nop |
| 101 | 101 |
}; |