xrxs/uxn-client/xrxs.tal

214 lines
4.9 KiB
Tal
Raw Normal View History

( utility macros )
%INC-X { .Screen/x DEI2 #0008 ADD2 .Screen/x DEO2 } ( -- )
%INC-Y { .Screen/y DEI2 #0008 ADD2 .Screen/y DEO2 } ( -- )
%CENTER-X { .Screen/width DEI2 #01 SFT2 }
%CENTER-Y { .Screen/height DEI2 #01 SFT2 }
%MOD { DIVk MUL SUB }
%MOD2 { DIV2k MUL2 SUB2 }
%NEXT-TILE { DUP2 #0010 ADD2 }
%RTN { JMP2r }
( devices )
|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 &pad $2 &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 ]
|40 @Audio1 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|50 @Audio2 [ &vector $2 &position $2 &output $1 &pad $3 &adsr $2 &length $2 &addr $2 &volume $1 &pitch $1 ]
|60 @Audio3 [ &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 &offset $2 &pad $2 &name $2 &length $2 &load $2 &save $2 ]
|b0 @DateTime [ &year $2 &month $1 &day $1 &hour $1 &minute $1 &second $1 &dotw $1 &doty $2 &isdst $1 ]
( variables )
|0000
@state $1
2021-08-13 06:15:00 +00:00
@ticker $1
@anim-speed $1
@logo-coords [
&x $2
&y $2
]
@cart $64
@realm $64
( program )
|0100
@init ( -> )
( steppewnolf-dark theme )
2021-08-13 06:20:05 +00:00
#02c1 .System/r DEO2
#02cd .System/g DEO2
#02cb .System/b DEO2
2021-08-13 06:20:05 +00:00
;spritesheet .File/name DEO2
#0100 .File/length DEO2
2021-08-13 06:20:05 +00:00
#0000 .File/offset DEO2
;uxnlogo .File/load DEO2
#0200 .File/offset DEO2
;xrxslogo .File/load DEO2
2021-08-13 06:15:00 +00:00
#00 .ticker STZ
#00 .state STZ
#20 .anim-speed STZ
2021-08-13 06:15:00 +00:00
CENTER-X .logo-coords/x STZ2
CENTER-Y .logo-coords/y STZ2
2021-08-13 06:15:00 +00:00
;on-frame .Screen/vector DEO2
BRK
@on-frame ( -> )
( draw a piece of the logos ~ every half second )
2021-08-13 06:15:00 +00:00
.ticker LDZ #01 ADD
DUP .anim-speed LDZ EQU ,&next-render JCN
2021-08-13 06:15:00 +00:00
.ticker STZ
BRK
2021-08-13 06:15:00 +00:00
&next-render
POP #00 .ticker STZ
.state LDZ
2021-08-13 06:15:00 +00:00
DUP #00 NEQ ,&state1 JCN
;draw-uxn-logo JSR2
#01 ADD .state STZ
BRK
&state1 DUP #01 NEQ ,&state2 JCN
;draw-xrxs-logo-xr JSR2
#01 ADD .state STZ
BRK
&state2 DUP #02 NEQ ,&state3 JCN
;draw-xrxs-logo-xs JSR2
2021-08-13 06:15:00 +00:00
#01 ADD .state STZ
BRK
&state3
;clear-screen JSR2
DUP #03 NEQ ,&state4 JCN
#04 .anim-speed STZ
;scoot-logos JSR2
;draw-uxn-logo JSR2
;draw-xrxs-logo-xr JSR2
;draw-xrxs-logo-xs JSR2
.logo-coords/x LDZ2 #0020 GTH2 ,&keep-state JCN
#01 ADD .state STZ BRK
&keep-state POP
BRK
&state4 DUP #04 NEQ ,&state5 JCN
;draw-uxn-logo JSR2
;draw-xrxs-logo-xr JSR2
;draw-xrxs-logo-xs JSR2
POP
BRK
&state5 POP
BRK
@clear-screen ( -> )
( fix this to clear the animation AND fix the overflow! )
.Screen/width DEI2 #0000 &whilex EQU2k ,&endx JCN
DUP2 ,&x STR2
.Screen/height DEI2 #0000 &whiley EQU2k ,&endy JCN
DUP2 ,&y STR2
,&x LDR2 .Screen/x DEO2
,&y LDR2 .Screen/y DEO2
;blank .Screen/addr DEO2
#80 .Screen/sprite DEO
#0008 ADD2 ,&whiley JMP &endy POP2 POP2
#0008 ADD2 ,&whilex JMP &endx POP2 POP2
RTN
&x $2
&y $2
RTN
@scoot-logos ( -> )
.logo-coords/x LDZ2 #0021 LTH2 ,&no-scoot-x JCN
.logo-coords/x LDZ2 #01 SFT2
.logo-coords/x STZ2
&no-scoot-x
.logo-coords/y LDZ2 #0021 LTH2 ,&no-scoot-y JCN
.logo-coords/y LDZ2 #01 SFT2
.logo-coords/y STZ2
&no-scoot-y
RTN
@draw-uxn-logo ( -> )
.logo-coords/x LDZ2 #0020 SUB2 .Screen/x DEO2
.logo-coords/y LDZ2 #0010 SUB2 .Screen/y DEO2
#0100 #0000 &while EQU2k ,&end JCN
DUP2 ;uxnlogo ADD2 .Screen/addr DEO2
#81 .Screen/sprite DEO INC-X
2021-08-13 06:15:00 +00:00
NEXT-TILE #0030 AND2 #0000 NEQ2 ,&no-inc-y JCN
.logo-coords/x LDZ2 #0020 SUB2 .Screen/x DEO2
INC-Y
&no-inc-y
#0010 ADD2 ,&while JMP &end POP2 POP2
RTN
2021-08-13 06:15:00 +00:00
@draw-xrxs-logo-xr ( -> )
.logo-coords/x LDZ2 .Screen/x DEO2
.logo-coords/y LDZ2 #0010 SUB2 .Screen/y DEO2
2021-08-13 06:15:00 +00:00
#0080 #0000 &while EQU2k ,&end JCN
DUP2 ;xrxslogo ADD2 .Screen/addr DEO2
#81 .Screen/sprite DEO INC-X
NEXT-TILE #0030 AND2 #0000 NEQ2 ,&no-inc-y JCN
.logo-coords/x LDZ2 .Screen/x DEO2
2021-08-13 06:15:00 +00:00
INC-Y
&no-inc-y
#0010 ADD2 ,&while JMP &end POP2 POP2
RTN
@draw-xrxs-logo-xs ( -> )
.logo-coords/x LDZ2 .Screen/x DEO2
.logo-coords/y LDZ2 .Screen/y DEO2
2021-08-13 06:15:00 +00:00
#0100 #0080 &while EQU2k ,&end JCN
DUP2 ;xrxslogo ADD2 .Screen/addr DEO2
#81 .Screen/sprite DEO INC-X
2021-08-13 06:15:00 +00:00
NEXT-TILE #0030 AND2 #0000 NEQ2 ,&no-inc-y JCN
.logo-coords/x LDZ2 .Screen/x DEO2
INC-Y
&no-inc-y
#0010 ADD2 ,&while JMP &end POP2 POP2
RTN
( constants )
@spritesheet "xrxs.chr 00
( sprites )
@blank $16
@uxnlogo $128
@xrxslogo $128