#ifndef NITRO_PAD_PAD_H_ #define NITRO_PAD_PAD_H_ #include "consts.h" //================================================================================ // BUTTONS //---- masked value #define PAD_PLUS_KEY_MASK 0x00f0 // mask : cross keys #define PAD_BUTTON_MASK 0x2f0f // mask : buttons #define PAD_DEBUG_BUTTON_MASK 0x2000 // mask : debug button #define PAD_ALL_MASK 0x2fff // mask : all buttons #define PAD_RCNTPORT_MASK 0x2c00 // mask : factors ARM7 can read from RCNT register #define PAD_KEYPORT_MASK 0x03ff // mask : factors ARM7/9 can read from KEY register #define PAD_DETECT_FOLD_MASK 0x8000 // mask : folding //---- button and key #define PAD_BUTTON_A 0x0001 // A #define PAD_BUTTON_B 0x0002 // B #define PAD_BUTTON_SELECT 0x0004 // SELECT #define PAD_BUTTON_START 0x0008 // START #define PAD_KEY_RIGHT 0x0010 // RIGHT of cross key #define PAD_KEY_LEFT 0x0020 // LEFT of cross key #define PAD_KEY_UP 0x0040 // UP of cross key #define PAD_KEY_DOWN 0x0080 // DOWN of cross key #define PAD_BUTTON_R 0x0100 // R #define PAD_BUTTON_L 0x0200 // L #define PAD_BUTTON_X 0x0400 // X #define PAD_BUTTON_Y 0x0800 // Y #define PAD_BUTTON_DEBUG 0x2000 // Debug button static inline u16 PAD_Read(void) { return (u16)(((reg_PAD_KEYINPUT | *(vu16 *)HW_BUTTON_XY_BUF) ^ (PAD_PLUS_KEY_MASK | PAD_BUTTON_MASK)) & (PAD_PLUS_KEY_MASK | PAD_BUTTON_MASK)); } static inline BOOL PAD_DetectFold(void) { return (BOOL)((*(vu16 *)HW_BUTTON_XY_BUF & PAD_DETECT_FOLD_MASK) >> 15); } #endif //NITRO_PAD_PAD_H_