Browse Source

Optimized tail-calls

main
Devine Lu Linvega 4 years ago
parent
commit
eb2979c099
  1. 2
      build.sh
  2. 3
      src/assets.tal
  3. 186
      src/main.tal

2
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

3
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

186
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 )

Loading…
Cancel
Save