uxn/projects/examples/devices/controller.tal

163 lines
4.4 KiB
Tal
Raw Normal View History

2024-01-15 18:21:04 -05:00
( Controller: Buttons should highlight on press and display the button and key bytes. )
2021-08-02 14:15:21 -04:00
|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
|80 @Controller &vector $2 &button $1 &key $1
2021-08-02 14:15:21 -04:00
|0000
2024-01-15 18:21:04 -05:00
@center &x $2 &y $2
@frame &w $2 &h $2 &x0 $2 &y0 $2 &x1 $2 &y1 $2
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
|0100
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
@on-reset ( -> )
( | theme )
#0fff .System/r DEO2
#0f0f .System/g DEO2
#0f0f .System/b DEO2
2024-01-15 18:21:04 -05:00
( | find center )
2021-08-02 14:15:21 -04:00
.Screen/width DEI2 #01 SFT2 .center/x STZ2
2024-01-15 18:21:04 -05:00
.Screen/height DEI2 #01 SFT2 .center/y STZ2
( | place controller )
2021-08-02 14:15:21 -04:00
#0068 .frame/w STZ2
#0030 .frame/h STZ2
.center/x LDZ2 .frame/w LDZ2 #01 SFT2 SUB2 .frame/x0 STZ2
.center/y LDZ2 .frame/h LDZ2 #01 SFT2 SUB2 .frame/y0 STZ2
.frame/x0 LDZ2 .frame/w LDZ2 ADD2 .frame/x1 STZ2
.frame/y0 LDZ2 .frame/h LDZ2 ADD2 .frame/y1 STZ2
2024-01-15 18:21:04 -05:00
( | vectors )
2021-08-02 14:15:21 -04:00
;on-button .Controller/vector DEO2
2024-01-15 18:21:04 -05:00
( | frame )
.frame/x0 LDZ2 .frame/y0 LDZ2 .frame/x1 LDZ2 .frame/y1 LDZ2 #03 <line-rect>
<draw-controller>
BRK
2021-08-02 14:15:21 -04:00
@on-button ( -> )
2024-01-15 18:21:04 -05:00
<draw-controller>
( | print stack on start button )
[ LIT2 08 -Controller/button ] DEI NEQ ?{ #010e DEO }
BRK
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
(
@|drawing )
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
@<draw-controller> ( -- )
2021-08-02 14:15:21 -04:00
.Controller/button DEI STH
2024-01-15 18:21:04 -05:00
( | d-pad )
.frame/x0 LDZ2 #0010 ADD2 .Screen/x DEO2
.frame/y0 LDZ2 #0010 ADD2 .Screen/y DEO2
2024-01-15 18:21:04 -05:00
;dpad-up-icn .Screen/addr DEO2
#03 STHkr #04 SFT #01 AND SUB .Screen/sprite DEO
.Screen/y DEI2 #0010 ADD2 .Screen/y DEO2
2024-01-15 18:21:04 -05:00
;dpad-down-icn .Screen/addr DEO2
#03 STHkr #05 SFT #01 AND SUB .Screen/sprite DEO
.Screen/y DEI2 #0008 SUB2 .Screen/y DEO2
.Screen/x DEI2 #0008 SUB2 .Screen/x DEO2
2024-01-15 18:21:04 -05:00
;dpad-left-icn .Screen/addr DEO2
#03 STHkr #06 SFT #01 AND SUB .Screen/sprite DEO
.Screen/x DEI2 #0010 ADD2 .Screen/x DEO2
2024-01-15 18:21:04 -05:00
;dpad-right-icn .Screen/addr DEO2
#03 STHkr #07 SFT #01 AND SUB .Screen/sprite DEO
.Screen/x DEI2 #0008 SUB2 .Screen/x DEO2
2024-01-15 18:21:04 -05:00
;fill-icn .Screen/addr DEO2
2023-03-06 00:09:38 -05:00
[ LIT2 03 -Screen/sprite ] DEO
2024-01-15 18:21:04 -05:00
( | options )
.center/y LDZ2 #0009 ADD2 .Screen/y DEO2
.center/x LDZ2 #0009 SUB2 .Screen/x DEO2
2024-01-15 18:21:04 -05:00
;option-icn .Screen/addr DEO2
#03 STHkr #03 SFT #01 AND SUB .Screen/sprite DEO
.center/x LDZ2 #0004 ADD2 .Screen/x DEO2
2024-01-15 18:21:04 -05:00
;option-icn .Screen/addr DEO2
#03 STHkr #02 SFT #01 AND SUB .Screen/sprite DEO
2024-01-15 18:21:04 -05:00
( | buttons )
.center/y LDZ2 .Screen/y DEO2
.center/x LDZ2 #0018 ADD2 .Screen/x DEO2
2024-01-15 18:21:04 -05:00
;button-icn .Screen/addr DEO2
2022-05-31 16:25:41 -04:00
#03 STHkr #01 SFT #01 AND SUB .Screen/sprite DEO
2024-01-15 18:21:04 -05:00
.Screen/y DEI2 #000a ADD2 .Screen/y DEO2
;font-hex/b .Screen/addr DEO2
[ LIT2 03 -Screen/sprite ] DEO
.center/y LDZ2 .Screen/y DEO2
.center/x LDZ2 #0024 ADD2 .Screen/x DEO2
2024-01-15 18:21:04 -05:00
;button-icn .Screen/addr DEO2
2022-05-31 16:25:41 -04:00
#03 STHr #01 AND SUB .Screen/sprite DEO
2024-01-15 18:21:04 -05:00
.Screen/y DEI2 #000a ADD2 .Screen/y DEO2
;font-hex/a .Screen/addr DEO2
[ LIT2 03 -Screen/sprite ] DEO
.center/x LDZ2 #0010 SUB2 .Screen/x DEO2
.center/y LDZ2 #0010 SUB2 .Screen/y DEO2
2024-01-15 18:21:04 -05:00
[ LIT2 01 -Screen/auto ] DEO
.Controller/button DEI2 <draw-short>
[ LIT2 00 -Screen/auto ] DEO
JMP2r
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
@<draw-short> ( short* -- )
SWP <draw-byte>
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
@<draw-byte> ( byte -- )
DUP #04 SFT <draw-hex>
2024-01-15 18:21:04 -05:00
@<draw-hex> ( char -- )
#00 SWP #0f AND #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
2023-03-06 00:09:38 -05:00
[ LIT2 03 -Screen/sprite ] DEO
2024-01-15 18:21:04 -05:00
JMP2r
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
@<line-rect> ( x1* y1* x2* y2* color -- )
2022-02-21 13:30:55 -05:00
STH
2024-01-15 18:21:04 -05:00
DUP2 ,&ver-y2 STR2
,&hor-y2 STR2
DUP2 ,&ver-x2 STR2
,&hor-x2 STR2
DUP2 ,&ver-y1 STR2
,&hor-y1 STR2
DUP2 ,&ver-x1 STR2
,&hor-x1 STR2
( | horizontal )
2022-02-21 13:30:55 -05:00
[ LIT2 &hor-x2 $2 ] INC2 [ LIT2 &hor-x1 $2 ]
2024-01-15 18:21:04 -05:00
&hor ( -- )
2022-02-21 13:30:55 -05:00
DUP2 .Screen/x DEO2
2024-01-15 18:21:04 -05:00
[ LIT2 &hor-y1 $2 ] .Screen/y DEO2
STHkr .Screen/pixel DEOk [ LIT2 &hor-y2 $2 ] .Screen/y DEO2
DEO
2023-03-06 00:09:38 -05:00
INC2 GTH2k ?&hor
2022-02-21 13:30:55 -05:00
POP2 POP2
2024-01-15 18:21:04 -05:00
( | vertical )
2022-02-21 13:30:55 -05:00
[ LIT2 &ver-y2 $2 ] [ LIT2 &ver-y1 $2 ]
2024-01-15 18:21:04 -05:00
&ver ( -- )
2022-02-21 13:30:55 -05:00
DUP2 .Screen/y DEO2
2024-01-15 18:21:04 -05:00
[ LIT2 &ver-x1 $2 ] .Screen/x DEO2
STHkr .Screen/pixel DEOk [ LIT2 &ver-x2 $2 ] .Screen/x DEO2
DEO
2023-03-06 00:09:38 -05:00
INC2 GTH2k ?&ver
2024-01-15 18:21:04 -05:00
POP2 POP2 POPr JMP2r
(
@|assets )
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
@fill-icn [ ffff ffff ffff ffff ]
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
@dpad-up-icn [ 7eff e7c3 ffff ffff ]
2021-08-02 14:15:21 -04:00
2024-01-15 18:21:04 -05:00
@dpad-down-icn [ ffff ffff c3e7 ff7e ]
@dpad-left-icn [ 7fff efcf cfef ff7f ]
@dpad-right-icn [ feff f7f3 f3f7 fffe ]
@option-icn [ 0000 7eff ff7e 0000 ]
@button-icn [ 3c7e ffff ffff 7e3c ]
@font-hex [
007c 8282 8282 827c 0030 1010 1010 1010
007c 8202 7c80 80fe 007c 8202 1c02 827c
000c 1424 4484 fe04 00fe 8080 7c02 827c
007c 8280 fc82 827c 00fe 0202 0408 1010
007c 8282 7c82 827c 007c 8282 7e02 827c
2024-01-15 18:21:04 -05:00
&a 007c 8202 7e82 827e &b 00fc 8282
fc82 82fc 007c 8280 8080 827c 00fc 8282
8282 82fc 00fe 8080 fe80 80fe 00fe 8080
f080 8080 ]