From eb2979c0990ae53e6c8a84d00519a4c9b733a5c2 Mon Sep 17 00:00:00 2001 From: Devine Lu Linvega Date: Tue, 9 Aug 2022 07:11:00 -0700 Subject: [PATCH] Optimized tail-calls --- build.sh | 2 +- src/assets.tal | 3 +- src/main.tal | 186 ++++++++++++++++++++++++------------------------- 3 files changed, 93 insertions(+), 98 deletions(-) diff --git a/build.sh b/build.sh index 0b80b23..bd09177 100755 --- a/build.sh +++ b/build.sh @@ -8,7 +8,7 @@ if [ -e "$HOME/roms/uxnlin.rom" ] then echo "Linting.." uxncli $HOME/roms/uxnlin.rom etc/nametable.tal - uxncli $HOME/roms/uxnlin.rom src/nasu.tal + uxncli $HOME/roms/uxnlin.rom src/main.tal uxncli $HOME/roms/uxnlin.rom src/manifest.tal fi diff --git a/src/assets.tal b/src/assets.tal index b88f826..87ad6ae 100644 --- a/src/assets.tal +++ b/src/assets.tal @@ -98,4 +98,5 @@ c060 3018 0c06 0300 3c0c 0c0c 0c0c 3c00 ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ff00 ffff ffff ffff ffff -@spritesheet $1000 &nametable $300 +@nametable $300 +@spritesheet diff --git a/src/main.tal b/src/main.tal index 8269035..739973e 100644 --- a/src/main.tal +++ b/src/main.tal @@ -35,14 +35,14 @@ @preview &x1 $2 &y1 $2 &x2 $2 &y2 $2 @zoomview &x1 $2 &y1 $2 &x2 $2 &y2 $2 @tileview &x1 $2 &y1 $2 &x2 $2 &y2 $2 -@nametable &x $2 &y $2 &x2 $2 &y2 $2 +@nametableview &x $2 &y $2 &x2 $2 &y2 $2 |0100 ( -> ) ( theme ) - #4bbf .System/r DEO2 - #158f .System/g DEO2 - #46bf .System/b DEO2 + #47ff .System/r DEO2 + #147f .System/g DEO2 + #368f .System/b DEO2 ( size ) #012e .Screen/width DEO2 #00f0 .Screen/height DEO2 @@ -64,7 +64,7 @@ ( place ) .Screen/width DEI2 #01 SFT2 .frame/width LDZ2 #01 SFT2 SUB2 #001c .frame/width LDZ2 .frame/height LDZ2 ;frame ;set-size JSR2 .frame/x1 LDZ2 #0001 SUB2 .frame/y1 LDZ2 #0038 ADD2 #007f DUP2 ;tileview ;set-size JSR2 - .frame/x1 LDZ2 #0088 ADD2 .frame/y1 LDZ2 #0038 ADD2 #007f DUP2 ;nametable ;set-size JSR2 + .frame/x1 LDZ2 #0088 ADD2 .frame/y1 LDZ2 #0038 ADD2 #007f DUP2 ;nametableview ;set-size JSR2 .frame/x1 LDZ2 #0001 SUB2 .frame/y1 LDZ2 #001f #002f ;zoomview ;set-size JSR2 .frame/x1 LDZ2 #002f ADD2 .frame/y1 LDZ2 #001f #002f ;preview ;set-size JSR2 .frame/x1 LDZ2 #005f ADD2 .frame/y1 LDZ2 #0020 #002f ;colorview ;set-size JSR2 @@ -85,7 +85,7 @@ BRK 08 "Nasu $1 01 'n :file-new "New $1 - 01 'r :file-rename "Rename $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 @@ -227,7 +227,7 @@ BRK .Mouse/state DEI #00 EQU ,&no-touch JCN .Mouse/x DEI2 .Mouse/y DEI2 .tileview ;within-rect JSR2 ;on-touch-tileview JCN2 - .Mouse/x DEI2 .Mouse/y DEI2 .nametable ;within-rect JSR2 ;on-touch-nametable JCN2 + .Mouse/x DEI2 .Mouse/y DEI2 .nametableview ;within-rect JSR2 ;on-touch-nametable JCN2 .Mouse/x DEI2 .Mouse/y DEI2 .toolview ;within-rect JSR2 ;on-touch-toolview JCN2 .Mouse/x DEI2 .Mouse/y DEI2 .blendview ;within-rect JSR2 ;on-touch-blendview JCN2 .Mouse/x DEI2 .Mouse/y DEI2 .colorview ;within-rect JSR2 ;on-touch-colorview JCN2 @@ -293,9 +293,9 @@ BRK @on-touch-nametable ( -> ) ( id ) - .Mouse/y DEI2 .nametable/y LDZ2 SUB2 #43 SFT2 - .Mouse/x DEI2 .nametable/x LDZ2 SUB2 #03 SFT2 ADD2 - #0003 MUL2 ;spritesheet/nametable ADD2 STH2 + .Mouse/y DEI2 .nametableview/y LDZ2 SUB2 #43 SFT2 + .Mouse/x DEI2 .nametableview/x LDZ2 SUB2 #03 SFT2 ADD2 + #0003 MUL2 ;nametable ADD2 STH2 .settings/focus LDZ2 ;spritesheet SUB2 STH2kr STA2 .settings/blend LDZ INC2r INC2r STH2r STA ;draw-nametable JSR2 @@ -399,24 +399,24 @@ BRK .settings/zoom LDZk #00 EQU SWP STZ ;draw-tileview JSR2 - ;draw-toolview JSR2 + ;draw-toolview ( .. ) -JMP2r +JMP2 @set-color ( color -- ) .settings/color STZ ;draw-toolview JSR2 - ;draw-colorview JSR2 + ;draw-colorview ( .. ) -JMP2r +JMP2 @set-tool ( tool -- ) .settings/tool STZ - ;draw-toolview JSR2 + ;draw-toolview ( .. ) -JMP2r +JMP2 @set-selection-zoom ( x y -- ) @@ -434,18 +434,18 @@ JMP2r DUP .selection/x1 STZ .selection/x2 STZ ;set-focus JSR2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 @set-selection-to ( x y -- ) .selection/y2 STZ .selection/x2 STZ ;clamp-selection JSR2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 @set-focus ( -- ) @@ -476,9 +476,9 @@ JMP2r ( focus ) ;set-focus JSR2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 @mod-selection-zoom ( x y -- ) @@ -490,9 +490,9 @@ JMP2r .selection/zx LDZ #03 SFT .selection/zy LDZ #03 SFT ;set-selection-from JSR2 - ;draw-tileview-zoom JSR2 + ;draw-tileview-zoom ( .. ) -JMP2r +JMP2 @scale-selection ( x y -- ) @@ -508,9 +508,9 @@ JMP2r &no-y ( focus ) ;set-focus JSR2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 @run ( op* -- ) @@ -530,9 +530,9 @@ JMP2r @op-erase ( addr* -- ) - #0010 ;mclr JSR2 + #0010 ;mclr ( .. ) -JMP2r +JMP2 @op-shiftu ( addr* -- ) @@ -575,7 +575,7 @@ JMP2r @op-shiftl ( addr* -- ) STH2 - #08 #00 + #0800 &loop ( ch1 ) #00 OVR STH2kr ADD2 DUP2 @@ -592,7 +592,7 @@ JMP2r @op-shiftr ( addr* -- ) STH2 - #08 #00 + #0800 &loop ( ch1 ) #00 OVR STH2kr ADD2 DUP2 @@ -632,9 +632,9 @@ JMP2r ;draw-preview JSR2 ;draw-tileview JSR2 ;draw-nametable JSR2 - ;draw-zoomview JSR2 + ;draw-zoomview ( .. ) -JMP2r +JMP2 @draw-menu-bg ( -- ) @@ -696,14 +696,14 @@ JMP2r INC GTHk ,&ver JCN POP2 ( guide hor ) - #00 #07 .selection/zy LDZ SUB #0007 AND2 #30 SFT2 #0001 SUB2 #0008 ADD2 STH2 + #0007 .selection/zy LDZ SUB #0007 AND2 #30 SFT2 #0001 SUB2 #0008 ADD2 STH2 .tileview/x1 LDZ2 .tileview/y1 LDZ2 STH2kr ADD2 #0a ;line-hor-dashed JSR2 .selection/zy LDZ #07 AND #00 EQU ,&skip-hor JCN .tileview/x1 LDZ2 .tileview/y1 LDZ2 STH2kr ADD2 #0040 ADD2 #0a ;line-hor-dashed JSR2 &skip-hor POP2r ( guide ver ) - #00 #07 .selection/zx LDZ SUB #0007 AND2 #30 SFT2 #0001 SUB2 #0008 ADD2 STH2 + #0007 .selection/zx LDZ SUB #0007 AND2 #30 SFT2 #0001 SUB2 #0008 ADD2 STH2 .tileview/x1 LDZ2 STH2kr ADD2 .tileview/y1 LDZ2 #0a ;line-ver-dashed JSR2 .selection/zx LDZ #07 AND #00 EQU ,&skip-ver JCN .tileview/x1 LDZ2 STH2kr ADD2 #0040 ADD2 .tileview/y1 LDZ2 #0a ;line-ver-dashed JSR2 @@ -714,15 +714,15 @@ JMP2r @draw-nametable ( -- ) - .nametable/y LDZ2 .Screen/y DEO2 + .nametableview/y LDZ2 .Screen/y DEO2 #1000 &ver STHk - .nametable/x LDZ2 .Screen/x DEO2 + .nametableview/x LDZ2 .Screen/x DEO2 #1000 &hor ( id ) #00 OVR STHkr #40 SFT ADD - ( addr* ) #0003 MUL2 ;spritesheet/nametable ADD2 + ( addr* ) #0003 MUL2 ;nametable ADD2 LDA2k ;spritesheet ADD2 .Screen/addr DEO2 ( color ) INC2 INC2 LDA .Screen/sprite DEO INC GTHk ,&hor JCN @@ -785,18 +785,18 @@ JMP2r STH SWP2 NIP STHr SWP STH2r SFT #01 AND ,&do-set JCN - ( mask ) #01 #07 ROT #07 AND SUB #40 SFT SFT #ff EOR AND + ( mask ) #0107 ROT #07 AND SUB #40 SFT SFT #ff EOR AND ( save ) ROT ROT STA JMP2r &do-set - ( mask ) #01 #07 ROT #07 AND SUB #40 SFT SFT ORA + ( mask ) #0107 ROT #07 AND SUB #40 SFT SFT ORA ( save ) ROT ROT STA JMP2r @has-nametable ( -- bool ) - ;spritesheet/nametable STH2k #0300 ADD2 STH2r + ;nametable STH2k #0300 ADD2 STH2r &loop LDAk #00 EQU ,&continue JCN POP2 POP2 #01 JMP2r @@ -874,9 +874,9 @@ JMP2r .preview/x1 LDZ2 .Screen/x DEO2 .preview/y2 LDZ2 #0008 SUB2 .Screen/y DEO2 #03 ;draw-chr/color STA - .settings/ratio LDZ ;draw-byte JSR2 + .settings/ratio LDZ ;draw-byte ( .. ) -JMP2r +JMP2 @draw-colorview ( -- ) @@ -917,7 +917,7 @@ JMP2r #00 .Screen/auto DEO .settings/focus LDZ2 .Screen/addr DEO2 - #10 #00 + #1000 &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 @@ -999,9 +999,9 @@ JMP2r ;make-icn .Screen/addr DEO2 #01 .Screen/sprite DEO ( filepath ) - #01 ;draw-filepath JSR2 + #01 ;draw-filepath ( .. ) -JMP2r +JMP2 @draw-state ( -- ) @@ -1028,16 +1028,22 @@ JMP2r @draw-once ( -- ) .tileview/x1 LDZ2 #0008 SUB2 .tileview/y1 LDZ2 #0008 SUB2 #1010 ;frame-icns ;draw-frame JSR2 - .nametable/x LDZ2 #0008 SUB2 .nametable/y LDZ2 #0008 SUB2 #1010 ;frame-icns ;draw-frame JSR2 + .nametableview/x LDZ2 #0008 SUB2 .nametableview/y LDZ2 #0008 SUB2 #1010 ;frame-icns ;draw-frame JSR2 #01 .Screen/auto DEO JMP2r ( drawing primitives ) +@get-strw ( str* -- width* ) + + ;slen JSR2 #30 SFT2 + +JMP2r + @draw-str-right ( text* -- ) - DUP2 ;get-strw JSR2 STH2 + DUP2 ,get-strw JSR STH2 .Screen/x DEI2k STH2r SUB2 ROT DEO2 @draw-str ( str* -- str* ) @@ -1071,12 +1077,6 @@ JMP2r JMP2r -@get-strw ( str* -- width* ) - - ;slen JSR2 #30 SFT2 - -JMP2r - ( file ) @file-new ( -- ) @@ -1088,15 +1088,9 @@ JMP2r ;filepath #0040 ;mclr JSR2 ;untitled-txt ;filepath ;scpy JSR2 #00 .state/changed STZ ;draw-state JSR2 - ;redraw JSR2 - -JMP2r + ;redraw ( .. ) -@file-rename ( -- ) - - ;trap JSR2 - -JMP2r +JMP2 @file-open ( -- ) @@ -1110,13 +1104,13 @@ JMP2r ;nametable-ext ;filepath ;scap JSR2 #0004 ;mcpy JSR2 ;filepath .File/name DEO2 #0300 .File/length DEO2 - ;spritesheet/nametable .File/read DEO2 + ;nametable .File/read DEO2 ;filepath ;scap JSR2 #0004 SUB2 #0004 ;mclr JSR2 #00 .state/changed STZ ;draw-state JSR2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 @file-open-mono ( -- ) @@ -1131,9 +1125,9 @@ JMP2r INC NEQk ,&loop JCN POP2 #00 .state/changed STZ ;draw-state JSR2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 @file-save ( -- ) @@ -1147,13 +1141,13 @@ JMP2r ;nametable-ext ;filepath ;scap JSR2 #0004 ;mcpy JSR2 ;filepath .File/name DEO2 #0300 .File/length DEO2 - ;spritesheet/nametable .File/write DEO2 + ;nametable .File/write DEO2 ;filepath ;scap JSR2 #0004 SUB2 #0004 ;mclr JSR2 &no-nametable - #00 .state/changed STZ ;draw-state JSR2 + #00 .state/changed STZ ;draw-state ( .. ) -JMP2r +JMP2 @file-save-mono ( -- ) @@ -1165,9 +1159,9 @@ JMP2r #00 OVR #40 SFT2 ;spritesheet ADD2 .File/write DEO2 INC NEQk ,&loop JCN POP2 - #00 .state/changed STZ ;draw-state JSR2 + #00 .state/changed STZ ;draw-state ( .. ) -JMP2r +JMP2 @save-theme ( -- ) @@ -1198,9 +1192,9 @@ JMP2r POP2 INC GTHk ,&ver JCN POP2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 &buf $10 @edit-paste ( -- ) @@ -1216,47 +1210,47 @@ JMP2r POP2 INC GTHk ,&ver JCN POP2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 @edit-cut ( -- ) ;edit-copy JSR2 ;op-erase ;run JSR2 .selection/x1 LDZ2 .selection/x2 STZ2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 ( select ) -@tool-brush ( -- ) #00 ;set-tool JSR2 JMP2r -@tool-selector ( -- ) #01 ;set-tool JSR2 JMP2r -@tool-zoom ( -- ) #02 ;set-tool JSR2 JMP2r +@tool-brush ( -- ) #00 ;set-tool JMP2 +@tool-selector ( -- ) #01 ;set-tool JMP2 +@tool-zoom ( -- ) #02 ;set-tool JMP2 -@move-up ( -- ) #00ff ;mod-selection JSR2 JMP2r -@move-down ( -- ) #0001 ;mod-selection JSR2 JMP2r -@move-left ( -- ) #ff00 ;mod-selection JSR2 JMP2r -@move-right ( -- ) #0100 ;mod-selection JSR2 JMP2r -@move-dech ( -- ) #00ff ;scale-selection JSR2 JMP2r -@move-inch ( -- ) #0001 ;scale-selection JSR2 JMP2r -@move-decw ( -- ) #ff00 ;scale-selection JSR2 JMP2r -@move-incw ( -- ) #0100 ;scale-selection JSR2 JMP2r +@move-up ( -- ) #00ff ;mod-selection JMP2 +@move-down ( -- ) #0001 ;mod-selection JMP2 +@move-left ( -- ) #ff00 ;mod-selection JMP2 +@move-right ( -- ) #0100 ;mod-selection JMP2 +@move-dech ( -- ) #00ff ;scale-selection JMP2 +@move-inch ( -- ) #0001 ;scale-selection JMP2 +@move-decw ( -- ) #ff00 ;scale-selection JMP2 +@move-incw ( -- ) #0100 ;scale-selection JMP2 @move-reset ( -- ) .selection/x1 LDZ2 .selection/x2 STZ2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 ( pick ) -@pick-color1 ( -- ) #00 ;set-color JSR2 JMP2r -@pick-color2 ( -- ) #01 ;set-color JSR2 JMP2r -@pick-color3 ( -- ) #02 ;set-color JSR2 JMP2r -@pick-color4 ( -- ) #03 ;set-color JSR2 JMP2r +@pick-color1 ( -- ) #00 ;set-color JMP2 +@pick-color2 ( -- ) #01 ;set-color JMP2 +@pick-color3 ( -- ) #02 ;set-color JMP2 +@pick-color4 ( -- ) #03 ;set-color JMP2 ( option ) @@ -1264,9 +1258,9 @@ JMP2r ;op-erase ;run JSR2 #01 .state/changed STZ ;draw-state JSR2 - ;redraw JSR2 + ;redraw ( .. ) -JMP2r +JMP2 ( generics )