} while (0)
-volatile uint8_t ibmpc_protocol = IBMPC_PROTOCOL_AT;
+volatile uint8_t ibmpc_protocol = IBMPC_PROTOCOL_NO;
volatile uint8_t ibmpc_error = IBMPC_ERR_NONE;
/* 2-byte buffer for data received from keyhboard
bool parity = true;
ibmpc_error = IBMPC_ERR_NONE;
- if (ibmpc_protocol == IBMPC_PROTOCOL_XT) return -1;
-
dprintf("w%02X ", data);
IBMPC_INT_OFF();
case 0b11000000:
// XT_Clone-done
isr_state = isr_state>>8;
+ ibmpc_protocol = IBMPC_PROTOCOL_XT_CLONE;
goto DONE;
break;
case 0b10100000: // ^2
} else {
// no stop bit: XT_IBM-done
isr_state = isr_state>>8;
+ ibmpc_protocol = IBMPC_PROTOCOL_XT_IBM;
goto DONE;
}
}
// AT-done
// TODO: parity check?
isr_state = isr_state>>6;
+ ibmpc_protocol = IBMPC_PROTOCOL_AT;
goto DONE;
break;
case 0b01100000:
#define IBMPC_RESEND 0xFE
#define IBMPC_SET_LED 0xED
-#define IBMPC_PROTOCOL_AT 0
-#define IBMPC_PROTOCOL_XT 1
+#define IBMPC_PROTOCOL_NO 0
+#define IBMPC_PROTOCOL_AT 1
+#define IBMPC_PROTOCOL_XT_IBM 2
+#define IBMPC_PROTOCOL_XT_CLONE 3
-// TODO: error numbers
+// Error numbers
#define IBMPC_ERR_NONE 0
#define IBMPC_ERR_RECV 0x00
#define IBMPC_ERR_SEND 0x10