Started implementing 2-bit mode in nasu

This commit is contained in:
neauoire 2021-04-14 22:06:22 -07:00
parent 59f362f441
commit 2e496e8d55
6 changed files with 99 additions and 98 deletions

View File

@ -32,7 +32,7 @@ else
fi fi
echo "Assembling.." echo "Assembling.."
./bin/assembler projects/examples/gui.picture.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

@ -23,7 +23,7 @@
( load ) ,icn1_path =File.name #1800 =File.length ,image =File.load ( load ) ,icn1_path =File.name #1800 =File.length ,image =File.load
( draw ) #0008 #0008 #0100 #00c0 #27 ,image ,draw-icn JSR2 ( draw ) #0008 #0008 #0100 #00c0 #27 ,image ,draw-icn JSR2
( load ) ,icn2_path =File.name #1800 =File.length ,image =File.load ( load ) ,icn2_path =File.name #0800 =File.length ,image =File.load
( draw ) #0010 #0078 #0080 #0080 #27 ,image ,draw-icn JSR2 ( draw ) #0010 #0078 #0080 #0080 #27 ,image ,draw-icn JSR2
( load ) ,chr1_path =File.name #4000 =File.length ,image =File.load ( load ) ,chr1_path =File.name #4000 =File.length ,image =File.load

View File

@ -71,7 +71,7 @@ RTN
( draw ) ~rect.x1 =Screen.x ~color DUP =Screen.color ( draw ) ~rect.x1 =Screen.x ~color DUP =Screen.color
( draw ) ~rect.x2 =Screen.x =Screen.color ( draw ) ~rect.x2 =Screen.x =Screen.color
( incr ) SWP2 ++ SWP2 ( incr ) SWP2 ++ SWP2
OVR2 OVR2 LTH2 ^$ver JNZ OVR2 OVR2 LTS2 ^$ver JNZ
POP2 POP2 POP2 POP2
~rect.x1 ~rect.x2 ~rect.x1 ~rect.x2
$hor $hor
@ -79,7 +79,7 @@ RTN
( draw ) ~rect.y1 =Screen.y ~color DUP =Screen.color ( draw ) ~rect.y1 =Screen.y ~color DUP =Screen.color
( draw ) ~rect.y2 =Screen.y =Screen.color ( draw ) ~rect.y2 =Screen.y =Screen.color
( incr ) SWP2 ++ SWP2 ( incr ) SWP2 ++ SWP2
OVR2 OVR2 ++ LTH2 ^$hor JNZ OVR2 OVR2 ++ LTS2 ^$hor JNZ
POP2 POP2 POP2 POP2
RTN RTN
@ -95,10 +95,10 @@ RTN
( save ) OVR2 =Screen.x ( save ) OVR2 =Screen.x
( draw ) ~color =Screen.color ( draw ) ~color =Screen.color
( incr ) SWP2 ++ SWP2 ( incr ) SWP2 ++ SWP2
OVR2 OVR2 LTH2 ^$hor JNZ OVR2 OVR2 LTS2 ^$hor JNZ
POP2 POP2 STH2r STH2r POP2 POP2 STH2r STH2r
( incr ) SWP2 ++ SWP2 ( incr ) SWP2 ++ SWP2
OVR2 OVR2 LTH2 ^$ver JNZ OVR2 OVR2 LTS2 ^$ver JNZ
POP2 POP2 POP2 POP2 POP2 POP2 POP2 POP2
RTN RTN

Binary file not shown.

View File

