diff --git a/build.sh b/build.sh index 8201351..145a8be 100755 --- a/build.sh +++ b/build.sh @@ -15,7 +15,7 @@ clang-format -i src/debugger.c echo "Cleaning.." rm -f ./bin/uxnasm -rm -f ./bin/emulator +rm -f ./bin/uxnemu rm -f ./bin/debugger rm -f ./bin/boot.rom @@ -25,12 +25,20 @@ if [ "${1}" = '--debug' ]; then echo "[debug]" cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined src/assembler.c -o bin/uxnasm - cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined src/uxn.c src/devices/ppu.c src/devices/apu.c src/devices/mpu.c src/emulator.c -L/usr/local/lib -lSDL2 -lportmidi -o bin/emulator + cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined src/uxn.c src/devices/ppu.c src/devices/apu.c src/devices/mpu.c src/emulator.c -L/usr/local/lib -lSDL2 -lportmidi -o bin/uxnemu cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werror=implicit-int -Werror=incompatible-pointer-types -Werror=int-conversion -Wvla -g -Og -fsanitize=address -fsanitize=undefined src/uxn.c src/debugger.c -o bin/debugger else cc src/assembler.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o bin/uxnasm cc src/uxn.c src/debugger.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o bin/debugger - cc src/uxn.c src/devices/ppu.c src/devices/apu.c src/devices/mpu.c src/emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -lportmidi -o bin/emulator + cc src/uxn.c src/devices/ppu.c src/devices/apu.c src/devices/mpu.c src/emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -lportmidi -o bin/uxnemu +fi + +echo "Installing.." +if [ -d "$HOME/bin" ] && [ -e ./bin/uxnemu ] && [ -e ./bin/uxnasm ] +then + cp ./bin/uxnemu $HOME/bin + cp ./bin/uxnasm $HOME/bin + echo "Installed in $HOME/bin" fi echo "Assembling.." @@ -42,7 +50,7 @@ then echo "[cli]" ./bin/debugger bin/boot.rom else - ./bin/emulator bin/boot.rom + ./bin/uxnemu bin/boot.rom fi echo "Done." \ No newline at end of file diff --git a/projects/software/nasu.usm b/projects/software/nasu.usm deleted file mode 100644 index caf68d4..0000000 --- a/projects/software/nasu.usm +++ /dev/null @@ -1,948 +0,0 @@ -( - app/nasu : spritesheet editor - - arrows - move selection - ctrl+arrows - change page - left-click - add pixel - right-click - remove pixel - 1 2 3 - select brush - - TODO: - Copy in 2 bits mode, copies 2 tiles - Modify up to 4 pages - Save/load/rename - Select paint color for 2-bit mode -) - -%+ { ADD } %- { SUB } %* { MUL } %/ { DIV } -%< { LTH } %> { GTH } %= { EQU } %! { NEQ } -%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 } -%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 } - -%RTN { JMP2r } -%STEP8 { #0033 SFT2 } - -%SFL { #40 SFT SFT } -%MOD { DUP2 DIV MUL SUB } - -%TOB { SWP POP } %TOS { #00 SWP } - -%DEBUG { .Console/byte DEO #0a .Console/char DEO } -%DEBUG2 { .Console/short DEO2 #0a .Console/char DEO } - -%LTS2 { #8000 ADD2 SWP2 #8000 ADD2 GTH2 } -%GTS2 { #8000 ADD2 SWP2 #8000 ADD2 LTH2 } - -%SIZE-TO-RECT { - STH2 STH2 OVR2 STH2r ADD2 OVR2 STH2r ADD2 -} ( x y w h -- x1 y1 x2 y2 ) - -%SET-RECT { - DUP2 ROT2 SWP2 #0006 ADD2 STA2 - DUP2 ROT2 SWP2 #0004 ADD2 STA2 - DUP2 ROT2 SWP2 #0002 ADD2 STA2 - DUP2 ROT2 SWP2 STA2 - POP2 -} ( x1 y1 x2 y2 addr -- ) - -%BANK { #2000 } - -( devices ) - -|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ] -|10 @Console [ &vector $2 &pad $6 &char $1 &byte $1 &short $2 &string $2 ] -|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ] -|80 @Controller [ &vector $2 &button $1 &key $1 ] -|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ] -|a0 @File [ &vector $2 &success $2 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ] - -( variables ) - -|0000 - -@settings [ - &blending $1 - &depth $1 - &brush $1 - &page $2 - &tile $2 - &ratio $1 ] - -@frame [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 &width $2 &height $2 ] - -( interface ) -@bankview [ &x $2 &y $2 &mode $1 &selection $1 ] -@tileview [ &x $2 &y $2 ] - -@editview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] -@colorview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] -@blendview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] -@dataview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] -@preview [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] - -@rect [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ] -@mouse [ &x $2 &y $2 ] -@pt [ &x $1 &y $1 ] -@pos [ &x $2 &y $2 ] - -@color $1 -@i $1 - -( program ) - -|0100 ( -> ) - - ( theme ) - #0efc .System/r DEO2 - #03cc .System/g DEO2 - #03ac .System/b DEO2 - - ( vectors ) - ;on-button .Controller/vector DEO2 - ;on-mouse .Mouse/vector DEO2 - ;on-transfer .File/vector DEO2 - - ( set defaults ) - #0130 .frame/width STZ2 - #00a8 .frame/height STZ2 - #01 .settings/brush STZ - #32 .settings/ratio STZ - - .Screen/width DEI2 #0001 SFT2 .frame/width LDZ2 #0001 SFT2 SUB2 - .Screen/height DEI2 #0001 SFT2 .frame/height LDZ2 #0001 SFT2 SUB2 #0010 ADD2 - .frame/width LDZ2 .frame/height LDZ2 - SIZE-TO-RECT ;frame SET-RECT - - .frame/x1 LDZ2 #0010 ADD2 .bankview/x STZ2 - .frame/y1 LDZ2 .bankview/y STZ2 - BANK .settings/page STZ2 - - .frame/x2 LDZ2 #0098 SUB2 .tileview/x STZ2 - .frame/y1 LDZ2 .tileview/y STZ2 - BANK #0448 ADD2 .settings/tile STZ2 - - .frame/x2 LDZ2 #0010 SUB2 .frame/y1 LDZ2 #0010 #0080 SIZE-TO-RECT ;dataview SET-RECT - .frame/x1 LDZ2 #0010 ADD2 .frame/y2 LDZ2 #0020 SUB2 #0020 #0020 SIZE-TO-RECT ;blendview SET-RECT - .frame/x1 LDZ2 #0060 ADD2 .frame/y2 LDZ2 #0020 SUB2 #0020 #0020 SIZE-TO-RECT ;colorview SET-RECT - .frame/x1 LDZ2 #0038 ADD2 .frame/y2 LDZ2 #0020 SUB2 #0020 #0020 SIZE-TO-RECT ;preview SET-RECT - .frame/x2 LDZ2 #0098 SUB2 .frame/y1 LDZ2 #0080 #0080 SIZE-TO-RECT ;editview SET-RECT - - #01 .settings/blending STZ - - ;filepath1 .File/name DEO2 #0800 .File/length DEO2 BANK .File/load DEO2 - ;filepath2 .File/name DEO2 #0800 .File/length DEO2 BANK #0800 ADD2 .File/load DEO2 - ;filepath3 .File/name DEO2 #1000 .File/length DEO2 BANK #1000 ADD2 .File/load DEO2 - ;filepath4 .File/name DEO2 #1000 .File/length DEO2 BANK #2000 ADD2 .File/load DEO2 - ;filepath5 .File/name DEO2 #1000 .File/length DEO2 BANK #2800 ADD2 .File/load DEO2 - ;filepath6 .File/name DEO2 #1000 .File/length DEO2 BANK #3800 ADD2 .File/load DEO2 - - #40 DUP .bankview/selection STZ ;select-tile JSR2 - -BRK - -@on-transfer ( -> ) - - ;redraw JSR2 - -BRK - -@on-button ( -> ) - - ( skip ) .Controller/button DEI #00 NEQ #01 JCN [ BRK ] - - .Controller/button DEI #11 NEQ ,&no-pageup JCN .settings/page LDZ2 - #0800 SUB2 .settings/page STZ2 - ;redraw JSR2 - BRK &no-pageup - - .Controller/button DEI #21 NEQ ,&no-pagedown JCN .settings/page LDZ2 - #0800 ADD2 .settings/page STZ2 - ;redraw JSR2 - BRK &no-pagedown - - .Controller/button DEI #f0 AND - DUP #04 SFT #01 AND #01 NEQ ,&no-up JCN - ( move ) .bankview/selection LDZ #10 SUB .bankview/selection STZ &no-up - DUP #05 SFT #01 AND #01 NEQ ,&no-down JCN - ( move ) .bankview/selection LDZ #10 ADD .bankview/selection STZ &no-down - DUP #06 SFT #01 AND #01 NEQ ,&no-left JCN - ( move ) .bankview/selection LDZ #01 SUB .bankview/selection STZ &no-left - DUP #07 SFT #01 AND #01 NEQ ,&no-right JCN - ( move ) .bankview/selection LDZ #01 ADD .bankview/selection STZ &no-right - POP - - .bankview/selection LDZ ;select-tile JSR2 - -BRK - -@on-mouse ( -> ) - - ;draw-cursor JSR2 - - ( skip ) .Mouse/state DEI #00 NEQ #01 JCN [ BRK ] - - ( toolbar ) - .Mouse/y DEI2 .bankview/y LDZ2 #0010 SUB2 SUB2 #0008 DIV2 #0000 NEQ2 ;&no-toolbar-click JCN2 - ( brush ) - .Mouse/x DEI2 .bankview/x LDZ2 SUB2 #0008 DIV2 #000d LTH2 ,&no-brush-click JCN - .Mouse/x DEI2 .bankview/x LDZ2 SUB2 #0008 DIV2 #000f GTH2 ,&no-brush-click JCN - ( select ) .mouse/x LDZ2 .bankview/x LDZ2 SUB2 #0008 DIV2 #000d SUB2 TOB .bankview/mode STZ - &no-brush-click - .Mouse/x DEI2 .bankview/x LDZ2 SUB2 #0008 DIV2 #0005 NEQ2 ,&no-toggle-depth JCN - ;toggle-depth JSR2 - &no-toggle-depth - ( release ) #00 .Mouse/state DEO - ;redraw JSR2 BRK - &no-toolbar-click - - ( bankview ) - .Mouse/x DEI2 .bankview/x LDZ2 GTH2 .Mouse/x DEI2 .bankview/x LDZ2 #0080 ADD2 LTH2 #0101 EQU2 - .Mouse/y DEI2 .bankview/y LDZ2 GTH2 .Mouse/y DEI2 .bankview/y LDZ2 #0080 ADD2 LTH2 #0101 EQU2 - #0101 EQU2 ;on-touch-bankview JCN2 - - ( tileview ) - .Mouse/x DEI2 .tileview/x LDZ2 GTH2 .Mouse/x DEI2 .tileview/x LDZ2 #0080 ADD2 LTH2 #0101 EQU2 - .Mouse/y DEI2 .tileview/y LDZ2 GTH2 .Mouse/y DEI2 .tileview/y LDZ2 #0080 ADD2 LTH2 #0101 EQU2 - #0101 EQU2 ;on-touch-tileview JCN2 - - ( editview ) - .Mouse/x DEI2 DUP2 .editview/x1 LDZ2 GTH2 ROT ROT .editview/x2 LDZ2 LTH2 #0101 EQU2 - .Mouse/y DEI2 DUP2 .editview/y1 LDZ2 GTH2 ROT ROT .editview/y2 LDZ2 LTH2 #0101 EQU2 - #0101 EQU2 ;on-touch-editview JCN2 - - ( dataview ) - .Mouse/x DEI2 DUP2 .dataview/x1 LDZ2 GTH2 ROT ROT .dataview/x2 LDZ2 LTH2 #0101 EQU2 - .Mouse/y DEI2 DUP2 .dataview/y1 LDZ2 GTH2 ROT ROT .dataview/y2 LDZ2 LTH2 #0101 EQU2 - #0101 EQU2 ;on-touch-dataview JCN2 - - ( blendbiew ) - .Mouse/x DEI2 DUP2 .blendview/x1 LDZ2 GTH2 ROT ROT .blendview/x2 LDZ2 LTH2 #0101 EQU2 - .Mouse/y DEI2 DUP2 .blendview/y1 LDZ2 GTH2 ROT ROT .blendview/y2 LDZ2 LTH2 #0101 EQU2 - #0101 EQU2 ;on-touch-blendview JCN2 - - ( colorview ) - .Mouse/x DEI2 DUP2 .colorview/x1 LDZ2 GTH2 ROT ROT .colorview/x2 LDZ2 LTH2 #0101 EQU2 - .Mouse/y DEI2 DUP2 .colorview/y1 LDZ2 GTH2 ROT ROT .colorview/y2 LDZ2 LTH2 #0101 EQU2 - #0101 EQU2 ;on-touch-colorview JCN2 - - ( preview ) - .Mouse/x DEI2 DUP2 .preview/x1 LDZ2 GTH2 ROT ROT .preview/x2 LDZ2 LTH2 #0101 EQU2 - .Mouse/y DEI2 DUP2 .preview/y1 LDZ2 GTH2 ROT ROT .preview/y2 LDZ2 LTH2 #0101 EQU2 - #0101 EQU2 ;on-touch-preview JCN2 - -BRK - -@on-touch-bankview ( -> ) - - .bankview/mode LDZ #01 NEQ ,¬-copy-mode JCN - #00 .i STZ - ©-loop - ( load ) .settings/tile LDZ2 .i LDZ ADD LDA - ( get touch addr ) - .Mouse/x DEI2 .bankview/x LDZ2 SUB2 STEP8 - .Mouse/y DEI2 .bankview/y LDZ2 SUB2 STEP8 #0010 MUL2 ADD2 - ( 2-bit mode ) #00 .settings/depth LDZ #01 ADD MUL2 - .settings/page LDZ2 ADD2 #00 .i LDZ ADD2 STA - ( incr ) .i LDZ #01 ADD .i STZ - .i LDZ #08 LTH ,©-loop JCN - ;redraw JSR2 BRK - ¬-copy-mode - - .bankview/mode LDZ #02 NEQ ,¬-erase-mode JCN - #00 .i STZ - &erase-loop - #00 - ( get touch addr ) - .Mouse/x DEI2 .bankview/x LDZ2 SUB2 STEP8 - .Mouse/y DEI2 .bankview/y LDZ2 SUB2 STEP8 #0010 MUL2 ADD2 - ( 2-bit mode ) #00 .settings/depth LDZ #01 ADD MUL2 - .settings/page LDZ2 ADD2 #00 .i LDZ ADD2 STA - ( incr ) .i LDZ #01 ADD .i STZ - .i LDZ #08 LTH ,&erase-loop JCN - ;redraw JSR2 BRK - ¬-erase-mode - - ( select ) - - .Mouse/x DEI2 .bankview/x LDZ2 SUB2 #0008 DIV2 TOB - .Mouse/y DEI2 .bankview/y LDZ2 SUB2 #0008 DIV2 TOB #40 SFT ADD - DUP .bankview/selection STZ - ;select-tile JSR2 - -BRK - -@on-touch-tileview ( -> ) - - -BRK - -@on-touch-editview ( -> ) - - #aa DEBUG - -BRK - -@on-touch-dataview ( -> ) - - .Mouse/y DEI2 .dataview/y1 LDZ2 SUB2 STEP8 TOB #60 EQU ,&skip JCN BRK &skip - .Mouse/x DEI2 .dataview/x1 LDZ2 SUB2 #0008 DIV2 TOB - DUP #00 NEQ ,&no-move-up JCN - ;op_shiftup JSR2 - ( release ) #00 .Mouse/state DEO - ;redraw JSR2 POP BRK &no-move-up - DUP #01 NEQ ,&no-move-down JCN - ;op_shiftdown JSR2 - ( release ) #00 .Mouse/state DEO - ;redraw JSR2 POP BRK &no-move-down - POP - -BRK - -@on-touch-blendview ( -> ) - - .Mouse/x DEI2 .blendview/x1 LDZ2 SUB2 #0008 DIV2 TOB - .Mouse/y DEI2 .blendview/y1 LDZ2 SUB2 #0008 DIV2 TOB #04 MUL ADD - .settings/blending STZ - ( release ) #00 .Mouse/state DEO - ;redraw JSR2 - -BRK - -@on-touch-colorview ( -> ) - - ( channel ) .Mouse/y DEI2 .colorview/y1 LDZ2 SUB2 #0008 DIV2 TOB STH - ( rgb ) .Mouse/x DEI2 .colorview/x1 LDZ2 SUB2 #0008 DIV2 TOB - DUP #00 NEQ ,&no-brush JCN - DUPr STHr .settings/brush STZ &no-brush - DUP #01 NEQ ,&no-red JCN - DUPr STHr .System/r ;set-color JSR2 &no-red - DUP #02 NEQ ,&no-green JCN - DUPr STHr .System/g ;set-color JSR2 &no-green - DUP #03 NEQ ,&no-blue JCN - DUPr STHr .System/b ;set-color JSR2 &no-blue - POP POPr - ( release ) #00 .Mouse/state DEO - ;redraw JSR2 - -BRK - -@on-touch-preview ( -> ) - - ( y ) .Mouse/y DEI2 .preview/y1 LDZ2 SUB2 #0008 DIV2 TOB - ( x ) .Mouse/x DEI2 .preview/x1 LDZ2 SUB2 #0008 DIV2 TOB - - #40 SFT ADD #11 ADD - .settings/ratio STZ - - ( release ) #00 .Mouse/state DEO - ;redraw JSR2 - -BRK - -@set-color ( color rgb -- ) - - STH - DUP #00 NEQ ,&no-red0 JCN - DUPr STHr DEI DUP #04 SFT #01 ADD - ( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD - ( resume ) #40 SFT SWP #0f AND ADD DUPr STHr DEO - &no-red0 - DUP #01 NEQ ,&no-red1 JCN - DUPr STHr DEI DUP #0f AND #01 ADD - ( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD - ( resume ) #0f AND SWP #f0 AND ADD DUPr STHr DEO - &no-red1 - DUP #02 NEQ ,&no-red2 JCN - DUPr STHr #01 ADD DEI DUP #04 SFT #01 ADD - ( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD - ( resume ) #40 SFT SWP #0f AND ADD DUPr STHr #01 ADD DEO - &no-red2 - DUP #03 NEQ ,&no-red3 JCN - DUPr STHr #01 ADD DEI DUP #0f AND #01 ADD - ( add/sub ) .Mouse/state DEI #10 EQU #fe MUL ADD - ( resume ) #0f AND SWP #f0 AND ADD DUPr STHr #01 ADD DEO - &no-red3 - POP - POPr - -RTN - -@select-tile ( pos -- ) - - ( x y ) DUP #0f AND SWP #04 SFT - ( y ) #10 MOD #10 MUL #00 SWP #0008 MUL2 - ( x ) ROT #10 MOD #00 SWP #0008 MUL2 ADD2 - ( 2-bit mode ) #00 .settings/depth LDZ #01 ADD MUL2 - ( offset ) .settings/page LDZ2 ADD2 .settings/tile STZ2 - ;redraw JSR2 - -RTN - -@toggle-depth ( -- ) - - .bankview/selection LDZ - .settings/depth LDZ #00 EQU .settings/depth STZ - ;select-tile JSR2 - -RTN - -@op_shiftup ( -- ) - - .settings/tile LDZ2 LDA - .settings/tile LDZ2 #0001 ADD2 LDA .settings/tile LDZ2 STA - .settings/tile LDZ2 #0002 ADD2 LDA .settings/tile LDZ2 #0001 ADD2 STA - .settings/tile LDZ2 #0003 ADD2 LDA .settings/tile LDZ2 #0002 ADD2 STA - .settings/tile LDZ2 #0004 ADD2 LDA .settings/tile LDZ2 #0003 ADD2 STA - .settings/tile LDZ2 #0005 ADD2 LDA .settings/tile LDZ2 #0004 ADD2 STA - .settings/tile LDZ2 #0006 ADD2 LDA .settings/tile LDZ2 #0005 ADD2 STA - .settings/tile LDZ2 #0007 ADD2 LDA .settings/tile LDZ2 #0006 ADD2 STA - .settings/tile LDZ2 #0007 ADD2 STA - -RTN - -@op_shiftdown ( -- ) - - .settings/tile LDZ2 #0007 ADD2 LDA - .settings/tile LDZ2 #0006 ADD2 LDA .settings/tile LDZ2 #0007 ADD2 STA - .settings/tile LDZ2 #0005 ADD2 LDA .settings/tile LDZ2 #0006 ADD2 STA - .settings/tile LDZ2 #0004 ADD2 LDA .settings/tile LDZ2 #0005 ADD2 STA - .settings/tile LDZ2 #0003 ADD2 LDA .settings/tile LDZ2 #0004 ADD2 STA - .settings/tile LDZ2 #0002 ADD2 LDA .settings/tile LDZ2 #0003 ADD2 STA - .settings/tile LDZ2 #0001 ADD2 LDA .settings/tile LDZ2 #0002 ADD2 STA - .settings/tile LDZ2 LDA .settings/tile LDZ2 #0001 ADD2 STA - .settings/tile LDZ2 STA - -RTN - -@redraw ( -- ) - - ;draw-bankview JSR2 - ;draw-editview JSR2 - ;draw-blendview JSR2 - ;draw-colorview JSR2 - ;draw-dataview JSR2 - ;draw-preview JSR2 - -RTN - -@draw-bankview ( -- ) - - .bankview/x LDZ2 #0002 SUB2 .bankview/y LDZ2 #0002 SUB2 .bankview/x LDZ2 #0081 ADD2 .bankview/y LDZ2 #0081 ADD2 #03 ;line-rect JSR2 - - ( position ) - - .bankview/x LDZ2 .Screen/x DEO2 - .bankview/y LDZ2 #0010 SUB2 .Screen/y DEO2 - .settings/page LDZ2 #22 ;draw-short JSR2 - - ( toolbar ) - - .bankview/y LDZ2 #0010 SUB2 .Screen/y DEO2 - - .bankview/x LDZ2 #0028 ADD2 .Screen/x DEO2 - ;depth_icns #00 .settings/depth LDZ #0008 MUL2 ADD2 .Screen/addr DEO2 - #23 .Screen/color DEO - - .bankview/x LDZ2 #0068 ADD2 .Screen/x DEO2 - ;tool_selector .Screen/addr DEO2 - #21 .bankview/mode LDZ #00 EQU ADD .Screen/color DEO - - .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 - ;tool_hand .Screen/addr DEO2 - #21 .bankview/mode LDZ #01 EQU ADD .Screen/color DEO - - .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 - ;tool_eraser .Screen/addr DEO2 - #21 .bankview/mode LDZ #02 EQU ADD .Screen/color DEO - - ( guides ) - - .bankview/x LDZ2 #0010 SUB2 .Screen/x DEO2 - .bankview/y LDZ2 .Screen/y DEO2 - ;font-hex .Screen/addr DEO2 - #00 #10 - &guides - ( draw ) OVR .bankview/selection LDZ #04 SFT EQU #22 ADD .Screen/color DEO - .Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2 - .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 - SWP #01 ADD SWP - DUP2 LTH ,&guides JCN - POP2 - - ( draw page ) - - ( load ) .settings/page LDZ2 .Screen/addr DEO2 - .bankview/y LDZ2 DUP2 #0080 ADD2 - &ver - ( save ) OVR2 .Screen/y DEO2 - .bankview/x LDZ2 DUP2 #0080 ADD2 - &hor - ( save ) OVR2 .Screen/x DEO2 - ( get selected ) .Screen/addr DEI2 .settings/tile LDZ2 EQU2 - ( get blending ) .settings/blending LDZ - ( get depth ) .settings/depth LDZ #20 MUL - ( draw ) #20 ADD ADD ADD .Screen/color DEO - ( incr ) SWP2 #0008 ADD2 SWP2 - ( incr ) .Screen/addr DEI2 #0008 ADD2 #00 .settings/depth LDZ #0008 MUL2 ADD2 .Screen/addr DEO2 - OVR2 OVR2 LTH2 ,&hor JCN - POP2 POP2 - ( incr ) SWP2 #0008 ADD2 SWP2 - OVR2 OVR2 LTH2 ,&ver JCN - POP2 POP2 - -RTN - -@draw-tileview ( -- ) - - .tileview/x LDZ2 #0002 SUB2 .tileview/y LDZ2 #0002 SUB2 .tileview/x LDZ2 #0080 ADD2 .tileview/y LDZ2 #0081 ADD2 #03 ;line-rect JSR2 - - .tileview/x LDZ2 #0028 ADD2 .Screen/x DEO2 - .tileview/y LDZ2 #0010 SUB2 .Screen/y DEO2 - .settings/tile LDZ2 .Screen/addr DEO2 - - ( get blending ) .settings/blending LDZ - ( get depth ) .settings/depth LDZ #20 MUL - ( draw ) #20 ADD ADD .Screen/color DEO - - ( position ) - - .tileview/x LDZ2 .Screen/x DEO2 - .tileview/y LDZ2 #0010 SUB2 .Screen/y DEO2 - .settings/tile LDZ2 #22 ;draw-short JSR2 - - ( body ) - - .tileview/x LDZ2 .Screen/x DEO2 - .tileview/y LDZ2 .Screen/y DEO2 - .settings/tile LDZ2 .settings/tile STZ2 - ;draw-tileview-icn JSR2 - - .tileview/x LDZ2 #0040 ADD2 .Screen/x DEO2 - .tileview/y LDZ2 .Screen/y DEO2 - .settings/tile LDZ2 #0008 ADD2 .settings/tile STZ2 - ;draw-tileview-icn JSR2 - - .tileview/x LDZ2 .Screen/x DEO2 - .tileview/y LDZ2 #0040 ADD2 .Screen/y DEO2 - .settings/tile LDZ2 #0008 ADD2 .settings/tile STZ2 - ;draw-tileview-icn JSR2 - - .tileview/x LDZ2 #0040 ADD2 .Screen/x DEO2 - .tileview/y LDZ2 #0040 ADD2 .Screen/y DEO2 - .settings/tile LDZ2 #0008 ADD2 .settings/tile STZ2 - ;draw-tileview-icn JSR2 - - ( line hor ) - .tileview/y LDZ2 #003f ADD2 .Screen/y DEO2 - .tileview/x LDZ2 .Screen/x DEO2 - &line-hor - ( draw ) #03 .Screen/color DEO - ( incr ) .Screen/x DEI2 #0002 ADD2 .Screen/x DEO2 - .Screen/x DEI2 .tileview/x LDZ2 #0082 ADD2 LTH2 ,&line-hor JCN - - ( line ver ) - .tileview/y LDZ2 .Screen/y DEO2 - .tileview/x LDZ2 #003f ADD2 .Screen/x DEO2 - &line-ver - ( draw ) #03 .Screen/color DEO - ( incr ) .Screen/y DEI2 #0002 ADD2 .Screen/y DEO2 - .Screen/y DEI2 .tileview/y LDZ2 #0081 ADD2 LTH2 ,&line-ver JCN - - ( rewind ) .settings/tile LDZ2 #0018 SUB2 .settings/tile STZ2 - -RTN - -@draw-editview ( -- ) - - .editview/x1 LDZ2 #0002 SUB2 .editview/y1 LDZ2 #0002 SUB2 .editview/x2 LDZ2 #0001 ADD2 .editview/y2 LDZ2 #0001 ADD2 #03 ;line-rect JSR2 - - ( position ) - - .editview/x1 LDZ2 .Screen/x DEO2 - .editview/y1 LDZ2 #0010 SUB2 .Screen/y DEO2 - .settings/tile LDZ2 #22 ;draw-short JSR2 - - ( tiles ) - .settings/tile LDZ2 DUP2 STH2 .Screen/addr DEO2 - #00 #04 - &ver - OVR #08 MUL TOS #0004 MUL2 .editview/y1 LDZ2 ADD2 .Screen/y DEO2 - #00 #04 - &hor - OVR #08 MUL TOS #0004 MUL2 .editview/x1 LDZ2 ADD2 .Screen/x DEO2 - ( get x,y ) - SWP2 OVR STH SWP2 OVR STHr - ( check if within ratio ) - .settings/ratio LDZ #0f AND LTH STH - .settings/ratio LDZ #04 SFT LTH STHr - #0101 NEQ2 ,&outside JCN - - ( get tile ) DUP2r STH2r .Screen/addr DEO2 - - ( draw zoomed tile ) - #01 ;draw-tile JSR2 - - ( incr ) STH2r #0008 ADD2 STH2 - ,&resume JMP - &outside - ;halftone_icn .Screen/addr DEO2 - #23 .Screen/color DEO - #00 ;draw-tile JSR2 - &resume - ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&hor JCN - POP2 - ( incr ) SWP #01 ADD SWP - DUP2 LTH ;&ver JCN2 - POP2 - POP2r - - ( grid ) - .editview/x1 LDZ2 DUP2 #0080 ADD2 .editview/y1 LDZ2 #0020 ADD2 #03 ;line-hor JSR2 - .editview/x1 LDZ2 DUP2 #0080 ADD2 .editview/y1 LDZ2 #0040 ADD2 #03 ;line-hor JSR2 - .editview/x1 LDZ2 DUP2 #0080 ADD2 .editview/y1 LDZ2 #0060 ADD2 #03 ;line-hor JSR2 - .editview/x1 LDZ2 #0020 ADD2 .editview/y1 LDZ2 DUP2 #0080 ADD2 #03 ;line-ver JSR2 - .editview/x1 LDZ2 #0040 ADD2 .editview/y1 LDZ2 DUP2 #0080 ADD2 #03 ;line-ver JSR2 - .editview/x1 LDZ2 #0060 ADD2 .editview/y1 LDZ2 DUP2 #0080 ADD2 #03 ;line-ver JSR2 - -RTN - -@draw-tile ( color -- ) - - ( TODO: complete ) - STH - #00 #20 - &ver - #00 #20 - &hor - - ( get x,y ) - SWP2 OVR STH SWP2 OVR STHr - - ( get address ) - .Screen/addr DEI2 - - ( after this, ADDR XY ) - SWP2 SWP STH - - - ( got sprite line ) - #04 DIV TOS ADD2 LDA - - ( get pixel ) - STHr #04 DIV - #07 SWP SUB SFT #01 AND - - .Screen/color DEO - - #0001 .Screen/x DEI2 ADD2 .Screen/x DEO2 - ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&hor JCN - POP2 - #0001 .Screen/y DEI2 ADD2 .Screen/y DEO2 - .Screen/x DEI2 #0020 SUB2 .Screen/x DEO2 - ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&ver JCN - POP2 - .Screen/y DEI2 #0020 SUB2 .Screen/y DEO2 - POPr - -RTN - -@draw-tileview-icn ( -- ) - - #00 .pt/x STZ #00 .pt/y STZ - &ver - #00 .pt/x STZ - &hor - ( get bit ) - ;blank_icn #00 - .settings/tile LDZ2 #00 .pt/y LDZ ADD2 LDA #07 .pt/x LDZ SUB SFT #01 AND ( get bit ) - #0008 MUL2 ADD2 .Screen/addr DEO2 ( add *8 ) - ( draw ) #21 .Screen/color DEO - ( incr ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 - ( incr ) .pt/x LDZ #01 ADD .pt/x STZ - .pt/x LDZ #08 LTH ;&hor JCN2 - ( incr ) .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 - ( incr ) .pt/y LDZ #01 ADD .pt/y STZ - .Screen/x DEI2 #0040 SUB2 .Screen/x DEO2 - .pt/y LDZ #08 LTH ;&ver JCN2 - -RTN - -@draw-blendview ( -- ) - - ( .blendview/x1 LDZ2 #0002 SUB2 .blendview/y1 LDZ2 #0002 SUB2 .blendview/x2 LDZ2 #0001 ADD2 .blendview/y2 LDZ2 #0001 ADD2 #03 ;line-rect JSR2 ) - - .settings/tile LDZ2 .Screen/addr DEO2 - #00 #10 - &loop - OVR #04 MOD #00 SWP #0008 MUL2 .blendview/x1 LDZ2 ADD2 .Screen/x DEO2 - OVR #04 DIV #00 SWP #0008 MUL2 .blendview/y1 LDZ2 ADD2 .Screen/y DEO2 - #20 .Screen/color DEO - OVR #20 ADD .settings/depth LDZ #20 MUL ADD .Screen/color DEO - SWP #01 ADD SWP - DUP2 LTH ,&loop JCN - POP2 - - .blendview/x1 LDZ2 .Screen/x DEO2 - .blendview/y2 LDZ2 #0001 ADD2 .Screen/y DEO2 - ( get blending ) .settings/blending LDZ - ( get depth ) .settings/depth LDZ #20 MUL - ( draw ) #20 ADD ADD #21 ;draw-byte JSR2 - -RTN - -@draw-dataview ( -- ) - - ( bytes ) - - .tileview/y LDZ2 #0018 ADD2 .Screen/y DEO2 - #00 .i STZ - &bytes - .tileview/x LDZ2 #0088 ADD2 .Screen/x DEO2 - .settings/tile LDZ2 #00 .i LDZ ADD2 LDA #22 ;draw-byte JSR2 - ( incr ) .i LDZ #01 ADD .i STZ - ( incr ) .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 - .i LDZ #08 LTH ;&bytes JCN2 - - ( operations ) - - .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 - ;movedown_icn .Screen/addr DEO2 - #21 .Screen/color DEO - .Screen/x DEI2 #0008 SUB2 .Screen/x DEO2 - ;moveup_icn .Screen/addr DEO2 - #21 .Screen/color DEO - - ( draw tiles 2x2 ) - .tileview/y LDZ2 .Screen/y DEO2 - #00 .pt/x STZ #00 .pt/y STZ .settings/tile LDZ2 .Screen/addr DEO2 - - &tiles-ver - #00 .pt/x STZ - .tileview/x LDZ2 #0088 ADD2 .Screen/x DEO2 - &tiles-hor - ( draw ) #23 .Screen/color DEO - ( incr ) .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 - ( incr ) .Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2 - ( incr ) .pt/x LDZ #01 ADD .pt/x STZ - .pt/x LDZ #02 LTH ;&tiles-hor JCN2 - ( incr ) .pt/y LDZ #01 ADD .pt/y STZ - ( incr ) .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 - .pt/y LDZ #02 LTH ;&tiles-ver JCN2 - -RTN - -@draw-colorview ( -- ) - - .colorview/y1 LDZ2 #18 ADD .Screen/y DEO2 - .colorview/x1 LDZ2 #08 ADD .Screen/x DEO2 - .System/r DEI2 ;draw-color-code JSR2 - .colorview/y1 LDZ2 #18 ADD .Screen/y DEO2 - .colorview/x1 LDZ2 #10 ADD .Screen/x DEO2 - .System/g DEI2 ;draw-color-code JSR2 - .colorview/y1 LDZ2 #18 ADD .Screen/y DEO2 - .colorview/x1 LDZ2 #18 ADD .Screen/x DEO2 - .System/b DEI2 ;draw-color-code JSR2 - - .colorview/x1 LDZ2 .Screen/x DEO2 - ;circle_icns .Screen/addr DEO2 - - #00 #04 - &loop - OVR .settings/brush LDZ EQU #00 SWP #0008 MUL2 ;circle_icns ADD2 .Screen/addr DEO2 - OVR .colorview/y1 LDZ2 ROT #00 SWP #0008 MUL2 ADD2 .Screen/y DEO2 - OVR #20 ADD .Screen/color DEO - SWP #01 ADD SWP - DUP2 LTH ,&loop JCN - POP2 - -RTN - -@draw-preview ( -- ) - - ( stash address ) - .settings/tile LDZ2 DUP2 STH2 .Screen/addr DEO2 - #00 #04 - &ver - OVR #08 MUL TOS .preview/y1 LDZ2 ADD2 .Screen/y DEO2 - #00 #04 - &hor - OVR #08 MUL TOS .preview/x1 LDZ2 ADD2 .Screen/x DEO2 - ( get x,y ) - SWP2 OVR STH SWP2 OVR STHr - ( check if within ratio ) - .settings/ratio LDZ #0f AND LTH STH - .settings/ratio LDZ #04 SFT LTH STHr - #0101 NEQ2 ,&outside JCN - ( get tile ) DUP2r STH2r .Screen/addr DEO2 - ( get blending ) .settings/blending LDZ - ( get depth ) .settings/depth LDZ #20 MUL - ( draw ) #20 ADD ADD .Screen/color DEO - ( incr ) STH2r #0008 [ .settings/depth LDZ #08 MUL TOS ADD2 ] ADD2 STH2 - ,&resume JMP - &outside - ;halftone_icn .Screen/addr DEO2 - #23 .Screen/color DEO - &resume - ( incr ) SWP #01 ADD SWP - DUP2 LTH ,&hor JCN - POP2 - ( incr ) SWP #01 ADD SWP - DUP2 LTH ;&ver JCN2 - POP2 - POP2r - .preview/x1 LDZ2 #0001 SUB2 .Screen/x DEO2 - .preview/y2 LDZ2 #0001 ADD2 .Screen/y DEO2 - .settings/ratio LDZ #23 ;draw-byte JSR2 - -RTN - -@draw-color-code ( color* -- ) - - DUP ;font-hex ROT #0f AND #08 MUL #00 SWP ADD2 .Screen/addr DEO2 - ( draw ) #22 .Screen/color DEO - .colorview/y1 LDZ2 #10 ADD .Screen/y DEO2 - ;font-hex ROT #04 SFT #08 MUL #00 SWP ADD2 .Screen/addr DEO2 - ( draw ) #22 .Screen/color DEO - .colorview/y1 LDZ2 #08 ADD .Screen/y DEO2 - DUP ;font-hex ROT #0f AND #08 MUL #00 SWP ADD2 .Screen/addr DEO2 - ( draw ) #22 .Screen/color DEO - .colorview/y1 LDZ2 .Screen/y DEO2 - ;font-hex ROT #04 SFT #08 MUL #00 SWP ADD2 .Screen/addr DEO2 - ( draw ) #22 .Screen/color DEO - -RTN - -@draw-cursor ( -- ) - - ( clear last cursor ) - .mouse/x LDZ2 .Screen/x DEO2 - .mouse/y LDZ2 .Screen/y DEO2 - #30 .Screen/color DEO - - ( record mouse positions ) - .Mouse/x DEI2 .mouse/x STZ2 - .Mouse/y DEI2 .mouse/y STZ2 - - ( draw new cursor ) - .mouse/x LDZ2 .Screen/x DEO2 - .mouse/y LDZ2 .Screen/y DEO2 - ;tool_selector #00 .bankview/mode LDZ #08 MUL ADD2 .Screen/addr DEO2 - #32 .Mouse/state DEI #00 NEQ ADD .Screen/color DEO - -RTN - -@draw-byte ( byte color -- ) - - .color STZ STH - ;font-hex #00 DUPr STHr #f0 AND #04 SFT #08 MUL ADD2 .Screen/addr DEO2 - ( draw ) .color LDZ .Screen/color DEO - .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 - ;font-hex #00 STHr #0f AND #08 MUL ADD2 .Screen/addr DEO2 - ( draw ) .color LDZ .Screen/color DEO - -RTN - -@draw-short ( short* color -- ) - - STH SWP - DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 - ( draw ) DUPr STHr .Screen/color DEO - #0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ( draw ) DUPr STHr .Screen/color DEO - DUP #04 SFT TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ( draw ) DUPr STHr .Screen/color DEO - #0f AND TOS #0008 ** ;font-hex ++ .Screen/addr DEO2 - .Screen/x DEI2 #0008 ++ .Screen/x DEO2 - ( draw ) STHr .Screen/color DEO - -RTN - -( Utils ) - -@line-rect ( x1* y1* x2* y2* color -- ) - - ( load ) .color STZ DUP2 STH2 .rect/y2 STZ2 .rect/x2 STZ2 DUP2 STH2 .rect/y1 STZ2 .rect/x1 STZ2 - STH2r STH2r - &ver - ( save ) OVR2 .Screen/y DEO2 - ( draw ) .rect/x1 LDZ2 .Screen/x DEO2 .color LDZ DUP .Screen/color DEO - ( draw ) .rect/x2 LDZ2 .Screen/x DEO2 .Screen/color DEO - ( incr ) SWP2 #0001 ADD2 SWP2 - OVR2 OVR2 LTS2 ,&ver JCN - POP2 POP2 - .rect/x1 LDZ2 .rect/x2 LDZ2 - &hor - ( save ) OVR2 .Screen/x DEO2 - ( draw ) .rect/y1 LDZ2 .Screen/y DEO2 .color LDZ DUP .Screen/color DEO - ( draw ) .rect/y2 LDZ2 .Screen/y DEO2 .Screen/color DEO - ( incr ) SWP2 #0001 ADD2 SWP2 - OVR2 OVR2 #0001 ADD2 LTS2 ,&hor JCN - POP2 POP2 - -RTN - -@line-hor ( x0* x1* y* color -- ) - - STH .Screen/y DEO2 - &loop - ( save ) OVR2 .Screen/x DEO2 - ( draw ) DUPr STHr .Screen/color DEO - ( incr ) SWP2 #0002 ADD2 SWP2 - OVR2 OVR2 LTH2 ,&loop JCN - POP2 POP2 POPr - -RTN - -@line-ver ( x* y0* y1* color -- ) - - STH ROT2 .Screen/x DEO2 - &loop - ( save ) OVR2 .Screen/y DEO2 - ( draw ) DUPr STHr .Screen/color DEO - ( incr ) SWP2 #0002 ADD2 SWP2 - OVR2 OVR2 LTH2 ,&loop JCN - POP2 POP2 POPr - -RTN - -@tool_selector 80c0 e0f0 f8e0 1000 -@tool_hand 2020 20b8 7c7c 3838 -@tool_eraser 2050 b87c 3e1c 0800 -@moveup_icn 0010 387c fe10 1000 -@movedown_icn 0010 1010 fe7c 3810 -@halftone_icn aa55 aa55 aa55 aa55 - -@circle_icns - 0038 7cfe fefe 7c38 ( full ) - 0038 4482 8282 4438 ( line ) -@eye_icns - 0038 4492 2810 0000 ( open ) - 0000 0082 4438 0000 ( closed ) -@blank_icn - 0000 0000 0000 0000 - 7cfe fefe fefe 7c00 -@depth_icns - 00fe 8282 fe82 82fe - 00fe 9292 fe92 92fe -@font-hex - 007c 8282 8282 827c 0030 1010 1010 1010 - 007c 8202 7c80 80fe 007c 8202 1c02 827c - 000c 1424 4484 fe04 00fe 8080 7c02 827c - 007c 8280 fc82 827c 007c 8202 1e02 0202 - 007c 8282 7c82 827c 007c 8282 7e02 827c - 007c 8202 7e82 827e 00fc 8282 fc82 82fc - 007c 8280 8080 827c 00fc 8282 8282 82fc - 007c 8280 f080 827c 007c 8280 f080 8080 - -@filepath1 [ "projects/fonts/specter8.bit 00 ] -@filepath2 [ "projects/pictures/cyr10x8.chr 00 ] -@filepath3 [ "projects/pictures/zerotwo10x10.chr 00 ] -@filepath4 [ "projects/fonts/katahira8.bit 00 ] -@filepath5 [ "projects/pictures/ako10x10.chr 00 ] -@filepath6 [ "projects/pictures/logo1x1.bit 00 ] -