commit b52417b66c390cbdeda4a2460a623f17c0fd5a60
parent f997c5f56437f17824c77f1b5224dcf95303ce0a
Author: neauoire <aliceffekt@gmail.com>
Date: Tue, 16 Mar 2021 11:25:26 -0700
Implemented more macros in left/nasu
Diffstat:
5 files changed, 168 insertions(+), 173 deletions(-)
diff --git a/assembler.c b/assembler.c
@@ -264,8 +264,6 @@ walktoken(char *w)
case ',': return 3; /* lit2 addr-hb addr-lb */
case '.': return 2; /* addr-hb addr-lb */
case '^': return 2; /* Relative jump: lit addr-offset */
- case '+': /* signed positive */
- case '-': /* signed negative */
case '#': return (slen(w + 1) == 2 ? 2 : 3);
}
if((m = findmacro(w))) {
@@ -326,21 +324,6 @@ parsetoken(char *w)
else
return 0;
return 1;
- } else if(w[0] == '+' && sihx(w + 1)) {
- if(slen(w + 1) == 2)
- pushbyte((Sint8)shex(w + 1), 1);
- else if(slen(w + 1) == 4)
- pushshort((Sint16)shex(w + 1), 1);
- else
- return 0;
- } else if(w[0] == '-' && sihx(w + 1)) {
- if(slen(w + 1) == 2)
- pushbyte((Sint8)(shex(w + 1) * -1), 1);
- else if(slen(w + 1) == 4)
- pushshort((Sint16)(shex(w + 1) * -1), 1);
- else
- return 0;
- return 1;
} else if((m = findmacro(w))) {
int i;
m->refs++;
diff --git a/projects/examples/dev.controller.usm b/projects/examples/dev.controller.usm
@@ -1,8 +1,8 @@
( Controller )
-%INCR2 { #0001 ADD2 }
-%DECR2 { #0001 SUB2 }
-%HALF2 { #0002 DIV2 }
+%++ { #0001 ADD2 }
+%-- { #0001 SUB2 }
+%2/ { #0002 DIV2 }
%JMC2 { ROT JMP2? POP2 }
;slime { color 1 }
@@ -10,8 +10,8 @@
|0100 @RESET
( set origin )
- ~Screen.width HALF2 =Sprite.x
- ~Screen.height HALF2 =Sprite.y
+ ~Screen.width 2/ =Sprite.x
+ ~Screen.height 2/ =Sprite.y
,default_icn =Sprite.addr
#11 =Sprite.color
#0a =slime
@@ -36,13 +36,13 @@ BRK
( detect movement )
~Controller.buttons #f0 AND
DUP #04 SHR #01 AND #01 NEQ ,$no-up JMC2
- ( move ) ~Sprite.y DECR2 =Sprite.y ,up_icn =Sprite.addr $no-up
+ ( move ) ~Sprite.y -- =Sprite.y ,up_icn =Sprite.addr $no-up
DUP #05 SHR #01 AND #01 NEQ ,$no-down JMC2
- ( move ) ~Sprite.y INCR2 =Sprite.y ,down_icn =Sprite.addr $no-down
+ ( move ) ~Sprite.y ++ =Sprite.y ,down_icn =Sprite.addr $no-down
DUP #06 SHR #01 AND #01 NEQ ,$no-left JMC2
- ( move ) ~Sprite.x DECR2 =Sprite.x ,left_icn =Sprite.addr $no-left
+ ( move ) ~Sprite.x -- =Sprite.x ,left_icn =Sprite.addr $no-left
DUP #07 SHR #01 AND #01 NEQ ,$no-right JMC2
- ( move ) ~Sprite.x INCR2 =Sprite.x ,right_icn =Sprite.addr $no-right
+ ( move ) ~Sprite.x ++ =Sprite.x ,right_icn =Sprite.addr $no-right
POP
( draw face )
diff --git a/projects/examples/gui.shapes.usm b/projects/examples/gui.shapes.usm
@@ -1,6 +1,8 @@
( draw routines )
%RTN { JMP2r }
+%++ { #0001 ADD2 }
+%8+ { #0008 ADD2 }
;label { x 2 y 2 color 1 addr 2 }
;pict { x 2 y 2 width 2 height 2 color 1 addr 2 }
@@ -32,7 +34,7 @@ BRK
( load ) =color =rect.y2 =rect.x2 DUP2 =Screen.y =rect.y1 DUP2 =Screen.x =rect.x1
$hor
- ( incr ) ~Screen.x #0001 ADD2 =Screen.x
+ ( incr ) ~Screen.x ++ =Screen.x
( draw ) ~rect.y1 =Screen.y ~color =Screen.color
( draw ) ~rect.y2 =Screen.y ~color =Screen.color
,$hor ~Screen.x ~rect.x2 LTH2 JMP2?
@@ -40,8 +42,8 @@ BRK
$ver
( draw ) ~rect.x1 =Screen.x ~color =Screen.color
( draw ) ~rect.x2 =Screen.x ~color =Screen.color
- ( incr ) ~Screen.y #0001 ADD2 =Screen.y
- ,$ver ~Screen.y ~rect.y2 #0001 ADD2 LTH2 JMP2?
+ ( incr ) ~Screen.y ++ =Screen.y
+ ,$ver ~Screen.y ~rect.y2 ++ LTH2 JMP2?
RTN
@@ -52,9 +54,9 @@ RTN
~rect.x1 =Screen.x
$hor
( draw ) ~color =Screen.color
- ( incr ) ~Screen.x #0001 ADD2 =Screen.x
+ ( incr ) ~Screen.x ++ =Screen.x
,$hor ~Screen.x ~rect.x2 LTH2 JMP2?
- ( incr ) ~Screen.y #0001 ADD2 =Screen.y
+ ( incr ) ~Screen.y ++ =Screen.y
,$ver ~Screen.y ~rect.y2 LTH2 JMP2?
RTN
@@ -66,10 +68,10 @@ RTN
~pict.x =Sprite.x
$hor
( draw ) ~pict.color =Sprite.color
- ( incr ) ~Sprite.x #0008 ADD2 =Sprite.x
- ( incr ) ~Sprite.addr #0008 ADD2 =Sprite.addr
+ ( incr ) ~Sprite.x 8+ =Sprite.x
+ ( incr ) ~Sprite.addr 8+ =Sprite.addr
,$hor ~Sprite.x ~pict.width ~pict.x ADD2 LTH2 JMP2?
- ( incr ) ~Sprite.y #0008 ADD2 =Sprite.y
+ ( incr ) ~Sprite.y 8+ =Sprite.y
,$ver ~Sprite.y ~pict.height ~pict.y ADD2 LTH2 JMP2?
RTN
@@ -79,8 +81,8 @@ RTN
( load ) =label.addr =label.color =Sprite.y =Sprite.x ~label.addr
$loop
( draw ) DUP2 LDR #00 SWP #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color
- ( incr ) #0001 ADD2
- ( incr ) ~Sprite.x #0008 ADD2 =Sprite.x
+ ( incr ) ++
+ ( incr ) ~Sprite.x 8+ =Sprite.x
DUP2 LDR #00 NEQ ,$loop ROT JMP2?
POP2
diff --git a/projects/software/left.usm b/projects/software/left.usm
@@ -18,6 +18,10 @@
%RTN { JMP2r }
%RTN? { JMP2r? }
+%++ { #0001 ADD2 } %-- { #0001 SUB2 }
+%8/ { #0003 SHR2 } %8* { #0003 SHL2 }
+%8- { #0008 SUB2 } %8+ { #0008 ADD2 }
+
;lock { byte 1 }
;k { byte 1 }
;l { byte 1 }
@@ -38,7 +42,7 @@
( load file )
,filepath ,load-file JSR2
( place textarea )
- #0018 =textarea.x1 ~Screen.height #0008 SUB2 =textarea.y2
+ #0018 =textarea.x1 ~Screen.height 8- =textarea.y2
,select JSR2
,redraw JSR2
@@ -54,22 +58,22 @@ BRK
,no-ctrl-up ~Controller #10 NEQ JMP2?
( clamp ) ,no-ctrl-up ~position.y #0000 EQU2 JMP2?
,find-lineoffset JSR2 =position.x
- ~position.y #0001 SUB2 =position.y
- ,find-selection JSR2 DUP2 =selection.from #0001 ADD2 =selection.to
+ ~position.y -- =position.y
+ ,find-selection JSR2 DUP2 =selection.from ++ =selection.to
,clamp-selection JSR2 ,follow-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2
@no-ctrl-up
,no-ctrl-down ~Controller #20 NEQ JMP2?
- ,find-lineoffset JSR2 =position.x ~position.y #0001 ADD2 =position.y
- ,find-selection JSR2 DUP2 =selection.from #0001 ADD2 =selection.to
+ ,find-lineoffset JSR2 =position.x ~position.y ++ =position.y
+ ,find-selection JSR2 DUP2 =selection.from ++ =selection.to
,clamp-selection JSR2 ,follow-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2
@no-ctrl-down
,no-ctrl-left ~Controller #40 NEQ JMP2?
( clamp ) ,no-ctrl-left ~selection.from ,document.body EQU2 JMP2?
- ~selection.from #0001 SUB2 DUP2 =selection.from #0001 ADD2 =selection.to
+ ~selection.from -- DUP2 =selection.from ++ =selection.to
,clamp-selection JSR2 ,follow-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2
@no-ctrl-left
,no-ctrl-right ~Controller #80 NEQ JMP2?
- ~selection.from #0001 ADD2 DUP2 =selection.from #0001 ADD2 =selection.to
+ ~selection.from ++ DUP2 =selection.from ++ =selection.to
,clamp-selection JSR2 ,follow-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2
@no-ctrl-right
( alt )
@@ -83,11 +87,11 @@ BRK
,clamp-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2
@no-adown
,no-aleft ~Controller #04 SHR #04 NEQ JMP2?
- ~selection.to #0001 SUB2 =selection.to
+ ~selection.to -- =selection.to
,clamp-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2
@no-aleft
,no-aright ~Controller #04 SHR #08 NEQ JMP2?
- ~selection.to #0001 ADD2 =selection.to
+ ~selection.to ++ =selection.to
,clamp-selection JSR2 ,redraw JSR2 ,ctrl-end JMP2
@no-aright
@no-alt
@@ -121,20 +125,20 @@ BRK
~selection.to ~selection.from SUB2 ,shift-left JSR2
,$erase-end JMP2
$erase-multiple
- ~selection.from #0001 ADD2 =selection.from
- ~selection.to ~selection.from SUB2 #0001 ADD2 ,shift-left JSR2
+ ~selection.from ++ =selection.from
+ ~selection.to ~selection.from SUB2 ++ ,shift-left JSR2
$erase-end
- ~selection.from #0001 SUB2 =selection.from
+ ~selection.from -- =selection.from
,$keys-end JMP2
$no-backspace
( insert )
~selection.to ~selection.from SUB2 ,shift-right JSR2
~Keys ~selection.from STR
- ~selection.from #0001 ADD2 =selection.from
+ ~selection.from ++ =selection.from
$keys-end
- ~selection.from #0001 ADD2 =selection.to
+ ~selection.from ++ =selection.to
( release ) #00 =Keys
,redraw JSR2
@@ -144,7 +148,7 @@ BRK
,no-change ~Mouse.state ~touch.state EQU JMP2?
- #0000 =Sprite.x ~Screen.height #0008 SUB2 =Sprite.y
+ #0000 =Sprite.x ~Screen.height 8- =Sprite.y
,mouse00icn =Sprite.addr
,nobutton1 ~Mouse.state #01 NEQ JMP2? ,mouse01icn =Sprite.addr @nobutton1
,nobutton2 ~Mouse.state #10 NEQ JMP2? ,mouse10icn =Sprite.addr @nobutton2
@@ -156,7 +160,7 @@ BRK
,touch-end ~Mouse.state #00 EQU JMP2?
,touch-linebar ~Mouse.x #0010 LTH2 JMP2?
- ,touch-body ~Mouse.x ~Screen.width #0008 SUB2 LTH2 JMP2?
+ ,touch-body ~Mouse.x ~Screen.width 8- LTH2 JMP2?
,touch-scrollbar JMP2
@touch-end
@@ -175,11 +179,11 @@ BRK
( decr ) ~scroll.y #00 ~scroll.y #0000 NEQ2 SUB2 =scroll.y
^$end JMP
$no-up
- ,$no-down ~Mouse.y ~Screen.height #0008 SUB2 LTH2 JMP2?
- ( incr ) ~scroll.y #0001 ADD2 =scroll.y
+ ,$no-down ~Mouse.y ~Screen.height 8- LTH2 JMP2?
+ ( incr ) ~scroll.y ++ =scroll.y
^$end JMP
$no-down
- ~Mouse.y #0008 SUB2 =scroll.y
+ ~Mouse.y 8- =scroll.y
$end
,redraw JSR2
,touch-end JMP2
@@ -188,8 +192,8 @@ RTN
@touch-linebar
- ~Mouse.y #0008 DIV2 ~scroll.y ADD2 =position.y #0000 =position.x
- ,find-selection JSR2 DUP2 =selection.from #0001 ADD2 =selection.to
+ ~Mouse.y 8/ ~scroll.y ADD2 =position.y #0000 =position.x
+ ,find-selection JSR2 DUP2 =selection.from ++ =selection.to
,redraw JSR2
,touch-end JMP2
@@ -197,7 +201,7 @@ RTN
@touch-body
- ~Mouse.y #0008 DIV2 ~scroll.y ADD2 =position.y
+ ~Mouse.y 8/ ~scroll.y ADD2 =position.y
~Mouse.x ~textarea.x1 SUB2 #0007 ADD2 #0007 DIV2 =position.x
,$no-chord-cut ~Mouse.chord #01 NEQ JMP2?
@@ -215,12 +219,12 @@ RTN
,$no-drag ~Mouse.state ~touch.state NEQ ~Controller #0f AND #02 NEQ #0101 EQU2 JMP2?
( on drag )
- ,find-selection JSR2 #0001 ADD2 =selection.to
+ ,find-selection JSR2 ++ =selection.to
,clamp-selection JSR2
^$end JMP
$no-drag
( on click )
- ,find-selection JSR2 DUP2 =selection.from #0001 ADD2 =selection.to
+ ,find-selection JSR2 DUP2 =selection.from ++ =selection.to
$end
,redraw JSR2
,touch-end JMP2
@@ -233,7 +237,7 @@ RTN
( get file length )
,document.body =document.eof
$loop NOP
- ( incr ) ~document.eof #0001 ADD2 =document.eof
+ ( incr ) ~document.eof ++ =document.eof
~document.eof LDR #00 NEQ ^$loop MUL JMP
RTN
@@ -257,10 +261,10 @@ RTN
@shift-left ( length )
=i
- ~selection.from #0001 SUB2 =j ( start -> end )
+ ~selection.from -- =j ( start -> end )
$loop NOP
( move ) ~j ~i ADD2 LDR ~j STR
- ( incr ) ~j #0001 ADD2 =j
+ ( incr ) ~j ++ =j
~j ~document.eof LTH2 ^$loop MUL JMP
~document.eof ~i SUB2 =document.eof
@@ -272,7 +276,7 @@ RTN
~document.eof =j ( end -> start )
$loop NOP
( move ) ~j ~i SUB2 LDR ~j STR
- ( decr ) ~j #0001 SUB2 =j
+ ( decr ) ~j -- =j
~j ~selection.from GTH2 ^$loop MUL JMP
~document.eof ~i ADD2 =document.eof
@@ -283,8 +287,8 @@ RTN
,$no-up ~position.y ~scroll.y GTH2 JMP2?
~position.y =scroll.y RTN
$no-up
- ,$no-down ~position.y ~Screen.height #0010 SUB2 #0008 DIV2 ~scroll.y ADD2 LTH2 JMP2?
- ~position.y ~Screen.height #0010 SUB2 #0008 DIV2 SUB2 =scroll.y RTN
+ ,$no-down ~position.y ~Screen.height #0010 SUB2 8/ ~scroll.y ADD2 LTH2 JMP2?
+ ~position.y ~Screen.height #0010 SUB2 8/ SUB2 =scroll.y RTN
$no-down
RTN
@@ -292,20 +296,20 @@ RTN
@clamp-selection
~selection.from ~selection.to LTH2 RTN?
- ~selection.from #0001 ADD2 =selection.to
+ ~selection.from ++ =selection.to
RTN
@goto-linestart
$loop NOP
- ~selection.from #0001 SUB2 LDR #0a EQU RTN?
- ~selection.from #0001 SUB2 LDR #0d EQU RTN?
- ( decr ) ~selection.from DUP2 =selection.to #0001 SUB2 =selection.from
+ ~selection.from -- LDR #0a EQU RTN?
+ ~selection.from -- LDR #0d EQU RTN?
+ ( decr ) ~selection.from DUP2 =selection.to -- =selection.from
~selection.from LDR #00 NEQ ^$loop MUL JMP
( clamp at document body )
~selection.from ,document.body GTH2 RTN?
- ,document.body DUP2 =selection.from #0001 ADD2 =selection.to
+ ,document.body DUP2 =selection.from ++ =selection.to
RTN
@@ -314,11 +318,11 @@ RTN
$loop NOP
~selection.from LDR #0a EQU RTN?
~selection.from LDR #0d EQU RTN?
- ( incr ) ~selection.from #0001 ADD2 DUP2 #0001 ADD2 =selection.to =selection.from
+ ( incr ) ~selection.from ++ DUP2 ++ =selection.to =selection.from
~selection.from LDR #00 NEQ ^$loop MUL JMP
( clamp at document body )
~selection.from ,document.eof LTH2 RTN?
- ,document.eof #0001 SUB2 DUP2 =selection.from #0001 ADD2 =selection.to
+ ,document.eof -- DUP2 =selection.from ++ =selection.to
RTN
@@ -326,13 +330,13 @@ RTN
~selection.to =j
$loop NOP
- ( decr ) ~j #0001 SUB2 =j
+ ( decr ) ~j -- =j
,$end ~j LDR #20 EQU JMP2?
,$end ~j LDR #0a EQU JMP2?
,$end ~j LDR #0d EQU JMP2?
~j ,document.body GTH2 ^$loop MUL JMP
$end
- ( return ) ~j #0001 SUB2
+ ( return ) ~j --
RTN
@@ -340,13 +344,13 @@ RTN
~selection.to =j
$loop NOP
- ( incr ) ~j #0001 ADD2 =j
+ ( incr ) ~j ++ =j
,$end ~j LDR #20 EQU JMP2?
,$end ~j LDR #0a EQU JMP2?
,$end ~j LDR #0d EQU JMP2?
~j ,document.body GTH2 ^$loop MUL JMP
$end
- ( return ) ~j #0001 ADD2
+ ( return ) ~j ++
RTN
@@ -354,7 +358,7 @@ RTN
#0000 =j
$loop NOP
- ( incr ) ~j #0001 ADD2 =j
+ ( incr ) ~j ++ =j
,$end ~selection.from ~j SUB2 LDR #0a EQU JMP2?
,$end ~selection.from ~j SUB2 LDR #0d EQU JMP2?
~selection.from ~j SUB2 ,document.body GTH2 ^$loop MUL JMP
@@ -367,11 +371,11 @@ RTN
,document.body =j #0000 =pt.y
$loop NOP
- ,$end ~pt.y ~position.y #0001 SUB2 GTH2 JMP2?
+ ,$end ~pt.y ~position.y -- GTH2 JMP2?
,$no-space ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP2?
- ( incr ) ~pt.y #0001 ADD2 =pt.y
+ ( incr ) ~pt.y ++ =pt.y
$no-space
- ( incr ) ~j #0001 ADD2 =j
+ ( incr ) ~j ++ =j
~j LDR #00 NEQ ^$loop MUL JMP
$end
( return ) ~j
@@ -385,8 +389,8 @@ RTN
$loop NOP
,$end ~j ~pt.x ADD2 LDR #0a EQU JMP2?
,$end ~j ~pt.x ADD2 LDR #0d EQU JMP2?
- ( incr ) ~pt.x #0001 ADD2 =pt.x
- ~pt.x ~position.x #0001 SUB2 LTH2 ^$loop MUL JMP
+ ( incr ) ~pt.x ++ =pt.x
+ ~pt.x ~position.x -- LTH2 ^$loop MUL JMP
$end
( return ) ~pt.x ADD2
@@ -396,7 +400,7 @@ RTN
,copy JSR2
~selection.to ~selection.from SUB2 ,shift-left JSR2
- ~selection.from #0001 ADD2 =selection.to
+ ~selection.from ++ =selection.to
RTN
@@ -407,7 +411,7 @@ RTN
~j =clip.len
$loop NOP
~selection.from ~i ADD2 LDR ,clip.body ~i ADD2 STR
- ( incr ) ~i #0001 ADD2 =i
+ ( incr ) ~i ++ =i
~i ~j LTH2 ^$loop MUL JMP
RTN
@@ -419,7 +423,7 @@ RTN
~clip.len =j ( end )
$loop NOP
,clip.body ~i ADD2 LDR ~selection.from ~i ADD2 STR
- ( incr ) ~i #0001 ADD2 =i
+ ( incr ) ~i ++ =i
~i ~j LTH2 ^$loop MUL JMP
RTN
@@ -429,15 +433,15 @@ RTN
,document.body =selection.from #0000 =pt.x #0000 =pt.y
$loop
,$no-space ~selection.from LDR #0a NEQ ~selection.from LDR #0d NEQ #0101 EQU2 JMP2?
- ( incr ) ~pt.y #0001 ADD2 =pt.y
+ ( incr ) ~pt.y ++ =pt.y
#0000 =pt.x
$no-space
- ,$no-reached ~pt.y ~position.y #0001 SUB2 GTH2 ~pt.x ~position.x #0001 SUB2 GTH2 #0101 NEQ2 JMP2?
- ~selection.from #0001 ADD2 =selection.to
+ ,$no-reached ~pt.y ~position.y -- GTH2 ~pt.x ~position.x -- GTH2 #0101 NEQ2 JMP2?
+ ~selection.from ++ =selection.to
RTN
$no-reached
- ( incr ) ~pt.x #0001 ADD2 =pt.x
- ( incr ) ~selection.from #0001 ADD2 =selection.from
+ ( incr ) ~pt.x ++ =pt.x
+ ( incr ) ~selection.from ++ =selection.from
,$loop ~selection.from LDR #00 NEQ JMP2?
RTN
@@ -451,7 +455,7 @@ RTN
,draw-titlebar JSR2
( save/load icons )
- ~Screen.height #0008 SUB2 =Sprite.y
+ ~Screen.height 8- =Sprite.y
~Screen.width #0018 SUB2 =Sprite.x
,load_icn =Sprite.addr
#02 =Sprite.color
@@ -466,14 +470,14 @@ RTN
=addr
,font_hex #00 ,addr LDR #f0 AND #04 SHR #08 MUL ADD2 =Sprite.addr
( draw ) #0e =Sprite.color
- ~Sprite.x #0008 ADD2 =Sprite.x
+ ~Sprite.x 8+ =Sprite.x
,font_hex #00 ,addr LDR #0f AND #08 MUL ADD2 =Sprite.addr
( draw ) #0e =Sprite.color
- ~Sprite.x #0008 ADD2 =Sprite.x
- ,font_hex #00 ,addr #0001 ADD2 LDR #f0 AND #04 SHR #08 MUL ADD2 =Sprite.addr
+ ~Sprite.x 8+ =Sprite.x
+ ,font_hex #00 ,addr ++ LDR #f0 AND #04 SHR #08 MUL ADD2 =Sprite.addr
( draw ) #0e =Sprite.color
- ~Sprite.x #0008 ADD2 =Sprite.x
- ,font_hex #00 ,addr #0001 ADD2 LDR #0f AND #08 MUL ADD2 =Sprite.addr
+ ~Sprite.x 8+ =Sprite.x
+ ,font_hex #00 ,addr ++ LDR #0f AND #08 MUL ADD2 =Sprite.addr
( draw ) #0e =Sprite.color
RTN
@@ -512,9 +516,9 @@ RTN
$find-offset NOP
,$find-offset-end ~scroll.y ~j EQU2 JMP2?
,$no-break ~textarea.addr LDR #0a NEQ ~textarea.addr LDR #0d NEQ #0101 EQU2 JMP2?
- ( incr ) ~j #0001 ADD2 =j
+ ( incr ) ~j ++ =j
$no-break
- ( incr ) ~textarea.addr #0001 ADD2 =textarea.addr
+ ( incr ) ~textarea.addr ++ =textarea.addr
~textarea.addr LDR #00 NEQ ^$find-offset MUL JMP
$find-offset-end
@@ -526,10 +530,10 @@ RTN
,$end ~Sprite.y ~Screen.height #0010 SUB2 GTH2 JMP2?
( get character )
- ,font #00 ~i LDR #20 SUB #0008 MUL2 ADD2 =Sprite.addr
+ ,font #00 ~i LDR #20 SUB 8* ADD2 =Sprite.addr
( draw ) #01
- ~i ~selection.from #0001 SUB2 GTH2
+ ~i ~selection.from -- GTH2
~i ~selection.to LTH2 #0101 EQU2
#05 MUL ADD ~i ~selection.from EQU2 ADD =Sprite.color
@@ -537,20 +541,20 @@ RTN
( draw linebreak )
,linebreak_icn =Sprite.addr
( draw ) #02
- ~i ~selection.from #0001 SUB2 GTH2
+ ~i ~selection.from -- GTH2
~i ~selection.to LTH2 #0101 EQU2
#06 MUL ADD =Sprite.color
( fill clear )
$fill-clear
- ( incr ) ~Sprite.x #0008 ADD2 =Sprite.x
+ ( incr ) ~Sprite.x 8+ =Sprite.x
,font =Sprite.addr
#01 =Sprite.color
- ,$fill-clear ~Sprite.x ~Screen.width #0008 SUB2 LTH2 JMP2?
+ ,$fill-clear ~Sprite.x ~Screen.width 8- LTH2 JMP2?
( draw line number )
#0000 =Sprite.x
- ~scroll.y ~Sprite.y #0008 DIV2 ADD2 DUP2 SWP POP =k
+ ~scroll.y ~Sprite.y 8/ ADD2 DUP2 SWP POP =k
~position.y EQU2 #0c MUL =l
,font_hex #00 ~k #f0 AND #04 SHR #08 MUL ADD2 =Sprite.addr
#02 ~l ADD =Sprite.color
@@ -559,10 +563,10 @@ RTN
#02 ~l ADD =Sprite.color
#0010 =Sprite.x
- ( incr ) ~Sprite.y #0008 ADD2 =Sprite.y
+ ( incr ) ~Sprite.y 8+ =Sprite.y
$no-linebreak
- ( incr ) ~i #0001 ADD2 =i
+ ( incr ) ~i ++ =i
( incr ) ~Sprite.x #0007 ADD2 =Sprite.x
,$loop ~i LDR #00 NEQ JMP2?
@@ -573,13 +577,13 @@ RTN
@draw-scrollbar
- ~Screen.width #0008 SUB2 =Sprite.x
+ ~Screen.width 8- =Sprite.x
#0000 =Sprite.y
,scrollbar_bg =Sprite.addr
$loop NOP
( draw ) #08 =Sprite.color
- ( incr ) ~Sprite.y #0008 ADD2 =Sprite.y
+ ( incr ) ~Sprite.y 8+ =Sprite.y
~Sprite.y ~Screen.height LTH2 ^$loop MUL JMP
#0000 =Sprite.y
@@ -587,11 +591,11 @@ RTN
( draw ) #08 =Sprite.color
( at )
- ~scroll.y #0008 ADD2 =Sprite.y
+ ~scroll.y 8+ =Sprite.y
,scrollbar_fg =Sprite.addr
( draw ) #08 =Sprite.color
- ~Screen.height #0008 SUB2 =Sprite.y
+ ~Screen.height 8- =Sprite.y
,arrowdown_icn =Sprite.addr
( draw ) #08 =Sprite.color
@@ -599,13 +603,13 @@ RTN
@draw-titlebar
- #0018 ~Screen.height #0008 SUB2 #09 ,filepath
+ #0018 ~Screen.height 8- #09 ,filepath
( load ) =label.addr =label.color =Sprite.y =Sprite.x
~label.addr
$loop NOP
- ( draw ) DUP2 LDR #00 SWP #20 SUB #0008 MUL2 ,font ADD2 =Sprite.addr ~label.color =Sprite.color
- ( incr ) #0001 ADD2
- ( incr ) ~Sprite.x #0008 ADD2 =Sprite.x
+ ( draw ) DUP2 LDR #00 SWP #20 SUB 8* ,font ADD2 =Sprite.addr ~label.color =Sprite.color
+ ( incr ) ++
+ ( incr ) ~Sprite.x 8+ =Sprite.x
DUP2 LDR #00 NEQ ^$loop MUL JMP
POP2
( selection )
diff --git a/projects/software/nasu.usm b/projects/software/nasu.usm
@@ -6,8 +6,14 @@
1 2 3 - Select brush
)
-%RTN { JMP2r }
-%RTN? { JMP2r? }
+%RTN { JMP2r }
+%RTN? { JMP2r? }
+%STEP8 { #0003 SHR2 #0003 SHL2 }
+
+%++ { #0001 ADD2 }
+%2/ { #0001 SHR2 } %2* { #0001 SHL2 }
+%8/ { #0003 SHR2 } %8* { #0003 SHL2 }
+%8- { #0008 SUB2 } %8+ { #0008 ADD2 }
;bankview { x 2 y 2 mode 1 addr 2 }
;tileview { x 2 y 2 addr 2 }
@@ -21,12 +27,12 @@
|0100 @RESET
- ~SCRN.width #0002 DIV2 #008a SUB2 =bankview.x
- ~SCRN.height #0002 DIV2 #003f SUB2 =bankview.y
+ ~SCRN.width 2/ #008a SUB2 =bankview.x
+ ~SCRN.height 2/ #003f SUB2 =bankview.y
,bank1 =bankview.addr
- ~SCRN.width #0002 DIV2 #0002 ADD2 =tileview.x
- ~SCRN.height #0002 DIV2 #003f SUB2 =tileview.y
+ ~SCRN.width 2/ #0002 ADD2 =tileview.x
+ ~SCRN.height 2/ #003f SUB2 =tileview.y
,bank1 #0448 ADD2 =tileview.addr
,redraw JSR2
@@ -56,10 +62,10 @@ BRK
~tileview.addr #0080 SUB2 =tileview.addr
@no-ctrl-down
,no-ctrl-left ~CTRL.buttons #40 EQU JMP2?
- ~tileview.addr #0008 ADD2 =tileview.addr
+ ~tileview.addr 8+ =tileview.addr
@no-ctrl-left
,no-ctrl-right ~CTRL.buttons #80 EQU JMP2?
- ~tileview.addr #0008 SUB2 =tileview.addr
+ ~tileview.addr 8- =tileview.addr
@no-ctrl-right
~tileview.addr #0800 DIV2 #0800 MUL2 =bankview.addr
,redraw JSR2
@@ -72,24 +78,24 @@ BRK
( toolbar )
- ,no-toolbar-click ~MOUS.y ~bankview.y #0010 SUB2 SUB2 #0008 DIV2 #0000 NEQ2 JMP2?
+ ,no-toolbar-click ~MOUS.y ~bankview.y #0010 SUB2 SUB2 8/ #0000 NEQ2 JMP2?
( brush )
- ,no-brush-click ~MOUS.x ~bankview.x SUB2 #0008 DIV2 #000d LTH2 JMP2?
- ,no-brush-click ~MOUS.x ~bankview.x SUB2 #0008 DIV2 #000f GTH2 JMP2?
- ( select ) ~mouse.x ~bankview.x SUB2 #0008 DIV2 #000d SUB2 SWP POP =bankview.mode
+ ,no-brush-click ~MOUS.x ~bankview.x SUB2 8/ #000d LTH2 JMP2?
+ ,no-brush-click ~MOUS.x ~bankview.x SUB2 8/ #000f GTH2 JMP2?
+ ( select ) ~mouse.x ~bankview.x SUB2 8/ #000d SUB2 SWP POP =bankview.mode
( release ) #00 =MOUS.state
,redraw JSR2 ,click-end JMP2
@no-brush-click
- ,no-load-click ~MOUS.x ~tileview.x SUB2 #0008 DIV2 #000e NEQU2 JMP2?
+ ,no-load-click ~MOUS.x ~tileview.x SUB2 8/ #000e NEQU2 JMP2?
( load ) ,filename =FILE.name #0800 =FILE.length ~bankview.addr =FILE.load
( release ) #00 =MOUS.state
,redraw JSR2 ,click-end JMP2
@no-load-click
- ,no-save-click ~MOUS.x ~tileview.x SUB2 #0008 DIV2 #000f NEQU2 JMP2?
+ ,no-save-click ~MOUS.x ~tileview.x SUB2 8/ #000f NEQU2 JMP2?
( save ) ,filename =FILE.name #0800 =FILE.length ~bankview.addr =FILE.save
( release ) #00 =MOUS.state
,redraw JSR2 ,click-end JMP2
@@ -108,8 +114,8 @@ BRK
@copy-loop NOP
( load ) ~tileview.addr ~i ADD LDR
( get touch addr )
- ~MOUS.x ~bankview.x SUB2 #0008 DIV2 #0008 MUL2
- ~MOUS.y ~bankview.y SUB2 #0008 DIV2 #0008 MUL2 #0010 MUL2 ADD2
+ ~MOUS.x ~bankview.x SUB2 STEP8
+ ~MOUS.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
~bankview.addr ADD2 #00 ~i ADD2 STR
( incr ) ~i #01 ADD =i
~i #08 LTH ^copy-loop MUL JMP
@@ -121,16 +127,16 @@ BRK
@erase-loop NOP
#00
( get touch addr )
- ~MOUS.x ~bankview.x SUB2 #0008 DIV2 #0008 MUL2
- ~MOUS.y ~bankview.y SUB2 #0008 DIV2 #0008 MUL2 #0010 MUL2 ADD2
+ ~MOUS.x ~bankview.x SUB2 STEP8
+ ~MOUS.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
~bankview.addr ADD2 #00 ~i ADD2 STR
( incr ) ~i #01 ADD =i
~i #08 LTH ^erase-loop MUL JMP
,redraw JSR2 ,click-end JMP2
@not-erase-mode
- ~MOUS.x ~bankview.x SUB2 #0008 DIV2 #0008 MUL2
- ~MOUS.y ~bankview.y SUB2 #0008 DIV2 #0008 MUL2 #0010 MUL2 ADD2
+ ~MOUS.x ~bankview.x SUB2 STEP8
+ ~MOUS.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
~bankview.addr ADD2 =tileview.addr
,redraw JSR2 ,click-end JMP2
@@ -142,39 +148,39 @@ BRK
~MOUS.y ~tileview.y GTH2 ~MOUS.y ~tileview.y #0080 ADD2 LTH2 #0101 EQU2
#0101 NEQ2 ,no-tile-click ROT JMP2?
- ~MOUS.x ~tileview.x SUB2 #0008 DIV2 #0008 MUL2 #0040 DIV2
- ~MOUS.y ~tileview.y SUB2 #0008 DIV2 #0008 MUL2 #0040 DIV2 #0002 MUL2 ADD2
- #0008 MUL2
+ ~MOUS.x ~tileview.x SUB2 STEP8 #0040 DIV2
+ ~MOUS.y ~tileview.y SUB2 STEP8 #0040 DIV2 2* ADD2
+ 8*
~tileview.addr ADD2 =addr ( addr offset )
~MOUS.x ~tileview.x SUB2 ~MOUS.x ~tileview.x SUB2 #0040 DIV2 #0040 MUL2 SUB2 =pos.x
~MOUS.y ~tileview.y SUB2 ~MOUS.y ~tileview.y SUB2 #0040 DIV2 #0040 MUL2 SUB2 =pos.y
,no-fill-mode ~bankview.mode #01 NEQ JMP2?
- ( fill row ) #ff ~addr ~pos.y #0008 DIV2 ADD2 STR
+ ( fill row ) #ff ~addr ~pos.y 8/ ADD2 STR
,redraw JSR2 ,click-end JMP2
@no-fill-mode
,no-erase-mode ~bankview.mode #02 NEQ JMP2?
- ( erase row ) #00 ~addr ~pos.y #0008 DIV2 ADD2 STR
+ ( erase row ) #00 ~addr ~pos.y 8/ ADD2 STR
,redraw JSR2 ,click-end JMP2
@no-erase-mode
- ( load ) ~addr ~pos.y #0008 DIV2 ADD2 LDR
- ( mask ) #01 #07 ~pos.x #0008 DIV2 SWP POP SUB SHL
+ ( load ) ~addr ~pos.y 8/ ADD2 LDR
+ ( mask ) #01 #07 ~pos.x 8/ SWP POP SUB SHL
XOR
- ( save ) ~addr ~pos.y #0008 DIV2 ADD2 STR
+ ( save ) ~addr ~pos.y 8/ ADD2 STR
,redraw JSR2 ,click-end JMP2
@no-tile-click
( operations )
- ,no-operations ~MOUS.y ~tileview.y SUB2 #0008 DIV2 #000c NEQ2 JMP2?
+ ,no-operations ~MOUS.y ~tileview.y SUB2 8/ #000c NEQ2 JMP2?
- ,no-move-up ~MOUS.x ~tileview.x SUB2 #0008 DIV2 #0011 NEQ2 JMP2?
+ ,no-move-up ~MOUS.x ~tileview.x SUB2 8/ #0011 NEQ2 JMP2?
,op_shiftup JSR2
( release ) #00 =MOUS.state
,redraw JSR2 ,click-end JMP2
@no-move-up
- ,no-move-down ~MOUS.x ~tileview.x SUB2 #0008 DIV2 #0012 NEQ2 JMP2?
+ ,no-move-down ~MOUS.x ~tileview.x SUB2 8/ #0012 NEQ2 JMP2?
,op_shiftdown JSR2
( release ) #00 =MOUS.state
,redraw JSR2 ,click-end JMP2
@@ -240,11 +246,11 @@ RTN
,tool_selector =SPRT.addr
#01 ~bankview.mode #00 EQU ADD =SPRT.color
- ~SPRT.x #0008 ADD2 =SPRT.x
+ ~SPRT.x 8+ =SPRT.x
,tool_hand =SPRT.addr
#01 ~bankview.mode #01 EQU ADD =SPRT.color
- ~SPRT.x #0008 ADD2 =SPRT.x
+ ~SPRT.x 8+ =SPRT.x
,tool_eraser =SPRT.addr
#01 ~bankview.mode #02 EQU ADD =SPRT.color
@@ -266,7 +272,7 @@ RTN
~bankview.x #00 ~i #08 MUL ADD2 =SPRT.x
~bankview.y #0088 ADD2 =SPRT.y
( draw ) #02 =SPRT.color
- ~SPRT.addr #0008 ADD2 =SPRT.addr
+ ~SPRT.addr 8+ =SPRT.addr
( incr ) ~i #01 ADD =i
,$guides ~i #10 LTH JMP2?
@@ -283,12 +289,12 @@ RTN
,$no-highlight ~SPRT.addr ~tileview.addr #0018 ADD2 GTH2 JMP2?
( draw ) #0c =SPRT.color
$no-highlight
- ( incr ) ~SPRT.x #0008 ADD2 =SPRT.x
- ( incr ) ~SPRT.addr #0008 ADD2 =SPRT.addr
+ ( incr ) ~SPRT.x 8+ =SPRT.x
+ ( incr ) ~SPRT.addr 8+ =SPRT.addr
( incr ) ~pt.x #01 ADD =pt.x
,$hor ~pt.x #10 LTH JMP2?
( incr ) ~pt.y #01 ADD =pt.y
- ( incr ) ~SPRT.y #0008 ADD2 =SPRT.y
+ ( incr ) ~SPRT.y 8+ =SPRT.y
,$ver ~pt.y #10 LTH JMP2?
RTN
@@ -317,17 +323,17 @@ RTN
~tileview.x #0040 ADD2 =SPRT.x
~tileview.y =SPRT.y
- ~tileview.addr #0008 ADD2 =tileview.addr
+ ~tileview.addr 8+ =tileview.addr
,draw-tileview-icn JSR2
~tileview.x =SPRT.x
~tileview.y #0040 ADD2 =SPRT.y
- ~tileview.addr #0008 ADD2 =tileview.addr
+ ~tileview.addr 8+ =tileview.addr
,draw-tileview-icn JSR2
~tileview.x #0040 ADD2 =SPRT.x
~tileview.y #0040 ADD2 =SPRT.y
- ~tileview.addr #0008 ADD2 =tileview.addr
+ ~tileview.addr 8+ =tileview.addr
,draw-tileview-icn JSR2
( line hor )
@@ -356,19 +362,19 @@ RTN
~tileview.x #0088 ADD2 =SPRT.x
,font_hex #00 ~tileview.addr #00 ~i ADD2 LDR #f0 AND #04 SHR #08 MUL ADD2 =SPRT.addr
( draw ) #02 =SPRT.color
- ~SPRT.x #0008 ADD2 =SPRT.x
+ ~SPRT.x 8+ =SPRT.x
,font_hex #00 ~tileview.addr #00 ~i ADD2 LDR #0f AND #08 MUL ADD2 =SPRT.addr
( draw ) #02 =SPRT.color
( incr ) ~i #01 ADD =i
- ( incr ) ~SPRT.y #0008 ADD2 =SPRT.y
+ ( incr ) ~SPRT.y 8+ =SPRT.y
,$bytes ~i #08 LTH JMP2?
( operations )
- ~SPRT.y #0008 ADD2 =SPRT.y
+ ~SPRT.y 8+ =SPRT.y
,movedown_icn =SPRT.addr
#01 =SPRT.color
- ~SPRT.x #0008 SUB2 =SPRT.x
+ ~SPRT.x 8- =SPRT.x
,moveup_icn =SPRT.addr
#01 =SPRT.color
@@ -381,12 +387,12 @@ RTN
~tileview.x #0088 ADD2 =SPRT.x
$tiles-hor
( draw ) #03 =SPRT.color
- ( incr ) ~SPRT.x #0008 ADD2 =SPRT.x
- ( incr ) ~SPRT.addr #0008 ADD2 =SPRT.addr
+ ( incr ) ~SPRT.x 8+ =SPRT.x
+ ( incr ) ~SPRT.addr 8+ =SPRT.addr
( incr ) ~pt.x #01 ADD =pt.x
,$tiles-hor ~pt.x #02 LTH JMP2?
( incr ) ~pt.y #01 ADD =pt.y
- ( incr ) ~SPRT.y #0008 ADD2 =SPRT.y
+ ( incr ) ~SPRT.y 8+ =SPRT.y
,$tiles-ver ~pt.y #02 LTH JMP2?
RTN
@@ -400,12 +406,12 @@ RTN
( get bit )
,blank_icn #00
~tileview.addr #00 ~pt.y ADD2 LDR #07 ~pt.x SUB SHR #01 AND ( get bit )
- #0008 MUL2 ADD2 =SPRT.addr ( add *8 )
+ 8* ADD2 =SPRT.addr ( add *8 )
( draw ) #01 =SPRT.color
- ( incr ) ~SPRT.x #0008 ADD2 =SPRT.x
+ ( incr ) ~SPRT.x 8+ =SPRT.x
( incr ) ~pt.x #01 ADD =pt.x
,$hor ~pt.x #08 LTH JMP2?
- ( incr ) ~SPRT.y #0008 ADD2 =SPRT.y
+ ( incr ) ~SPRT.y 8+ =SPRT.y
( incr ) ~pt.y #01 ADD =pt.y
~SPRT.x #0040 SUB2 =SPRT.x
,$ver ~pt.y #08 LTH JMP2?
@@ -442,14 +448,14 @@ RTN
=addr
,font_hex #00 ,addr LDR #f0 AND #04 SHR #08 MUL ADD2 =SPRT.addr
( draw ) #02 =SPRT.color
- ~SPRT.x #0008 ADD2 =SPRT.x
+ ~SPRT.x 8+ =SPRT.x
,font_hex #00 ,addr LDR #0f AND #08 MUL ADD2 =SPRT.addr
( draw ) #02 =SPRT.color
- ~SPRT.x #0008 ADD2 =SPRT.x
- ,font_hex #00 ,addr #0001 ADD2 LDR #f0 AND #04 SHR #08 MUL ADD2 =SPRT.addr
+ ~SPRT.x 8+ =SPRT.x
+ ,font_hex #00 ,addr ++ LDR #f0 AND #04 SHR #08 MUL ADD2 =SPRT.addr
( draw ) #02 =SPRT.color
- ~SPRT.x #0008 ADD2 =SPRT.x
- ,font_hex #00 ,addr #0001 ADD2 LDR #0f AND #08 MUL ADD2 =SPRT.addr
+ ~SPRT.x 8+ =SPRT.x
+ ,font_hex #00 ,addr ++ LDR #0f AND #08 MUL ADD2 =SPRT.addr
( draw ) #02 =SPRT.color
RTN
@@ -460,7 +466,7 @@ RTN
( load ) =color =rect.y2 =rect.x2 DUP2 =SCRN.y =rect.y1 DUP2 =SCRN.x =rect.x1
$hor NOP
- ( incr ) ~SCRN.x #0001 ADD2 =SCRN.x
+ ( incr ) ~SCRN.x ++ =SCRN.x
( draw ) ~rect.y1 =SCRN.y ~color =SCRN.color
( draw ) ~rect.y2 =SCRN.y ~color =SCRN.color
~SCRN.x ~rect.x2 LTH2 ^$hor MUL JMP
@@ -468,8 +474,8 @@ RTN
$ver NOP
( draw ) ~rect.x1 =SCRN.x ~color =SCRN.color
( draw ) ~rect.x2 =SCRN.x ~color =SCRN.color
- ( incr ) ~SCRN.y #0001 ADD2 =SCRN.y
- ~SCRN.y ~rect.y2 #0001 ADD2 LTH2 ^$ver MUL JMP
+ ( incr ) ~SCRN.y ++ =SCRN.y
+ ~SCRN.y ~rect.y2 ++ LTH2 ^$ver MUL JMP
RTN