diff --git a/src/nasu.tal b/src/nasu.tal index 547cd02..e14e807 100644 --- a/src/nasu.tal +++ b/src/nasu.tal @@ -80,44 +80,44 @@ BRK ( >>> ) 09 "Nasu $1 ( - ) 00 00 =about/toggle "About $1 ( - ) 01 "n =file-new "New $1 - ( - ) 01 "r =trap "Rename $1 - ( - ) 01 "o =file-open "Open $1 - ( - ) 00 00 =file-open-mono "OpenMono $1 - ( - ) 01 "s =file-save "Save $1 - ( - ) 00 00 =file-save-mono "SaveMono $1 - ( - ) 01 "p =save-theme "SaveTheme $1 - ( - ) 01 "q =exit "Exit $1 + ( - ) 01 "r =trap "Rename $1 + ( - ) 01 "o =file-open "Open $1 + ( - ) 00 00 =file-open-mono "OpenMono $1 + ( - ) 01 "s =file-save "Save $1 + ( - ) 00 00 =file-save-mono "SaveMono $1 + ( - ) 01 "p =save-theme "SaveTheme $1 + ( - ) 01 "q =exit "Exit $1 ( >>> ) 09 "Edit $1 - ( - ) 01 "c =edit-copy-chr "Copy $1 - ( - ) 05 "C =edit-copy-icn "CopyMono $1 - ( - ) 01 "v =edit-paste "Paste $1 - ( - ) 01 "x =edit-cut "Cut $1 - ( - ) 00 08 =edit-erase "Erase $1 - ( - ) 00 "i =edit-invert "Invert $1 - ( - ) 00 "c =edit-colorize "Colorize $1 - ( - ) 00 00 =edit-flipx "Horizontal $1 - ( - ) 00 00 =edit-flipy "Veritcal $1 + ( - ) 01 "c =edit-copy-chr "Copy $1 + ( - ) 05 "C =edit-copy-icn "CopyMono $1 + ( - ) 01 "v =edit-paste "Paste $1 + ( - ) 01 "x =edit-cut "Cut $1 + ( - ) 00 08 =edit-erase "Erase $1 + ( - ) 00 "i =edit-invert "Invert $1 + ( - ) 00 "c =edit-colorize "Colorize $1 + ( - ) 00 00 =edit-flipx "Horizontal $1 + ( - ) 00 00 =edit-flipy "Veritcal $1 ( >>> ) 01 "View $1 - ( - ) 02 00 = "Zoom $1 + ( - ) 02 00 = "Zoom $1 ( >>> ) 0a "Move $1 - ( - ) 10 00 =move-up "Up $1 - ( - ) 20 00 =move-down "Down $1 - ( - ) 40 00 =move-left "Left $1 - ( - ) 80 00 =move-right "Right $1 - ( - ) 14 00 =move-dech "Decr.H $1 - ( - ) 24 00 =move-inch "Incr.H $1 - ( - ) 44 00 =move-decw "Decr.W $1 - ( - ) 84 00 =move-incw "Incr.W $1 - ( - ) 00 1b =move-reset "Reset $1 - ( - ) 01 "a =select-all "SelectAll $1 + ( - ) 10 00 =move-up "Up $1 + ( - ) 20 00 =move-down "Down $1 + ( - ) 40 00 =move-left "Left $1 + ( - ) 80 00 =move-right "Right $1 + ( - ) 14 00 =move-dech "Decr.H $1 + ( - ) 24 00 =move-inch "Incr.H $1 + ( - ) 44 00 =move-decw "Decr.W $1 + ( - ) 84 00 =move-incw "Incr.W $1 + ( - ) 00 1b =move-reset "Reset $1 + ( - ) 01 "a =select-all "SelectAll $1 ( >>> ) 07 "Tool $1 - ( - ) 00 "q =tool-brush "Brush $1 - ( - ) 00 "w =tool-selector "Selector $1 - ( - ) 00 "e =tool-zoom "Zoom $1 - ( - ) 00 "1 =pick-color1 "Background $1 - ( - ) 00 "2 =pick-color2 "ColorA $1 - ( - ) 00 "3 =pick-color3 "ColorB $1 - ( - ) 00 "4 =pick-color4 "ColorC $1 + ( - ) 00 "q =tool-brush "Brush $1 + ( - ) 00 "w =tool-selector "Selector $1 + ( - ) 00 "e =tool-zoom "Zoom $1 + ( - ) 00 "1 =pick-color1 "Background $1 + ( - ) 00 "2 =pick-color2 "ColorA $1 + ( - ) 00 "3 =pick-color3 "ColorB $1 + ( - ) 00 "4 =pick-color4 "ColorC $1 $1 ( @@ -242,9 +242,9 @@ BRK .Mouse/x DEI2 .tileview/x1 LDZ2 SUB2 .Mouse/y DEI2 .tileview/y1 LDZ2 SUB2 ( | test ) - #02 .settings/tool LDZ EQU ?&zoom - #01 .settings/zoom LDZ EQU ?&zoomed - #01 .settings/tool LDZ EQU ?&select + #02 .settings/tool LDZ EQU ?&zoom + #01 .settings/zoom LDZ EQU ?&zoomed + #01 .settings/tool LDZ EQU ?&select ( | paint ) .settings/color LDZ .Mouse/state DEI #01 EQU MUL @@ -308,11 +308,11 @@ BRK ( ) [ #20 ] NEQk NIP ?&no-save file-save POP BRK &no-save ( ) [ #1e ] NEQk NIP ?&no-load file-open POP BRK &no-load ( ) [ #1d ] NEQk NIP ?&no-name file-new POP BRK &no-name - ( ) [ #04 ] NEQk NIP ?&no-tool0 #00 set-tool POP BRK &no-tool0 - ( ) [ #05 ] NEQk NIP ?&no-tool1 #01 set-tool POP BRK &no-tool1 - ( ) [ #06 ] NEQk NIP ?&no-tool2 #02 set-tool &no-tool2 - ( ) INCk .settings/color LDZ NEQ ?&no-eraser #00 set-color POP BRK &no-eraser - ( ) [ #02 ] GTHk NIP ?&no-color INCk set-color POP BRK &no-color + ( ) [ #04 ] NEQk NIP ?&no-tool0 #00 POP BRK &no-tool0 + ( ) [ #05 ] NEQk NIP ?&no-tool1 #01 POP BRK &no-tool1 + ( ) [ #06 ] NEQk NIP ?&no-tool2 #02 &no-tool2 + ( ) INCk .settings/color LDZ NEQ ?&no-eraser #00 POP BRK &no-eraser + ( ) [ #02 ] GTHk NIP ?&no-color INCk POP BRK &no-color ( ) [ #08 ] LTHk NIP ?&no-rename trap POP BRK &no-rename POP @@ -322,10 +322,10 @@ BRK .Mouse/y DEI2 .zoomview/y1 LDZ2 SUB2 #0020 LTH2 ?&no-mod .Mouse/x DEI2 .zoomview/x1 LDZ2 SUB2 #03 SFT2 NIP - ( ) DUP #00 EQU .Mouse/state DEI #01 EQU #0101 NEQ2 ?&no-su ;op-shiftu run &no-su - ( ) DUP #00 EQU .Mouse/state DEI #01 GTH #0101 NEQ2 ?&no-sd ;op-shiftd run &no-sd - ( ) DUP #01 EQU .Mouse/state DEI #01 EQU #0101 NEQ2 ?&no-sr ;op-shiftr run &no-sr - ( ) DUP #01 EQU .Mouse/state DEI #01 GTH #0101 NEQ2 ?&no-shiftleft ;op-shiftl run &no-shiftleft + ( ) DUP #00 EQU .Mouse/state DEI #01 EQU #0101 NEQ2 ?&no-su ;op-shiftu &no-su + ( ) DUP #00 EQU .Mouse/state DEI #01 GTH #0101 NEQ2 ?&no-sd ;op-shiftd &no-sd + ( ) DUP #01 EQU .Mouse/state DEI #01 EQU #0101 NEQ2 ?&no-sr ;op-shiftr &no-sr + ( ) DUP #01 EQU .Mouse/state DEI #01 GTH #0101 NEQ2 ?&no-shiftleft ;op-shiftl &no-shiftleft POP ( release mouse ) [ LIT2 00 -Mouse/state ] DEO !&finish @@ -401,14 +401,14 @@ BRK ! -@set-color ( color -- ) +@ ( color -- ) .settings/color STZ ! -@set-tool ( tool -- ) +@ ( tool -- ) .settings/tool STZ @@ -459,9 +459,9 @@ JMP2r JMP2r -@mod-selection ( x y -- ) +@ ( x y -- ) - .settings/zoom LDZ ?mod-selection-zoom + .settings/zoom LDZ ? DUP .selection/y2 LDZ ADD #0f AND .selection/y2 STZ @@ -484,7 +484,7 @@ JMP2r ! -@mod-selection-zoom ( x y -- ) +@? ( x y -- ) ( | set zoom ) .selection/zy LDZ ADD SWP @@ -497,7 +497,7 @@ JMP2r ! -@scale-selection ( x y -- ) +@ ( x y -- ) .selection/y2 LDZ ADD #0f AND .selection/y2 STZ .selection/x2 LDZ ADD #0f AND .selection/x2 STZ @@ -558,10 +558,11 @@ JMP2r STH OVR2 SWP2 get-pixel-addr - ( ch1 ) OVR2 OVR2 STHkr #00 toggle-pixel + ( ch1 ) OVR2 OVR2 STHkr #00 ( ch2 ) #0008 ADD2 STHr #01 + ( >> ) -@toggle-pixel ( x* addr* color -- ) +@ ( x* addr* color -- ) STH2 LDAk @@ -626,10 +627,10 @@ JMP2r ( ) ADD2 LTH2 ?{ POP2 POP2 JMP2r } ( write ) STH2 DUP2 ,&x1 STR2 - [ LIT2 00 -selection/x2 ] LDZ INC #30 SFT2 #0001 SUB2 SWP2 SUB2 - [ LIT2 00 -selection/x1 ] LDZ #30 SFT2 ADD2 ,&x2 STR2 - [ LIT2 &x1 $2 ] STH2kr get-pixel ,&c1 STR - [ LIT2 &x2 $2 ] STH2kr get-pixel ,&c2 STR + ( ) [ LIT2 00 -selection/x2 ] LDZ INC #30 SFT2 #0001 SUB2 SWP2 SUB2 + ( ) [ LIT2 00 -selection/x1 ] LDZ #30 SFT2 ADD2 ,&x2 STR2 + ( ) [ LIT2 &x1 $2 ] STH2kr get-pixel ,&c1 STR + ( ) [ LIT2 &x2 $2 ] STH2kr get-pixel ,&c2 STR ,&x2 LDR2 STH2kr [ LIT &c1 $1 ] ,&x1 LDR2 STH2r [ LIT &c2 $1 ] ! @@ -641,7 +642,7 @@ JMP2r ( ) ADD2 LTH2 ?{ POP2 POP2 JMP2r } ( | write ) DUP2 ,&y1 STR2 - [ LIT2 00 -selection/y2 ] LDZ INC #30 SFT2 #0001 SUB2 SWP2 SUB2 + ( ) [ LIT2 00 -selection/y2 ] LDZ INC #30 SFT2 #0001 SUB2 SWP2 SUB2 [ LIT2 00 -selection/y1 ] LDZ #30 SFT2 ADD2 ,&y2 STR2 DUP2 [ LIT2 &y1 $2 ] get-pixel ,&c1 STR DUP2 [ LIT2 &y2 $2 ] get-pixel ,&c2 STR @@ -651,7 +652,7 @@ JMP2r ( @|map ) -@run ( op* -- ) +@ ( op* -- ) ,&fn STR2 .selection/y2 LDZ INC .selection/y1 LDZ @@ -676,7 +677,7 @@ JMP2r ,&t STR2 #1000 - &>loop + &>loop ( -- ) #00 OVR [ LIT2 &t $2 ] ADD2 LDA2k #ffff EOR2 SWP2 STA2 INC INC GTHk ?&>loop POP2 @@ -686,17 +687,17 @@ JMP2r @op-shiftu ( addr* -- ) DUP2k #0007 ADD2 SWP2 LDAk STH - &ch1 + &>ch1 ( -- ) INC2k LDA STH DUP2 STHr ROT ROT STA - INC2 GTH2k ?&ch1 + INC2 GTH2k ?&>ch1 POP2 ( cap ) STHr ROT ROT STA #0008 ADD2 DUP2 #0007 ADD2 SWP2 LDAk STH - &ch2 + &>ch2 ( -- ) INC2k LDA STH DUP2 STHr ROT ROT STA - INC2 GTH2k ?&ch2 + INC2 GTH2k ?&>ch2 POP2 ( cap ) STHr ROT ROT STA @@ -705,17 +706,17 @@ JMP2r @op-shiftd ( addr* -- ) DUP2k #0007 ADD2 LDAk STH - &ch1 + &>ch1 ( -- ) DUP2 #0001 SUB2 LDA STH DUP2 STHr ROT ROT STA - #0001 SUB2 LTH2k ?&ch1 + #0001 SUB2 LTH2k ?&>ch1 POP2 ( cap ) STHr ROT ROT STA #0008 ADD2 DUP2 #0007 ADD2 LDAk STH - &ch2 + &>ch2 ( -- ) DUP2 #0001 SUB2 LDA STH DUP2 STHr ROT ROT STA - #0001 SUB2 LTH2k ?&ch2 + #0001 SUB2 LTH2k ?&>ch2 POP2 ( cap ) STHr ROT ROT STA @@ -725,13 +726,13 @@ JMP2r STH2 #0800 - &>loop - ( | ch1 ) - #00 OVR STH2kr ADD2 - LDAk rol ROT ROT STA - ( | ch2 ) - #00 OVR STH2kr #0008 ADD2 ADD2 - LDAk rol ROT ROT STA + &>loop ( -- ) + + ( 1 ) #00 OVR STH2kr ADD2 + ( 1 ) LDAk rol ROT ROT STA + + ( 2 ) #00 OVR STH2kr #0008 ADD2 ADD2 + ( 2 ) LDAk rol ROT ROT STA INC GTHk ?&>loop POP2 POP2r @@ -742,13 +743,13 @@ JMP2r STH2 #0800 - &>loop - ( | ch1 ) - #00 OVR STH2kr ADD2 - LDAk ror ROT ROT STA - ( | ch2 ) - #00 OVR STH2kr #0008 ADD2 ADD2 - LDAk ror ROT ROT STA + &>loop ( -- ) + + ( 1 ) #00 OVR STH2kr ADD2 + ( 1 ) LDAk ror ROT ROT STA + + ( 2 ) #00 OVR STH2kr #0008 ADD2 ADD2 + ( 2 ) LDAk ror ROT ROT STA INC GTHk ?&>loop POP2 POP2r @@ -764,8 +765,8 @@ JMP2r @op-write ( addr* -- ) [ LIT2 &length $2 ] - DUP2 .File/length DEO2 - ;&buf SWP2 mcpy + ( ) DUP2 .File/length DEO2 + ( ) ;&buf SWP2 mcpy ;&buf .File/write DEO2 JMP2r @@ -799,7 +800,7 @@ JMP2r ;spritesheet .Screen/addr DEO2 [ LIT2 f6 -Screen/auto ] DEO #1000 - &>loop + &>loop ( -- ) #81 .Screen/sprite DEO INC GTHk ?&>loop POP2 @@ -809,7 +810,7 @@ JMP2r #00 .selection/y1 LDZ #30 SFT2 .tileview/y1 LDZ2 ADD2 .Screen/y DEO2 .selection LDZ2 get-tile-addr ,&sprite STR2 .selection/y2 LDZ .selection/y1 LDZ SUB INC #00 - &>loop-sel + &>loop-sel ( -- ) #00 OVR #80 SFT2 [ LIT2 &sprite $2 ] ADD2 .Screen/addr DEO2 #84 .Screen/sprite DEO INC GTHk ?&>loop-sel @@ -823,7 +824,7 @@ JMP2r #04 ;/color STA .selection/x2 LDZ .selection/x1 LDZ SUB INC #40 SFT .selection/y2 LDZ .selection/y1 LDZ SUB INC ORA - draw-byte + &no-label JMP2r @@ -835,9 +836,9 @@ JMP2r .tileview/x1 LDZ2 .Screen/x DEO2 .tileview/y1 LDZ2 .Screen/y DEO2 [ LIT2 f2 -Screen/auto ] DEO - #f0 × ( -- ) + #f0 &>times ( -- ) [ LIT2 00 -Screen/sprite ] DEO - INC DUP ?× + INC DUP ?&>times POP ( | draw ) [ LIT2 01 -Screen/auto ] DEO @@ -898,11 +899,11 @@ JMP2r JMP2r -( tools ) -( panes ) + + @ ( -- ) @@ -975,16 +976,16 @@ JMP2r #03 ;/color STA .settings/ratio LDZ -!draw-byte +! @ ( -- ) .colorview/y2 LDZ2 #0008 SUB2 .Screen/y DEO2 .colorview/x1 LDZ2 .Screen/x DEO2 #03 ;/color STA - .System/r /get-color draw-hex - .System/g /get-color draw-hex - .System/b /get-color draw-hex + .System/r /get-color + .System/g /get-color + .System/b /get-color .colorview/x1 LDZ2 .colorview/y1 LDZ2 [ LIT2 00 -Screen/auto ] DEO @@ -999,7 +1000,7 @@ JMP2r .Screen/y DEO2 .Screen/x DEO2 #1000 - &>loop + &>loop ( -- ) DUP STHkr GTH #30 SFT #00 SWP ;slider-icns ADD2 .Screen/addr DEO2 #02 .Screen/sprite DEO .Screen/x DEI2k INC2 INC2 ROT DEO2 @@ -1016,7 +1017,7 @@ JMP2r [ LIT2 00 -Screen/auto ] DEO #1000 - &>loop + &>loop ( -- ) #00 OVR #03 AND #30 SFT2 .blendview/x1 LDZ2 ADD2 .Screen/x DEO2 #00 OVR #32 SFT2 .blendview/y1 LDZ2 ADD2 .Screen/y DEO2 ;fill-icn .Screen/addr DEO2 @@ -1031,7 +1032,7 @@ JMP2r .blendview/x1 LDZ2 .Screen/x DEO2 .blendview/y2 LDZ2 #0008 SUB2 .Screen/y DEO2 #03 ;/color STA - ( get blending ) .settings/blend LDZ draw-byte + ( get blending ) .settings/blend LDZ ( | y ) .blendview/x1 LDZ2 #0010 ADD2 .Screen/x DEO2 @@ -1053,17 +1054,17 @@ JMP2r .dataview/x1 LDZ2 .Screen/x DEO2 .dataview/y2 LDZ2 #0008 SUB2 .Screen/y DEO2 #03 ;/color STA - .selection LDZ2 #40 SFT ADD draw-byte + .selection LDZ2 #40 SFT ADD .dataview/y1 LDZ2 .Screen/y DEO2 #0400 &>loop .dataview/x1 LDZ2 .Screen/x DEO2 #00 OVR DUP ADD .settings/focus LDZ2 ADD2 #01 ;/color STA - ( ch1 ) LDA2k draw-short + ( ch1 ) LDA2k .Screen/x DEI2k #000c ADD2 ROT DEO2 #02 ;/color STA - ( ch2 ) #0008 ADD2 LDA2 draw-short + ( ch2 ) #0008 ADD2 LDA2 ( | skip line ) .dataview/x1 LDZ2 .Screen/x DEO2 draw-lb @@ -1148,7 +1149,7 @@ JMP2r .Screen/auto DEO STH #00 - &>l2 + &>l2 ( -- ) STHkr .Screen/sprite DEO INC GTHk ?&>l2 POP2 @@ -1181,25 +1182,25 @@ JMP2r @draw-str ( str* -- str* ) - LDAk #00 EQU ?&skip + LDAk #00 EQU ?{ [ LIT2 01 -Screen/auto ] DEO &>while ( -- ) LDAk INC2 LDAk ?&>while - &skip + } INC2 JMP2r -@draw-short ( short* -- ) +@ ( short* -- ) - SWP draw-byte + SWP -@draw-byte ( byte -- ) +@ ( byte -- ) - DUP #04 SFT draw-hex + DUP #04 SFT -@draw-hex ( char -- ) +@ ( char -- ) #0f AND DUP #09 GTH #27 MUL ADD #30 ADD ( >> ) @@ -1307,7 +1308,7 @@ JMP2r ;filepath .File/name DEO2 #0008 .File/length DEO2 #0000 - &>loop + &>loop ( -- ) #00 OVR #40 SFT2 ;spritesheet ADD2 .File/read DEO2 INC NEQk ?&>loop POP2 @@ -1324,13 +1325,13 @@ JMP2r ;spritesheet .File/write DEO2 ( | nametable ) - has-nametable #00 EQU ?&no-nametable + has-nametable #00 EQU ?{ ;nametable-ext ;filepath scap #0004 mcpy ;filepath .File/name DEO2 #0300 .File/length DEO2 ;nametable .File/write DEO2 ;filepath scap #0004 SUB2 #0004 - &no-nametable + } #00 .state/changed STZ @@ -1342,7 +1343,7 @@ JMP2r ;filepath .File/name DEO2 #0008 .File/length DEO2 #0000 - &>loop + &>loop ( -- ) #00 OVR #40 SFT2 ;spritesheet ADD2 .File/write DEO2 INC NEQk ?&>loop POP2 @@ -1369,7 +1370,7 @@ JMP2r ;snarf-txt .File/name DEO2 #0008 ;op-write/length STA2 - ;op-write run + ;op-write ! @@ -1377,7 +1378,7 @@ JMP2r ;snarf-txt .File/name DEO2 #0010 ;op-write/length STA2 - ;op-write run + ;op-write ! @@ -1385,27 +1386,27 @@ JMP2r ;snarf-txt .File/name DEO2 #0010 .File/length DEO2 - ;op-read run + ;op-read ! @edit-cut ( -- ) edit-copy-chr - ;op-erase run + ;op-erase ! @edit-erase ( -- ) - ;op-erase run + ;op-erase #01 .state/changed STZ ! @edit-invert ( -- ) - ;op-invert run + ;op-invert #01 .state/changed STZ ! @@ -1430,19 +1431,19 @@ JMP2r ( select ) -@tool-brush ( -- ) #00 !set-tool -@tool-selector ( -- ) #01 !set-tool -@tool-zoom ( -- ) #02 !set-tool +@tool-brush ( -- ) #00 ! +@tool-selector ( -- ) #01 ! +@tool-zoom ( -- ) #02 ! -@move-up ( -- ) #00ff !mod-selection -@move-down ( -- ) #0001 !mod-selection -@move-left ( -- ) #ff00 !mod-selection -@move-right ( -- ) #0100 !mod-selection +@move-up ( -- ) #00ff ! +@move-down ( -- ) #0001 ! +@move-left ( -- ) #ff00 ! +@move-right ( -- ) #0100 ! -@move-dech ( -- ) #00ff !scale-selection -@move-inch ( -- ) #0001 !scale-selection -@move-decw ( -- ) #ff00 !scale-selection -@move-incw ( -- ) #0100 !scale-selection +@move-dech ( -- ) #00ff ! +@move-inch ( -- ) #0001 ! +@move-decw ( -- ) #ff00 ! +@move-incw ( -- ) #0100 ! @move-reset ( -- ) .selection/x1 LDZ2 .selection/x2 STZ2 ! @@ -1452,10 +1453,10 @@ JMP2r ( pick ) -@pick-color1 ( -- ) #00 !set-color -@pick-color2 ( -- ) #01 !set-color -@pick-color3 ( -- ) #02 !set-color -@pick-color4 ( -- ) #03 !set-color +@pick-color1 ( -- ) #00 ! +@pick-color2 ( -- ) #01 ! +@pick-color3 ( -- ) #02 ! +@pick-color4 ( -- ) #03 ! ( generics )