| ... | ... |
@@ -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 SHL |
|
| 49 |
+ ( mask ) #01 #07 ~Mouse.x ~editor.x1 SUB2 #0008 DIV2 SWP POP SUB #40 SFT SFT |
|
| 50 | 50 |
ORA |
| 51 | 51 |
( save ) ~editor.addr ~Mouse.y ~editor.y1 SUB2 #0008 DIV2 ADD2 STR |
| 52 | 52 |
|
| ... | ... |
@@ -14,6 +14,7 @@ |
| 14 | 14 |
%2/ { #0001 SFT2 } %2* { #0001 SHL2 }
|
| 15 | 15 |
%8/ { #0003 SFT2 } %8* { #0003 SHL2 }
|
| 16 | 16 |
%8- { #0008 SUB2 } %8+ { #0008 ADD2 }
|
| 17 |
+%SFL { #40 SFT SFT }
|
|
| 17 | 18 |
|
| 18 | 19 |
;bankview { x 2 y 2 mode 1 addr 2 }
|
| 19 | 20 |
;tileview { x 2 y 2 addr 2 }
|
| ... | ... |
@@ -156,13 +157,13 @@ BRK |
| 156 | 157 |
~MOUS.y ~tileview.y SUB2 ~MOUS.y ~tileview.y SUB2 #0040 DIV2 #0040 MUL2 SUB2 =pos.y |
| 157 | 158 |
,no-erase-mode ~bankview.mode #02 NEQ JMP2? |
| 158 | 159 |
( load ) ~addr ~pos.y 8/ ADD2 LDR |
| 159 |
- ( mask ) #01 #07 ~pos.x 8/ SWP POP SUB SHL |
|
| 160 |
+ ( mask ) #01 #07 ~pos.x 8/ SWP POP SUB SFL |
|
| 160 | 161 |
#ff XOR AND |
| 161 | 162 |
( save ) ~addr ~pos.y 8/ ADD2 STR |
| 162 | 163 |
,redraw JSR2 ,click-end JMP2 |
| 163 | 164 |
@no-erase-mode |
| 164 | 165 |
( load ) ~addr ~pos.y 8/ ADD2 LDR |
| 165 |
- ( mask ) #01 #07 ~pos.x 8/ SWP POP SUB SHL |
|
| 166 |
+ ( mask ) #01 #07 ~pos.x 8/ SWP POP SUB SFL |
|
| 166 | 167 |
ORA |
| 167 | 168 |
( save ) ~addr ~pos.y 8/ ADD2 STR |
| 168 | 169 |
,redraw JSR2 ,click-end JMP2 |
| ... | ... |
@@ -25,6 +25,7 @@ |
| 25 | 25 |
%8/ { #0003 SFT2 } %8* { #0003 SHL2 }
|
| 26 | 26 |
%8+ { #0008 ADD2 }
|
| 27 | 27 |
%MOD8 { #0007 AND2 }
|
| 28 |
+%SFL { #40 SFT SFT }
|
|
| 28 | 29 |
|
| 29 | 30 |
;center { x 2 y 2 }
|
| 30 | 31 |
;toolbar { x1 2 y1 2 x2 2 y2 2 }
|
| ... | ... |
@@ -345,7 +346,7 @@ RTN |
| 345 | 346 |
=pt1.y =pt1.x |
| 346 | 347 |
( get tile addr ) ,data ~pt1.x 8/ ~pt1.y 8/ ~canvas.w MUL2 ADD2 8* ~pt1.y MOD8 ADD2 ADD2 |
| 347 | 348 |
( load ) DUP2 LDR |
| 348 |
- ( mask ) #01 #07 ~pt1.x MOD8 SWP POP SUB SHL ORA |
|
| 349 |
+ ( mask ) #01 #07 ~pt1.x MOD8 SWP POP SUB SFL ORA |
|
| 349 | 350 |
( save ) ROT ROT STR |
| 350 | 351 |
|
| 351 | 352 |
RTN |
| ... | ... |
@@ -355,7 +356,7 @@ RTN |
| 355 | 356 |
=pt1.y =pt1.x |
| 356 | 357 |
( get tile addr ) ,data ~pt1.x 8/ ~pt1.y 8/ ~canvas.w MUL2 ADD2 8* ~pt1.y MOD8 ADD2 ADD2 |
| 357 | 358 |
( load ) DUP2 LDR |
| 358 |
- ( mask ) #01 #07 ~pt1.x MOD8 SWP POP SUB SHL #ff XOR AND |
|
| 359 |
+ ( mask ) #01 #07 ~pt1.x MOD8 SWP POP SUB SFL #ff XOR AND |
|
| 359 | 360 |
( save ) ROT ROT STR |
| 360 | 361 |
|
| 361 | 362 |
RTN |
| ... | ... |
@@ -42,7 +42,11 @@ void op_and(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b
|
| 42 | 42 |
void op_ora(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b | a); }
|
| 43 | 43 |
void op_xor(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b ^ a); }
|
| 44 | 44 |
void op_shl(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b << (a % 8)); }
|
| 45 |
-void op_shr(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src); push8(u->src, b >> (a % 8)); }
|
|
| 45 |
+void op_sft(Uxn *u) { Uint8 a = pop8(u->src), b = pop8(u->src);
|
|
| 46 |
+ Uint8 left = (a & 0xf0) >> 4; |
|
| 47 |
+ Uint8 right = (a & 0x0f); |
|
| 48 |
+ push8(u->src, b << (left % 8) >> (right % 8)); |
|
| 49 |
+} |
|
| 46 | 50 |
/* Stack */ |
| 47 | 51 |
void op_pop(Uxn *u) { pop8(u->src); }
|
| 48 | 52 |
void op_dup(Uxn *u) { push8(u->src, peek8(u->src, 0)); }
|
| ... | ... |
@@ -71,7 +75,7 @@ void op_and16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->s
|
| 71 | 75 |
void op_ora16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b | a); }
|
| 72 | 76 |
void op_xor16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b ^ a); }
|
| 73 | 77 |
void op_shl16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b << (a % 16)); }
|
| 74 |
-void op_shr16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b >> (a % 16)); }
|
|
| 78 |
+void op_sft16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push16(u->src, b >> (a % 16)); }
|
|
| 75 | 79 |
/* Stack(16-bits) */ |
| 76 | 80 |
void op_pop16(Uxn *u) { pop16(u->src); }
|
| 77 | 81 |
void op_dup16(Uxn *u) { push16(u->src, peek16(u->src, 0)); }
|
| ... | ... |
@@ -92,12 +96,12 @@ void op_lth16(Uxn *u) { Uint16 a = pop16(u->src), b = pop16(u->src); push8(u->sr
|
| 92 | 96 |
|
| 93 | 97 |
void (*ops[])(Uxn *u) = {
|
| 94 | 98 |
op_brk, op_nop, op_lit, op_ldr, op_str, op_nop, op_jmp, op_jsr, |
| 95 |
- op_equ, op_neq, op_gth, op_lth, op_and, op_ora, op_shl, op_shr, |
|
| 99 |
+ op_equ, op_neq, op_gth, op_lth, op_and, op_ora, op_shl, op_sft, |
|
| 96 | 100 |
op_pop, op_dup, op_swp, op_ovr, op_rot, op_nop, op_cln, op_sth, |
| 97 | 101 |
op_add, op_sub, op_mul, op_div, op_nop, op_nop, op_nop, op_xor, |
| 98 | 102 |
/* 16-bit */ |
| 99 | 103 |
op_brk, op_nop16, op_lit16, op_ldr16, op_str16, op_nop, op_jmp16, op_jsr16, |
| 100 |
- op_equ16, op_neq16, op_gth16, op_lth16, op_and16, op_ora16, op_shl16, op_shr16, |
|
| 104 |
+ op_equ16, op_neq16, op_gth16, op_lth16, op_and16, op_ora16, op_shl16, op_sft16, |
|
| 101 | 105 |
op_pop16, op_dup16, op_swp16, op_ovr16, op_rot16, op_nop, op_cln16, op_sth16, |
| 102 | 106 |
op_add16, op_sub16, op_mul16, op_div16, op_nop, op_nop, op_nop, op_xor16 |
| 103 | 107 |
}; |