#include "sms_pad.h" void pad_init(Pad *pad, Tristate *TH) { pad->pressed = 0xff; pad->TH = TH; } void pad_setbtn(Pad *pad, PAD_BTN btn, bool pressed) { if (pressed) { pad->pressed &= ~(1 << btn); } else { pad->pressed |= (1 << btn); } } uint8_t pad_rd(Pad *pad) { uint8_t res; if (*pad->TH == TRI_LOW) { // TH selected // A and START shifted in from bits 7:6 into 5:4 res = (pad->pressed & 0xf) | ((pad->pressed & 0xc0) >> 2); } else { res = pad->pressed & 0x3f; } // Bits 7:6 are always high res |= 0b11000000; return res; }