diff --git a/apps/plugins/varvara/keymaps.h b/apps/plugins/varvara/keymaps.h new file mode 100644 index 0000000000..b2256d8c94 --- /dev/null +++ b/apps/plugins/varvara/keymaps.h @@ -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 diff --git a/apps/plugins/varvara/tests/controller.rom b/apps/plugins/varvara/tests/controller.rom new file mode 100644 index 0000000000..3e786fb0d1 Binary files /dev/null and b/apps/plugins/varvara/tests/controller.rom differ diff --git a/apps/plugins/varvara/tests/controller.tal b/apps/plugins/varvara/tests/controller.tal new file mode 100644 index 0000000000..2b97fad86e --- /dev/null +++ b/apps/plugins/varvara/tests/controller.tal @@ -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 diff --git a/apps/plugins/varvara/varvara.c b/apps/plugins/varvara/varvara.c index ebc192f87c..507f3bc318 100644 --- a/apps/plugins/varvara/varvara.c +++ b/apps/plugins/varvara/varvara.c @@ -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 #include #include @@ -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); }