initial controller support. needs work

This commit is contained in:
Nico 2021-11-02 11:36:30 +00:00
parent 073fb10abb
commit eea3932a3d
4 changed files with 784 additions and 5 deletions

View File

@ -0,0 +1,435 @@
/* keymaps for varvara. Originally lifted from rockboy */
#ifdef HAVE_TOUCHSCREEN
#define VARVARA_LEFT BUTTON_MIDLEFT
#define VARVARA_RIGHT BUTTON_MIDRIGHT
/*#elif defined(BUTTON_LEFT) && defined(BUTTON_RIGHT)
#define VARVARA_LEFT BUTTON_LEFT
*/#define VARVARA_RIGHT BUTTON_RIGHT
#else
#warning "LEFT/RIGHT not defined!"
#endif
#if CONFIG_KEYPAD == IRIVER_H100_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_ON
#define VARVARA_B BUTTON_OFF
#define VARVARA_START BUTTON_REC
#define VARVARA_SELECT BUTTON_SELECT
#define VARVARA_MENU BUTTON_MODE
#elif CONFIG_KEYPAD == IRIVER_H300_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_REC
#define VARVARA_B BUTTON_MODE
#define VARVARA_START BUTTON_ON
#define VARVARA_SELECT BUTTON_SELECT
#define VARVARA_MENU BUTTON_OFF
#elif CONFIG_KEYPAD == IPOD_4G_PAD
#define VARVARA_UP BUTTON_MENU
#define VARVARA_DOWN BUTTON_PLAY
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_NONE
#define VARVARA_B BUTTON_NONE
#define VARVARA_START BUTTON_SELECT
#define VARVARA_SELECT BUTTON_NONE
#define VARVARA_MENU (BUTTON_SELECT | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == GIGABEAT_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_A
#define VARVARA_SELECT BUTTON_SELECT
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == SANSA_E200_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_SELECT
#define VARVARA_B BUTTON_REC
/* TODO make scrolling work as a button instead of removing this */
#define VARVARA_START BUTTON_NONE // BUTTON_SCROLL_BACK
#define VARVARA_SELECT BUTTON_NONE // BUTTON_SCROLL_FWD
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == SANSA_FUZE_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_SELECT
#define VARVARA_B BUTTON_HOME
#define VARVARA_START BUTTON_NONE //BUTTON_SCROLL_BACK
#define VARVARA_SELECT BUTTON_NONE //BUTTON_SCROLL_FWD
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == SANSA_C200_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_SELECT
#define VARVARA_B BUTTON_REC
#define VARVARA_START BUTTON_VOL_DOWN
#define VARVARA_SELECT BUTTON_VOL_UP
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == SANSA_CLIP_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_SELECT
#define VARVARA_B BUTTON_HOME
#define VARVARA_START BUTTON_VOL_DOWN
#define VARVARA_SELECT BUTTON_VOL_UP
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_PLAY
#define VARVARA_B BUTTON_REC
#define VARVARA_START BUTTON_SELECT
#define VARVARA_SELECT BUTTON_NONE
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
#define VARVARA_UP BUTTON_NONE //BUTTON_SCROLL_UP
#define VARVARA_DOWN BUTTON_NONE // BUTTON_SCROLL_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_PLAY
#define VARVARA_B BUTTON_FF
#define VARVARA_START BUTTON_REW
#define VARVARA_SELECT BUTTON_NONE
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == MROBE500_PAD
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == COWON_D2_PAD
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_PLUS
#define VARVARA_B BUTTON_MINUS
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_PLAY
#define VARVARA_SELECT BUTTON_SELECT
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == CREATIVEZVM_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_CUSTOM
#define VARVARA_B BUTTON_PLAY
#define VARVARA_START BUTTON_BACK
#define VARVARA_SELECT BUTTON_SELECT
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == CREATIVE_ZENXFI3_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_PLAY
#define VARVARA_SELECT BUTTON_NONE
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_VIEW
#define VARVARA_SELECT BUTTON_SELECT
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == PHILIPS_HDD6330_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_NEXT
#define VARVARA_SELECT BUTTON_PLAY
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_RIGHT
#define VARVARA_SELECT BUTTON_LEFT
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == ONDAVX747_PAD
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == ONDAVX777_PAD
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == SAMSUNG_YH92X_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_A BUTTON_PLAY
#define VARVARA_B BUTTON_FFWD
#define VARVARA_START BUTTON_REW
#define VARVARA_SELECT BUTTON_NONE
#define VARVARA_MENU BUTTON_REC_SW_ON
#elif CONFIG_KEYPAD == SAMSUNG_YH820_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_PLAY
#define VARVARA_B BUTTON_FFWD
#define VARVARA_START BUTTON_REW
#define VARVARA_SELECT BUTTON_NONE
#define VARVARA_MENU BUTTON_REC
#elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
#define VARVARA_UP BUTTON_OK
#define VARVARA_DOWN BUTTON_CANCEL
#define VARVARA_LEFT BUTTON_PREV
#define VARVARA_RIGHT BUTTON_NEXT
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_POWER
#define VARVARA_B BUTTON_REC
#define VARVARA_START BUTTON_PLAY
#define VARVARA_SELECTBUTTON_UP
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == MPIO_HD300_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_REW
#define VARVARA_RIGHT BUTTON_FF
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_PLAY
#define VARVARA_B BUTTON_REC
#define VARVARA_START (BUTTON_PLAY | BUTTON_REPEAT)
#define VARVARA_SELECTBUTTON_ENTER
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_SELECT
#define VARVARA_SELECTBUTTON_PLAYPAUSE
#define VARVARA_MENU BUTTON_BACK
#elif CONFIG_KEYPAD == SANSA_CONNECT_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_PREV
#define VARVARA_SELECTBUTTON_NEXT
#define VARVARA_MENU BUTTON_SELECT
#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_SELECT
#define VARVARA_B BUTTON_BACK
#define VARVARA_START BUTTON_POWER
#define VARVARA_SELECTBUTTON_USER
#define VARVARA_MENU BUTTON_MENU
#elif CONFIG_KEYPAD == HM801_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_PREV
#define VARVARA_B BUTTON_NEXT
#define VARVARA_START BUTTON_PLAY
#define VARVARA_SELECTBUTTON_SELECT
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == SONY_NWZ_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_START BUTTON_PLAY
#define VARVARA_MENU BUTTON_BACK
#define VARVARA_SELECT(BUTTON_POWER|BUTTON_PLAY)
#define VARVARA_A (BUTTON_POWER|BUTTON_LEFT)
#define VARVARA_B (BUTTON_POWER|BUTTON_RIGHT)
#elif CONFIG_KEYPAD == CREATIVE_ZEN_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_START BUTTON_BACK
#define VARVARA_MENU BUTTON_MENU
#define VARVARA_SELECTBUTTON_SELECT
#define VARVARA_A BUTTON_SHORTCUT
#define VARVARA_B BUTTON_PLAYPAUSE
#elif CONFIG_KEYPAD == DX50_PAD
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_MENU BUTTON_POWER
#define VARVARA_START BUTTON_LEFT
#define VARVARA_SELECT BUTTON_RIGHT
#elif CONFIG_KEYPAD == CREATIVE_ZENXFI2_PAD
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == AGPTEK_ROCKER_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_START BUTTON_SELECT
#define VARVARA_MENU BUTTON_POWER
#define VARVARA_SELECTBUTTON_SELECT|BUTTON_REPEAT
#define VARVARA_A BUTTON_VOLDOWN
#define VARVARA_B BUTTON_VOLUP
#elif CONFIG_KEYPAD == XDUOO_X3_PAD
#define VARVARA_LEFT BUTTON_PREV
#define VARVARA_RIGHT BUTTON_NEXT
#define VARVARA_DOWN BUTTON_OPTION
#define VARVARA_UP BUTTON_HOME
#define VARVARA_A BUTTON_PLAY
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_VOL_UP
#define VARVARA_SELECT BUTTON_NONE
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == XDUOO_X3II_PAD || CONFIG_KEYPAD == XDUOO_X20_PAD
#define VARVARA_UP BUTTON_PREV
#define VARVARA_DOWN BUTTON_NEXT
#define VARVARA_A BUTTON_HOME
#define VARVARA_B BUTTON_OPTION
#define VARVARA_START BUTTON_VOL_DOWN
#define VARVARA_SELECT BUTTON_VOL_UP
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == FIIO_M3K_LINUX_PAD
#define VARVARA_UP BUTTON_PREV
#define VARVARA_DOWN BUTTON_NEXT
#define VARVARA_A BUTTON_HOME
#define VARVARA_B BUTTON_OPTION
#define VARVARA_START BUTTON_VOL_DOWN
#define VARVARA_SELECT BUTTON_VOL_UP
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == IHIFI_770_PAD || CONFIG_KEYPAD == IHIFI_800_PAD
#define VARVARA_UP BUTTON_PREV
#define VARVARA_DOWN BUTTON_NEXT
#define VARVARA_A BUTTON_VOL_UP
#define VARVARA_B BUTTON_VOL_DOWN
#define VARVARA_START BUTTON_PLAY
#define VARVARA_SELECT BUTTON_HOME
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == EROSQ_PAD
#define VARVARA_UP BUTTON_PREV
#define VARVARA_DOWN BUTTON_NEXT
#define VARVARA_LEFT BUTTON_NONE // BUTTON_SCROLL_BACK
#define VARVARA_RIGHT BUTTON_NONE // BUTTON_SCROLL_FWD
#define VARVARA_A BUTTON_MENU
#define VARVARA_B BUTTON_BACK
#define VARVARA_START BUTTON_VOL_DOWN
#define VARVARA_SELECT BUTTON_VOL_UP
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == FIIO_M3K_PAD
#define VARVARA_UP BUTTON_UP
#define VARVARA_DOWN BUTTON_DOWN
#define VARVARA_LEFT BUTTON_LEFT
#define VARVARA_RIGHT BUTTON_RIGHT
#define VARVARA_A BUTTON_MENU
#define VARVARA_B BUTTON_BACK
#define VARVARA_START BUTTON_VOL_DOWN
#define VARVARA_SELECT BUTTON_VOL_UP
#define VARVARA_MENU BUTTON_POWER
#elif CONFIG_KEYPAD == SHANLING_Q1_PAD
#define /* use touchscreen */
#else
#error No Keymap Defined!
#endif
#ifdef HAVE_TOUCHSCREEN
#define VARVARA_UP BUTTON_TOPMIDDLE
#define VARVARA_DOWN BUTTON_BOTTOMMIDDLE
#define VARVARA_START BUTTON_TOPRIGHT
#define VARVARA_SELECT BUTTON_CENTER
#if CONFIG_KEYPAD == MROBE500_PAD
#define VARVARA_A BUTTON_BOTTOMLEFT
#define VARVARA_B BUTTON_BOTTOMRIGHT
#elif (CONFIG_KEYPAD != COWON_D2_PAD ) || (CONFIG_KEYPAD != DX50_PAD )
#define VARVARA_A BUTTON_BOTTOMLEFT
#define VARVARA_B BUTTON_BOTTOMRIGHT
#define VARVARA_MENU BUTTON_TOPLEFT
#endif
#endif

