X-Git-Url: https://git.friedersdorff.com/?a=blobdiff_plain;f=tmk_core%2Fprotocol%2Fibmpc.c;h=0e3998aae6a846e5e512e078f70ecb609436cdd2;hb=0cf9dfc888755e18a88f71f40863e3dc035ab91a;hp=ed9954c119eae67c1c50910d765f39397c0c05ca;hpb=820d96bdabe549bd042e67df76bca6e6fc58fb81;p=max%2Ftmk_keyboard.git diff --git a/tmk_core/protocol/ibmpc.c b/tmk_core/protocol/ibmpc.c index ed9954c1..0e3998aa 100644 --- a/tmk_core/protocol/ibmpc.c +++ b/tmk_core/protocol/ibmpc.c @@ -56,6 +56,7 @@ POSSIBILITY OF SUCH DAMAGE. } while (0) +volatile uint16_t ibmpc_isr_debug = 0; volatile uint8_t ibmpc_protocol = IBMPC_PROTOCOL_NO; volatile uint8_t ibmpc_error = IBMPC_ERR_NONE; @@ -244,10 +245,12 @@ ISR(IBMPC_INT_VECT) // x x x x x x x x | *1 0 0 0 0 0 0 0 midway(8 bits received) // b6 b5 b4 b3 b2 b1 b0 1 | 0 *1 0 0 0 0 0 0 XT_IBM-midway ^1 // b7 b6 b5 b4 b3 b2 b1 b0 | 0 *1 0 0 0 0 0 0 AT-midway ^1 - // b7 b6 b5 b4 b3 b2 b1 b0 | 1 *1 0 0 0 0 0 0 XT_Clone-done + // b7 b6 b5 b4 b3 b2 b1 b0 | 1 *1 0 0 0 0 0 0 XT_Clone-done ^3 + // b6 b5 b4 b3 b2 b1 b0 1 | 1 *1 0 0 0 0 0 0 XT_IBM-error ^3 // pr b7 b6 b5 b4 b3 b2 b1 | 0 0 *1 0 0 0 0 0 AT-midway[b0=0] // b7 b6 b5 b4 b3 b2 b1 b0 | 1 0 *1 0 0 0 0 0 XT_IBM-done ^2 // pr b7 b6 b5 b4 b3 b2 b1 | 1 0 *1 0 0 0 0 0 AT-midway[b0=1] ^2 + // b7 b6 b5 b4 b3 b2 b1 b0 | 1 1 *1 0 0 0 0 0 XT_IBM-error-done // x x x x x x x x | x 1 1 0 0 0 0 0 illegal // st pr b7 b6 b5 b4 b3 b2 | b1 b0 0 *1 0 0 0 0 AT-done // x x x x x x x x | x x 1 *1 0 0 0 0 illegal @@ -264,10 +267,29 @@ ISR(IBMPC_INT_VECT) // midway goto NEXT; break; - case 0b11000000: - // XT_Clone-done + case 0b11000000: // ^3 + { + uint8_t us = 100; + // wait for rising and falling edge of b7 of XT_IBM + while (!(IBMPC_CLOCK_PIN&(1<>8; + ibmpc_protocol = IBMPC_PROTOCOL_XT_CLONE; + goto DONE; + } + } + break; + case 0b11100000: + // XT_IBM-error-done + ibmpc_isr_debug = isr_state; isr_state = isr_state>>8; - ibmpc_protocol = IBMPC_PROTOCOL_XT_CLONE; + ibmpc_protocol = IBMPC_PROTOCOL_XT_ERROR; goto DONE; break; case 0b10100000: // ^2 @@ -301,19 +323,20 @@ ISR(IBMPC_INT_VECT) goto DONE; break; case 0b01100000: - case 0b11100000: case 0b00110000: case 0b10110000: case 0b01110000: case 0b11110000: default: // xxxx_oooo(any 1 in low nibble) // Illegal + ibmpc_isr_debug = isr_state; ibmpc_error = IBMPC_ERR_ILLEGAL; goto ERROR; break; } ERROR: + ibmpc_isr_debug = isr_state; isr_state = 0x8000; recv_data = 0xFF00; // clear data and scancode of error 0x00 return;