diff --git a/src/nasu.tal b/src/nasu.tal index 7608f80..dfa01f9 100644 --- a/src/nasu.tal +++ b/src/nasu.tal @@ -59,7 +59,7 @@ .tileview/x1 LDZ2 .tileview/y2 LDZ2 #0008 ADD2 .frame/width LDZ2 #0008 ;toolview ( | static drawings ) load-theme - draw-once + ( | begin ) file-new draw-menu @@ -128,7 +128,7 @@ BRK #0000 .Screen/vector DEO2 ;on-button .Controller/vector DEO2 ;on-mouse .Mouse/vector DEO2 - #01 draw-filepath + #01 ( release mouse ) [ LIT2 00 -Mouse/state ] DEO JMP2r @@ -146,7 +146,7 @@ JMP2r @on-console ( -> ) - #00 draw-filepath + #00 ( | start ) [ LIT &listening $1 ] ?&no-start #01 ,&listening STR @@ -159,15 +159,15 @@ JMP2r &no-end ( | capture ) capture-trap - #01 draw-filepath + #01 BRK @on-button-trap ( -> ) - #00 draw-filepath + #00 .Controller/key DEI DUP #0d EQU #03 MUL SUB capture-trap - #01 draw-filepath + #01 BRK @@ -198,7 +198,7 @@ BRK .state/timer LDZ DUP #07 AND ?&no-blink - DUP #03 SFT #01 AND #30 SFT INC draw-filepath + DUP #03 SFT #01 AND #30 SFT INC &no-blink INC .state/timer STZ @@ -248,7 +248,7 @@ BRK ( | paint ) .settings/color LDZ .Mouse/state DEI #01 EQU MUL put-pixel - #01 .state/changed STZ draw-state + #01 .state/changed STZ BRK @@ -269,7 +269,7 @@ BRK SWP2 #03 SFT2 #00 .selection/zx LDZ ADD2 SWP2 #03 SFT2 #00 .selection/zy LDZ ADD2 .settings/color LDZ .Mouse/state DEI #01 EQU MUL put-pixel - #01 .state/changed STZ draw-state + #01 .state/changed STZ BRK @@ -296,8 +296,8 @@ BRK #0003 MUL2 ;nametable ADD2 STH2 .settings/focus LDZ2 ;spritesheet SUB2 STH2kr STA2 .settings/blend LDZ INC2r INC2r STH2r STA - draw-nametable - #01 .state/changed STZ draw-state + + #01 .state/changed STZ BRK @@ -336,7 +336,7 @@ BRK .settings/color LDZ .Mouse/state DEI #01 EQU MUL put-pixel &finish - #01 .state/changed STZ draw-state + #01 .state/changed STZ BRK @@ -346,7 +346,7 @@ BRK ( y ) .Mouse/y DEI2 .preview/y1 LDZ2 SUB2 #03 SFT2 NIP #03 AND ( x ) .Mouse/x DEI2 .preview/x1 LDZ2 SUB2 #03 SFT2 NIP #40 SFT ADD #11 ADD .settings/ratio STZ - draw-preview + ( release mouse ) [ LIT2 00 -Mouse/state ] DEO BRK @@ -385,8 +385,8 @@ BRK [ #03 NEQk NIP ] ?&no-hor .settings/blend STHk LDZ #10 EOR STHr STZ &no-hor &end POP - draw-blendview - draw-preview + + ( | release mouse ) [ LIT2 00 -Mouse/state ] DEO BRK @@ -397,22 +397,22 @@ BRK @toggle-zoom ( -- ) .settings/zoom LDZk #00 EQU SWP STZ - draw-tileview + -!draw-toolview +! @set-color ( color -- ) .settings/color STZ - draw-toolview + -!draw-colorview +! @set-tool ( tool -- ) .settings/tool STZ -!draw-toolview +! @clamp-selection ( -- ) @@ -495,7 +495,7 @@ JMP2r .selection/zy LDZ #03 SFT set-selection-from -!draw-tileview-zoom +! @scale-selection ( x y -- ) @@ -521,21 +521,96 @@ JMP2r AND JMP2r +@get-tile-addr ( x y -- addr* ) + + #40 SFT ADD #00 SWP #40 SFT2 ;spritesheet ADD2 + +JMP2r + +@get-pixel ( x* y* -- color ) + + ( | channel 1 ) + OVR2 SWP2 get-pixel-addr [ STH2k ] LDA + ROT ROT NIP #07 AND [ STHk ] + #07 SWP SUB SFT #01 AND + ( | channel 2 ) + [ STHr ] [ STH2r ] #0008 ADD2 LDA SWP + #07 SWP SUB SFT #01 AND + DUP ADD + ADD + +JMP2r + +@get-pixel-addr ( x* y* -- addr* ) + + ( | clamp ) + #007f AND2 SWP2 #007f AND2 SWP2 + ( | get row ) + DUP2 #0007 AND2 + ( | get tile ) + SWP2 #83 SFT2 ADD2 + SWP2 #43 SFT2 ADD2 + ;spritesheet ADD2 + +JMP2r + +@put-pixel ( x* y* color -- ) + + STH + OVR2 SWP2 get-pixel-addr + ( ch1 ) OVR2 OVR2 STHkr #00 toggle-pixel + ( ch2 ) #0008 ADD2 STHr #01 + +@toggle-pixel ( x* addr* color -- ) + + STH2 + LDAk + STH SWP2 NIP + STHr SWP + STH2r SFT #01 AND ?&do-set + ( mask ) #0107 ROT #07 AND SUB #40 SFT SFT #ff EOR AND + ( save ) ROT ROT STA + JMP2r + &do-set + ( mask ) #0107 ROT #07 AND SUB #40 SFT SFT ORA + ( save ) ROT ROT STA + +JMP2r + +@has-nametable ( -- bool ) + + ;nametable STH2k #0300 ADD2 STH2r + &>loop + LDAk #00 EQU ?&continue + POP2 POP2 #01 JMP2r + &continue + INC2 GTH2k ?&>loop + POP2 POP2 + #00 + +JMP2r + +@get-strw ( str* -- width* ) + + slen #30 SFT2 + +JMP2r + ( @|filter ) @filter ( op* -- ) - ,&t STR2 + ,&fn STR2 .selection/y2 LDZ INC #30 SFT .selection/y1 LDZ #30 SFT - &ver + &>ver ( -- ) STHk .selection/x2 LDZ INC #30 SFT .selection/x1 LDZ #30 SFT - &hor - #00 OVR #00 STHkr [ LIT2 &t $2 ] JSR2 - INC GTHk ?&hor + &>hor ( -- ) + #00 OVR #00 STHkr [ LIT2 &fn $2 ] JSR2 + INC GTHk ?&>hor POP2 POPr - INC GTHk ?&ver + INC GTHk ?&>ver POP2 JMP2r @@ -578,17 +653,16 @@ JMP2r @run ( op* -- ) - STH2 + ,&fn STR2 .selection/y2 LDZ INC .selection/y1 LDZ - &ver + &>ver ( -- ) .selection/x2 LDZ INC .selection/x1 LDZ - &hor - OVR2 NIP OVR SWP get-tile-addr STH2kr JSR2 - INC GTHk ?&hor + &>hor ( -- ) + OVR2 NIP OVR SWP get-tile-addr [ LIT2 &fn $2 ] JSR2 + INC GTHk ?&>hor POP2 - INC GTHk ?&ver + INC GTHk ?&>ver POP2 - POP2r JMP2r @@ -602,9 +676,9 @@ JMP2r ,&t STR2 #1000 - &loop + &>loop #00 OVR [ LIT2 &t $2 ] ADD2 LDA2k #ffff EOR2 SWP2 STA2 - INC INC GTHk ?&loop + INC INC GTHk ?&>loop POP2 JMP2r @@ -651,14 +725,14 @@ JMP2r STH2 #0800 - &loop + &>loop ( | ch1 ) #00 OVR STH2kr ADD2 LDAk rol ROT ROT STA ( | ch2 ) #00 OVR STH2kr #0008 ADD2 ADD2 LDAk rol ROT ROT STA - INC GTHk ?&loop + INC GTHk ?&>loop POP2 POP2r @@ -668,14 +742,14 @@ JMP2r STH2 #0800 - &loop + &>loop ( | ch1 ) #00 OVR STH2kr ADD2 LDAk ror ROT ROT STA ( | ch2 ) #00 OVR STH2kr #0008 ADD2 ADD2 LDAk ror ROT ROT STA - INC GTHk ?&loop + INC GTHk ?&>loop POP2 POP2r @@ -702,32 +776,32 @@ JMP2r @ ( -- ) - draw-once + @ ( -- ) - draw-toolview - draw-blendview - draw-colorview - draw-dataview - draw-preview - draw-tileview - draw-nametable + + + + + + + -!draw-zoomview +! -@draw-tileview ( -- ) +@ ( -- ) - .settings/zoom LDZ ?draw-tileview-zoom + .settings/zoom LDZ ? .tileview/x1 LDZ2 .Screen/x DEO2 .tileview/y1 LDZ2 .Screen/y DEO2 ( | draw tiles ) ;spritesheet .Screen/addr DEO2 [ LIT2 f6 -Screen/auto ] DEO #1000 - &loop + &>loop #81 .Screen/sprite DEO - INC GTHk ?&loop + INC GTHk ?&>loop POP2 ( | draw selection ) #06 .selection/x2 LDZ .selection/x1 LDZ SUB #40 SFT ADD .Screen/auto DEO @@ -735,10 +809,10 @@ 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 + INC GTHk ?&>loop-sel POP2 [ LIT2 01 -Screen/auto ] DEO ( | draw selection size ) @@ -754,7 +828,7 @@ JMP2r JMP2r -@draw-tileview-zoom ( -- ) +@ ( -- ) ( | clear ) ;fill-icn .Screen/addr DEO2 @@ -769,18 +843,18 @@ JMP2r [ LIT2 01 -Screen/auto ] DEO ;pixel-icn .Screen/addr DEO2 #1000 - &ver + &>ver ( -- ) #00 OVR #30 SFT .tileview/y1 LDZ2 ADD2 .Screen/y DEO2 .tileview/x1 LDZ2 .Screen/x DEO2 #1000 - &hor + &>hor ( -- ) OVR2 NIP OVR SWP ( y ) .selection/zy LDZ ADD #00 SWP ( x ) ROT .selection/zx LDZ ADD #00 SWP SWP2 get-pixel .Screen/sprite DEO - INC GTHk ?&hor + INC GTHk ?&>hor POP2 - INC GTHk ?&ver + INC GTHk ?&>ver POP2 ( | guide hor ) #0007 .selection/zy LDZ SUB #0007 AND2 #30 SFT2 #0001 SUB2 #0008 ADD2 STH2 @@ -799,121 +873,54 @@ JMP2r JMP2r -@draw-nametable ( -- ) +@ ( -- ) [ LIT2 00 -Screen/auto ] DEO #1000 - &ver ( -- ) + &>ver ( -- ) ( > y ) #00 OVR #30 SFT2 .nametableview/y LDZ2 ADD2 .Screen/y DEO2 STHk .nametableview/x LDZ2 .Screen/x DEO2 #1000 - &hor ( -- ) + &>hor ( -- ) ( > x ) #00 OVR #30 SFT2 .nametableview/x LDZ2 ADD2 .Screen/x DEO2 ( id ) #00 OVR STHkr #40 SFT ADD ( addr* ) #0003 MUL2 ;nametable ADD2 LDA2k ;spritesheet ADD2 .Screen/addr DEO2 ( color ) INC2 INC2 LDA .Screen/sprite DEO - INC GTHk ?&hor + INC GTHk ?&>hor POP2 POPr .nametableview/x LDZ2 .Screen/x DEO2 draw-lb - INC GTHk ?&ver + INC GTHk ?&>ver POP2 JMP2r ( tools ) -@get-tile-addr ( x y -- addr* ) - - #40 SFT ADD #00 SWP #40 SFT2 ;spritesheet ADD2 - -JMP2r - -@get-pixel ( x* y* -- color ) - - ( | channel 1 ) - OVR2 SWP2 get-pixel-addr [ STH2k ] LDA - ROT ROT NIP #07 AND [ STHk ] - #07 SWP SUB SFT #01 AND - ( | channel 2 ) - [ STHr ] [ STH2r ] #0008 ADD2 LDA SWP - #07 SWP SUB SFT #01 AND - DUP ADD - ADD - -JMP2r - -@get-pixel-addr ( x* y* -- addr* ) - - ( | clamp ) - #007f AND2 SWP2 #007f AND2 SWP2 - ( | get row ) - DUP2 #0007 AND2 - ( | get tile ) - SWP2 #83 SFT2 ADD2 - SWP2 #43 SFT2 ADD2 - ;spritesheet ADD2 - -JMP2r - -@put-pixel ( x* y* color -- ) - - STH - OVR2 SWP2 get-pixel-addr - ( ch1 ) OVR2 OVR2 STHkr #00 toggle-pixel - ( ch2 ) #0008 ADD2 STHr #01 - -@toggle-pixel ( x* addr* color -- ) - - STH2 - LDAk - STH SWP2 NIP - STHr SWP - STH2r SFT #01 AND ?&do-set - ( mask ) #0107 ROT #07 AND SUB #40 SFT SFT #ff EOR AND - ( save ) ROT ROT STA - JMP2r - &do-set - ( mask ) #0107 ROT #07 AND SUB #40 SFT SFT ORA - ( save ) ROT ROT STA - -JMP2r - -@has-nametable ( -- bool ) - - ;nametable STH2k #0300 ADD2 STH2r - &loop - LDAk #00 EQU ?&continue - POP2 POP2 #01 JMP2r - &continue - INC2 GTH2k ?&loop - POP2 POP2 - #00 -JMP2r ( panes ) -@draw-zoomview ( -- ) +@ ( -- ) ;bigpixel-icn .Screen/addr DEO2 #0800 - &ver + &>ver ( -- ) #00 OVRk #00 .selection/y1 LDZ #30 SFT ADD2 ,&y STR2 #20 SFT .zoomview/y1 LDZ2 ADD2 .Screen/y DEO2 #0800 - &hor + &>hor ( -- ) #00 OVRk #00 .selection/x1 LDZ #30 SFT ADD2 ,&x STR2 #20 SFT .zoomview/x1 LDZ2 ADD2 .Screen/x DEO2 [ LIT2 &x $2 ] [ LIT2 &y $2 ] get-pixel .Screen/sprite DEO - INC GTHk ?&hor + INC GTHk ?&>hor POP2 - INC GTHk ?&ver + INC GTHk ?&>ver POP2 ( | frame ) @@ -932,15 +939,15 @@ JMP2r JMP2r -@draw-preview ( -- ) +@ ( -- ) ( | stash address ) .settings/focus LDZ2 STH2k .Screen/addr DEO2 #0400 - &ver + &>ver ( -- ) #00 OVR #30 SFT .preview/y1 LDZ2 ADD2 .Screen/y DEO2 #0400 - &hor + &>hor ( -- ) #00 OVR #30 SFT .preview/x1 LDZ2 ADD2 .Screen/x DEO2 ( | get x,y ) OVR2 NIP OVR SWP @@ -956,9 +963,9 @@ JMP2r ;halftone-icn .Screen/addr DEO2 #03 .Screen/sprite DEO &resume - INC GTHk ?&hor + INC GTHk ?&>hor POP2 - INC GTHk ?&ver + INC GTHk ?&>ver POP2 POP2r @@ -970,7 +977,7 @@ JMP2r !draw-byte -@draw-colorview ( -- ) +@ ( -- ) .colorview/y2 LDZ2 #0008 SUB2 .Screen/y DEO2 .colorview/x1 LDZ2 .Screen/x DEO2 @@ -992,11 +999,11 @@ 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 - INC GTHk ?&loop + INC GTHk ?&>loop POP2 POPr @@ -1005,18 +1012,18 @@ JMP2r .settings/color LDZ STHk #01 SFT ADD DEI #01 STHr #01 AND SUB #20 SFT SFT #0f AND JMP2r -@draw-blendview ( -- ) +@ ( -- ) [ 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 #00 .Screen/sprite DEO .settings/focus LDZ2 .Screen/addr DEO2 DUP .settings/blend LDZ #b0 AND ADD .Screen/sprite DEO - INC GTHk ?&loop + INC GTHk ?&>loop POP2 [ LIT2 01 -Screen/auto ] DEO @@ -1040,7 +1047,7 @@ JMP2r JMP2r -@draw-dataview ( -- ) +@ ( -- ) ( | position ) .dataview/x1 LDZ2 .Screen/x DEO2 @@ -1049,7 +1056,7 @@ JMP2r .selection LDZ2 #40 SFT ADD draw-byte .dataview/y1 LDZ2 .Screen/y DEO2 #0400 - &loop + &>loop .dataview/x1 LDZ2 .Screen/x DEO2 #00 OVR DUP ADD .settings/focus LDZ2 ADD2 #01 ;draw-chr/color STA @@ -1060,12 +1067,12 @@ JMP2r ( | skip line ) .dataview/x1 LDZ2 .Screen/x DEO2 draw-lb - INC GTHk ?&loop + INC GTHk ?&>loop POP2 JMP2r -@draw-toolview ( -- ) +@ ( -- ) .toolview/y1 LDZ2 .Screen/y DEO2 ( | colors ) @@ -1085,7 +1092,7 @@ JMP2r ;zoom-icns [ #00 .settings/zoom LDZ #30 SFT2 ADD2 ] .Screen/addr DEO2 #01 .settings/tool LDZ #02 EQU ADD .Screen/sprite DEO ( | file i/o ) - draw-state + .toolview/x2 LDZ2 STH2k #0018 SUB2 .Screen/x DEO2 ;load-icn .Screen/addr DEO2 #01 .Screen/sprite DEO @@ -1095,9 +1102,9 @@ JMP2r ( | filepath ) #01 -!draw-filepath +! -@draw-state ( -- ) +@ ( -- ) .toolview/x2 LDZ2 #0008 SUB2 .Screen/x DEO2 .toolview/y1 LDZ2 .Screen/y DEO2 @@ -1106,12 +1113,12 @@ JMP2r JMP2r -@draw-filepath ( color -- ) +@ ( color -- ) .toolview/x1 LDZ2 #0040 ADD2 .Screen/x DEO2 .toolview/y1 LDZ2 INC2 .Screen/y DEO2 ( | clear ) - DUP #00 EQU ?clear-filepath + DUP #00 EQU ? ;draw-chr/color STA ;filepath @@ -1122,14 +1129,14 @@ JMP2r JMP2r -@clear-filepath ( color -- ) +@ ( color -- ) POP ;fill-icn .Screen/addr DEO2 [ LIT2 01 -Screen/auto ] DEO - #1300 &l ( -- ) + #1300 &>l ( -- ) #00 .Screen/sprite DEO - INC GTHk ?&l + INC GTHk ?&>l POP2 JMP2r @@ -1141,15 +1148,15 @@ JMP2r .Screen/auto DEO STH #00 - &l2 + &>l2 STHkr .Screen/sprite DEO - INC GTHk ?&l2 + INC GTHk ?&>l2 POP2 POPr JMP2r -@draw-once ( -- ) +@ ( -- ) .tileview/x1 LDZ2 .Screen/x DEO2 .tileview/y1 LDZ2 .Screen/y DEO2 @@ -1165,11 +1172,7 @@ JMP2r ( drawing primitives ) -@get-strw ( str* -- width* ) - - slen #30 SFT2 -JMP2r @draw-str-right ( text* -- ) @@ -1180,9 +1183,9 @@ JMP2r LDAk #00 EQU ?&skip [ LIT2 01 -Screen/auto ] DEO - &while + &>while ( -- ) LDAk draw-chr - INC2 LDAk ?&while + INC2 LDAk ?&>while &skip INC2 @@ -1228,7 +1231,7 @@ JMP .Screen/auto DEO .Screen/addr DEO2 STH - #00 &l STHkr ,&paint JSR INC GTHk ?&l POP2 + #00 &>l ( -- ) STHkr /paint INC GTHk ?&>l POP2 POPr JMP2r &single ( color addr* auto -- ) @@ -1265,13 +1268,13 @@ JMP2r @file-new ( -- ) - #00 draw-filepath + #00 ( | clear ) ;spritesheet #1300 mclr ( | rename to untitled.txt ) ;filepath #0040 mclr ;untitled-txt ;filepath scpy - #00 .state/changed STZ draw-state + #00 .state/changed STZ ! @@ -1291,7 +1294,7 @@ JMP2r ;nametable .File/read DEO2 ;filepath scap #0004 SUB2 #0004 mclr - #00 .state/changed STZ draw-state + #00 .state/changed STZ ! @@ -1303,11 +1306,11 @@ JMP2r ;filepath .File/name DEO2 #0008 .File/length DEO2 #0000 - &loop + &>loop #00 OVR #40 SFT2 ;spritesheet ADD2 .File/read DEO2 - INC NEQk ?&loop + INC NEQk ?&>loop POP2 - #00 .state/changed STZ draw-state + #00 .state/changed STZ ! @@ -1330,7 +1333,7 @@ JMP2r #00 .state/changed STZ -!draw-state +! @file-save-mono ( -- ) @@ -1338,13 +1341,13 @@ JMP2r ;filepath .File/name DEO2 #0008 .File/length DEO2 #0000 - &loop + &>loop #00 OVR #40 SFT2 ;spritesheet ADD2 .File/write DEO2 - INC NEQk ?&loop + INC NEQk ?&>loop POP2 #00 .state/changed STZ -!draw-state +! @save-theme ( -- ) @@ -1395,32 +1398,32 @@ JMP2r @edit-erase ( -- ) ;op-erase run - #01 .state/changed STZ draw-state + #01 .state/changed STZ ! @edit-invert ( -- ) ;op-invert run - #01 .state/changed STZ draw-state + #01 .state/changed STZ ! @edit-colorize ( -- ) ;filter-colorize filter - #01 .state/changed STZ draw-state + #01 .state/changed STZ ! @edit-flipx ( -- ) ;filter-flipx filter - #01 .state/changed STZ draw-state + #01 .state/changed STZ ! @edit-flipy ( -- ) ;filter-flipy filter - #01 .state/changed STZ draw-state + #01 .state/changed STZ ! @@ -1500,7 +1503,7 @@ JMP2r @rol ( byte -- byte ) DUP #07 SFT SWP DUP ADD ADD JMP2r @ror ( byte -- byte ) DUP #70 SFT SWP #01 SFT ADD JMP2r -@mcpy ( src* dst* len* -- ) SWP2 STH2 OVR2 ADD2 SWP2 &loop LDAk STH2kr STA INC2r INC2 GTH2k ?&loop POP2 POP2 POP2r JMP2r +@mcpy ( src* dst* len* -- ) SWP2 STH2 OVR2 ADD2 SWP2 &>loop LDAk STH2kr STA INC2r INC2 GTH2k ?&>loop POP2 POP2 POP2r JMP2r ( @|assets )