Binary file not shown.

View File

@ -0,0 +1,185 @@
( dev/controller/keys )
%+ { ADD } %- { SUB } %/ { DIV }
%< { LTH } %> { GTH } %= { EQU } %! { NEQ }
%++ { ADD2 } %-- { SUB2 } %// { DIV2 }
%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
%RTN { JMP2r }
%TOS { #00 SWP }
%LTS2 { #8000 ++ SWP2 #8000 ++ >> }
( devices )
|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 ]
|80 @Controller [ &vector $2 &button $1 &key $1 ]
( variables )
|0000
@center
&x $2
&y $2
@frame
&w $2 &h $2
&x0 $2 &y0 $2
&x1 $2 &y1 $2
@color $1
@rect
&x1 $2 &y1 $2
&x2 $2 &y2 $2
( init )
|0100 ( -> )
( theme )
#0ff7 .System/r DEO2
#0f07 .System/g DEO2
#0f07 .System/b DEO2
( 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 #0002 // -- .frame/x0 STZ2
.center/y LDZ2 .frame/h LDZ2 #0002 // -- .frame/y0 STZ2
.frame/x0 LDZ2 .frame/w LDZ2 ++ .frame/x1 STZ2
.frame/y0 LDZ2 .frame/h LDZ2 ++ .frame/y1 STZ2
( vectors )
;on-button .Controller/vector DEO2
;draw-controller JSR2
BRK
@on-button ( -> )
;draw-controller JSR2
BRK
@draw-controller ( -- )
.Controller/button DEI STH
( frame )
.frame/x0 LDZ2 .frame/y0 LDZ2
.frame/x1 LDZ2 .frame/y1 LDZ2
#01 ;line-rect JSR2
( d-pad )
.frame/x0 LDZ2 #0010 ++ .Screen/x DEO2
.frame/y0 LDZ2 #0010 ++ .Screen/y DEO2
;controller-icn/dpad-up .Screen/addr DEO2
#03 [ STHkr #04 SFT #01 AND DUP + - ] .Screen/sprite DEO
.Screen/y DEI2 #0010 ++ .Screen/y DEO2
;controller-icn/dpad-down .Screen/addr DEO2
#03 [ STHkr #05 SFT #01 AND DUP + - ] .Screen/sprite DEO
.Screen/y DEI2 #0008 -- .Screen/y DEO2
.Screen/x DEI2 #0008 -- .Screen/x DEO2
;controller-icn/dpad-left .Screen/addr DEO2
#03 [ STHkr #06 SFT #01 AND DUP + - ] .Screen/sprite DEO
.Screen/x DEI2 #0010 ++ .Screen/x DEO2
;controller-icn/dpad-right .Screen/addr DEO2
#03 [ STHkr #07 SFT #01 AND DUP + - ] .Screen/sprite DEO
.Screen/x DEI2 #0008 -- .Screen/x DEO2
;controller-icn/dpad .Screen/addr DEO2
#03 .Screen/sprite DEO
( options )
.center/y LDZ2 #0009 ++ .Screen/y DEO2
.center/x LDZ2 #0009 -- .Screen/x DEO2
;controller-icn/option .Screen/addr DEO2
#03 [ STHkr #02 SFT #01 AND DUP + - ] .Screen/sprite DEO
.center/x LDZ2 #0004 ++ .Screen/x DEO2
;controller-icn/option .Screen/addr DEO2
#03 [ STHkr #03 SFT #01 AND DUP + - ] .Screen/sprite DEO
( buttons )
.center/y LDZ2 #0000 ++ .Screen/y DEO2
.center/x LDZ2 #0018 ++ .Screen/x DEO2
;controller-icn/button .Screen/addr DEO2
#03 [ STHkr #01 SFT #01 AND - ] .Screen/sprite DEO
.Screen/y DEI2 #000a ++ .Screen/y DEO2
;font-hex #000b #30 SFT2 ++ .Screen/addr DEO2
#03 .Screen/sprite DEO
.center/y LDZ2 #0000 ++ .Screen/y DEO2
.center/x LDZ2 #0024 ++ .Screen/x DEO2
;controller-icn/button .Screen/addr DEO2
#03 [ STHr #01 AND - ] .Screen/sprite DEO
.Screen/y DEI2 #000a ++ .Screen/y DEO2
;font-hex #000a #30 SFT2 ++ .Screen/addr DEO2
#03 .Screen/sprite DEO
.center/x LDZ2 #0010 -- .Screen/x DEO2
.center/y LDZ2 #0010 -- .Screen/y DEO2
.Controller/button DEI2 #03 ;draw-short JSR2
RTN
( generics )
@draw-short ( short* color -- )
STH SWP
DUP #04 SFT TOS #30 SFT2 ;font-hex ++ .Screen/addr DEO2
( draw ) STHkr .Screen/sprite DEO
#0f AND TOS #30 SFT2 ;font-hex ++ .Screen/addr DEO2
.Screen/x DEI2 #0008 ++ .Screen/x DEO2
( draw ) STHkr .Screen/sprite DEO
DUP #04 SFT TOS #30 SFT2 ;font-hex ++ .Screen/addr DEO2
.Screen/x DEI2 #0008 ++ .Screen/x DEO2
( draw ) STHkr .Screen/sprite DEO
#0f AND TOS #30 SFT2 ;font-hex ++ .Screen/addr DEO2
.Screen/x DEI2 #0008 ++ .Screen/x DEO2
( draw ) STHr .Screen/sprite DEO
RTN
@line-rect ( x1* y1* x2* y2* color -- )
( load ) .color STZ DUP2 STH2 .rect/y2 STZ2 .rect/x2 STZ2 DUP2 STH2 .rect/y1 STZ2 .rect/x1 STZ2
STH2r INC2 STH2r
&ver
( save ) OVR2 .Screen/y DEO2
( draw ) .rect/x1 LDZ2 .Screen/x DEO2 .color LDZ DUP .Screen/pixel DEO
( draw ) .rect/x2 LDZ2 .Screen/x DEO2 .Screen/pixel DEO
( incr ) SWP2 INC2 SWP2
OVR2 OVR2 LTS2 ,&ver JCN
POP2 POP2
.rect/x1 LDZ2 INC2 .rect/x2 LDZ2 #0001 --
&hor
( save ) OVR2 .Screen/x DEO2
( draw ) .rect/y1 LDZ2 .Screen/y DEO2 .color LDZ DUP .Screen/pixel DEO
( draw ) .rect/y2 LDZ2 .Screen/y DEO2 .Screen/pixel DEO
( incr ) SWP2 INC2 SWP2
OVR2 OVR2 INC2 LTS2 ,&hor JCN
POP2 POP2
RTN
@controller-icn
&dpad ffff ffff ffff ffff
&dpad-up 7eff e7c3 ffff ffff
&dpad-down ffff ffff c3e7 ff7e
&dpad-left 7fff efcf cfef ff7f
&dpad-right feff f7f3 f3f7 fffe
&option 0000 7eff ff7e 0000
&button 3c7e ffff ffff 7e3c
@font-hex
003c 4242 4242 3c00 0018 0808 0808 1c00
003c 4202 3c40 7e00 003c 421c 0242 3c00
000c 1424 447e 0400 007e 407c 0242 3c00
003c 407c 4242 3c00 007e 0204 0810 1000
003c 423c 4242 3c00 003c 4242 3e02 3c00
003c 4242 7e42 4200 007c 427c 4242 7c00
003c 4240 4042 3c00 007c 4242 4242 7c00
007e 4078 4040 7e00 007e 4078 4040 4000

View File

@ -19,7 +19,7 @@ TODO clean up
#include "uxn.h"
#include "devices/ppu.h"
#include "plugin.h"
#include "lib/pluginlib_actions.h"
#include "keymaps.h"
#include <stdio.h>
#include <stdint.h>
#include <time.h>
@ -34,7 +34,7 @@ const Uint8 hwrom[] = { /* hello world ROM */
0x21,
};
const Uint8 uxn_rom[] = { /* screen test ROM */
const Uint8 screen_rom[] = { /* screen test ROM */
0x20, 0x01, 0x43, 0x80, 0x20, 0x37, 0x20, 0xf0,
0x7f, 0x80, 0x08, 0x37, 0x20, 0xf0, 0xe0, 0x80,
0x0a, 0x37, 0x20, 0xf0, 0xc0, 0x80, 0x0c, 0x37,
@ -178,6 +178,128 @@ const Uint8 vector_rom[] = { // screen vector test ROM
0x80, 0x80, 0x80,
};
const Uint8 uxn_rom[] = { /* controller test ROM */
0x20, 0x0f, 0xf7, 0x80, 0x08, 0x37, 0x20, 0x0f,
0x07, 0x80, 0x0a, 0x37, 0x20, 0x0f, 0x07, 0x80,
0x0c, 0x37, 0x80, 0x22, 0x36, 0x80, 0x01, 0x3f,
0x80, 0x00, 0x31, 0x80, 0x24, 0x36, 0x80, 0x01,
0x3f, 0x80, 0x02, 0x31, 0x20, 0x00, 0x68, 0x80,
0x04, 0x31, 0x20, 0x00, 0x30, 0x80, 0x06, 0x31,
0x80, 0x00, 0x30, 0x80, 0x04, 0x30, 0x20, 0x00,
0x02, 0x3b, 0x39, 0x80, 0x08, 0x31, 0x80, 0x02,
0x30, 0x80, 0x06, 0x30, 0x20, 0x00, 0x02, 0x3b,
0x39, 0x80, 0x0a, 0x31, 0x80, 0x08, 0x30, 0x80,
0x04, 0x30, 0x38, 0x80, 0x0c, 0x31, 0x80, 0x0a,
0x30, 0x80, 0x06, 0x30, 0x38, 0x80, 0x0e, 0x31,
0x20, 0x01, 0x6b, 0x80, 0x80, 0x37, 0x20, 0x01,
0x70, 0x2e, 0x00, 0x20, 0x01, 0x70, 0x2e, 0x00,
0x80, 0x82, 0x16, 0x0f, 0x80, 0x08, 0x30, 0x80,
0x0a, 0x30, 0x80, 0x0c, 0x30, 0x80, 0x0e, 0x30,
0x80, 0x01, 0x20, 0x03, 0x87, 0x2e, 0x80, 0x08,
0x30, 0x20, 0x00, 0x10, 0x38, 0x80, 0x28, 0x37,
0x80, 0x0a, 0x30, 0x20, 0x00, 0x10, 0x38, 0x80,
0x2a, 0x37, 0x20, 0x04, 0x0e, 0x80, 0x2c, 0x37,
0x80, 0x03, 0xcf, 0x80, 0x04, 0x1f, 0x80, 0x01,
0x1c, 0x03, 0x18, 0x19, 0x80, 0x2f, 0x17, 0x80,
0x2a, 0x36, 0x20, 0x00, 0x10, 0x38, 0x80, 0x2a,
0x37, 0x20, 0x04, 0x16, 0x80, 0x2c, 0x37, 0x80,
0x03, 0xcf, 0x80, 0x05, 0x1f, 0x80, 0x01, 0x1c,
0x03, 0x18, 0x19, 0x80, 0x2f, 0x17, 0x80, 0x2a,
0x36, 0x20, 0x00, 0x08, 0x39, 0x80, 0x2a, 0x37,
0x80, 0x28, 0x36, 0x20, 0x00, 0x08, 0x39, 0x80,
0x28, 0x37, 0x20, 0x04, 0x1e, 0x80, 0x2c, 0x37,
0x80, 0x03, 0xcf, 0x80, 0x06, 0x1f, 0x80, 0x01,
0x1c, 0x03, 0x18, 0x19, 0x80, 0x2f, 0x17, 0x80,
0x28, 0x36, 0x20, 0x00, 0x10, 0x38, 0x80, 0x28,
0x37, 0x20, 0x04, 0x26, 0x80, 0x2c, 0x37, 0x80,
0x03, 0xcf, 0x80, 0x07, 0x1f, 0x80, 0x01, 0x1c,
0x03, 0x18, 0x19, 0x80, 0x2f, 0x17, 0x80, 0x28,
0x36, 0x20, 0x00, 0x08, 0x39, 0x80, 0x28, 0x37,
0x20, 0x04, 0x06, 0x80, 0x2c, 0x37, 0x80, 0x03,
0x80, 0x2f, 0x17, 0x80, 0x02, 0x30, 0x20, 0x00,
0x09, 0x38, 0x80, 0x2a, 0x37, 0x80, 0x00, 0x30,
0x20, 0x00, 0x09, 0x39, 0x80, 0x28, 0x37, 0x20,
0x04, 0x2e, 0x80, 0x2c, 0x37, 0x80, 0x03, 0xcf,
0x80, 0x02, 0x1f, 0x80, 0x01, 0x1c, 0x03, 0x18,
0x19, 0x80, 0x2f, 0x17, 0x80, 0x00, 0x30, 0x20,
0x00, 0x04, 0x38, 0x80, 0x28, 0x37, 0x20, 0x04,
0x2e, 0x80, 0x2c, 0x37, 0x80, 0x03, 0xcf, 0x80,
0x03, 0x1f, 0x80, 0x01, 0x1c, 0x03, 0x18, 0x19,
0x80, 0x2f, 0x17, 0x80, 0x02, 0x30, 0x20, 0x00,
0x00, 0x38, 0x80, 0x2a, 0x37, 0x80, 0x00, 0x30,
0x20, 0x00, 0x18, 0x38, 0x80, 0x28, 0x37, 0x20,
0x04, 0x36, 0x80, 0x2c, 0x37, 0x80, 0x03, 0xcf,
0x80, 0x01, 0x1f, 0x80, 0x01, 0x1c, 0x19, 0x80,
0x2f, 0x17, 0x80, 0x2a, 0x36, 0x20, 0x00, 0x0a,
0x38, 0x80, 0x2a, 0x37, 0x20, 0x04, 0x3e, 0x20,
0x00, 0x0b, 0x80, 0x30, 0x3f, 0x38, 0x80, 0x2c,
0x37, 0x80, 0x03, 0x80, 0x2f, 0x17, 0x80, 0x02,
0x30, 0x20, 0x00, 0x00, 0x38, 0x80, 0x2a, 0x37,
0x80, 0x00, 0x30, 0x20, 0x00, 0x24, 0x38, 0x80,
0x28, 0x37, 0x20, 0x04, 0x36, 0x80, 0x2c, 0x37,
0x80, 0x03, 0x4f, 0x80, 0x01, 0x1c, 0x19, 0x80,
0x2f, 0x17, 0x80, 0x2a, 0x36, 0x20, 0x00, 0x0a,
0x38, 0x80, 0x2a, 0x37, 0x20, 0x04, 0x3e, 0x20,
0x00, 0x0a, 0x80, 0x30, 0x3f, 0x38, 0x80, 0x2c,
0x37, 0x80, 0x03, 0x80, 0x2f, 0x17, 0x80, 0x00,
0x30, 0x20, 0x00, 0x10, 0x39, 0x80, 0x28, 0x37,
0x80, 0x02, 0x30, 0x20, 0x00, 0x10, 0x39, 0x80,
0x2a, 0x37, 0x80, 0x82, 0x36, 0x80, 0x03, 0x20,
0x03, 0x14, 0x2e, 0x6c, 0x0f, 0x05, 0x03, 0x80,
0x04, 0x1f, 0x80, 0x00, 0x05, 0x80, 0x30, 0x3f,
0x20, 0x04, 0x3e, 0x38, 0x80, 0x2c, 0x37, 0xcf,
0x80, 0x2f, 0x17, 0x80, 0x0f, 0x1c, 0x80, 0x00,
0x05, 0x80, 0x30, 0x3f, 0x20, 0x04, 0x3e, 0x38,
0x80, 0x2c, 0x37, 0x80, 0x28, 0x36, 0x20, 0x00,
0x08, 0x38, 0x80, 0x28, 0x37, 0xcf, 0x80, 0x2f,
0x17, 0x03, 0x80, 0x04, 0x1f, 0x80, 0x00, 0x05,
0x80, 0x30, 0x3f, 0x20, 0x04, 0x3e, 0x38, 0x80,
0x2c, 0x37, 0x80, 0x28, 0x36, 0x20, 0x00, 0x08,
0x38, 0x80, 0x28, 0x37, 0xcf, 0x80, 0x2f, 0x17,
0x80, 0x0f, 0x1c, 0x80, 0x00, 0x05, 0x80, 0x30,
0x3f, 0x20, 0x04, 0x3e, 0x38, 0x80, 0x2c, 0x37,
0x80, 0x28, 0x36, 0x20, 0x00, 0x08, 0x38, 0x80,
0x28, 0x37, 0x4f, 0x80, 0x2f, 0x17, 0x6c, 0x80,
0x10, 0x11, 0x23, 0x2f, 0x80, 0x17, 0x31, 0x80,
0x15, 0x31, 0x23, 0x2f, 0x80, 0x13, 0x31, 0x80,
0x11, 0x31, 0x6f, 0x21, 0x6f, 0x26, 0x80, 0x2a,
0x37, 0x80, 0x11, 0x30, 0x80, 0x28, 0x37, 0x80,
0x10, 0x10, 0x03, 0x80, 0x2e, 0x17, 0x80, 0x15,
0x30, 0x80, 0x28, 0x37, 0x80, 0x2e, 0x17, 0x25,
0x21, 0x25, 0x26, 0x26, 0x20, 0x80, 0x00, 0x38,
0x25, 0x20, 0x80, 0x00, 0x38, 0x2a, 0x80, 0xd4,
0x0d, 0x22, 0x22, 0x80, 0x11, 0x30, 0x21, 0x80,
0x15, 0x30, 0x20, 0x00, 0x01, 0x39, 0x26, 0x80,
0x28, 0x37, 0x80, 0x13, 0x30, 0x80, 0x2a, 0x37,
0x80, 0x10, 0x10, 0x03, 0x80, 0x2e, 0x17, 0x80,
0x17, 0x30, 0x80, 0x2a, 0x37, 0x80, 0x2e, 0x17,
0x25, 0x21, 0x25, 0x26, 0x26, 0x21, 0x20, 0x80,
0x00, 0x38, 0x25, 0x20, 0x80, 0x00, 0x38, 0x2a,
0x80, 0xd3, 0x0d, 0x22, 0x22, 0x6c, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xff,
0xe7, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xc3, 0xe7, 0xff, 0x7e, 0x7f, 0xff,
0xef, 0xcf, 0xcf, 0xef, 0xff, 0x7f, 0xfe, 0xff,
0xf7, 0xf3, 0xf3, 0xf7, 0xff, 0xfe, 0x00, 0x00,
0x7e, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x3c, 0x7e,
0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x3c,
0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x18,
0x08, 0x08, 0x08, 0x08, 0x1c, 0x00, 0x00, 0x3c,
0x42, 0x02, 0x3c, 0x40, 0x7e, 0x00, 0x00, 0x3c,
0x42, 0x1c, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x0c,
0x14, 0x24, 0x44, 0x7e, 0x04, 0x00, 0x00, 0x7e,
0x40, 0x7c, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x3c,
0x40, 0x7c, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x7e,
0x02, 0x04, 0x08, 0x10, 0x10, 0x00, 0x00, 0x3c,
0x42, 0x3c, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x3c,
0x42, 0x42, 0x3e, 0x02, 0x3c, 0x00, 0x00, 0x3c,
0x42, 0x42, 0x7e, 0x42, 0x42, 0x00, 0x00, 0x7c,
0x42, 0x7c, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x3c,
0x42, 0x40, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x7c,
0x42, 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x7e,
0x40, 0x78, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x7e,
0x40, 0x78, 0x40, 0x40, 0x40, 0x00, 0x00,
};
static Uxn u;
@ -356,9 +478,46 @@ static void run() {
uxn_eval(&u, devscreen->vector);
if(ppu.reqdraw || devsystem->dat[0xe])
redraw();
switch(rb->button_get(false)) { // TODO implement other buttons
case BUTTON_NONE: break;
default: return;
int b = rb->button_get(false);
if(b != BUTTON_NONE) {
// TODO allow scrolls (that don't have a button release) to be mapped as buttons
if(b == VARVARA_MENU)
return;
if(b == VARVARA_A)
devctrl->dat[2] += 0x01;
if(b == (VARVARA_A | BUTTON_REL))
devctrl->dat[2] -= 0x01;
if(b == VARVARA_B)
devctrl->dat[2] += 0x02;
if(b == (VARVARA_B | BUTTON_REL))
devctrl->dat[2] -= 0x02;
if(b == VARVARA_START)
devctrl->dat[2] += 0x04;
if(b == (VARVARA_START | BUTTON_REL))
devctrl->dat[2] -= 0x04;
if(b == VARVARA_SELECT)
devctrl->dat[2] += 0x08;
if(b == (VARVARA_SELECT | BUTTON_REL))
devctrl->dat[2] -= 0x08;
if(b == VARVARA_UP)
devctrl->dat[2] += 0x10;
if(b == (VARVARA_UP | BUTTON_REL))
devctrl->dat[2] -= 0x10;
if(b == VARVARA_DOWN)
devctrl->dat[2] += 0x20;
if(b == (VARVARA_DOWN | BUTTON_REL))
devctrl->dat[2] -= 0x20;
if(b == VARVARA_LEFT)
devctrl->dat[2] += 0x40;
if(b == (VARVARA_LEFT | BUTTON_REL))
devctrl->dat[2] -= 0x40;
if(b == VARVARA_RIGHT)
devctrl->dat[2] += 0x80;
if(b == (VARVARA_RIGHT | BUTTON_REL))
devctrl->dat[2] -= 0x80;
uxn_eval(&u, peek16(devctrl->dat, 0));
}
rb->sleep(HZ/60);
}