M build.sh => build.sh +1 -0
@@ 6,6 6,7 @@ set -o errexit # Exit immediately if a command exits with a non-zero status.
roms_dir=${UXN_ROMS_DIR-"$HOME/roms"}
asm="uxncli $roms_dir/drifblim.rom"
+asm="uxnasm"
emu="uxnemu"
lin="uxncli $roms_dir/uxnlin.rom"
M etc/nasu.rom => etc/nasu.rom +0 -0
M src/apps.tal => src/apps.tal +24 -34
@@ 433,44 433,34 @@ JMP2r
&on-draw ( win* -- )
- #0008 ADD2 LDA2 ;make-src JSR2 .Disk/name DEO2
-
- ( read start )
- #0003 .Disk/length DEO2
- ;&header .Disk/read DEO2
- ( read body )
- ;&start LDA2 #0100 SUB2 ;seek JSR2
- #0004 .Disk/length DEO2
- ;&end
- DUP2 .Disk/read DEO2
- LDA2 ;&start LDA2 SUB2 .Disk/length DEO2
+ LDA2k #0038 ADD2 .Screen/x DEO2
+ INC2k INC2 LDA2 #001c ADD2 .Screen/y DEO2
+
;mem-ptr JSR2
- DUP2 .Disk/read DEO2
+ DUP2 ;load-metadata JSR2
+ STH2k ;draw-txt JSR2 INC2
+ OVR2 LDA2 #0010 ADD2 .Screen/x DEO2
+ OVR2 INC2 INC2 LDA2 #0020 ADD2 .Screen/y DEO2
+
+ ;metadata/end LDA2 ;metadata/start LDA2
+ SUB2 STH2r ADD2 #0003 SUB2 SWP2
+ &l
+ LDAk STH
+ INC2 LDA2k STHr ;parse-field JSR2
+ INC2 INC2 GTH2k ,&l JCN
+ POP2 POP2
+ ( win* ) POP2
- ( draw body )
- .Screen/x DEI2 STH2 DUP2r LIT2r 0040 ADD2r
- ;draw-lb JSR2
- STH2kr .Screen/x DEO2
- ;draw-str JSR2
- #20 ;draw-chr JSR2
- #05 ;draw-chr/color STA
- ;draw-str JSR2 ;draw-lb JSR2 ;draw-lb JSR2
- STH2kr .Screen/x DEO2
- #0a ;draw-chr/color STA
- ;draw-line JSR2 ;draw-lb JSR2
- STH2r .Screen/x DEO2
- ;draw-line JSR2 ;draw-lb JSR2
- POP2
- ( draw icon )
- STH2r #0008 SUB2 .Screen/x DEO2
- .Screen/y DEI2k #003a SUB2 ROT DEO2
- ;&icon LDA2 #0100 SUB2 ;seek JSR2
- #0200 .Disk/length DEO2
- ;mem-ptr JSR2 STH2k .Disk/read DEO2
- #080e #76 STH2r ;draw-pict-small JSR2
+JMP2r
+
+@parse-field ( value* key -- )
+
+ DUP #83 NEQ ,&no-icon JCN
+ POP #0100 SUB2 ;draw-metaicon JMP2
+ &no-icon
+ POP POP2
JMP2r
- &header $1 &start $2 &end $2 &icon $2
(
@|text )
M src/desktop.tal => src/desktop.tal +1 -1
@@ 369,7 369,7 @@ JMP2
( check )
;get-sel-file JSR2 #0005 ADD2
- DUP2 ;make-src JSR2 ;has-meta JSR2 ,&valid JCN
+ DUP2 ;make-src JSR2 ;has-metadata JSR2 ,&valid JCN
;dict/no-meta SWP2 ;add-err ( .. )
JMP2
M src/potato.tal => src/potato.tal +53 -8
@@ 410,9 410,8 @@ JMP2
@seek ( length* -- )
- .Disk/name DEI2k ROT DEO2
- #0001 .Disk/length DEO2
- #0000
+ .Disk/name DEI2k ROT DEO2
+ #0000 INC2k .Disk/length DEO2
&l
;&b .Disk/read DEO2
INC2 GTH2k ,&l JCN
@@ 1141,6 1140,39 @@ JMP2r
JMP2
+@draw-txt ( txt* -- end* )
+
+ #01 .Screen/auto DEO
+ .Screen/x DEI2 ,&anchor STR2
+ &w
+ LDAk ;draw-chr JSR2
+ LDAk #0a NEQ ,&no-lb JCN
+ [ LIT2 &anchor $2 ] ,draw-lb2 JSR
+ &no-lb
+ INC2 LDAk ,&w JCN
+
+JMP2r
+
+@draw-lb2 ( anchor* -- )
+
+ .Screen/x DEO2
+ .Screen/y DEI2k #0008 ADD2 ROT DEO2
+
+JMP2r
+
+@draw-metaicon ( location* -- )
+
+ ;seek JSR2
+ #0090 .Disk/length DEO2
+ ;metadata/icon
+ DUP2 .Disk/read DEO2
+ .Screen/addr DEO2
+ #26 .Screen/auto DEO
+ #85 .Screen/sprite DEOk DEOk DEO
+
+JMP2r
+
+
@clear-screen ( -- )
#01 .Screen/auto DEO
@@ 1373,16 1405,29 @@ JMP2
JMP2r
-@has-meta ( filename* -- bool )
+@has-metadata ( src* -- bool )
.Disk/name DEO2
#0006 .Disk/length DEO2
- ;&b .Disk/read DEO2
- ,&litport LDR2 #80f0 EQU2
- ,&deo2 LDR #37 EQU AND
+ ;metadata/header .Disk/read DEO2
+ ;metadata/deo LDA2 #0637 EQU2
JMP2r
- &b $3 &litport $2 &deo2 $1
+
+@load-metadata ( addr* -- )
+
+ ;metadata/start LDA2 #0100 SUB2 ;seek JSR2
+ #0002 .Disk/length DEO2
+ ;metadata/end
+ DUP2 .Disk/read DEO2
+ LDA2 ;metadata/start LDA2 SUB2 .Disk/length DEO2
+ .Disk/read DEO2
+
+JMP2r
+
+@metadata
+ &header $1 &start $3 &deo $2 &end $2
+ &icon $90
@save-theme ( -- )