#include "nes.h" static uint8_t read_controller_bit(nes_controller* controller) { uint8_t state = 1; if (controller->shift < 0) { state = (controller->buttons >> Button_A) & 1; } else if (controller->shift < nes_controller_num_buttons) { state = (controller->buttons >> controller->shift) & 1; controller->shift++; } return state; } uint8_t nes_input_read(nes_input* input, uint16_t addr) { nes_controller* controller = &input->controllers[(nes_input_2_reg == addr)]; return ((addr >> 8) & nes_controller_bus_mask) | read_controller_bit(controller); } void nes_input_write(nes_input* input, uint16_t addr, uint8_t val) { if (val & 1) { input->controllers[0].shift = -1; input->controllers[1].shift = -1; } else { input->controllers[0].shift = 0; input->controllers[1].shift = 0; } }