return MATRIX_COLS;
}
-void matrix_init(void)
+static void pc98_inhibit_repeat(void)
{
- print_enable = true;
- debug_enable = true;
+ uint8_t code;
+
+ while (serial_recv()) ;
+RETRY:
+ PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
+ _delay_ms(500);
+ serial_send(0x9C);
+
+ PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
+ _delay_ms(100);
+ while (!(code = serial_recv())) ;
+ print("PC98: send 9C: "); print_hex8(code); print("\n");
+ if (code != 0xFA) goto RETRY;
+
+
+ PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
+ _delay_ms(100);
+ serial_send(0x70);
+
+ PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
+ _delay_ms(100);
+ //code = serial_recv();
+ while (!(code = serial_recv())) ;
+ print("PC98: send 70: "); print_hex8(code); print("\n");
+ if (code != 0xFA) goto RETRY;
+}
+
+void matrix_init(void)
+{
PC98_RST_DDR |= (1<<PC98_RST_BIT);
PC98_RDY_DDR |= (1<<PC98_RDY_BIT);
PC98_RTY_DDR |= (1<<PC98_RTY_BIT);
serial_init();
// PC98 reset
+/*
PC98_RST_PORT &= ~(1<<PC98_RST_BIT);
_delay_us(15);
PC98_RST_PORT |= (1<<PC98_RST_BIT);
_delay_us(13);
- PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
+ PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
+*/
+
+ _delay_ms(500);
+ pc98_inhibit_repeat();
+
+
+ // PC98 ready
+ PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
{
is_modified = false;
- uint8_t code;
+ uint16_t code;
PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
- code = serial_recv();
+ _delay_us(30);
+ code = serial_recv2();
PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
- if (!code) return 0;
+ if (code == -1) return 0;
- debug_hex(code); debug(" ");
+if (code == 0x60) {
+ pc98_inhibit_repeat();
/*
- switch (code) {
- case 0x7E: // reset fail
- case 0xFE: // layout
- case 0xFF: // reset success
- _delay_ms(500);
- // ignore response byte
- debug("(response ignored:");
- while ((code = serial_recv())) { debug(" "); debug_hex(code); }
- debug(") ");
- // FALL THROUGH
- case 0x7F:
- // all keys up
- for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
- return 0;
- }
+ PC98_RDY_PORT |= (1<<PC98_RDY_BIT);
+ _delay_ms(100);
+ serial_send(0x96);
+ PC98_RDY_PORT &= ~(1<<PC98_RDY_BIT);
+*/
+
+ return 0;
+}
+
+ print_hex8(code); print(" ");
if (code&0x80) {
// break code
is_modified = true;
}
}
-*/
return code;
}