uxn/projects/software/boot.tal

410 lines
8.7 KiB
Tal
Raw Normal View History

2021-11-08 13:54:21 -05:00
( launcher )
2021-09-21 12:44:10 -04:00
%+ { ADD } %- { SUB } %* { MUL } %/ { DIV }
%< { LTH } %> { GTH } %= { EQU } %! { NEQ }
%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
2021-11-08 13:54:21 -05:00
%10** { #40 SFT2 } %10// { #04 SFT2 }
2021-11-07 16:23:33 -05:00
2021-11-07 15:55:26 -05:00
%MOD { DIVk MUL SUB }
%DEC { #01 - }
2021-09-21 12:44:10 -04:00
%RTN { JMP2r }
%TOS { #00 SWP }
2021-11-08 13:54:21 -05:00
%SWP? { #01 JCN SWP } %SWP2? { #01 JCN SWP2 }
2021-09-21 12:44:10 -04:00
%BRK? { #01 JCN BRK }
%RTN? { #01 JCN RTN }
%DEBUG { ;print-hex/byte JSR2 #0a .Console/write DEO }
%DEBUG2 { ;print-hex/short JSR2 #0a .Console/write DEO }
( devices )
2021-11-08 13:54:21 -05:00
|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|30 @Audio0 &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1
|80 @Controller &vector $2 &button $1 &key $1
|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &wheel $1
|a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2
|b0 @DateTime &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1
2021-09-21 12:44:10 -04:00
( variables )
|0000
@second $1
2021-09-21 13:45:56 -04:00
@pointer
&x $2 &y $2
2021-11-07 14:30:36 -05:00
@browser
2021-11-08 13:54:21 -05:00
&x $2 &y $2
&sel $1 &last $1
2021-09-21 12:44:10 -04:00
( init )
|0100 ( -> )
( theme )
2021-11-06 12:21:14 -04:00
#f077 .System/r DEO2
#f00c .System/g DEO2
#f02a .System/b DEO2
2021-09-21 12:44:10 -04:00
( vectors )
;on-frame .Screen/vector DEO2
2021-09-21 12:44:10 -04:00
;on-button .Controller/vector DEO2
2021-09-21 13:45:56 -04:00
;on-mouse .Mouse/vector DEO2
2021-09-21 12:44:10 -04:00
2021-11-07 15:55:26 -05:00
( setup synth )
2021-11-08 11:21:23 -05:00
#0102 .Audio0/adsr DEO2
2021-11-07 15:55:26 -05:00
;sin-pcm .Audio0/addr DEO2
#0100 .Audio0/length DEO2
#dd .Audio0/volume DEO ( TODO: turn ON )
2021-11-07 14:30:36 -05:00
( place )
2021-11-07 16:23:33 -05:00
#0088 .browser/x STZ2
2021-11-07 14:30:36 -05:00
#0010 .browser/y STZ2
( draw mascot )
#0010 #0010 #0060 #0060 ;mascot-icn #01 ;draw-icn JSR2
2021-11-07 15:55:26 -05:00
;read-dir JSR2
2021-11-07 14:30:36 -05:00
2021-09-21 13:45:56 -04:00
( theme support )
;load-theme JSR2
2021-11-07 14:30:36 -05:00
2021-11-08 13:54:21 -05:00
( force selection )
#ff .browser/last STZ
2021-11-07 16:23:33 -05:00
#00 ;select-file JSR2
2021-09-21 12:44:10 -04:00
BRK
@on-frame ( -> )
2021-11-07 14:30:36 -05:00
BRK
.DateTime/second DEI .second LDZ ! BRK?
.DateTime/second DEI .second STZ ;draw-time JSR2
BRK
2021-09-21 13:45:56 -04:00
@on-mouse ( -> )
;pointer-icn .Screen/addr DEO2
( clear last cursor )
.pointer/x LDZ2 .Screen/x DEO2
.pointer/y LDZ2 .Screen/y DEO2
#40 .Screen/sprite DEO
( record pointer positions )
.Mouse/x DEI2 .pointer/x STZ2
.Mouse/y DEI2 .pointer/y STZ2
( draw new cursor )
.pointer/x LDZ2 .Screen/x DEO2
.pointer/y LDZ2 .Screen/y DEO2
#41 .Mouse/state DEI #01 = + .Screen/sprite DEO
2021-11-08 13:54:21 -05:00
( select choice )
.Mouse/y DEI2
( clamp ) #0010 GTH2k SWP2? POP2
10// NIP #01 - ;select-file JSR2
.Mouse/state DEI #00 = ,&no-click JCN
.browser/sel LDZ ;run-file JSR2
&no-click
2021-09-21 13:45:56 -04:00
BRK
2021-09-21 12:44:10 -04:00
@on-button ( -> )
2021-11-07 15:55:26 -05:00
.Controller/button DEI
DUP #10 ! ,&no-up JCN
#01 .browser/sel LDZ GTHk SWP? POP DEC ;select-file JSR2
&no-up
DUP #20 ! ,&no-down JCN
.browser/sel LDZ ;dir/lines LDA LTHk SWP? POP INC ;select-file JSR2
&no-down
2021-11-07 16:23:33 -05:00
DUP #01 ! ,&no-a JCN
.browser/sel LDZ ;run-file JSR2
&no-a
2021-11-07 15:55:26 -05:00
POP
2021-09-21 12:44:10 -04:00
BRK
2021-11-07 15:55:26 -05:00
@read-dir ( -- )
;dir/path .File/name DEO2
#1000 .File/length DEO2
;dir/data .File/read DEO2
( count lines )
LITr 00
;dir/data
&while
LDAk #0a ! ,&no-lb JCN
INCr
&no-lb
INC2 LDAk ,&while JCN
POP2
STHr #02 - ;dir/lines STA
RTN
@select-file ( id -- )
2021-11-08 13:54:21 -05:00
DUP .browser/last LDZ ! ,&has-changed JCN
POP RTN
&has-changed
2021-11-07 16:23:33 -05:00
.browser/x LDZ2 #0018 -- .browser/y LDZ2 [ .browser/sel LDZ TOS 10** ++ ]
#0010 #0010
;hand-icn #00 ;draw-icn JSR2
2021-11-07 15:55:26 -05:00
DUP
.browser/sel STZ
2021-11-08 13:54:21 -05:00
DUP
.browser/last STZ
2021-11-08 11:21:23 -05:00
#30 + .Audio0/pitch DEO
2021-11-07 15:55:26 -05:00
;draw-browser JSR2
2021-11-07 16:23:33 -05:00
.browser/x LDZ2 #0018 -- .browser/y LDZ2 [ .browser/sel LDZ TOS 10** ++ ]
#0010 #0010
;hand-icn #02 ;draw-icn JSR2
2021-11-08 11:21:23 -05:00
#0010 #0010 #0060 #0060
;mascot-icn [ .browser/sel LDZ #03 AND TOS #0480 ** ++ ] #01
;draw-icn JSR2
2021-11-07 16:23:33 -05:00
RTN
@run-file ( id -- )
STH
( count lines )
LITr 00
;dir/data
&while
LDAk #0a ! ,&no-lb JCN
INCr
&no-lb
EQUkr STHr ,&end JCN
INC2 LDAk ,&while JCN
&end
POP2r
DUP2 INC2 ;close-path JSR2
#0006 ++ DUP2 ;print-string JSR2
#0a .Console/write DEO
2021-11-08 13:31:33 -05:00
DUP2 ;check-rom JSR2 ,&valid JCN
POP2 RTN
&valid
2021-11-07 16:23:33 -05:00
;load-rom JSR2
RTN
@close-path ( addr* -- )
&while
LDAk #0a ! ,&no-lb JCN
STH2k #00 STH2r STA
,&end JMP
&no-lb
INC2 LDAk ,&while JCN
&end
POP2
RTN
@print-string ( addr* -- )
&loop
LDAk .Console/write DEO
INC2 LDAk ,&loop JCN
POP2
2021-11-07 15:55:26 -05:00
RTN
@redraw ( -- )
2021-11-07 16:23:33 -05:00
( unused )
2021-11-07 14:30:36 -05:00
RTN
2021-11-07 15:55:26 -05:00
@draw-browser ( -- )
2021-11-07 14:30:36 -05:00
2021-11-07 15:55:26 -05:00
( line counter ) #00 STH
2021-11-07 14:30:36 -05:00
.browser/x LDZ2 .Screen/x DEO2
.browser/y LDZ2 .Screen/y DEO2
2021-11-07 15:55:26 -05:00
;dir/data
2021-11-07 14:30:36 -05:00
&loop
LDAk #0a ! ,&no-lb JCN
2021-11-07 16:23:33 -05:00
.browser/x LDZ2 .Screen/x DEO2
2021-11-07 14:30:36 -05:00
.Screen/y DEI2 #0010 ++ .Screen/y DEO2
2021-11-07 15:55:26 -05:00
( incr line counter ) INCr
2021-11-07 14:30:36 -05:00
,&skip JMP
&no-lb
( top-addr ) LDAk #20 - TOS #0010 MUL2 ;font ++ .Screen/addr DEO2
2021-11-07 15:55:26 -05:00
( top-draw ) #01 [ .browser/sel LDZ STHkr = #0c * + ] .Screen/sprite DEO
2021-11-07 14:30:36 -05:00
( bottom-addr ) .Screen/addr DEI2 #0008 ++ .Screen/addr DEO2
( next-y ) .Screen/y DEI2 #0008 ++ .Screen/y DEO2
2021-11-07 15:55:26 -05:00
( bottom-draw ) #01 [ .browser/sel LDZ STHkr = #0c * + ] .Screen/sprite DEO
2021-11-07 14:30:36 -05:00
( prev-y ) .Screen/y DEI2 #0008 -- .Screen/y DEO2
( move ) .Screen/x DEI2 #0008 ++ .Screen/x DEO2
&skip
INC2 LDAk ,&loop JCN
POP2 POPr
RTN
@draw-time ( -- )
.DateTime/day DEI
DUP #0f AND ;hex-char JSR2 ;&date-str #0009 ++ STA
#04 SFT ;hex-char JSR2 ;&date-str #0008 ++ STA
.DateTime/month DEI
DUP #0f AND ;hex-char JSR2 ;&date-str #0006 ++ STA
#04 SFT ;hex-char JSR2 ;&date-str #0005 ++ STA
.DateTime/year DEI2
DUP #0f AND ;hex-char JSR2 ;&date-str #0003 ++ STA
#04 SFT ;hex-char JSR2 ;&date-str #0002 ++ STA
DUP #0f AND ;hex-char JSR2 ;&date-str INC2 STA
#04 SFT ;hex-char JSR2 ;&date-str STA
.DateTime/second DEI
DUP #0f AND ;hex-char JSR2 ;&time-str #0007 ++ STA
#04 SFT ;hex-char JSR2 ;&time-str #0006 ++ STA
.DateTime/minute DEI
DUP #0f AND ;hex-char JSR2 ;&time-str #0004 ++ STA
#04 SFT ;hex-char JSR2 ;&time-str #0003 ++ STA
.DateTime/hour DEI
DUP #0f AND ;hex-char JSR2 ;&time-str INC2 STA
#04 SFT ;hex-char JSR2 ;&time-str STA
#0020 #0080 ;&date-str #01 ;draw-label JSR2
#0080 #0080 ;&time-str #02 ;draw-label JSR2
RTN
&date-str "0000-00-00 $1
&time-str "00:00:00 $1
@hex-char ( hex -- char )
2021-11-07 15:55:26 -05:00
DUP #09 GTH #04 JCN #30 + RTN #57 +
2021-09-21 13:45:56 -04:00
RTN
@draw-icn ( x* y* width* height* addr* color -- )
( load ) STH .Screen/addr DEO2 ,&height STR2 ,&width STR2 ,&y STR2 ,&x STR2
,&height LDR2 #0000
&ver
( save ) DUP2 ,&y LDR2 ADD2 .Screen/y DEO2
,&width LDR2 #0000
&hor
( save ) DUP2 ,&x LDR2 ADD2 .Screen/x DEO2
( draw ) STHkr .Screen/sprite DEO
( incr ) .Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2
#0008 ADD2 GTH2k ,&hor JCN
POP2 POP2
#0008 ADD2 GTH2k ,&ver JCN
POP2 POP2
POPr
RTN
&x $2 &y $2 &width $2 &height $2
2021-09-21 12:44:10 -04:00
@draw-label ( x* y* addr* color -- )
STH STH2
.Screen/y DEO2
.Screen/x DEO2
STH2r
&loop
2021-09-21 13:45:56 -04:00
( top-addr ) LDAk #20 - TOS #0010 MUL2 ;font ++ .Screen/addr DEO2
2021-09-21 12:44:10 -04:00
( top-draw ) STHkr .Screen/sprite DEO
( bottom-addr ) .Screen/addr DEI2 #0008 ++ .Screen/addr DEO2
( next-y ) .Screen/y DEI2 #0008 ++ .Screen/y DEO2
( bottom-draw ) STHkr .Screen/sprite DEO
( prev-y ) .Screen/y DEI2 #0008 -- .Screen/y DEO2
( move ) .Screen/x DEI2 #0008 ++ .Screen/x DEO2
INC2 LDAk ,&loop JCN
POP2 POPr
RTN
2021-09-21 13:45:56 -04:00
( theme )
@theme-txt ".theme $1
@load-theme ( -- )
;theme-txt .File/name DEO2
#0006 .File/length DEO2
2021-11-07 14:10:30 -05:00
#fffa .File/read DEO2
2021-09-21 13:45:56 -04:00
.File/success DEI2 #0006 !! ,&ignore JCN
#fffa LDA2 .System/r DEO2
#fffc LDA2 .System/g DEO2
#fffe LDA2 .System/b DEO2
&ignore
;redraw JSR2
RTN
( helpers )
2021-09-21 12:44:10 -04:00
@print-hex ( value* -- )
2021-11-08 13:54:21 -05:00
2021-09-21 12:44:10 -04:00
&short ( value* -- )
SWP ,&echo JSR
&byte ( value -- )
,&echo JSR
RTN
&echo ( value -- )
STHk #04 SFT ,&parse JSR .Console/write DEO
STHr #0f AND ,&parse JSR .Console/write DEO
RTN
&parse ( value -- char )
DUP #09 GTH ,&above JCN #30 + RTN &above #09 - #60 + RTN
RTN
2021-09-21 13:45:56 -04:00
@pointer-icn
80c0 e0f0 f8e0 1000
2021-11-07 16:23:33 -05:00
@hand-icn
000c 0a0a 1224 4780
0000 0000 0000 fc02
8180 8080 8040 3f00
fc20 c020 c020 c000
2021-09-21 13:45:56 -04:00
2021-11-07 15:55:26 -05:00
@sin-pcm
8083 8689 8c8f 9295 989b 9ea1 a4a7 aaad
b0b3 b6b9 bbbe c1c3 c6c9 cbce d0d2 d5d7
d9db dee0 e2e4 e6e7 e9eb ecee f0f1 f2f4
f5f6 f7f8 f9fa fbfb fcfd fdfe fefe fefe
fffe fefe fefe fdfd fcfb fbfa f9f8 f7f6
f5f4 f2f1 f0ee eceb e9e7 e6e4 e2e0 dedb
d9d7 d5d2 d0ce cbc9 c6c3 c1be bbb9 b6b3
b0ad aaa7 a4a1 9e9b 9895 928f 8c89 8683
807d 7a77 7471 6e6b 6865 625f 5c59 5653
504d 4a47 4542 3f3d 3a37 3532 302e 2b29
2725 2220 1e1c 1a19 1715 1412 100f 0e0c
0b0a 0908 0706 0505 0403 0302 0202 0202
0102 0202 0202 0303 0405 0506 0708 090a
0b0c 0e0f 1012 1415 1719 1a1c 1e20 2225
2729 2b2e 3032 3537 3a3d 3f42 4547 4a4d
5053 5659 5c5f 6265 686b 6e71 7477 7a7d
2021-11-08 13:31:33 -05:00
include projects/library/check-rom.tal
2021-11-06 12:21:14 -04:00
include projects/library/load-rom.tal
include projects/assets/mascot0cx0c.tal
include projects/assets/msx01x02.tal
2021-11-07 14:30:36 -05:00
@dir
&path ". $1
2021-11-07 15:55:26 -05:00
&lines $1
2021-11-07 14:30:36 -05:00
&data