@ -8,7 +8,6 @@
) )
%RTN { JMP2r } %RTN { JMP2r }
%RTN? { #00 EQU #02 JNZ STH2r JMP2 }
%STEP8 { #0033 SFT2 } %STEP8 { #0033 SFT2 }
%++ { #0001 ADD2 } %++ { #0001 ADD2 }
@ -16,10 +15,13 @@
%8/ { #0003 SFT2 } %8* { #0030 SFT2 } %8/ { #0003 SFT2 } %8* { #0030 SFT2 }
%8- { #0008 SUB2 } %8+ { #0008 ADD2 } %8- { #0008 SUB2 } %8+ { #0008 ADD2 }
%SFL { #40 SFT SFT } %SFL { #40 SFT SFT }
%MOD { DUP2 DIV MUL SUB }
%BANK { #2000 }
( variables ) ( variables )
;bankview { x 2 y 2 mode 1 addr 2 } ;bankview { x 2 y 2 mode 1 addr 2 depth 1 }
;tileview { x 2 y 2 addr 2 } ;tileview { x 2 y 2 addr 2 }
;rect { x1 2 y1 2 x2 2 y2 2 } ;rect { x1 2 y1 2 x2 2 y2 2 }
;mouse { x 2 y 2 } ;mouse { x 2 y 2 }
@ -42,21 +44,22 @@
|0200 |0200
( theme ) #e0fc =System.r #30cc =System.g #30ac =System.b ( theme ) #0efc =System.r #03cc =System.g #03ac =System.b
( vectors ) ,on-button =Controller.vector ( vectors ) ,on-button =Controller.vector
( vectors ) ,on-mouse =Mouse.vector ( vectors ) ,on-mouse =Mouse.vector
( vectors ) ,on-transfer =File.vector ( vectors ) ,on-transfer =File.vector
~Screen.width 2/ #008a SUB2 =bankview.x ~Screen.width 2/ #008a SUB2 =bankview.x
~Screen.height 2/ #003f SUB2 =bankview.y ~Screen.height 2/ #003f SUB2 =bankview.y
,bank =bankview.addr BANK =bankview.addr
~Screen.width 2/ #0002 ADD2 =tileview.x ~Screen.width 2/ #0002 ADD2 =tileview.x
~Screen.height 2/ #003f SUB2 =tileview.y ~Screen.height 2/ #003f SUB2 =tileview.y
,bank #0448 ADD2 =tileview.addr BANK #0448 ADD2 =tileview.addr
,filepath1 =File.name #0800 =File.length ,bank =File.load ,filepath1 =File.name #0800 =File.length BANK =File.load
,filepath2 =File.name #0800 =File.length ,bank #0800 ADD2 =File.load ,filepath2 =File.name #0800 =File.length BANK #0800 ADD2 =File.load
,filepath3 =File.name #1000 =File.length BANK #1000 ADD2 =File.load
,redraw JSR2 ,redraw JSR2
@ -101,19 +104,18 @@ BRK
~Mouse.x ~bankview.x SUB2 8/ #000d LTH2 ^$no-brush-click JNZ ~Mouse.x ~bankview.x SUB2 8/ #000d LTH2 ^$no-brush-click JNZ
~Mouse.x ~bankview.x SUB2 8/ #000f GTH2 ^$no-brush-click JNZ ~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
,redraw JSR2 ,$click-end JMP2
$no-brush-click $no-brush-click
~Mouse.x ~tileview.x SUB2 8/ #000e NEQ2 ^$no-load-click JNZ ~Mouse.x ~tileview.x SUB2 8/ #000e NEQ2 ^$no-load-click JNZ
( load ) ,filepath1 =File.name #0800 =File.length ~bankview.addr =File.load ( load ) ,filepath1 =File.name #0800 =File.length ~bankview.addr =File.load
( release ) #00 =Mouse.state
,redraw JSR2 ,$click-end JMP2
$no-load-click $no-load-click
~Mouse.x ~tileview.x SUB2 8/ #000f NEQ2 ^$no-save-click JNZ ~Mouse.x ~tileview.x SUB2 8/ #000f NEQ2 ^$no-save-click JNZ
( save ) ,filepath1 =File.name #0800 =File.length ~bankview.addr =File.save ( save ) ,filepath1 =File.name #0800 =File.length ~bankview.addr =File.save
$no-save-click
~Mouse.x ~bankview.x SUB2 8/ #0005 NEQ2 ^$no-toggle-depth JNZ
( toggle ) ~bankview.depth #00 EQU =bankview.depth
$no-toggle-depth
( release ) #00 =Mouse.state ( release ) #00 =Mouse.state
,redraw JSR2 ,$click-end JMP2 ,redraw JSR2 ,$click-end JMP2
$no-save-click
$no-toolbar-click $no-toolbar-click
( bankview ) ( bankview )
@ -253,8 +255,13 @@ RTN
( toolbar ) ( toolbar )
~bankview.x #0068 ADD2 =Screen.x
~bankview.y #0010 SUB2 =Screen.y ~bankview.y #0010 SUB2 =Screen.y
~bankview.x #0028 ADD2 =Screen.x
,depth_icn #00 ~bankview.depth 8* ADD2 =Screen.addr
#23 =Screen.color
~bankview.x #0068 ADD2 =Screen.x
,tool_selector =Screen.addr ,tool_selector =Screen.addr
#21 ~bankview.mode #00 EQU ADD =Screen.color #21 ~bankview.mode #00 EQU ADD =Screen.color
@ -290,23 +297,21 @@ RTN
( body ) ( body )
~bankview.x =Screen.x ~bankview.y =Screen.y ( load ) ~bankview.addr =Screen.addr
#00 =pt.x #00 =pt.y ~bankview.addr =Screen.addr ~bankview.y DUP2 #0080 ADD2
$ver $ver
#00 =pt.x ( save ) OVR2 =Screen.y
~bankview.x =Screen.x ~bankview.x DUP2 #0080 ADD2
$hor $hor
( draw ) #21 ( save ) OVR2 =Screen.x
~Screen.addr ~tileview.addr LTH2 ( draw ) #21 ~Screen.addr ~tileview.addr EQU2 #06 MUL ADD ~bankview.depth #2e MUL ADD =Screen.color
~Screen.addr ~tileview.addr #0018 ADD2 GTH2 ( incr ) SWP2 8+ SWP2
#0000 EQU2 #06 MUL ADD =Screen.color ( incr ) ~Screen.addr 8+ #00 ~bankview.depth #0008 MUL2 ADD2 =Screen.addr
( incr ) ~Screen.x 8+ =Screen.x OVR2 OVR2 LTH2 ^$hor JNZ
( incr ) ~Screen.addr 8+ =Screen.addr POP2 POP2
( incr ) ~pt.x #01 ADD =pt.x ( incr ) SWP2 8+ SWP2
~pt.x #10 LTH ,$hor JNZ2 OVR2 OVR2 LTH2 ^$ver JNZ
( incr ) ~pt.y #01 ADD =pt.y POP2 POP2
( incr ) ~Screen.y 8+ =Screen.y
~pt.y #10 LTH ,$ver JNZ2
RTN RTN
@ -431,11 +436,6 @@ RTN
@draw-cursor @draw-cursor
~mouse.x ~Mouse.x NEQ2
~mouse.y ~Mouse.y NEQ2
#0000 EQU2 RTN? ( Return if unchanged )
( clear last cursor ) ( clear last cursor )
~mouse.x =Screen.x ~mouse.x =Screen.x
~mouse.y =Screen.y ~mouse.y =Screen.y
@ -450,7 +450,7 @@ RTN
~mouse.x =Screen.x ~mouse.x =Screen.x
~mouse.y =Screen.y ~mouse.y =Screen.y
,tool_selector #00 ~bankview.mode #08 MUL ADD2 =Screen.addr ,tool_selector #00 ~bankview.mode #08 MUL ADD2 =Screen.addr
#32 =Screen.color #32 ~Mouse.state #00 NEQ ADD =Screen.color
RTN RTN
@ -473,34 +473,46 @@ RTN
( Utils ) ( Utils )
@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 DUP2 STH2 =rect.y2 =rect.x2 DUP2 STH2 =rect.y1 =rect.x1
$hor STH2r STH2r
( incr ) ~Screen.x ++ =Screen.x
( draw ) ~rect.y1 =Screen.y ~color =Screen.color
( draw ) ~rect.y2 =Screen.y ~color =Screen.color
~Screen.x ~rect.x2 LTH2 ^$hor JNZ
~rect.y1 =Screen.y
$ver $ver
( draw ) ~rect.x1 =Screen.x ~color =Screen.color ( save ) OVR2 =Screen.y
( draw ) ~rect.x2 =Screen.x ~color =Screen.color ( draw ) ~rect.x1 =Screen.x ~color DUP =Screen.color
( incr ) ~Screen.y ++ =Screen.y ( draw ) ~rect.x2 =Screen.x =Screen.color
~Screen.y ~rect.y2 ++ LTH2 ^$ver JNZ ( incr ) SWP2 ++ SWP2
OVR2 OVR2 LTS2 ^$ver JNZ
POP2 POP2
~rect.x1 ~rect.x2
$hor
( save ) OVR2 =Screen.x
( draw ) ~rect.y1 =Screen.y ~color DUP =Screen.color
( draw ) ~rect.y2 =Screen.y =Screen.color
( incr ) SWP2 ++ SWP2
OVR2 OVR2 ++ LTS2 ^$hor JNZ
POP2 POP2
RTN RTN
@tool_selector [ 80c0 e0f0 f8e0 1000 ] @tool_selector [ 80c0 e0f0 f8e0 1000 ]
@tool_hand [ 4040 4070 f8f8 f870 ] @tool_hand [ 4040 4070 f8f8 f870 ]
@tool_eraser [ 2050 b87c 3e1c 0800 ] @tool_eraser [ 2050 b87c 3e1c 0800 ]
@blank_icn [ 0000 0000 0000 0000 ] @blank_icn [
@cell1_icn [ 7cfe fefe fefe 7c00 ] 0000 0000 0000 0000
7cfe fefe fefe 7c00
]
@depth_icn [
00fe 8282 fe82 82fe
00fe 9292 fe92 92fe
]
@load_icn [ feaa d6aa d4aa f400 ] @load_icn [ feaa d6aa d4aa f400 ]
@save_icn [ fe82 8282 848a f400 ] @save_icn [ fe82 8282 848a f400 ]
@moveup_icn [ 0010 387c fe10 1000 ] @moveup_icn [ 0010 387c fe10 1000 ]
@movedown_icn [ 0010 1010 fe7c 3810 ] @movedown_icn [ 0010 1010 fe7c 3810 ]
@filepath1 [ projects/fonts/specter8.bit 00 ] @filepath1 [ projects/fonts/specter8.bit 00 ]
@filepath2 [ projects/pictures/cibo.bit 00 ] @filepath2 [ projects/pictures/cibo.bit 00 ]
@filepath3 [ projects/pictures/zerotwo10x10.chr 00 ]
@font_hex ( 0-F ) @font_hex ( 0-F )
[ [
@ -513,5 +525,3 @@ RTN
007c 8280 8080 827c 00fc 8282 8282 82fc 007c 8280 8080 827c 00fc 8282 8282 82fc
007c 8280 f080 827c 007c 8280 f080 8080 007c 8280 f080 827c 007c 8280 f080 8080
] ]
|2000 @bank [ ]

View File

@ -14,7 +14,6 @@
) )
%RTN { JMP2r } %RTN { JMP2r }
%RTN? { #00 EQU #02 JNZ STH2r JMP2 }
%ABS2 { DUP2 #000f SFT2 EQU #04 JNZ #ffff MUL2 } %ABS2 { DUP2 #000f SFT2 EQU #04 JNZ #ffff MUL2 }
%CLN2r { DUP2 STH2 } %CLN2r { DUP2 STH2 }
%STEP8 { #0033 SFT2 } %STEP8 { #0033 SFT2 }
@ -68,7 +67,6 @@
( vectors ) ,on-screen =Screen.vector ( vectors ) ,on-screen =Screen.vector
( vectors ) ,on-button =Controller.vector ( vectors ) ,on-button =Controller.vector
( vectors ) ,on-mouse =Mouse.vector ( vectors ) ,on-mouse =Mouse.vector
( vectors ) ,on-transfer =File.vector
~theme.r0 =System.r ~theme.g0 =System.g ~theme.b0 =System.b ~theme.r0 =System.r ~theme.g0 =System.g ~theme.b0 =System.b
@ -96,13 +94,6 @@
BRK BRK
@on-transfer ( -> )
,draw-canvas JSR2
( release ) #00 =Mouse.state
BRK
@on-screen ( -> ) @on-screen ( -> )
~document.edit #01 NEQ ^$no-edit JNZ ~document.edit #01 NEQ ^$no-edit JNZ
@ -365,7 +356,6 @@ BRK
~Screen.height #0002 DIV2 ~canvas.h 8* 2/ SUB2 =canvas.y1 ~Screen.height #0002 DIV2 ~canvas.h 8* 2/ SUB2 =canvas.y1
,fit-canvas JSR2 ,fit-canvas JSR2
,draw-foreground JSR2 ,draw-foreground JSR2
RTN RTN
@ -412,19 +402,6 @@ RTN
RTN RTN
@load-file ( path -- )
=File.name FILESIZE =File.length ,data =File.load
~File.name ,path.name ,strcpy JSR2
RTN
@save-file ( path -- )
=File.name FILESIZE =File.length ,data =File.save
RTN
@fit-canvas @fit-canvas
~canvas.w 8* ~canvas.x1 ADD2 =canvas.x2 ~canvas.w 8* ~canvas.x1 ADD2 =canvas.x2
@ -600,6 +577,22 @@ RTN
RTN RTN
( file )
@load-file ( path -- )
=File.name FILESIZE =File.length ,data =File.load
~File.name ,path.name ,strcpy JSR2
,draw-canvas JSR2
RTN
@save-file ( path -- )
=File.name FILESIZE =File.length ,data =File.save
RTN
( Drawing ) ( Drawing )
@redraw ( -- ) @redraw ( -- )
@ -650,13 +643,6 @@ RTN
@draw-cursor ( -- ) @draw-cursor ( -- )
~cursor.x ~Mouse.x NEQ2
~cursor.y ~Mouse.y NEQ2
#0000 EQU2
~Mouse.state
#00 NEQ
#0101 EQU2 RTN? ( Return if unchanged )
,blank_icn =Screen.addr ,blank_icn =Screen.addr
( clear brush size ) ( clear brush size )
~cursor.x #0003 SUB2 =Screen.x ~cursor.y #0003 SUB2 =Screen.y #30 =Screen.color ~cursor.x #0003 SUB2 =Screen.x ~cursor.y #0003 SUB2 =Screen.y #30 =Screen.color
@ -819,18 +805,23 @@ 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 DUP2 STH2 =rect.y2 =rect.x2 DUP2 STH2 =rect.y1 =rect.x1
$hor STH2r STH2r
( incr ) ~Screen.x ++ =Screen.x
( draw ) ~rect.y1 =Screen.y ~color =Screen.color
( draw ) ~rect.y2 =Screen.y ~color =Screen.color
~Screen.x ~rect.x2 NEQ2 ^$hor JNZ
~rect.y1 =Screen.y
$ver $ver
( draw ) ~rect.x1 =Screen.x ~color =Screen.color ( save ) OVR2 =Screen.y
( draw ) ~rect.x2 =Screen.x ~color =Screen.color ( draw ) ~rect.x1 =Screen.x ~color DUP =Screen.color
( incr ) ~Screen.y ++ =Screen.y ( draw ) ~rect.x2 =Screen.x =Screen.color
~Screen.y ~rect.y2 ++ NEQ2 ^$ver JNZ ( incr ) SWP2 ++ SWP2
OVR2 OVR2 LTS2 ^$ver JNZ
POP2 POP2
~rect.x1 ~rect.x2
$hor
( save ) OVR2 =Screen.x
( draw ) ~rect.y1 =Screen.y ~color DUP =Screen.color
( draw ) ~rect.y2 =Screen.y =Screen.color
( incr ) SWP2 ++ SWP2
OVR2 OVR2 ++ LTS2 ^$hor JNZ
POP2 POP2
RTN RTN