#ifndef NES_INPUT_H_ #define NES_INPUT_H_ #include #include // Emulator Implementation typedef enum { input_Result_Error = -1, input_Result_OK, input_Result_Quit, input_Result_Menu, input_Result_Reset, input_Result_Save, input_Result_Load, input_Result_Cancel, input_Result_View, input_Result_Refresh, input_Result_Scale, input_Result_Effect, } nes_Input_Result; #define nes_controller_num_buttons (8U) typedef enum { Button_A = 0, Button_B, Button_Select, Button_Start, Button_Up, Button_Down, Button_Left, Button_Right, } nes_Input_Button; typedef enum { Controller_Primary = 0b001, Controller_Expansion = 0b010, Controller_Microphone = 0b100, } nes_Controller_State; typedef struct { uint32_t buttons; int shift; } nes_controller; typedef struct { nes_controller controllers[2]; } nes_input; #define nes_controller_bus_mask (0b11111000) uint8_t nes_input_read(nes_input* input, uint16_t addr); void nes_input_write(nes_input* input, uint16_t addr, uint8_t val); // System Glue struct nese_Components; typedef struct nes_Input_Reader_t { int (*init)(struct nes_Input_Reader_t*); void (*done)(struct nes_Input_Reader_t*); int (*update)(struct nes_Input_Reader_t*, struct nese_Components*); void* data; int menu_timer; } nes_Input_Reader; static inline int nes_input_init(nes_Input_Reader* reader) { return reader->init(reader); } static inline void nes_input_done(nes_Input_Reader* reader) { reader->done(reader); } static inline int nes_input_update( nes_Input_Reader* reader, struct nese_Components* comp ) { return reader->update(reader, comp); } #endif // NES_INPUT_H_