Browse Source

New controller example

main
Devine Lu Linvega 9 months ago
parent
commit
c0d36c3c4c
  1. 283
      projects/examples/devices/controller.tal

283
projects/examples/devices/controller.tal

@ -1,15 +1,14 @@
( Controller: Buttons should highlight on press and display the button and key bytes. )
|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
|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
|0000
|000
@center &x $2 &y $2
@frame &w $2 &h $2 &x0 $2 &y0 $2 &x1 $2 &y1 $2
@center/x $2 &y $2
|0100
|100
@on-reset ( -> )
( | theme )
@ -19,144 +18,174 @@
( | find center )
.Screen/width DEI2 #01 SFT2 .center/x STZ2
.Screen/height DEI2 #01 SFT2 .center/y STZ2
( | place controller )
#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
( | vectors )
controller/<draw>
;on-button .Controller/vector DEO2
( | frame )
.frame/x0 LDZ2 .frame/y0 LDZ2 .frame/x1 LDZ2 .frame/y1 LDZ2 #03 <line-rect>
<draw-controller>
BRK
@on-button ( -> )
<draw-controller>
controller/<draw>
( | print stack on start button )
[ LIT2 08 -Controller/button ] DEI NEQ ?{ #010e DEO }
BRK
(
@|Controller )
@controller/<draw> ( -- )
.Controller/button DEI2
( | background )
.center/x LDZ2 #0040 SUB2 .Screen/x DEO2
.center/y LDZ2 #0020 SUB2 .Screen/y DEO2
#01f9 ;&icns #f6 <draw-times>
( | output )
.Screen/x DEI2 #0010 ADD2 .Screen/x DEO2
.Screen/y DEI2 #0050 SUB2 .Screen/y DEO2
DUP2 hex/<draw-short>
( | A button )
OVR #01 AND #00 EQU ?{
.center/x LDZ2 #0028 ADD2 .Screen/x DEO2
.center/y LDZ2 .Screen/y DEO2
#01fe ;large/icns #16 <draw-times> }
( | B button )
OVR #02 AND #00 EQU ?{
.center/x LDZ2 #0010 ADD2 .Screen/x DEO2
.center/y LDZ2 .Screen/y DEO2
#01fe ;large/icns #16 <draw-times> }
( | C button )
OVR #04 AND #00 EQU ?{
.center/x LDZ2 #0008 SUB2 .Screen/x DEO2
.center/y LDZ2 #0008 ADD2 .Screen/y DEO2
#01ff ;small/icn #16 <draw-times> }
( | S button )
OVR #08 AND #00 EQU ?{
.center/x LDZ2 #0018 SUB2 .Screen/x DEO2
.center/y LDZ2 #0008 ADD2 .Screen/y DEO2
#01ff ;small/icn #16 <draw-times> }
( | Up arrow )
OVR #10 AND #00 EQU ?{
.center/x LDZ2 #0030 SUB2 .Screen/x DEO2
.center/y LDZ2 #0008 SUB2 .Screen/y DEO2
#05ff ;arrow/icn #00 <draw-times> }
( | Down arrow )
OVR #20 AND #00 EQU ?{
.center/x LDZ2 #0030 SUB2 .Screen/x DEO2
.center/y LDZ2 #0008 ADD2 .Screen/y DEO2
#05ff ;arrow/icn #00 <draw-times> }
( | Left arrow )
OVR #40 AND #00 EQU ?{
.center/x LDZ2 #0038 SUB2 .Screen/x DEO2
.center/y LDZ2 .Screen/y DEO2
#05ff ;arrow/icn #00 <draw-times> }
( | Right arrow )
OVR #80 AND #00 EQU ?{
.center/x LDZ2 #0028 SUB2 .Screen/x DEO2
.center/y LDZ2 .Screen/y DEO2
#05ff ;arrow/icn #00 <draw-times> }
POP2 JMP2r
@<draw-times> ( color times addr* auto -- )
.Screen/auto DEO
.Screen/addr DEO2
SWP STH
[ LITr -Screen/sprite ]
&>l
DEOkr
INC DUP ?&>l
POP POP2r JMP2r
(
@|drawing )
@<draw-controller> ( -- )
.Controller/button DEI STH
( | d-pad )
.frame/x0 LDZ2 #0010 ADD2 .Screen/x DEO2
.frame/y0 LDZ2 #0010 ADD2 .Screen/y DEO2
;dpad-up-icn .Screen/addr DEO2
#03 STHkr #04 SFT #01 AND SUB .Screen/sprite DEO
.Screen/y DEI2 #0010 ADD2 .Screen/y DEO2
;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
;dpad-left-icn .Screen/addr DEO2
#03 STHkr #06 SFT #01 AND SUB .Screen/sprite DEO
.Screen/x DEI2 #0010 ADD2 .Screen/x DEO2
;dpad-right-icn .Screen/addr DEO2
#03 STHkr #07 SFT #01 AND SUB .Screen/sprite DEO
.Screen/x DEI2 #0008 SUB2 .Screen/x DEO2
;fill-icn .Screen/addr DEO2
[ LIT2 03 -Screen/sprite ] DEO
( | options )
.center/y LDZ2 #0009 ADD2 .Screen/y DEO2
.center/x LDZ2 #0009 SUB2 .Screen/x DEO2
;option-icn .Screen/addr DEO2
#03 STHkr #03 SFT #01 AND SUB .Screen/sprite DEO
.center/x LDZ2 #0004 ADD2 .Screen/x DEO2
;option-icn .Screen/addr DEO2
#03 STHkr #02 SFT #01 AND SUB .Screen/sprite DEO
( | buttons )
.center/y LDZ2 .Screen/y DEO2
.center/x LDZ2 #0018 ADD2 .Screen/x DEO2
;button-icn .Screen/addr DEO2
#03 STHkr #01 SFT #01 AND SUB .Screen/sprite DEO
.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
;button-icn .Screen/addr DEO2
#03 STHr #01 AND SUB .Screen/sprite DEO
.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
@hex/<draw-short> ( short* -- )
[ LIT2 01 -Screen/auto ] DEO
.Controller/button DEI2 <draw-short>
[ LIT2 00 -Screen/auto ] DEO
JMP2r
@<draw-short> ( short* -- )
SWP <draw-byte>
SWP /<draw-byte>
( >> )
@<draw-byte> ( byte -- )
DUP #04 SFT <draw-hex>
@hex/<draw-byte> ( byte -- )
DUP #04 SFT /<draw-char>
( >> )
@<draw-hex> ( char -- )
#00 SWP #0f AND #30 SFT2 ;font-hex ADD2 .Screen/addr DEO2
@hex/<draw-char> ( char -- )
#00 SWP #0f AND #30 SFT2 ;&icns ADD2 .Screen/addr DEO2
[ LIT2 03 -Screen/sprite ] DEO
JMP2r
@<line-rect> ( x1* y1* x2* y2* color -- )
STH
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 )
[ LIT2 &hor-x2 $2 ] INC2 [ LIT2 &hor-x1 $2 ]
&hor ( -- )
DUP2 .Screen/x DEO2
[ LIT2 &hor-y1 $2 ] .Screen/y DEO2
STHkr .Screen/pixel DEOk [ LIT2 &hor-y2 $2 ] .Screen/y DEO2
DEO
INC2 GTH2k ?&hor
POP2 POP2
( | vertical )
[ LIT2 &ver-y2 $2 ] [ LIT2 &ver-y1 $2 ]
&ver ( -- )
DUP2 .Screen/y DEO2
[ LIT2 &ver-x1 $2 ] .Screen/x DEO2
STHkr .Screen/pixel DEOk [ LIT2 &ver-x2 $2 ] .Screen/x DEO2
DEO
INC2 GTH2k ?&ver
POP2 POP2 POPr JMP2r
(
@|assets )
@fill-icn [ ffff ffff ffff ffff ]
@dpad-up-icn [ 7eff e7c3 ffff ffff ]
@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
&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 ]
@large/icns [
071f 3f7f 7fff ffff e0f8 fcfe feff ffff
ffff ff7f 7f3f 1f07 ffff fffe fefc f8e0 ]
@small/icn [ 0000 001f 3f3f 3f1f 0000 00f8 fcfc fcf8 ]
@arrow/icn [ 187e 7eff ff7e 7e18 ]
@controller/icns [
0000 0f30 4040 8080 0000 ff00 0000 0000
0042 8100 0000 0000 0000 ff00 0000 0000
0000 ff00 0000 0000 0000 ff00 0000 0000
0000 ff00 0000 0000 0000 ff00 0000 0000
0000 ff00 0000 0000 0000 ff00 0000 0000
0000 ff00 0000 0000 0000 ff00 0000 0000
0000 ff00 0000 0000 0000 ff00 0000 0000
0000 ff00 0000 0000 0000 f00c 0202 0101
8080 8080 8080 8080 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0101 0101 0101 0101
8080 8080 8080 8080 0000 0000 0000 0000
0000 0000 0000 0018 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0302 0000 0000 0000 8040
0000 0000 0000 0000 0000 0000 0000 0102
0000 0000 0000 8040 0101 0101 0101 0101
8080 8080 8080 8080 0000 0001 0101 011f
6681 8100 0000 0000 0000 0080 8080 80f8
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0203 0202 0300 0000 4080 4040 8000 0000
0000 0000 0000 0000 0203 0202 0200 0000
40c0 4040 4000 0000 0101 0101 0101 0101
8080 8081 8180 8080 6080 8000 0080 8060
0000 0000 0000 0000 0601 0100 0001 0106
0000 0080 8000 0000 0001 0202 0100 0201
0080 4000 8040 4080 0001 0202 0202 0201
0080 4000 0000 4080 0000 0000 0000 0000
0718 2040 4080 8080 e018 0402 0201 0101
0000 0000 0000 0000 0718 2040 4080 8080
e018 0402 0201 0101 0101 0101 0101 0101
8080 8080 8080 8080 1f01 0101 0100 0000
0000 0000 0081 8166 f880 8080 8000 0000
0000 0000 0000 0000 0000 001f 2020 201f
0000 00f8 0404 04f8 0000 001f 2020 201f
0000 00f8 0404 04f8 0000 0000 0000 0000
8080 8040 4020 1807 0101 0102 0204 18e0
0000 0000 0000 0000 8080 8040 4020 1807
0101 0102 0204 18e0 0101 0101 0101 0101
8080 8080 4040 300f 0000 0000 0000 00ff
1800 0000 0000 00ff 0000 0000 0000 00ff
0000 0000 0000 00ff 0000 0000 0000 00ff
0000 0000 0000 00ff 0000 0000 0000 00ff
0000 0000 0000 00ff 0000 0000 0000 00ff
0000 0000 0000 00ff 0000 0000 0000 00ff
0000 0000 0000 00ff 0000 0000 0000 00ff
0000 0000 0000 00ff 0101 0101 0202 0cf0 ]
@hex/icns [
0018 2424 2424 2418 0008 1808 0808 0808
0018 2404 1820 203c 0018 2404 1804 2418
0024 2424 1c04 0404 003c 2020 1804 2418
0018 2420 3824 2418 003c 0408 1010 1010
0018 2424 1824 2418 0018 2424 1c04 2418
0018 2424 3c24 2424 0038 2424 3824 2438
0018 2420 2020 2418 0038 2424 2424 2438
001c 2020 3820 201c 001c 2020 3820 2020 ]

Loading…
Cancel
Save