|
- #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;
- }
- }
|