Optimized Nasu

This commit is contained in:
neauoire 2021-03-26 18:18:16 -07:00
parent f3e920c54d
commit 72f045cc63
2 changed files with 66 additions and 71 deletions

View File

@ -28,7 +28,7 @@ else
fi fi
echo "Assembling.." echo "Assembling.."
./bin/assembler projects/examples/gui.shapes.usm bin/boot.rom ./bin/assembler projects/software/nasu.usm bin/boot.rom
echo "Running.." echo "Running.."
if [ "${2}" = '--cli' ]; if [ "${2}" = '--cli' ];

View File

@ -62,109 +62,104 @@ BRK
( keyboard controls ) ( keyboard controls )
~Keys #00 EQU ,no-key JNZ2 ~Keys #00 EQU ^$no-key JNZ
~Keys #31 LTH ,no-key JNZ2 ~Keys #31 LTH ^$no-key JNZ
~Keys #33 GTH ,no-key JNZ2 ~Keys #33 GTH ^$no-key JNZ
( select ) ~Keys #31 SUB =bankview.mode ( select ) ~Keys #31 SUB =bankview.mode
( release ) #00 =Keys ( release ) #00 =Keys
,redraw JSR2 ,redraw JSR2
@no-key $no-key
~Controller.buttons #00 EQU ,no-ctrl JNZ2 ~Controller.buttons #00 EQU ^$no-ctrl JNZ
~Controller.buttons
DUP #10 EQU ^$no-ctrl-up JNZ
~tileview.addr #0080 ADD2 =tileview.addr $no-ctrl-up
DUP #20 EQU ^$no-ctrl-down JNZ
~tileview.addr #0080 SUB2 =tileview.addr $no-ctrl-down
DUP #40 EQU ^$no-ctrl-left JNZ
~tileview.addr 8+ =tileview.addr $no-ctrl-left
DUP #80 EQU ^$no-ctrl-right JNZ
~tileview.addr 8- =tileview.addr $no-ctrl-right
POP
~Controller.buttons #10 EQU ,no-ctrl-up JNZ2
~tileview.addr #0080 ADD2 =tileview.addr
@no-ctrl-up
~Controller.buttons #20 EQU ,no-ctrl-down JNZ2
~tileview.addr #0080 SUB2 =tileview.addr
@no-ctrl-down
~Controller.buttons #40 EQU ,no-ctrl-left JNZ2
~tileview.addr 8+ =tileview.addr
@no-ctrl-left
~Controller.buttons #80 EQU ,no-ctrl-right JNZ2
~tileview.addr 8- =tileview.addr
@no-ctrl-right
~tileview.addr #0800 DIV2 #0800 MUL2 =bankview.addr ~tileview.addr #0800 DIV2 #0800 MUL2 =bankview.addr
,redraw JSR2 ,redraw JSR2
@no-ctrl $no-ctrl
( mouse controls ) ( mouse controls )
~Mouse.state #00 EQU ,click-end JNZ2 ~Mouse.state #00 EQU ,$click-end JNZ2
( toolbar ) ( toolbar )
~Mouse.y ~bankview.y #0010 SUB2 SUB2 8/ #0000 NEQ2 ,no-toolbar-click JNZ2 ~Mouse.y ~bankview.y #0010 SUB2 SUB2 8/ #0000 NEQ2 ,$no-toolbar-click JNZ2
( brush ) ( brush )
~Mouse.x ~bankview.x SUB2 8/ #000d LTH2 ,no-brush-click JNZ2 ~Mouse.x ~bankview.x SUB2 8/ #000d LTH2 ^$no-brush-click JNZ
~Mouse.x ~bankview.x SUB2 8/ #000f GTH2 ,no-brush-click JNZ2 ~Mouse.x ~bankview.x SUB2 8/ #000f GTH2 ^$no-brush-click JNZ
( select ) ~mouse.x ~bankview.x SUB2 8/ #000d SUB2 SWP POP =bankview.mode ( select ) ~mouse.x ~bankview.x SUB2 8/ #000d SUB2 SWP POP =bankview.mode
( release ) #00 =Mouse.state ( release ) #00 =Mouse.state
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@no-brush-click $no-brush-click
~Mouse.x ~tileview.x SUB2 8/ #000e NEQU2 ^$no-load-click JNZ
~Mouse.x ~tileview.x SUB2 8/ #000e NEQU2 ,no-load-click JNZ2
( load ) ,filepath =File.name #0800 =File.length ~bankview.addr =File.load ( load ) ,filepath =File.name #0800 =File.length ~bankview.addr =File.load
( release ) #00 =Mouse.state ( release ) #00 =Mouse.state
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@no-load-click $no-load-click
~Mouse.x ~tileview.x SUB2 8/ #000f NEQU2 ^$no-save-click JNZ
~Mouse.x ~tileview.x SUB2 8/ #000f NEQU2 ,no-save-click JNZ2
( save ) ,filepath =File.name #0800 =File.length ~bankview.addr =File.save ( save ) ,filepath =File.name #0800 =File.length ~bankview.addr =File.save
( release ) #00 =Mouse.state ( release ) #00 =Mouse.state
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@no-save-click $no-save-click
$no-toolbar-click
@no-toolbar-click
( bankview ) ( bankview )
~Mouse.x ~bankview.x GTH2 ~Mouse.x ~bankview.x #0080 ADD2 LTH2 #0101 EQU2 ~Mouse.x ~bankview.x GTH2 ~Mouse.x ~bankview.x #0080 ADD2 LTH2 #0101 EQU2
~Mouse.y ~bankview.y GTH2 ~Mouse.y ~bankview.y #0080 ADD2 LTH2 #0101 EQU2 ~Mouse.y ~bankview.y GTH2 ~Mouse.y ~bankview.y #0080 ADD2 LTH2 #0101 EQU2
#0101 NEQ2 ,no-bank-click JNZ2 #0101 NEQ2 ,$no-bank-click JNZ2
~bankview.mode #01 NEQ ,not-copy-mode JNZ2 ~bankview.mode #01 NEQ ^$not-copy-mode JNZ
#00 =i #00 =i
@copy-loop NOP $copy-loop
( load ) ~tileview.addr ~i ADD PEK2 ( load ) ~tileview.addr ~i ADD PEK2
( get touch addr ) ( get touch addr )
~Mouse.x ~bankview.x SUB2 STEP8 ~Mouse.x ~bankview.x SUB2 STEP8
~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2 ~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
~bankview.addr ADD2 #00 ~i ADD2 POK2 ~bankview.addr ADD2 #00 ~i ADD2 POK2
( incr ) ~i #01 ADD =i ( incr ) ~i #01 ADD =i
~i #08 LTH ^copy-loop MUL JMP ~i #08 LTH ^$copy-loop JNZ
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@not-copy-mode $not-copy-mode
~bankview.mode #02 NEQ ,not-erase-mode JNZ2 ~bankview.mode #02 NEQ ^$not-erase-mode JNZ
#00 =i #00 =i
@erase-loop NOP $erase-loop
#00 #00
( get touch addr ) ( get touch addr )
~Mouse.x ~bankview.x SUB2 STEP8 ~Mouse.x ~bankview.x SUB2 STEP8
~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2 ~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
~bankview.addr ADD2 #00 ~i ADD2 POK2 ~bankview.addr ADD2 #00 ~i ADD2 POK2
( incr ) ~i #01 ADD =i ( incr ) ~i #01 ADD =i
~i #08 LTH ^erase-loop MUL JMP ~i #08 LTH ^$erase-loop JNZ
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@not-erase-mode $not-erase-mode
~Mouse.x ~bankview.x SUB2 STEP8 ~Mouse.x ~bankview.x SUB2 STEP8
~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2 ~Mouse.y ~bankview.y SUB2 STEP8 #0010 MUL2 ADD2
~bankview.addr ADD2 =tileview.addr ~bankview.addr ADD2 =tileview.addr
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@no-bank-click $no-bank-click
( tileview ) ( tileview )
~Mouse.x ~tileview.x GTH2 ~Mouse.x ~tileview.x #0080 ADD2 LTH2 #0101 EQU2 ~Mouse.x ~tileview.x GTH2 ~Mouse.x ~tileview.x #0080 ADD2 LTH2 #0101 EQU2
~Mouse.y ~tileview.y GTH2 ~Mouse.y ~tileview.y #0080 ADD2 LTH2 #0101 EQU2 ~Mouse.y ~tileview.y GTH2 ~Mouse.y ~tileview.y #0080 ADD2 LTH2 #0101 EQU2
#0101 NEQ2 ,no-tile-click JNZ2 #0101 NEQ2 ,$no-tile-click JNZ2
~Mouse.x ~tileview.x SUB2 STEP8 #0040 DIV2 ~Mouse.x ~tileview.x SUB2 STEP8 #0040 DIV2
~Mouse.y ~tileview.y SUB2 STEP8 #0040 DIV2 2* ADD2 ~Mouse.y ~tileview.y SUB2 STEP8 #0040 DIV2 2* ADD2
@ -172,40 +167,40 @@ BRK
~tileview.addr ADD2 =addr ( addr offset ) ~tileview.addr ADD2 =addr ( addr offset )
~Mouse.x ~tileview.x SUB2 ~Mouse.x ~tileview.x SUB2 #0040 DIV2 #0040 MUL2 SUB2 =pos.x ~Mouse.x ~tileview.x SUB2 ~Mouse.x ~tileview.x SUB2 #0040 DIV2 #0040 MUL2 SUB2 =pos.x
~Mouse.y ~tileview.y SUB2 ~Mouse.y ~tileview.y SUB2 #0040 DIV2 #0040 MUL2 SUB2 =pos.y ~Mouse.y ~tileview.y SUB2 ~Mouse.y ~tileview.y SUB2 #0040 DIV2 #0040 MUL2 SUB2 =pos.y
~Mouse.state #10 NEQ ,no-erase-mode JNZ2 ~Mouse.state #10 NEQ ^$no-erase-mode JNZ
( load ) ~addr ~pos.y 8/ ADD2 PEK2 ( load ) ~addr ~pos.y 8/ ADD2 PEK2
( mask ) #01 #07 ~pos.x 8/ SWP POP SUB SFL ( mask ) #01 #07 ~pos.x 8/ SWP POP SUB SFL
#ff EOR AND #ff EOR AND
( save ) ~addr ~pos.y 8/ ADD2 POK2 ( save ) ~addr ~pos.y 8/ ADD2 POK2
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@no-erase-mode $no-erase-mode
( load ) ~addr ~pos.y 8/ ADD2 PEK2 ( load ) ~addr ~pos.y 8/ ADD2 PEK2
( mask ) #01 #07 ~pos.x 8/ SWP POP SUB SFL ( mask ) #01 #07 ~pos.x 8/ SWP POP SUB SFL
ORA ORA
( save ) ~addr ~pos.y 8/ ADD2 POK2 ( save ) ~addr ~pos.y 8/ ADD2 POK2
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@no-tile-click $no-tile-click
( operations ) ( operations )
~Mouse.y ~tileview.y SUB2 8/ #000c NEQ2 ,no-operations JNZ2 ~Mouse.y ~tileview.y SUB2 8/ #000c NEQ2 ,$no-operations JNZ2
~Mouse.x ~tileview.x SUB2 8/ #0011 NEQ2 ,no-move-up JNZ2 ~Mouse.x ~tileview.x SUB2 8/ #0011 NEQ2 ^$no-move-up JNZ
,op_shiftup JSR2 ,op_shiftup JSR2
( release ) #00 =Mouse.state ( release ) #00 =Mouse.state
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@no-move-up $no-move-up
~Mouse.x ~tileview.x SUB2 8/ #0012 NEQ2 ,no-move-down JNZ2 ~Mouse.x ~tileview.x SUB2 8/ #0012 NEQ2 ^$no-move-down JNZ
,op_shiftdown JSR2 ,op_shiftdown JSR2
( release ) #00 =Mouse.state ( release ) #00 =Mouse.state
,redraw JSR2 ,click-end JMP2 ,redraw JSR2 ,$click-end JMP2
@no-move-down $no-move-down
@no-operations $no-operations
@click-end $click-end
,draw-cursor JSR2 ,draw-cursor JSR2
@ -297,7 +292,7 @@ RTN
( draw ) #02 =Sprite.color ( draw ) #02 =Sprite.color
~Sprite.addr 8+ =Sprite.addr ~Sprite.addr 8+ =Sprite.addr
( incr ) ~i #01 ADD =i ( incr ) ~i #01 ADD =i
~i #10 LTH ,$guides JNZ2 ~i #10 LTH ^$guides JNZ
( body ) ( body )
@ -364,7 +359,7 @@ RTN
$line-hor $line-hor
( draw ) #03 =Screen.color ( draw ) #03 =Screen.color
( incr ) ~Screen.x #0002 ADD2 =Screen.x ( incr ) ~Screen.x #0002 ADD2 =Screen.x
~Screen.x ~tileview.x #0082 ADD2 LTH2 ,$line-hor JNZ2 ~Screen.x ~tileview.x #0082 ADD2 LTH2 ^$line-hor JNZ
( line ver ) ( line ver )
~tileview.y =Screen.y ~tileview.y =Screen.y
@ -372,7 +367,7 @@ RTN
$line-ver $line-ver
( draw ) #03 =Screen.color ( draw ) #03 =Screen.color
( incr ) ~Screen.y #0002 ADD2 =Screen.y ( incr ) ~Screen.y #0002 ADD2 =Screen.y
~Screen.y ~tileview.y #0081 ADD2 LTH2 ,$line-ver JNZ2 ~Screen.y ~tileview.y #0081 ADD2 LTH2 ^$line-ver JNZ
( rewind ) ~tileview.addr #0018 SUB2 =tileview.addr ( rewind ) ~tileview.addr #0018 SUB2 =tileview.addr
@ -487,17 +482,17 @@ RTN
@line-rect ( x1 y1 x2 y2 color ) @line-rect ( x1 y1 x2 y2 color )
( load ) =color =rect.y2 =rect.x2 DUP2 =Screen.y =rect.y1 DUP2 =Screen.x =rect.x1 ( load ) =color =rect.y2 =rect.x2 DUP2 =Screen.y =rect.y1 DUP2 =Screen.x =rect.x1
$hor NOP $hor
( incr ) ~Screen.x ++ =Screen.x ( incr ) ~Screen.x ++ =Screen.x
( draw ) ~rect.y1 =Screen.y ~color =Screen.color ( draw ) ~rect.y1 =Screen.y ~color =Screen.color
( draw ) ~rect.y2 =Screen.y ~color =Screen.color ( draw ) ~rect.y2 =Screen.y ~color =Screen.color
~Screen.x ~rect.x2 LTH2 ^$hor MUL JMP ~Screen.x ~rect.x2 LTH2 ^$hor JNZ
~rect.y1 =Screen.y ~rect.y1 =Screen.y
$ver NOP $ver
( draw ) ~rect.x1 =Screen.x ~color =Screen.color ( draw ) ~rect.x1 =Screen.x ~color =Screen.color
( draw ) ~rect.x2 =Screen.x ~color =Screen.color ( draw ) ~rect.x2 =Screen.x ~color =Screen.color
( incr ) ~Screen.y ++ =Screen.y ( incr ) ~Screen.y ++ =Screen.y
~Screen.y ~rect.y2 ++ LTH2 ^$ver MUL JMP ~Screen.y ~rect.y2 ++ LTH2 ^$ver JNZ
RTN RTN