Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff sugarless1.1/config.h sugarless3/config.h
- 1,132c1,161
- < // Fichero de configuracion del firmware de Sugarless +2
- <
- < #define membrane13x11 // Desactivado para membranas de 5x8 si se quiere ahorrar tiempo de proceso del avr
- <
- < #define atmega2560 // Activado para Arduino Mega
- < //#define atmega128 // Activado para Atmega128
- <
- < #define PA 1 //
- < #define PB 2 //
- < #define PC 3 //
- < #define PD 4 //
- < #define PE 5 //
- < #define PG 7 //
- < #define PH 8 //
- < #define PL 12 //
- <
- < #define ROWS8 8 //Numero de Filas de teclado 8x5
- < #define COLS5 5 //Numero de Columnas de teclado 8x5
- <
- < #define ROWS 13 //Numero de Filas de teclado 13x11
- < #define COLS 11 //Numero de Columnas de teclado 13x11
- <
- < // Mapa de la matriz
- < // 1x1 = '1', 1x2 = '2'
- < // 2x1 = 'Q', 2x2 = 'W'
- < // ...
- <
- < #ifdef atmega128
- <
- < #define LED_ON PORTA |= (1<<4)
- < #define LED_OFF PORTA &= ~(1<<4)
- < #define LED_CONFIG DDRA |= (1<<4)
- <
- < #define KBEXT_BIDIR_ON PORTF |= (1<<1)
- < #define KBEXT_BIDIR_OFF PORTF &= ~(1<<1)
- < #define KBEXT_BIDIR_CONFIG DDRF |= (1<<1)
- <
- < #define POWER_ON PORTA |= (1<<7)
- < #define POWER_OFF PORTA &= ~(1<<7)
- < #define POWER_CONFIG DDRA |= (1<<7)
- <
- < #define RESET_ON DDRA |= (1<<5); PORTA &= ~(1<<5) // GND
- < #define RESET_OFF DDRA &= ~(1<<5); PORTA |= (1<<5) // HI-Z
- <
- < #define SYSTEM_PIN 6
- < #define SYSTEM_BCD PA
- <
- < #define PS2_DAT PF3
- < #define PS2_CLK PF2
- <
- < #define PS2_PORT PORTF
- < #define PS2_DDR DDRF
- < #define PS2_PIN PINF
- <
- < //{PC3, PC1, PG1, PD7, PD5, PD3, PD1, PG4, PB7, PB5, PB3};
- < uint8_t pinsC[COLS] = { 3, 1, 1, 7, 5, 3, 1, 4, 7, 5, 3 };
- < uint8_t bcdC[COLS] = { PC, PC, PG, PD, PD, PD, PD, PG, PB, PB, PB };
- <
- < //{PB4, PB6, PG3, PD0, PD2, PD4, PD6, PG0, PC0, PC2, PC4, PC6, PC7};
- < uint8_t pinsR[ROWS] = { 4, 6, 3, 0, 2, 4, 6, 0, 0, 2, 4, 6, 7 };
- < uint8_t bcdR[ROWS] = { PB, PB, PG, PD, PD, PD, PD, PG, PC, PC, PC, PC, PC };
- <
- < //{PE5(1), PE4(2), PE3(3), PE2(4), PE1(6), PE0(7), PC5(9)};
- < uint8_t pinsJOY2PS2[7] = { 5, 4, 3, 2, 1, 0, 5 };
- < uint8_t bcdJOY2PS2[7] = { PE, PE, PE, PE, PE, PC};
- <
- < uint8_t TZX_ROOT_PIN = 2, TZX_ROOT_BCD = PB;
- < uint8_t TZX_UP_PIN = 1, TZX_UP_BCD = PB;
- < uint8_t TZX_DOWN_PIN = 0, TZX_DOWN_BCD = PB;
- < uint8_t TZX_PLAY_PIN = 7, TZX_PLAY_BCD = PE;
- < uint8_t TZX_STOP_PIN = 6, TZX_STOP_BCD = PE;
- <
- < #endif
- <
- < #ifdef atmega2560
- <
- < #define LED_ON PORTL |= (1<<0)
- < #define LED_OFF PORTL &= ~(1<<0)
- < #define LED_CONFIG DDRB |= (1<<7)
- <
- < #define KBEXT_BIDIR_ON PORTB |= (1<<3)
- < #define KBEXT_BIDIR_OFF PORTB &= ~(1<<3)
- < #define KBEXT_BIDIR_CONFIG DDRB |= (1<<3)
- <
- < #define POWER_ON PORTB |= (1<<2)
- < #define POWER_OFF PORTB &= ~(1<<2)
- < #define POWER_CONFIG DDRB |= (1<<2)
- <
- < #define RESET_ON DDRB |= (1<<0); PORTB &= ~(1<<0) // GND
- < #define RESET_OFF DDRB &= ~(1<<0); PORTB |= (1<<0) // HI-Z
- <
- < #define SYSTEM_PIN 1
- < #define SYSTEM_BCD PB
- <
- < #define PS2_DAT PF3
- < #define PS2_CLK PF2
- <
- < #define PS2_PORT PORTF
- < #define PS2_DDR DDRF
- < #define PS2_PIN PINF
- <
- < //{PL7, PG1, PD7, PC1, PC3, PC5, PC7, PA6, PA4, PA2, PA0};
- < uint8_t pinsC[COLS] = { 7, 1, 7, 1, 3, 5, 7, 6, 4, 2, 0 };
- < uint8_t bcdC[COLS] = { PL, PG, PD, PC, PC, PC, PC, PA, PA, PA, PA };
- <
- < //{PA1, PA3, PA5, PA7, PC6, PC4, PC2, PC0, PG2, PG0, PL6, PL4, PL2};
- < uint8_t pinsR[ROWS] = { 1, 3, 5, 7, 6, 4, 2, 0, 2, 0, 6, 4, 2 };
- < uint8_t bcdR[ROWS] = { PA, PA, PA, PA, PC, PC, PC, PC, PG, PG, PL, PL, PL };
- <
- < //{PH4(1), PH5(2), PH6(3), PB4(4), PB5(6), PB6(7), PL5(9)};
- < uint8_t pinsJOY2PS2[7] = { 4, 5, 6, 4, 5, 6, 5 };
- < uint8_t bcdJOY2PS2[7] = { PH, PH, PH, PB, PB, PB, PL };
- <
- < uint8_t TZX_ROOT_PIN = 4, TZX_ROOT_BCD = PE;
- < uint8_t TZX_UP_PIN = 5, TZX_UP_BCD = PE;
- < uint8_t TZX_DOWN_PIN = 5, TZX_DOWN_BCD = PG;
- < uint8_t TZX_PLAY_PIN = 3, TZX_PLAY_BCD = PE;
- < uint8_t TZX_STOP_PIN = 3, TZX_STOP_BCD = PH;
- <
- < #endif
- <
- < /* --> Futura adaptacion Famicom DB9, requiere adaptador
- < #define FAM_DAT (1<<pinsJOY2PS2[1])
- < #define FAM_LAT (1<<pinsJOY2PS2[2])
- < #define FAM_CLK (1<<pinsJOY2PS2[3])
- <
- < #define FAM_DAT_BCD (1<<bcdJOY2PS2[1])
- < #define FAM_LAT_BCD (1<<bcdJOY2PS2[2])
- < #define FAM_CLK_BCD (1<<bcdJOY2PS2[3])
- <
- < #define FAMDELAY 24 //12
- < */
- \ No newline at end of file
- ---
- > // Fichero de configuracion del firmware de Sugarless +2
- >
- > #define delay_specialkeys 20
- > //#define membrane13x11 // Desactivado para membranas de 5x8 si se quiere ahorrar tiempo de proceso del avr
- >
- > #define atmega2560 // Activado para Arduino Mega
- > //#define atmega128 // Activado para Atmega128
- >
- > #define symbols_cpc
- > #define symbols_msx
- > #define symbols_c16_c64
- > #define symbols_at8
- > #define symbols_bbc
- > #define symbols_aco
- > #define symbols_ap2
- > #define symbols_vic
- > #define symbols_ori
- > #define symbols_sam
- > #define symbols_jup
- > #define symbols_ht8
- > #define symbols_galak
- > #define symbols_multi
- > #define symbols_pc
- > #define PA 1 //
- > #define PB 2 //
- > #define PC 3 //
- > #define PD 4 //
- > #define PE 5 //
- > #define PG 7 //
- > #define PH 8 //
- > #define PL 12 //
- >
- > #define ROWS8 8 //Numero de Filas de teclado 8x5
- > #define COLS5 5 //Numero de Columnas de teclado 8x5
- >
- > #define ROWS 13 //Numero de Filas de teclado 13x11
- > #define COLS 11 //Numero de Columnas de teclado 13x11
- >
- > // Mapa de la matriz
- > // 1x1 = '1', 1x2 = '2'
- > // 2x1 = 'Q', 2x2 = 'W'
- > // ...
- >
- > #ifdef atmega128
- >
- > #define LED_ON PORTA |= (1<<4)
- > #define LED_OFF PORTA &= ~(1<<4)
- > #define LED_CONFIG DDRA |= (1<<4)
- >
- > #define KBEXT_BIDIR_ON PORTF |= (1<<1)
- > #define KBEXT_BIDIR_OFF PORTF &= ~(1<<1)
- > #define KBEXT_BIDIR_CONFIG DDRF |= (1<<1)
- >
- > #define POWER_ON PORTA |= (1<<7)
- > #define POWER_OFF PORTA &= ~(1<<7)
- > #define POWER_CONFIG DDRA |= (1<<7)
- >
- > #define RESET_ON DDRA |= (1<<5); PORTA &= ~(1<<5) // GND
- > #define RESET_OFF DDRA &= ~(1<<5); PORTA |= (1<<5) // HI-Z
- >
- > #define SYSTEM_PIN 6
- > #define SYSTEM_BCD PA
- >
- > #define PS2_DAT PF3
- > #define PS2_CLK PF2
- >
- > #define PS2_PORT PORTF
- > #define PS2_DDR DDRF
- > #define PS2_PIN PINF
- >
- > //{PC3, PC1, PG1, PD7, PD5, PD3, PD1, PG4, PB7, PB5, PB3};
- > uint8_t pinsC[COLS] = { 3, 1, 1, 7, 5, 3, 1, 4, 7, 5, 3 };
- > uint8_t bcdC[COLS] = { PC, PC, PG, PD, PD, PD, PD, PG, PB, PB, PB };
- >
- > //{PB4, PB6, PG3, PD0, PD2, PD4, PD6, PG0, PC0, PC2, PC4, PC6, PC7};
- > uint8_t pinsR[ROWS] = { 4, 6, 3, 0, 2, 4, 6, 0, 0, 2, 4, 6, 7 };
- > uint8_t bcdR[ROWS] = { PB, PB, PG, PD, PD, PD, PD, PG, PC, PC, PC, PC, PC };
- >
- > //{PE5(1), PE4(2), PE3(3), PE2(4), PE1(6), PE0(7), PC5(9)};
- > uint8_t pinsJOY2PS2[7] = { 5, 4, 3, 2, 1, 0, 5 };
- > uint8_t bcdJOY2PS2[7] = { PE, PE, PE, PE, PE, PC};
- >
- > #define FAM_DAT_PIN PINE
- > #define FAM_DAT_DDR DDRE
- > #define FAM_LAT_DDR DDRE
- > #define FAM_CLK_DDR DDRE
- > #define FAM_DAT_PORT PORTE
- > #define FAM_LAT_PORT PORTE
- > #define FAM_CLK_PORT PORTE
- >
- > uint8_t TZX_ROOT_PIN = 2, TZX_ROOT_BCD = PB;
- > uint8_t TZX_UP_PIN = 1, TZX_UP_BCD = PB;
- > uint8_t TZX_DOWN_PIN = 0, TZX_DOWN_BCD = PB;
- > uint8_t TZX_PLAY_PIN = 7, TZX_PLAY_BCD = PE;
- > uint8_t TZX_STOP_PIN = 6, TZX_STOP_BCD = PE;
- >
- > #endif
- >
- > #ifdef atmega2560
- >
- > #define LED_ON PORTL |= (1<<0)
- > #define LED_OFF PORTL &= ~(1<<0)
- > #define LED_CONFIG DDRB |= (1<<7)
- >
- > #define KBEXT_BIDIR_ON PORTB |= (1<<3)
- > #define KBEXT_BIDIR_OFF PORTB &= ~(1<<3)
- > #define KBEXT_BIDIR_CONFIG DDRB |= (1<<3)
- >
- > #define POWER_ON PORTB |= (1<<2)
- > #define POWER_OFF PORTB &= ~(1<<2)
- > #define POWER_CONFIG DDRB |= (1<<2)
- >
- > #define RESET_ON DDRB |= (1<<0); PORTB &= ~(1<<0) // GND
- > #define RESET_OFF DDRB &= ~(1<<0); PORTB |= (1<<0) // HI-Z
- >
- > #define SYSTEM_PIN 1
- > #define SYSTEM_BCD PB
- >
- > #define PS2_DAT PF3
- > #define PS2_CLK PF2
- >
- > #define PS2_PORT PORTF
- > #define PS2_DDR DDRF
- > #define PS2_PIN PINF
- >
- > //{PL7, PG1, PD7, PC1, PC3, PC5, PC7, PA6, PA4, PA2, PA0};
- > uint8_t pinsC[COLS] = { 7, 1, 7, 1, 3, 5, 7, 6, 4, 2, 0 };
- > uint8_t bcdC[COLS] = { PL, PG, PD, PC, PC, PC, PC, PA, PA, PA, PA };
- >
- > //{PA1, PA3, PA5, PA7, PC6, PC4, PC2, PC0, PG2, PG0, PL6, PL4, PL2};
- > uint8_t pinsR[ROWS] = { 1, 3, 5, 7, 6, 4, 2, 0, 2, 0, 6, 4, 2 };
- > uint8_t bcdR[ROWS] = { PA, PA, PA, PA, PC, PC, PC, PC, PG, PG, PL, PL, PL };
- >
- > //{PH4(1), PH5(2), PH6(3), PB4(4), PB5(6), PB6(7), PL5(9)};
- > uint8_t pinsJOY2PS2[7] = { 4, 5, 6, 4, 5, 6, 5 };
- > uint8_t bcdJOY2PS2[7] = { PH, PH, PH, PB, PB, PB, PL };
- >
- > #define FAM_DAT_PIN PINH
- > #define FAM_DAT_DDR DDRH
- > #define FAM_LAT_DDR DDRH
- > #define FAM_CLK_DDR DDRB
- > #define FAM_DAT_PORT PORTH
- > #define FAM_LAT_PORT PORTH
- > #define FAM_CLK_PORT PORTB
- >
- > uint8_t TZX_ROOT_PIN = 4, TZX_ROOT_BCD = PE;
- > uint8_t TZX_UP_PIN = 5, TZX_UP_BCD = PE;
- > uint8_t TZX_DOWN_PIN = 5, TZX_DOWN_BCD = PG;
- > uint8_t TZX_PLAY_PIN = 3, TZX_PLAY_BCD = PE;
- > uint8_t TZX_STOP_PIN = 3, TZX_STOP_BCD = PH;
- >
- > #endif
- >
- > uint8_t opqa_cursors_m = 0; // Solo "1" en teclados de tipo gomas o 48K, "0" para teclados tipo Spectrum+ 128K, +2, +2A, ...
- >
- > // Famicom DB9 comun
- > #define FAM_DAT (1<<pinsJOY2PS2[1])
- > #define FAM_LAT (1<<pinsJOY2PS2[2])
- > #define FAM_CLK (1<<pinsJOY2PS2[3])
- >
- > #define FAMDELAY 24
- diff sugarless1.1/keymaps.h sugarless3/keymaps.h
- 13c13
- < const uint8_t version[8] = { 1,4,0,5,2,0,1,8 }; //DDMMAAAA
- ---
- > const uint8_t version[8] = { 0,7,0,6,2,0,1,9 }; //DDMMAAAA
- 63c63
- < //
- ---
- > //
- 76c76
- < //
- ---
- > //
- 94c94
- < //
- ---
- > //
- 115d114
- < #define KEY_DELETE 0x71
- 122c121,123
- < //Especiales, requieren E0
- ---
- > //Especiales, requieren E0
- > #define KEY_INS 0x70
- > #define KEY_DELETE 0x71
- 124a126
- > #define KEY_HOME 0x6C
- 134c136,137
- < //Fin Especiales
- ---
- > #define KEY_END 0x69
- > //Fin Especiales
- 194a198
- > #define KEY_BLOQNUM 0x77
- 197,198c201,202
- < #define KEY_MENOS 0x4E //Drcha del 0
- < #define KEY_IGUAL 0x55 //Izda de Backspace
- ---
- > #define KEY_MENOS 0x4E //Drcha del 0
- > #define KEY_IGUAL 0x55 //Izda de Backspace
- 209c213
- < //SCANCODES SET 1
- ---
- > //SCANCODES SET 1
- 219c223
- < //Especiales, requieren E0
- ---
- > //Especiales, requieren E0
- 238c242
- < //Fin Especiales
- ---
- > //Fin Especiales
- 298a303
- > #define KS1_BLOQNUM 0x45
- 301,302c306,307
- < #define KS1_MENOS 0x0C //Drcha del 0
- < #define KS1_IGUAL 0x0D //Izda de Backspace
- ---
- > #define KS1_MENOS 0x0C //Drcha del 0
- > #define KS1_IGUAL 0x0D //Izda de Backspace
- 312a318,347
- > #define KS1PAD_MENOS 0x4A // Keypad -
- > #define KS1PAD_MAS 0x4E // Keypad +
- > #define KS1PAD_ASTERISK 0x37 // Keypad *
- >
- > #define KS1PAD_0 0x52 // Keypad 0
- > #define KS1PAD_1 0x4F // Keypad 1
- > #define KS1PAD_2 0x50 // Keypad 2
- > #define KS1PAD_3 0x51 // Keypad 3
- > #define KS1PAD_4 0x4B // Keypad 4
- > #define KS1PAD_5 0x4C // Keypad 5
- > #define KS1PAD_6 0x4D // Keypad 6
- > #define KS1PAD_7 0x47 // Keypad 7
- > #define KS1PAD_8 0x48 // Keypad 8
- > #define KS1PAD_9 0x49 // Keypad 9
- >
- > #define KEYPAD_MENOS 0x7B // Keypad -
- > #define KEYPAD_MAS 0x79 // Keypad +
- > #define KEYPAD_ASTERISK 0x7C // Keypad *
- >
- > #define KEYPAD_0 0x70 // Keypad 0
- > #define KEYPAD_1 0x69 // Keypad 1
- > #define KEYPAD_2 0x72 // Keypad 2
- > #define KEYPAD_3 0x7A // Keypad 3
- > #define KEYPAD_4 0x6B // Keypad 4
- > #define KEYPAD_5 0x73 // Keypad 5
- > #define KEYPAD_6 0x74 // Keypad 6
- > #define KEYPAD_7 0x6C // Keypad 7
- > #define KEYPAD_8 0x75 // Keypad 8
- > #define KEYPAD_9 0x7D // Keypad 9
- >
- 316,322c351,357
- < #define MODO_D pcxt
- < #define MODO_E kbext
- < #define MODO_F -1
- < #define MODO_G -1
- < #define MODO_H -1
- < #define MODO_I -1
- < #define MODO_J -1
- ---
- > #define MODO_D sms
- > #define MODO_E c16
- > #define MODO_F ht8
- > #define MODO_G galak
- > #define MODO_H multi
- > #define MODO_I pcxt
- > #define MODO_J kbext
- 366a402,403
- > const uint8_t joy_atarismd[12] = { KEY_J, KEY_O, KEY_Y, KEY_SPACE, KEY_A, KEY_T, KEY_A, KEY_R, KEY_I, KEY_S, KEY_M, KEY_D };
- > const uint8_t joy_famicom[11] = { KEY_J, KEY_O, KEY_Y, KEY_SPACE, KEY_F, KEY_A, KEY_M, KEY_I, KEY_C, KEY_O, KEY_M };
- 368c405
- < typedef enum { zx, cpc, msx, c64, at8, bbc, aco, ap2, vic, ori, sam, jup, pc, pcxt, kbext } KBMODE;
- ---
- > typedef enum { zx, cpc, msx, c64, at8, bbc, aco, ap2, vic, ori, sam, jup, sms, c16, ht8, galak, multi, pc, pcxt, kbext } KBMODE;
- 372,385c409,422
- < { KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, 0, 0, 0, 0, 0, 0 },
- < { KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T, 0, 0, 0, 0, 0, 0 },
- < { KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, 0, 0, 0, 0, 0, 0 },
- < { KEY_0, KEY_9, KEY_8, KEY_7, KEY_6, 0, 0, 0, 0, 0, 0 },
- < { KEY_P, KEY_O, KEY_I, KEY_U, KEY_Y, 0, 0, 0, 0, 0, 0 },
- < { 0, KEY_Z, KEY_X, KEY_C, KEY_V, 0, 0, 0, 0, 0, 0 },
- < { KEY_ENTER, KEY_L, KEY_K, KEY_J, KEY_H, 0, 0, 0, 0, 0, 0 },
- < { KEY_SPACE, 0, KEY_M, KEY_N, KEY_B, 0, 0, 0, 0, 0, 0 },
- < // Teclas extendidas +2A/+3
- < { 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_COMILLA, KEY_PTOCOMA },
- < { 0, 0, 0, 0, 0, KEY_PUNTO, KEY_COMA, 0, 0, 0, 0 },
- < { 0, 0, 0, 0, 0, KEY_F3, KEY_F4, KEY_F1, KEY_CAPS, 0, KEY_LEFT },
- < { 0, 0, 0, 0, 0, KEY_RIGHT, KEY_UP, KEY_BACKSP, KEY_F9, 0, KEY_DOWN },
- < { 0, 0, 0, 0, 0, 0, 0, KEY_ESCAPE, KEY_TAB, 0, 0 }
- ---
- > { KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, 0, 0, 0, 0, 0, 0 },
- > { KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T, 0, 0, 0, 0, 0, 0 },
- > { KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, 0, 0, 0, 0, 0, 0 },
- > { KEY_0, KEY_9, KEY_8, KEY_7, KEY_6, 0, 0, 0, 0, 0, 0 },
- > { KEY_P, KEY_O, KEY_I, KEY_U, KEY_Y, 0, 0, 0, 0, 0, 0 },
- > { 0, KEY_Z, KEY_X, KEY_C, KEY_V, 0, 0, 0, 0, 0, 0 },
- > { KEY_ENTER, KEY_L, KEY_K, KEY_J, KEY_H, 0, 0, 0, 0, 0, 0 },
- > { KEY_SPACE, 0, KEY_M, KEY_N, KEY_B, 0, 0, 0, 0, 0, 0 },
- > // Teclas extendidas +2A/+3
- > { 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_COMILLA, KEY_PTOCOMA },
- > { 0, 0, 0, 0, 0, KEY_PUNTO, KEY_COMA, 0, 0, 0, 0 },
- > { 0, 0, 0, 0, 0, KEY_F3, KEY_F4, KEY_F1, KEY_CAPS, 0, KEY_LEFT },
- > { 0, 0, 0, 0, 0, KEY_RIGHT, KEY_UP, KEY_BACKSP, KEY_F9, 0, KEY_DOWN },
- > { 0, 0, 0, 0, 0, 0, 0, KEY_ESCAPE, KEY_TAB, 0, 0 }
- 389,396c426,433
- < { KEY_1, KEY_2, KEY_3, KEY_4, KEY_5 },
- < { KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T },
- < { KEY_A, KEY_S, KEY_D, KEY_F, KEY_G },
- < { KEY_0, KEY_9, KEY_8, KEY_7, KEY_6 },
- < { KEY_P, KEY_O, KEY_I, KEY_U, KEY_Y },
- < { 0, KEY_Z, KEY_X, KEY_C, KEY_V },
- < { KEY_ENTER, KEY_L, KEY_K, KEY_J, KEY_H },
- < { KEY_SPACE, 0, KEY_M, KEY_N, KEY_B }
- ---
- > { KEY_1, KEY_2, KEY_3, KEY_4, KEY_5 },
- > { KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T },
- > { KEY_A, KEY_S, KEY_D, KEY_F, KEY_G },
- > { KEY_0, KEY_9, KEY_8, KEY_7, KEY_6 },
- > { KEY_P, KEY_O, KEY_I, KEY_U, KEY_Y },
- > { 0, KEY_Z, KEY_X, KEY_C, KEY_V },
- > { KEY_ENTER, KEY_L, KEY_K, KEY_J, KEY_H },
- > { KEY_SPACE, 0, KEY_M, KEY_N, KEY_B }
- 400,407c437,444
- < { KEY_F2, KEY_CAPS, 0, 0, KEY_LEFT },
- < { 0, 0, 0, 0, 0 },
- < { 0, 0, 0, 0, 0 },
- < { KEY_BACKSP, 0, KEY_RIGHT, KEY_UP, KEY_DOWN },
- < { 0, 0, 0, 0, 0 },
- < { 0, 0, 0, 0, 0 },
- < { KEY_TAB, 0, 0, 0, 0 },
- < { KEY_ESCAPE, 0, 0, 0, 0 }
- ---
- > { KEY_F2, KEY_CAPS, 0, 0, KEY_LEFT },
- > { 0, 0, 0, 0, 0 },
- > { 0, 0, 0, 0, 0 },
- > { KEY_BACKSP, 0, KEY_RIGHT, KEY_UP, KEY_DOWN },
- > { 0, 0, 0, 0, 0 },
- > { 0, 0, 0, 0, 0 },
- > { KEY_TAB, 0, 0, 0, 0 },
- > { KEY_ESCAPE, 0, 0, 0, 0 }
- 410,417c447,454
- < { KS1_1, KS1_2, KS1_3, KS1_4, KS1_5 },
- < { KS1_Q, KS1_W, KS1_E, KS1_R, KS1_T },
- < { KS1_A, KS1_S, KS1_D, KS1_F, KS1_G },
- < { KS1_0, KS1_9, KS1_8, KS1_7, KS1_6 },
- < { KS1_P, KS1_O, KS1_I, KS1_U, KS1_Y },
- < { 0, KS1_Z, KS1_X, KS1_C, KS1_V },
- < { KS1_ENTER, KS1_L, KS1_K, KS1_J, KS1_H },
- < { KS1_SPACE, 0, KS1_M, KS1_N, KS1_B }
- ---
- > { KS1_1, KS1_2, KS1_3, KS1_4, KS1_5 },
- > { KS1_Q, KS1_W, KS1_E, KS1_R, KS1_T },
- > { KS1_A, KS1_S, KS1_D, KS1_F, KS1_G },
- > { KS1_0, KS1_9, KS1_8, KS1_7, KS1_6 },
- > { KS1_P, KS1_O, KS1_I, KS1_U, KS1_Y },
- > { 0, KS1_Z, KS1_X, KS1_C, KS1_V },
- > { KS1_ENTER, KS1_L, KS1_K, KS1_J, KS1_H },
- > { KS1_SPACE, 0, KS1_M, KS1_N, KS1_B }
- 420,427c457,464
- < { KS1_F2, KS1_CAPS, 0, 0, KS1_LEFT },
- < { 0, 0, 0, 0, 0 },
- < { 0, 0, 0, 0, 0 },
- < { KS1_BACKSP, 0, KS1_RIGHT, 0, KS1_DOWN },
- < { 0, 0, 0, 0, 0 },
- < { 0, 0, 0, 0, 0 },
- < { KS1_TAB, 0, 0, 0, 0 },
- < { KS1_ESCAPE, 0, 0, 0, 0 }
- ---
- > { KS1_F2, KS1_CAPS, 0, 0, KS1_LEFT },
- > { 0, 0, 0, 0, 0 },
- > { 0, 0, 0, 0, 0 },
- > { KS1_BACKSP, 0, KS1_RIGHT, KS1_UP, KS1_DOWN },
- > { 0, 0, 0, 0, 0 },
- > { 0, 0, 0, 0, 0 },
- > { KS1_TAB, 0, 0, 0, 0 },
- > { KS1_ESCAPE, 0, 0, 0, 0 }
- 428a466
- >
- 430,437c468,475
- < { KS1_1, KS1_2, KS1_3, KS1_4, KS1_5 },
- < { 0, 0, 0, KS1_COMA, KS1_PUNTO },
- < { KS1_TLD, KS1_BKSLASH, KS1_BKSLASH, KS1_ACORCHE, KS1_CCORCHE },
- < { KS1_MENOS, KS1_0, KS1_9, KS1_COMILLA, KS1_7 },
- < { KS1_COMILLA, KS1_CCORCHE, 0, KS1_CCORCHE, KS1_ACORCHE },
- < { 0, KS1_PTOCOMA, 0, KS1_SLASH, KS1_SLASH },
- < { 0, KS1_IGUAL, KS1_IGUAL, KS1_MENOS, KS1_6 },
- < { 0, 0, KS1_PUNTO, KS1_COMA, KS1_8 }
- ---
- > { KS1_1, KS1_2, KS1_3, KS1_4, KS1_5 },
- > { KS1_TLD, KS1_TLD, KS1_IGUAL, KS1_LESS, KS1_LESS },
- > { 126, KS1_1, KS1_TLD,KS1_COMILLA,KS1_BKSLASH },
- > { KS1_SLASH, KS1_9, KS1_8, KS1_MENOS, KS1_6 },
- > { KS1_2, KS1_COMA, KS1_IGUAL,KS1_CCORCHE,KS1_ACORCHE },
- > { 0, KS1_PUNTO, 156, KS1_MENOS, KS1_7 },
- > { 0, KS1_0,KS1_CCORCHE, KS1_SLASH,KS1_ACORCHE },
- > { 0, 0, KS1_PUNTO, KS1_COMA,KS1_CCORCHE }
- 440,447c478,485
- < { 1, 1, 1, 1, 1 },
- < { 0, 0, 0, 1, 1 },
- < { 1, 1, 0, 1, 1 },
- < { 1, 1, 1, 0, 1 },
- < { 1, 0, 0, 0, 0 },
- < { 0, 1, 0, 1, 0 },
- < { 0, 0, 1, 0, 1 },
- < { 0, 0, 0, 0, 1 }
- ---
- > { 1, 8, 8, 1, 1 },
- > { 0, 1, 0, 0, 1 },
- > { 0x40, 8, 8, 8, 8 },
- > { 1, 1, 1, 0, 1 },
- > { 1, 1, 1, 8, 8 },
- > { 0, 1, 0x40, 1, 1 },
- > { 0, 1, 0, 0, 1 },
- > { 0, 0, 0, 0, 1 }
- 448a487
- >
- 450,457c489,496
- < { MODO_1, MODO_2, MODO_3, MODO_4, MODO_5 },
- < { MODO_Q, MODO_W, MODO_E, MODO_R, MODO_T },
- < { MODO_A, MODO_S, MODO_D, MODO_F, MODO_G },
- < { MODO_0, MODO_9, MODO_8, MODO_7, MODO_6 },
- < { MODO_P, MODO_O, MODO_I, MODO_U, MODO_Y },
- < { MODO_SS, MODO_Z, MODO_X, MODO_C, MODO_V },
- < { MODO_ENTER, MODO_L, MODO_K, MODO_J, MODO_H },
- < { MODO_SPACE, MODO_CS, MODO_M, MODO_N, MODO_B }
- ---
- > { MODO_1, MODO_2, MODO_3, MODO_4, MODO_5 },
- > { MODO_Q, MODO_W, MODO_E, MODO_R, MODO_T },
- > { MODO_A, MODO_S, MODO_D, MODO_F, MODO_G },
- > { MODO_0, MODO_9, MODO_8, MODO_7, MODO_6 },
- > { MODO_P, MODO_O, MODO_I, MODO_U, MODO_Y },
- > { MODO_SS, MODO_Z, MODO_X, MODO_C, MODO_V },
- > { MODO_ENTER, MODO_L, MODO_K, MODO_J, MODO_H },
- > { MODO_SPACE, MODO_CS, MODO_M, MODO_N, MODO_B }
- 463,474c502,518
- < const uint8_t nomCPC[] = { 3,KEY_C,KEY_P,KEY_C,4 };
- < const uint8_t nomMSX[] = { 3,KEY_M,KEY_S,KEY_X,4 };
- < const uint8_t nomC64[] = { 3,KEY_C,KEY_6,KEY_4,4 };
- < const uint8_t nomAT8[] = { 5,KEY_A,KEY_T,KEY_A,KEY_R,KEY_I,4 };
- < const uint8_t nomBBC[] = { 3,KEY_B,KEY_B,KEY_C,4 };
- < const uint8_t nomACO[] = { 5,KEY_A,KEY_C,KEY_O,KEY_R,KEY_N,4 };
- < const uint8_t nomVIC[] = { 3,KEY_V,KEY_I,KEY_C,4 };
- < const uint8_t nomORI[] = { 4,KEY_O,KEY_R,KEY_I,KEY_C,4 };
- < const uint8_t nomSAM[] = { 3,KEY_S,KEY_A,KEY_M,4 };
- < const uint8_t nomJUP[] = { 7,KEY_J,KEY_U,KEY_P,KEY_I,KEY_T,KEY_E,KEY_R,4 };
- < const uint8_t nomAP2[] = { 5,KEY_A,KEY_P,KEY_P,KEY_L,KEY_E,4 };
- < const uint8_t nomPC[] = { 2,KEY_P,KEY_C,4 };
- ---
- > const uint8_t nomCPC[] = { 3,KEY_C,KEY_P,KEY_C,4};
- > const uint8_t nomMSX[] = { 3,KEY_M,KEY_S,KEY_X,4};
- > const uint8_t nomC64[] = { 3,KEY_C,KEY_6,KEY_4,4};
- > const uint8_t nomC16[] = { 3,KEY_C,KEY_1,KEY_6,4 };
- > const uint8_t nomHT8[] = { 5,KEY_T,KEY_R,KEY_S, KEY_8, KEY_0,6 };
- > const uint8_t nomAT8[] = { 5,KEY_A,KEY_T,KEY_A,KEY_R,KEY_I,4};
- > const uint8_t nomBBC[] = { 3,KEY_B,KEY_B,KEY_C,4};
- > const uint8_t nomACO[] = { 5,KEY_A,KEY_C,KEY_O,KEY_R,KEY_N,4};
- > const uint8_t nomVIC[] = { 3,KEY_V,KEY_I,KEY_C,4};
- > const uint8_t nomORI[] = { 4,KEY_O,KEY_R,KEY_I,KEY_C,4};
- > const uint8_t nomSAM[] = { 3,KEY_S,KEY_A,KEY_M,4};
- > const uint8_t nomJUP[] = { 7,KEY_J,KEY_U,KEY_P,KEY_I,KEY_T,KEY_E,KEY_R,4};
- > const uint8_t nomAP2[] = { 5,KEY_A,KEY_P,KEY_P,KEY_L,KEY_E,4};
- > const uint8_t nomPC[] = { 4,KEY_P,KEY_C,KEY_X,KEY_T,4};
- > const uint8_t nomSMS[] = { 3,KEY_S,KEY_M,KEY_S,4 };
- > const uint8_t nomGALAK[] = { 9,KEY_G,KEY_A,KEY_L,KEY_A,KEY_K,KEY_S,KEY_I,KEY_J,KEY_A,4 };
- > const uint8_t nomMULTI[] = { 9,KEY_M,KEY_U,KEY_L,KEY_T,KEY_I,KEY_C,KEY_O,KEY_M,KEY_P,4 };
- 479,490c523,534
- < uint8_t up; // 0
- < uint8_t down; // 1
- < uint8_t left; // 2
- < uint8_t right; // 3
- < uint8_t select; // 4
- < uint8_t start; // 5
- < uint8_t button1; // 6
- < uint8_t button2; // 7
- < uint8_t button3; // 8
- < uint8_t button4; // 9
- < uint8_t button5; // 10
- < uint8_t button6; // 11
- ---
- > uint8_t up; // 0
- > uint8_t down; // 1
- > uint8_t left; // 2
- > uint8_t right; // 3
- > uint8_t select; // 4
- > uint8_t start; // 5
- > uint8_t button1; // 6
- > uint8_t button2; // 7
- > uint8_t button3; // 8
- > uint8_t button4; // 9
- > uint8_t button5; // 10
- > uint8_t button6; // 11
- 494,506d537
- <
- < JOY_Q, // UP
- < JOY_A, // DOWN
- < JOY_O, // LEFT
- < JOY_P, // RIGHT
- < JOY_5, // SELECT
- < JOY_1, // START
- < JOY_SPACE, // BUTTON 1
- < JOY_X, // BUTTON 2
- < JOY_M, // BUTTON 3
- < JOY_D, // BUTTON 4
- < JOY_F, // BUTTON 5
- < JOY_C // BUTTON 6
- 507a539,550
- > JOY_Q, // UP
- > JOY_A, // DOWN
- > JOY_O, // LEFT
- > JOY_P, // RIGHT
- > JOY_5, // SELECT
- > JOY_1, // START
- > JOY_SPACE, // BUTTON 1
- > JOY_X, // BUTTON 2
- > JOY_M, // BUTTON 3
- > JOY_D, // BUTTON 4
- > JOY_F, // BUTTON 5
- > JOY_C // BUTTON 6
- diff sugarless1.1/sugarless.ino sugarless3/sugarless.ino
- 8a9
- > Gracias a @desUBIkado por hacer de Betatester y proporcionar nuevas ideas para la última versión de ZXUnoPS2.
- 9a11
- >
- 19a22,23
- > #define uchar unsigned char
- >
- 36a41
- > uint8_t opqa_numbers = 0;
- 53c58
- < //uint8_t modo=0; //Modo teclado 0=ZX NATIVO / 1=CPC MAPEADO /2=MSX MAPEADO
- ---
- >
- 55a61
- > uint8_t funcion = 0;
- 59,66c65,72
- < unsigned char hostdata = 0;
- < unsigned char hostdataAnt;
- < unsigned char codeset = 2;
- < unsigned char antighosting = 0;
- < unsigned char kbescucha = 0;
- < uint32_t timeout_escucha = 0;
- < uint16_t typematic = 0;
- < uint16_t typematicfirst = 0;
- ---
- > unsigned char hostdata = 0;
- > unsigned char hostdataAnt;
- > unsigned char codeset = 2;
- > unsigned char antighosting = 0;
- > unsigned char kbescucha = 0;
- > uint32_t timeout_escucha = 0;
- > uint16_t typematic = 0;
- > uint16_t typematicfirst = 0;
- 68,69c74,77
- < uint8_t typematic_codeaux = 0;
- < uint8_t kbalt = 0;
- ---
- > uint8_t typematic_codeaux = 0;
- > uint8_t kbcontrol = 0, kbalt = 0, kbshift = 0, kblwin = 0, kbaltgr = 0;
- > uint8_t prevf0 = 0;
- > uint8_t famicom = 0;
- 72c80
- < unsigned char CAPS_SHIFT = KEY_LSHIFT; //Caps Shift (NO necesita E0)
- ---
- > unsigned char CAPS_SHIFT = KEY_LSHIFT; //Caps Shift (NO necesita E0)
- 75c83
- < //Caps Shift (CAPS_SHIFT)
- ---
- > //Caps Shift (CAPS_SHIFT)
- 79c87
- < //Symbol Shift (SYMBOL_SHIFT)
- ---
- > //Symbol Shift (SYMBOL_SHIFT)
- 83c91
- < //SPACE (Escape)
- ---
- > //SPACE (Escape)
- 87c95
- < //ENTER
- ---
- > //ENTER
- 91c99
- < //Row 1..5
- ---
- > //Row 1..5
- 93c101
- < //Cols 1..5
- ---
- > //Cols 1..5
- 100c108
- < //Row 6..0
- ---
- > //Row 6..0
- 102c110
- < //Cols 6..0
- ---
- > //Cols 6..0
- 109c117
- < //Row Q-T
- ---
- > //Row Q-T
- 111c119
- < //Cols Q-T
- ---
- > //Cols Q-T
- 118c126
- < //Row Y-P
- ---
- > //Row Y-P
- 120c128
- < //Cols Y-P
- ---
- > //Cols Y-P
- 127c135
- < //Row A-G
- ---
- > //Row A-G
- 129c137
- < //Cols A-G
- ---
- > //Cols A-G
- 136c144
- < //Row H-L
- ---
- > //Row H-L
- 138c146
- < //Cols H-L
- ---
- > //Cols H-L
- 144c152
- < //Row Z-V
- ---
- > //Row Z-V
- 146c154
- < //Cols Z-V
- ---
- > //Cols Z-V
- 152c160
- < //Row B-M
- ---
- > //Row B-M
- 154c162
- < //Cols B-M
- ---
- > //Cols B-M
- 160,161c168,172
- < static report_t p1, p1prev;
- < static uint8_t p1selectnesclon, p1startnesclon;
- ---
- > static report_t p1, p1prev;
- > static uint8_t p1selectnesclon, p1startnesclon;
- >
- > void sendPS2(unsigned char code);
- > void pulsa_y_suelta_teclas_modificadoras(uint8_t control, uint8_t alt, uint8_t shift, uint8_t altgr, uint8_t lwin);
- 165,171c176,182
- < switch (bcd) {
- < case PA: if (stat) DDRA &= ~_BV(pin); else DDRA |= _BV(pin); break;
- < case PB: if (stat) DDRB &= ~_BV(pin); else DDRB |= _BV(pin); break;
- < case PC: if (stat) DDRC &= ~_BV(pin); else DDRC |= _BV(pin); break;
- < case PD: if (stat) DDRD &= ~_BV(pin); else DDRD |= _BV(pin); break;
- < case PE: if (stat) DDRE &= ~_BV(pin); else DDRE |= _BV(pin); break;
- < case PG: if (stat) DDRG &= ~_BV(pin); else DDRG |= _BV(pin); break;
- ---
- > switch (bcd) {
- > case PA: if (stat) DDRA &= ~_BV(pin); else DDRA |= _BV(pin); break;
- > case PB: if (stat) DDRB &= ~_BV(pin); else DDRB |= _BV(pin); break;
- > case PC: if (stat) DDRC &= ~_BV(pin); else DDRC |= _BV(pin); break;
- > case PD: if (stat) DDRD &= ~_BV(pin); else DDRD |= _BV(pin); break;
- > case PE: if (stat) DDRE &= ~_BV(pin); else DDRE |= _BV(pin); break;
- > case PG: if (stat) DDRG &= ~_BV(pin); else DDRG |= _BV(pin); break;
- 173,174c184,185
- < case PH: if (stat) DDRH &= ~_BV(pin); else DDRH |= _BV(pin); break;
- < case PL: if (stat) DDRL &= ~_BV(pin); else DDRL |= _BV(pin); break;
- ---
- > case PH: if (stat) DDRH &= ~_BV(pin); else DDRH |= _BV(pin); break;
- > case PL: if (stat) DDRL &= ~_BV(pin); else DDRL |= _BV(pin); break;
- 176c187
- < }
- ---
- > }
- 181,187c192,198
- < switch (bcd) {
- < case PA: if (!(PINA & (1 << pin))) return 1; else return 0; break;
- < case PB: if (!(PINB & (1 << pin))) return 1; else return 0; break;
- < case PC: if (!(PINC & (1 << pin))) return 1; else return 0; break;
- < case PD: if (!(PIND & (1 << pin))) return 1; else return 0; break;
- < case PE: if (!(PINE & (1 << pin))) return 1; else return 0; break;
- < case PG: if (!(PING & (1 << pin))) return 1; else return 0; break;
- ---
- > switch (bcd) {
- > case PA: if (!(PINA & (1 << pin))) return 1; else return 0; break;
- > case PB: if (!(PINB & (1 << pin))) return 1; else return 0; break;
- > case PC: if (!(PINC & (1 << pin))) return 1; else return 0; break;
- > case PD: if (!(PIND & (1 << pin))) return 1; else return 0; break;
- > case PE: if (!(PINE & (1 << pin))) return 1; else return 0; break;
- > case PG: if (!(PING & (1 << pin))) return 1; else return 0; break;
- 189,190c200,201
- < case PH: if (!(PINH & (1 << pin))) return 1; else return 0; break;
- < case PL: if (!(PINL & (1 << pin))) return 1; else return 0; break;
- ---
- > case PH: if (!(PINH & (1 << pin))) return 1; else return 0; break;
- > case PL: if (!(PINL & (1 << pin))) return 1; else return 0; break;
- 192,193c203,204
- < }
- < return 0;
- ---
- > }
- > return 0;
- 198,206c209,216
- < switch (bcd) {
- <
- < case PA: if (!stat) PORTA &= ~_BV(pin); else PORTA |= _BV(pin); break;
- < case PB: if (!stat) PORTB &= ~_BV(pin); else PORTB |= _BV(pin); break;
- < case PC: if (!stat) PORTC &= ~_BV(pin); else PORTC |= _BV(pin); break;
- < case PD: if (!stat) PORTD &= ~_BV(pin); else PORTD |= _BV(pin); break;
- < case PE: if (!stat) PORTE &= ~_BV(pin); else PORTE |= _BV(pin); break;
- < case PG: if (!stat) PORTG &= ~_BV(pin); else PORTG |= _BV(pin); break;
- <
- ---
- > switch (bcd) {
- > case PA: if (!stat) PORTA &= ~_BV(pin); else PORTA |= _BV(pin); break;
- > case PB: if (!stat) PORTB &= ~_BV(pin); else PORTB |= _BV(pin); break;
- > case PC: if (!stat) PORTC &= ~_BV(pin); else PORTC |= _BV(pin); break;
- > case PD: if (!stat) PORTD &= ~_BV(pin); else PORTD |= _BV(pin); break;
- > case PE: if (!stat) PORTE &= ~_BV(pin); else PORTE |= _BV(pin); break;
- > case PG: if (!stat) PORTG &= ~_BV(pin); else PORTG |= _BV(pin); break;
- >
- 208,209c218,219
- < case PH: if (!stat) PORTH &= ~_BV(pin); else PORTH |= _BV(pin); break;
- < case PL: if (!stat) PORTL &= ~_BV(pin); else PORTL |= _BV(pin); break;
- ---
- > case PH: if (!stat) PORTH &= ~_BV(pin); else PORTH |= _BV(pin); break;
- > case PL: if (!stat) PORTL &= ~_BV(pin); else PORTL |= _BV(pin); break;
- 211c221
- < }
- ---
- > }
- 216,217c226,227
- < if (mode) PS2_DDR &= ~_BV(pin); //Hi-Entrada
- < else PS2_DDR |= _BV(pin); //Low-Salilda
- ---
- > if (mode) PS2_DDR &= ~_BV(pin); //Hi-Entrada
- > else PS2_DDR |= _BV(pin); //Low-Salilda
- 223,257c233,267
- < if (p1.up & p1.down)
- < {
- < p1.select = 1;
- < p1selectnesclon = 1;
- < p1.up = 0;
- < p1.down = 0;
- < }
- < else
- < {
- < if (p1selectnesclon)
- < {
- < p1.select = 0;
- < p1selectnesclon = 0;
- < }
- < p1.up = p1.up & !p1prev.select;
- < p1.down = p1.down & !p1prev.select;
- < }
- <
- < if (p1.left & p1.right)
- < {
- < p1.start = 1;
- < p1startnesclon = 1;
- < p1.left = 0;
- < p1.right = 0;
- < }
- < else
- < {
- < if (p1startnesclon)
- < {
- < p1.start = 0;
- < p1startnesclon = 0;
- < }
- < p1.left = p1.left & !p1prev.start;
- < p1.right = p1.right & !p1prev.start;
- < }
- ---
- > if (p1.up & p1.down)
- > {
- > p1.select = 1;
- > p1selectnesclon = 1;
- > p1.up = 0;
- > p1.down = 0;
- > }
- > else
- > {
- > if (p1selectnesclon)
- > {
- > p1.select = 0;
- > p1selectnesclon = 0;
- > }
- > p1.up = p1.up & !p1prev.select;
- > p1.down = p1.down & !p1prev.select;
- > }
- >
- > if (p1.left & p1.right)
- > {
- > p1.start = 1;
- > p1startnesclon = 1;
- > p1.left = 0;
- > p1.right = 0;
- > }
- > else
- > {
- > if (p1startnesclon)
- > {
- > p1.start = 0;
- > p1startnesclon = 0;
- > }
- > p1.left = p1.left & !p1prev.start;
- > p1.right = p1.right & !p1prev.start;
- > }
- 262,321c272,331
- < // Get D-PAD, B, C buttons state
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI);
- < _delay_us(14);
- <
- < p1.up = pinStat(pinsJOY2PS2[0], bcdJOY2PS2[0]); // Up
- < p1.down = pinStat(pinsJOY2PS2[1], bcdJOY2PS2[1]); // Down
- < p1.left = pinStat(pinsJOY2PS2[2], bcdJOY2PS2[2]); // Left
- < p1.right = pinStat(pinsJOY2PS2[3], bcdJOY2PS2[3]); // Right
- <
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO);
- < _delay_us(14);
- < if (pinStat(pinsJOY2PS2[2], bcdJOY2PS2[2]) & pinStat(pinsJOY2PS2[3], bcdJOY2PS2[3])) // if L/R low then Megadrive pad detected
- < {
- <
- < p1.button1 = pinStat(pinsJOY2PS2[4], bcdJOY2PS2[4]); // Button A
- < p1.start = pinStat(pinsJOY2PS2[6], bcdJOY2PS2[6]); // Start
- <
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI);
- < _delay_us(14);
- < p1.button2 = pinStat(pinsJOY2PS2[4], bcdJOY2PS2[4]); // Button B
- < p1.button3 = pinStat(pinsJOY2PS2[6], bcdJOY2PS2[6]); // Button C
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO);
- < _delay_us(14);
- <
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI); // select high
- < _delay_us(14);
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO); // select low
- < _delay_us(14);
- <
- < // U/D/L/R are low if six button controller
- < if (pinStat(pinsJOY2PS2[0], bcdJOY2PS2[0]) & pinStat(pinsJOY2PS2[1], bcdJOY2PS2[1]) &
- < pinStat(pinsJOY2PS2[2], bcdJOY2PS2[2]) & pinStat(pinsJOY2PS2[3], bcdJOY2PS2[3]))
- < {
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI); // select high
- < _delay_us(14);
- <
- < p1.button6 = pinStat(pinsJOY2PS2[0], bcdJOY2PS2[0]); // Button Z
- < p1.button5 = pinStat(pinsJOY2PS2[1], bcdJOY2PS2[1]); // Button Y
- < p1.button4 = pinStat(pinsJOY2PS2[2], bcdJOY2PS2[2]); // Button X
- < p1.select = pinStat(pinsJOY2PS2[3], bcdJOY2PS2[3]); // Select (Mode)
- <
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO); // select low
- < _delay_us(14);
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI); // select high
- < _delay_us(14);
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO); // select low
- <
- < }
- <
- < // Delay needed for settling joystick down
- < _delay_us(2000);
- <
- < }
- < else
- < {
- < p1.button1 = pinStat(pinsJOY2PS2[4], bcdJOY2PS2[4]); // Button A
- < p1.button2 = pinStat(pinsJOY2PS2[6], bcdJOY2PS2[6]); // Button B
- < }
- < pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI);
- < _delay_us(14);
- ---
- > // Get D-PAD, B, C buttons state
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI);
- > _delay_us(14);
- >
- > p1.up = pinStat(pinsJOY2PS2[0], bcdJOY2PS2[0]); // Up
- > p1.down = pinStat(pinsJOY2PS2[1], bcdJOY2PS2[1]); // Down
- > p1.left = pinStat(pinsJOY2PS2[2], bcdJOY2PS2[2]); // Left
- > p1.right = pinStat(pinsJOY2PS2[3], bcdJOY2PS2[3]); // Right
- >
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO);
- > _delay_us(14);
- > if (pinStat(pinsJOY2PS2[2], bcdJOY2PS2[2]) & pinStat(pinsJOY2PS2[3], bcdJOY2PS2[3])) // if L/R low then Megadrive pad detected
- > {
- >
- > p1.button1 = pinStat(pinsJOY2PS2[4], bcdJOY2PS2[4]); // Button A
- > p1.start = pinStat(pinsJOY2PS2[6], bcdJOY2PS2[6]); // Start
- >
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI);
- > _delay_us(14);
- > p1.button2 = pinStat(pinsJOY2PS2[4], bcdJOY2PS2[4]); // Button B
- > p1.button3 = pinStat(pinsJOY2PS2[6], bcdJOY2PS2[6]); // Button C
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO);
- > _delay_us(14);
- >
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI); // select high
- > _delay_us(14);
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO); // select low
- > _delay_us(14);
- >
- > // U/D/L/R are low if six button controller
- > if (pinStat(pinsJOY2PS2[0], bcdJOY2PS2[0]) & pinStat(pinsJOY2PS2[1], bcdJOY2PS2[1]) &
- > pinStat(pinsJOY2PS2[2], bcdJOY2PS2[2]) & pinStat(pinsJOY2PS2[3], bcdJOY2PS2[3]))
- > {
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI); // select high
- > _delay_us(14);
- >
- > p1.button6 = pinStat(pinsJOY2PS2[0], bcdJOY2PS2[0]); // Button Z
- > p1.button5 = pinStat(pinsJOY2PS2[1], bcdJOY2PS2[1]); // Button Y
- > p1.button4 = pinStat(pinsJOY2PS2[2], bcdJOY2PS2[2]); // Button X
- > p1.select = pinStat(pinsJOY2PS2[3], bcdJOY2PS2[3]); // Select (Mode)
- >
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO); // select low
- > _delay_us(14);
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI); // select high
- > _delay_us(14);
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], LO); // select low
- >
- > }
- >
- > // Delay needed for settling joystick down
- > _delay_us(2000);
- >
- > }
- > else
- > {
- > p1.button1 = pinStat(pinsJOY2PS2[4], bcdJOY2PS2[4]); // Button A
- > p1.button2 = pinStat(pinsJOY2PS2[6], bcdJOY2PS2[6]); // Button B
- > }
- > pinPut(pinsJOY2PS2[5], bcdJOY2PS2[5], HI);
- > _delay_us(14);
- 325d334
- < /* --> Futura adaptacion Famicom DB9, requiere adaptador
- 328c337
- < uchar i = 0, j;
- ---
- > uchar i = 0, j;
- 330,338c339,347
- < for (j = 0; j < 8; j++)
- < {
- < i = i >> 1;
- < if (pinStat(FAM_DAT, FAM_DAT_BCD)) i |= (1 << 7); // button pressed
- < pinPut(FAM_CLK, FAM_CLK_BCD, LO); // clock low
- < _delay_us(FAMDELAY);
- < pinPut(FAM_CLK, FAM_CLK_BCD, HI); // clock high
- < _delay_us(FAMDELAY);
- < }
- ---
- > for (j = 0; j < 8; j++)
- > {
- > i = i >> 1;
- > if (!(FAM_DAT_PIN & FAM_DAT)) i |= (1 << 7); // button pressed
- > FAM_CLK_PORT &= ~(FAM_CLK); // clock low
- > _delay_us(FAMDELAY);
- > FAM_CLK_PORT |= FAM_CLK; // clock high
- > _delay_us(FAMDELAY);
- > }
- 340c349
- < return i;
- ---
- > return i;
- 345,395c354,384
- < static uchar vbmode = 0; // Virtual Boy mode flag
- <
- < uchar byte0, byte1, byte2;
- <
- < pinSet(FAM_DAT, FAM_DAT_BCD, HI); // Data as input
- < pinPut(FAM_DAT, FAM_DAT_BCD, HI); // with pull-up
- <
- < pinSet(FAM_LAT, FAM_LAT_BCD, LO); // Latch as output
- < pinPut(FAM_LAT, FAM_LAT_BCD, HI); // starting high
- <
- < pinSet(FAM_CLK, FAM_CLK_BCD, LO); // Clock as output
- < pinPut(FAM_CLK, FAM_CLK_BCD, HI); // starting high
- <
- < _delay_us(FAMDELAY * 2); // latch pulse
- < pinPut(FAM_LAT, FAM_LAT_BCD, LO); // latch low again
- < _delay_us(FAMDELAY); // settle time
- <
- < byte0 = FamicomReadByte();
- < byte1 = FamicomReadByte();
- < byte2 = FamicomReadByte();
- <
- < // Common to all controllers
- < p1.right = byte0 & (1 << 7);
- < p1.left = byte0 & (1 << 6);
- < p1.down = byte0 & (1 << 5);
- < p1.up = byte0 & (1 << 4);
- < p1.start = byte0 & (1 << 3);
- < p1.select = byte0 & (1 << 2);
- <
- < if ((byte1 & 0xC0) == 0xC0) // Famicom mode
- < {
- < if (byte1 != 0xff) vbmode = 1; // Virtual Boy detection
- <
- < if (vbmode == 0) // Famicom
- < {
- < p1.button1 = byte0 & (1 << 0);
- < p1.button2 = byte0 & (1 << 1);
- < }
- < }
- < else if ((byte1 & 0xf0) == 0) // Super Famicom mode or no pad
- < {
- < vbmode = 0;
- <
- < p1.button1 = byte1 & (1 << 0);
- < p1.button2 = byte0 & (1 << 0);
- < p1.button3 = byte1 & (1 << 1);
- < p1.button4 = byte0 & (1 << 1);
- < p1.button5 = byte1 & (1 << 2);
- < p1.button6 = byte1 & (1 << 3);
- < }
- < else vbmode = 0;
- ---
- > uchar byte0;
- >
- > FAM_DAT_DDR &= ~(FAM_DAT); // Data as input
- > FAM_DAT_PORT |= FAM_DAT; // with pull-up
- >
- > FAM_LAT_DDR |= FAM_LAT; // Latch as output
- > FAM_LAT_PORT |= FAM_LAT; // starting high
- >
- > FAM_CLK_DDR |= FAM_CLK; // Clock as output
- > FAM_CLK_PORT |= FAM_CLK; // starting high
- >
- > _delay_us(FAMDELAY * 2); // latch pulse
- > FAM_LAT_PORT &= ~(FAM_LAT); // latch low again
- > _delay_us(FAMDELAY); // settle time
- >
- > byte0 = FamicomReadByte();
- >
- > p1.button1 = (byte0 & (1 << 0)); // A
- > p1.button2 = (byte0 & (1 << 1)); // B
- > p1.select = (byte0 & (1 << 2)); // Select
- > p1.start = (byte0 & (1 << 3)); // Start
- > p1.up = (byte0 & (1 << 4)); // Up
- > p1.down = (byte0 & (1 << 5)); // Down
- > p1.left = (byte0 & (1 << 6)); // Left
- > p1.right = (byte0 & (1 << 7)); // Right
- >
- > FAM_LAT_DDR &= ~(FAM_LAT); // Latch as input
- > FAM_LAT_PORT |= FAM_LAT; // with pull-up
- >
- > FAM_CLK_DDR &= ~(FAM_CLK); // Clock as input
- > FAM_CLK_PORT |= FAM_CLK; // with pull-up
- 398d386
- < */
- 402,405c390,393
- < PS2_PORT &= ~_BV(PS2_DAT); //A 0
- < PS2_PORT &= ~_BV(PS2_CLK); //A 0
- < ps2Mode(PS2_DAT, HI);
- < ps2Mode(PS2_CLK, HI);
- ---
- > PS2_PORT &= ~_BV(PS2_DAT); //A 0
- > PS2_PORT &= ~_BV(PS2_CLK); //A 0
- > ps2Mode(PS2_DAT, HI);
- > ps2Mode(PS2_CLK, HI);
- 410,414c398,402
- < if (!(PS2_PIN & (1 << PS2_CLK)))
- < return 1;
- < if (!(PS2_PIN & (1 << PS2_DAT)))
- < return 1;
- < return 0;
- ---
- > if (!(PS2_PIN & (1 << PS2_CLK)))
- > return 1;
- > if (!(PS2_PIN & (1 << PS2_DAT)))
- > return 1;
- > return 0;
- 418c406
- < uint16_t cont = 0;
- ---
- > uint16_t cont = 0;
- 420,424c408,412
- < while (cont++ < tramo) {
- < if (!(PS2_PIN & (1 << PS2_DAT)))
- < return 1;
- < _delay_us(5);
- < }
- ---
- > while (cont++ < tramo) {
- > if (!(PS2_PIN & (1 << PS2_DAT)))
- > return 1;
- > _delay_us(5);
- > }
- 426c414
- < return 0;
- ---
- > return 0;
- 431,435c419,423
- < while (0<us)
- < {
- < _delay_us(4);
- < us -= 4;
- < }
- ---
- > while (0<us)
- > {
- > _delay_us(4);
- > us -= 4;
- > }
- 444,445c432
- < //envio de datos ps/2 simulando reloj con delays.
- < void sendPS2(unsigned char code)
- ---
- > void sendPS2_aux(unsigned char code, unsigned char kbmodif)
- 447,496d433
- < //Para continuar las l�neas deben estar en alto
- < //if (ps2Stat())
- < // return;
- < while (ps2Stat());
- <
- < unsigned char parity = 1;
- < uint8_t i = 0;
- <
- < //iniciamos transmisi�n
- < ps2Mode(PS2_DAT, LO);
- < _delay_us_4usteps(CK1*CKm);
- <
- < ps2Mode(PS2_CLK, LO); //bit de comienzo
- < _delay_us_4usteps(CK2*CKm);
- < ps2Mode(PS2_CLK, HI);
- < _delay_us_4usteps(CK1*CKm);
- < //enviamos datos
- < for (i = 0; i < 8; ++i)
- < {
- < if (code & (1 << i))
- < {
- < ps2Mode(PS2_DAT, HI);
- < parity = parity ^ 1;
- < }
- < else ps2Mode(PS2_DAT, LO);
- <
- < _delay_us_4usteps(CK1*CKm);
- < ps2Mode(PS2_CLK, LO);
- < _delay_us_4usteps(CK2*CKm);
- < ps2Mode(PS2_CLK, HI);
- < _delay_us_4usteps(CK1*CKm);
- < }
- <
- < // Enviamos bit de paridad
- < if (parity) ps2Mode(PS2_DAT, HI);
- < else ps2Mode(PS2_DAT, LO);
- <
- < _delay_us_4usteps(CK1*CKm);
- < ps2Mode(PS2_CLK, LO);
- < _delay_us_4usteps(CK2*CKm);
- < ps2Mode(PS2_CLK, HI);
- < _delay_us_4usteps(CK1*CKm);
- <
- < //Bit de parada
- < ps2Mode(PS2_DAT, HI);
- < _delay_us_4usteps(CK1*CKm);
- < ps2Mode(PS2_CLK, LO);
- < _delay_us_4usteps(CK2*CKm);
- < ps2Mode(PS2_CLK, HI);
- < _delay_us_4usteps(CK1*CKm);
- 498c435,439
- < _delay_us(50); //fin
- ---
- > //Para continuar las lÃneas deben estar en alto
- > while (ps2Stat());
- >
- > unsigned char parity = 1;
- > uint8_t i = 0;
- 499a441,523
- > //iniciamos transmisión
- > ps2Mode(PS2_DAT, LO);
- > _delay_us_4usteps(CK1*CKm);
- >
- > ps2Mode(PS2_CLK, LO); //bit de comienzo
- > _delay_us_4usteps(CK2*CKm);
- > ps2Mode(PS2_CLK, HI);
- > _delay_us_4usteps(CK1*CKm);
- > //enviamos datos
- > for (i = 0; i < 8; ++i)
- > {
- > if (code & (1 << i))
- > {
- > ps2Mode(PS2_DAT, HI);
- > parity = parity ^ 1;
- > }
- > else ps2Mode(PS2_DAT, LO);
- >
- > _delay_us_4usteps(CK1*CKm);
- > ps2Mode(PS2_CLK, LO);
- > _delay_us_4usteps(CK2*CKm);
- > ps2Mode(PS2_CLK, HI);
- > _delay_us_4usteps(CK1*CKm);
- > }
- >
- > // Enviamos bit de paridad
- > if (parity) ps2Mode(PS2_DAT, HI);
- > else ps2Mode(PS2_DAT, LO);
- >
- > _delay_us_4usteps(CK1*CKm);
- > ps2Mode(PS2_CLK, LO);
- > _delay_us_4usteps(CK2*CKm);
- > ps2Mode(PS2_CLK, HI);
- > _delay_us_4usteps(CK1*CKm);
- >
- > //Bit de parada
- > ps2Mode(PS2_DAT, HI);
- > _delay_us_4usteps(CK1*CKm);
- > ps2Mode(PS2_CLK, LO);
- > _delay_us_4usteps(CK2*CKm);
- > ps2Mode(PS2_CLK, HI);
- > _delay_us_4usteps(CK1*CKm);
- >
- > _delay_us(50); //fin
- >
- > if (kbmodif)
- > {
- > if (codeset == 2)
- > {
- > if (kbcontrol && code == KEY_LCTRL) return;
- > if (kbalt && code == KEY_LALT) return;
- > if (kbshift && code == KEY_LSHIFT) return;
- > if (kbaltgr && code == KEY_RALT) return;
- > if (kblwin && code == KEY_LWIN) return;
- > if (prevf0 && (code != 0xF0))
- > {
- > pulsa_y_suelta_teclas_modificadoras(1, 1, 1, 1, 1);
- > prevf0 = 0;
- > }
- > else
- > {
- > prevf0 = (code == 0xF0);
- > }
- > }
- > else
- > {
- > if (kbcontrol && code == KS1_LCTRL + KS1_RELEASE) return;
- > if (kbalt && code == KS1_LALT + KS1_RELEASE) return;
- > if (kbshift && code == KS1_LSHIFT + KS1_RELEASE) return;
- > if (kbaltgr && code == KS1_RALT + KS1_RELEASE) return;
- > if (kblwin && code == KS1_LWIN + KS1_RELEASE) return;
- > if (code != 0xE0 && code > KS1_RELEASE)
- > {
- > pulsa_y_suelta_teclas_modificadoras(1, 1, 1, 1, 1);
- > }
- > }
- > }
- > }
- >
- > //envio de datos ps/2 simulando reloj con delays.
- > void sendPS2(unsigned char code)
- > {
- > sendPS2_aux(code, 1);
- 504,548c528,572
- < unsigned char data = 0x00;
- < unsigned char p = 0x01;
- < uint8_t i = 0;
- <
- < // discard the start bit
- < while ((PS2_PIN & (1 << PS2_DAT)));
- < while (!(PS2_PIN & (1 << PS2_CLK)));
- <
- < // Bit de comienzo
- < _delay_us_4usteps(CK1*CKm);
- < ps2Mode(PS2_CLK, LO);
- < _delay_us_4usteps(CK2*CKm);
- < ps2Mode(PS2_CLK, HI);
- < _delay_us_4usteps(CK1*CKm);
- <
- < // read each data bit
- < for (i = 0; i<8; i++) {
- < if ((PS2_PIN & (1 << PS2_DAT))) {
- < data = data | (1 << i);
- < p = p ^ 1;
- < }
- < _delay_us_4usteps(CK1*CKm);
- < ps2Mode(PS2_CLK, LO);
- < _delay_us_4usteps(CK2*CKm);
- < ps2Mode(PS2_CLK, HI);
- < _delay_us_4usteps(CK1*CKm);
- < }
- <
- < // read the parity bit
- < if (((PS2_PIN & (1 << PS2_DAT)) != 0) != p) {
- < return -1;
- < }
- < _delay_us_4usteps(CK1*CKm);
- < ps2Mode(PS2_CLK, LO);
- < _delay_us_4usteps(CK2*CKm);
- < ps2Mode(PS2_CLK, HI);
- < _delay_us_4usteps(CK1*CKm);
- <
- < // send 'ack' bit
- < ps2Mode(PS2_DAT, LO);
- < _delay_us_4usteps(CK1*CKm);
- < ps2Mode(PS2_CLK, LO);
- < _delay_us_4usteps(CK2*CKm);
- < ps2Mode(PS2_CLK, HI);
- < ps2Mode(PS2_DAT, HI);
- ---
- > unsigned char data = 0x00;
- > unsigned char p = 0x01;
- > uint8_t i = 0;
- >
- > // discard the start bit
- > while ((PS2_PIN & (1 << PS2_DAT)));
- > while (!(PS2_PIN & (1 << PS2_CLK)));
- >
- > // Bit de comienzo
- > _delay_us_4usteps(CK1*CKm);
- > ps2Mode(PS2_CLK, LO);
- > _delay_us_4usteps(CK2*CKm);
- > ps2Mode(PS2_CLK, HI);
- > _delay_us_4usteps(CK1*CKm);
- >
- > // read each data bit
- > for (i = 0; i<8; i++) {
- > if ((PS2_PIN & (1 << PS2_DAT))) {
- > data = data | (1 << i);
- > p = p ^ 1;
- > }
- > _delay_us_4usteps(CK1*CKm);
- > ps2Mode(PS2_CLK, LO);
- > _delay_us_4usteps(CK2*CKm);
- > ps2Mode(PS2_CLK, HI);
- > _delay_us_4usteps(CK1*CKm);
- > }
- >
- > // read the parity bit
- > if (((PS2_PIN & (1 << PS2_DAT)) != 0) != p) {
- > return -1;
- > }
- > _delay_us_4usteps(CK1*CKm);
- > ps2Mode(PS2_CLK, LO);
- > _delay_us_4usteps(CK2*CKm);
- > ps2Mode(PS2_CLK, HI);
- > _delay_us_4usteps(CK1*CKm);
- >
- > // send 'ack' bit
- > ps2Mode(PS2_DAT, LO);
- > _delay_us_4usteps(CK1*CKm);
- > ps2Mode(PS2_CLK, LO);
- > _delay_us_4usteps(CK2*CKm);
- > ps2Mode(PS2_CLK, HI);
- > ps2Mode(PS2_DAT, HI);
- 550c574
- < _delay_us(100);
- ---
- > _delay_us(100);
- 552,553c576,577
- < *ret = data;
- < return 0;
- ---
- > *ret = data;
- > return 0;
- 559c583
- < uint8_t extn = 0;
- ---
- > uint8_t extn = 0;
- 561,588c585,612
- < //checkeamos si es una tecla con scancode extendido (E0)
- < switch (key) {
- < case JOY_UP:
- < case JOY_DOWN:
- < case JOY_LEFT:
- < case JOY_RIGHT:
- < case JOY_INS:
- < case JOY_HOME:
- < case JOY_PUP:
- < case JOY_DEL:
- < case JOY_END:
- < case JOY_PDN:
- < case JOYPAD_BAR:
- < case JOYPAD_ENT:
- <
- < extn = 1;
- < break;
- < default:
- < extn = 0;
- < break;
- < }
- < //secuencia
- <
- < if (extn)
- < sendPS2(0xE0);
- <
- < if (key && release && scancodeset == 1) // Set 1 release
- < sendPS2(ScanCodes1[key] + 0x80);
- ---
- > //checkeamos si es una tecla con scancode extendido (E0)
- > switch (key) {
- > case JOY_UP:
- > case JOY_DOWN:
- > case JOY_LEFT:
- > case JOY_RIGHT:
- > case JOY_INS:
- > case JOY_HOME:
- > case JOY_PUP:
- > case JOY_DEL:
- > case JOY_END:
- > case JOY_PDN:
- > case JOYPAD_BAR:
- > case JOYPAD_ENT:
- >
- > extn = 1;
- > break;
- > default:
- > extn = 0;
- > break;
- > }
- > //secuencia
- >
- > if (extn)
- > sendPS2(0xE0);
- >
- > if (key && release && scancodeset == 1) // Set 1 release
- > sendPS2(ScanCodes1[key] + 0x80);
- 590,591c614,615
- < if (key && !release && scancodeset == 1) // Set 1 make
- < sendPS2(ScanCodes1[key]);
- ---
- > if (key && !release && scancodeset == 1) // Set 1 make
- > sendPS2(ScanCodes1[key]);
- 593,594c617,618
- < if (key && release && scancodeset == 2) // Set 2 release
- < sendPS2(0xF0);
- ---
- > if (key && release && scancodeset == 2) // Set 2 release
- > sendPS2(0xF0);
- 596,597c620,621
- < if (key && scancodeset == 2) // Set 2 make or release
- < sendPS2(ScanCodes2[key]);
- ---
- > if (key && scancodeset == 2) // Set 2 make or release
- > sendPS2(ScanCodes2[key]);
- 603c627
- < sendCodeMR(key, 0, scancodeset); //Make
- ---
- > sendCodeMR(key, 0, scancodeset); //Make
- 605c629
- < sendCodeMR(key, 1, scancodeset); //Release
- ---
- > sendCodeMR(key, 1, scancodeset); //Release
- 608d631
- <
- 611,632c634,655
- < int n;
- < char pausa = 50;
- < if (!modo)
- < {
- < sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- < sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- < }
- <
- < sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- <
- < for (n = 0; n<8; n++)
- < {
- < if (n == 2 || n == 4) { _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO); }
- < _delay_ms(pausa);
- < sendPS2(versionKeyCodes[version[n]]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(versionKeyCodes[version[n]]);
- < _delay_ms(pausa);
- < }
- < fnpulsada = 1;
- < fnpulsando = 1;
- ---
- > int n;
- > char pausa = 75;
- > if (!modo)
- > {
- > sendPS2_aux(0xF0, 0); sendPS2_aux(CAPS_SHIFT, 0); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- > sendPS2_aux(0xF0, 0); sendPS2_aux(SYMBOL_SHIFT, 0); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- > }
- >
- > sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- >
- > for (n = 0; n<8; n++)
- > {
- > if (n == 2 || n == 4) { _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO); }
- > _delay_ms(pausa);
- > sendPS2(versionKeyCodes[version[n]]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(versionKeyCodes[version[n]]);
- > _delay_ms(pausa);
- > }
- > fnpulsada = 1;
- > fnpulsando = 1;
- 637,660c660,684
- < int n;
- < char pausa = 50;
- < if (!modo)
- < {
- < sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- < sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- < }
- < eeprom_write_byte((uint8_t*)5, (uint8_t)modo);
- < if (codeset == 2)
- < {
- < _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- < _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- < for (n = 0; n < 10; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(eepromsavename[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(eepromsavename[n]);
- < _delay_ms(pausa);
- < }
- < }
- < fnpulsada = 1;
- < fnpulsando = 1;
- ---
- > int n;
- > char pausa = 50;
- > if (!modo)
- > {
- > sendPS2_aux(0xF0, 0); sendPS2_aux(CAPS_SHIFT, 0); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- > sendPS2_aux(0xF0, 0); sendPS2_aux(SYMBOL_SHIFT, 0); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- > }
- > eeprom_write_byte((uint8_t*)5, (uint8_t)modo); // Guardamos el modo de teclado
- > eeprom_write_byte((uint8_t*)6, (uint8_t)fkbmode); // Guardamos funcion de teclas modificadoras de ZX
- > if (codeset == 2)
- > {
- > _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- > _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- > for (n = 0; n < 10; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(eepromsavename[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(eepromsavename[n]);
- > _delay_ms(pausa);
- > }
- > }
- > fnpulsada = 1;
- > fnpulsando = 1;
- 665,666c689,690
- < int n;
- < char pausa = 100;
- ---
- > int n;
- > char pausa = 100;
- 668,685c692,709
- < if (!modo)
- < {
- < sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- < sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- < }
- <
- < _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- < _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- < for (n = 1; n<nomcore[0] + 1; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(nomcore[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(nomcore[n]);
- < _delay_ms(pausa);
- < }
- < CKm = nomcore[nomcore[0] + 1]; //Valor de CKm en la configuracion de nomcore[]
- ---
- > if (!modo)
- > {
- > sendPS2_aux(0xF0, 0); sendPS2_aux(CAPS_SHIFT, 0); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- > sendPS2_aux(0xF0, 0); sendPS2_aux(SYMBOL_SHIFT, 0); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- > }
- >
- > _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- > _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- > for (n = 1; n<nomcore[0] + 1; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(nomcore[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(nomcore[n]);
- > _delay_ms(pausa);
- > }
- > CKm = nomcore[nomcore[0] + 1]; //Valor de CKm en la configuracion de nomcore[]
- 689,748c713,720
- < void cambia_tzxduino()
- < {
- < int n;
- < char pausa = 50;
- < opqa_cursors = 0;
- <
- < tzxduino_value = tzxduino_value ? 0 : 1;
- <
- < if (tzxduino_value) tzxduino_stop = 0;
- <
- < if (!modo)
- < {
- < sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- < sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- < }
- <
- < if (codeset == 2)
- < {
- < _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- < _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- <
- < if (tzxduino_value)
- < {
- < for (n = 0; n < 3; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(enable[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(enable[n]);
- < _delay_ms(pausa);
- < }
- < }
- < else
- < {
- < for (n = 0; n < 4; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(disable[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(disable[n]);
- < _delay_ms(pausa);
- < }
- < }
- <
- < for (n = 0; n < 8; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(tzxduino[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(tzxduino[n]);
- < _delay_ms(pausa);
- < }
- <
- < }
- < fnpulsada = 1;
- < fnpulsando = 1;
- < }
- ---
- > void cambia_tzxduino();
- > void cambia_joy2ps2();
- > void cambia_del_break();
- > void cambia_cursors_kbpc();
- > void cambiafkbmode();
- > void Joy2PS2Init();
- > void TZXDUINO_pushbutton(uint8_t pin, uint8_t bcd);
- > void TZXDUINOInit();
- 750c722,723
- < void cambia_del_break()
- ---
- > //Inicializar Matriz
- > void matrixInit()
- 752,755c725
- < int n;
- < char pausa = 50;
- <
- < del_break_value = del_break_value ? 0 : 1;
- ---
- > uint8_t c, r;
- 757,807c727,736
- < if (!modo)
- < {
- < sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- < sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- < }
- <
- < if (codeset == 2)
- < {
- < _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- < _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- <
- < if (del_break_value)
- < {
- < for (n = 0; n < 3; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(enable[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(enable[n]);
- < _delay_ms(pausa);
- < }
- < }
- < else
- < {
- < for (n = 0; n < 4; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(disable[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(disable[n]);
- < _delay_ms(pausa);
- < }
- < }
- <
- < for (n = 0; n < 9; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(del_break[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(del_break[n]);
- < _delay_ms(pausa);
- < }
- < eeprom_write_byte((uint8_t*)7, (uint8_t)del_break_value);
- <
- <
- < }
- < fnpulsada = 1;
- < fnpulsando = 1;
- ---
- > for (c = 0; c<COLS; c++)
- > {
- > pinSet(pinsC[c], bcdC[c], _IN);
- > pinPut(pinsC[c], bcdC[c], HI);
- > }
- >
- > for (r = 0; r < ROWS; r++)
- > {
- > pinSet(pinsR[r], bcdR[r], _IN);
- > }
- 810c739
- < void cambia_cursors_kbpc()
- ---
- > KBMODE cambiarmodo2(KBMODE modokb)
- 812,867c741,913
- < int n;
- < char pausa = 50;
- <
- < cursors_kbpc_value = cursors_kbpc_value ? 0 : 1;
- <
- < if (!modo)
- < {
- < sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- < sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- < }
- <
- < if (codeset == 2)
- < {
- < _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- < _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- <
- < if (cursors_kbpc_value)
- < {
- < for (n = 0; n < 3; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(enable[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(enable[n]);
- < _delay_ms(pausa);
- < }
- < }
- < else
- < {
- < for (n = 0; n < 4; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(disable[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(disable[n]);
- < _delay_ms(pausa);
- < }
- < }
- <
- < for (n = 0; n < 12; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(cursors_kbpc[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(cursors_kbpc[n]);
- < _delay_ms(pausa);
- < }
- < eeprom_write_byte((uint8_t*)8, (uint8_t)cursors_kbpc_value);
- <
- <
- < }
- < fnpulsada = 1;
- < fnpulsando = 1;
- ---
- > kbescucha = 0;
- > KBEXT_BIDIR_OFF;
- > opqa_cursors = 0;
- > opqa_numbers = 0;
- > if (modokb == zx) CKm = nomZX[nomZX[0] + 1];
- > if (modokb == cpc) CKm = nomCPC[nomCPC[0] + 1];
- > if (modokb == msx) CKm = nomMSX[nomMSX[0] + 1];
- > if (modokb == c64) CKm = nomC64[nomC64[0] + 1];
- > if (modokb == at8) CKm = nomAT8[nomAT8[0] + 1];
- > if (modokb == bbc) CKm = nomBBC[nomBBC[0] + 1];
- > if (modokb == aco) CKm = nomACO[nomACO[0] + 1];
- > if (modokb == ap2) CKm = nomAP2[nomAP2[0] + 1];
- > if (modokb == vic) CKm = nomVIC[nomVIC[0] + 1];
- > if (modokb == ori) CKm = nomORI[nomORI[0] + 1];
- > if (modokb == sam) CKm = nomSAM[nomSAM[0] + 1];
- > if (modokb == jup) CKm = nomJUP[nomJUP[0] + 1];
- > if (modokb == sms) CKm = nomSMS[nomSMS[0] + 1];
- > if (modokb == c16) CKm = nomC16[nomC16[0] + 1];
- > if (modokb == ht8) CKm = nomHT8[nomHT8[0] + 1];
- > if (modokb == galak) CKm = nomGALAK[nomGALAK[0] + 1];
- > if (modokb == multi) CKm = nomMULTI[nomMULTI[0] + 1];
- > if (modokb == pc) { CKm = nomPC[nomPC[0] + 1]; kbescucha = 1; timeout_escucha = 0; codeset = 2; } // Iniciamos la escucha para que se pueda cambiar al core de PC/XT.
- > if (modokb == kbext) { CKm = nomKBEXT[nomKBEXT[0] + 1]; kbescucha = 1; timeout_escucha = 0; codeset = 2; KBEXT_BIDIR_ON; } // Iniciamos la escucha y mantenemos activa bidireccionalidad, para que pueda ser usado como teclado externo.
- > if (modokb == pcxt) { CKm = nomPCXT[nomPCXT[0] + 1]; kbescucha = 0; codeset = 1; imprimecore(nomPCXT); } // Sin escucha activa para ser usado de forma simultanea junto a un teclado externo.
- >
- > return modokb;
- > }
- >
- > void ejecutarfuncion(unsigned char code)
- > {
- > funcion = 0; //para salir del bucle de la funcion
- > switch (code)
- > {
- > case KEY_T:
- > cambia_tzxduino(); // TZXDUINO ON / OFF
- > break;
- >
- > case KEY_Q:
- > cambia_cursors_kbpc(); // XCHG CURSORS KBPC ON / OFF
- > break;
- >
- > case KEY_W:
- > cambia_del_break(); // XCHG DEL BREAK ON / OFF
- > break;
- >
- > case KEY_J:
- > cambia_joy2ps2(); // Famicom <-> Atari/Megadrive
- > break;
- >
- > case KEY_U:
- > cambiomodo = 1;
- > _delay_ms(250);
- > break;
- > case KEY_C:
- > if (modo == at8 || modo == jup || modo == c64)
- > {
- > opqa_cursors = 0;
- > opqa_numbers = !opqa_numbers; // OPQA -> Bloq Num (Activacion / Desactivacion)
- >
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- > else
- > {
- > opqa_numbers = 0;
- > opqa_cursors = !opqa_cursors; // OPQA -> Cursores (Activacion / Desactivacion)
- >
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- > break;
- >
- > case KEY_D:
- > if (!modo) // Funcion valida solo para el modo ZX
- > {
- > fkbmode = !fkbmode; // Teclas modificadoras (Activacion / Desactivacion)
- > sendPS2_aux(0xF0, 0); sendPS2_aux(CAPS_SHIFT, 0); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- > sendPS2_aux(0xF0, 0); sendPS2_aux(SYMBOL_SHIFT, 0); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- >
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- > break;
- >
- > case KEY_H:
- > if (modo == at8)
- > {
- > // F8 + F10 para Atari
- > sendPS2(KEY_F8);
- > _delay_ms(50);
- > sendPS2(KEY_F10);
- >
- > _delay_ms(50);
- >
- > sendPS2(0xF0);
- > sendPS2(KEY_F10);
- > _delay_ms(1000);
- > sendPS2(0xF0);
- > sendPS2(KEY_F8);
- > _delay_ms(50);
- >
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- > break;
- > case KEY_O:
- > if (modo == bbc)
- > {
- > // F12 y seguido shift pulsado con delay de 1 segundo antes de soltar para BBC
- > pulsafn(Y_P_ROW, O_COL, KEY_F12, 0, 0, 0, 0, 0, 0);
- > sendPS2(KEY_LSHIFT);
- > _delay_ms(1000);
- > sendPS2(0xF0); sendPS2(KEY_LSHIFT);
- >
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- > if (modo == msx) // Hard Reset
- > {
- > // Control+Alt+F12
- > pulsafn(Y_P_ROW, Y_COL, codeset == 1 ? KS1_F12 : KEY_F12, 0, 0, 1, 1, 0, 0);
- > }
- >
- > break;
- >
- > case KEY_V:
- > if (codeset == 2)
- > imprimeversion();
- > break;
- >
- > case KEY_X:
- > // Guarda en la EEPROM el modo actual de teclado
- > eepromsave();
- > break;
- >
- > case KEY_B:
- > // ZXUNO Hard Reset (Control+Alt+Backsp)
- > pulsafn(B_M_ROW, B_COL, codeset == 1 ? KS1_BACKSP : KEY_BACKSP, 0, 0, 1, 1, 0, 0);
- > break;
- >
- > case KEY_N:
- > // ZXUNO Soft Reset (Control+Alt+Supr)
- > pulsafn(B_M_ROW, N_COL, codeset == 1 ? KS1_DELETE : KEY_DELETE, 1, 0, 1, 1, 0, 0);
- > if (modo == pc)
- > {
- > kbescucha = 1; timeout_escucha = 0; codeset = 2; // Iniciamos la escucha para que se pueda cambiar al core de PC/XT.
- > }
- > break;
- >
- > case KEY_Y: // NMI
- > if (modo == zx || modo == cpc || modo == jup || modo == sam)
- > {
- > // Control+Alt+F5
- > pulsafn(Y_P_ROW, Y_COL, codeset == 1 ? KS1_F5 : KEY_F5, 0, 0, 1, 1, 0, 0);
- > }
- > break;
- >
- > case KEY_G: // VGA-RGB
- > if (modo == zx || modo == at8 || modo == bbc || modo == vic || modo == ori || modo == sms || modo == ht8)
- > {
- > pulsafn(A_G_ROW, G_COL, codeset == 1 ? KS1_SCRLCK : KEY_SCRLCK, 0, 0, 1, 1, 0, 0);
- > }
- > if (modo == msx)
- > {
- > pulsaimprpant(A_G_ROW, G_COL);
- > }
- > break;
- >
- > default:
- > fnpulsada = 1;
- > fnpulsando = 1;
- > break;
- > }
- 870c916
- < void cambiafkbmode()
- ---
- > KBMODE cambiarmodo(KBMODE modokb)
- 872,929c918,1075
- < int n;
- < char pausa = 50;
- < if (!modo)
- < {
- < sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- < sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- < }
- < if (codeset == 2)
- < {
- < _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- < _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- <
- < switch (fkbmode)
- < {
- < case 0:
- < for (n = 0; n < 15; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(fkbmode0[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(fkbmode0[n]);
- < _delay_ms(pausa);
- < eeprom_write_byte((uint8_t*)6, (uint8_t)fkbmode);
- < }
- < break;
- < case 1:
- < for (n = 0; n < 12; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(fkbmode1[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(fkbmode1[n]);
- < _delay_ms(pausa);
- < eeprom_write_byte((uint8_t*)6, (uint8_t)fkbmode);
- < }
- < break;
- < case 2:
- < for (n = 0; n < 6; n++)
- < {
- < _delay_ms(pausa);
- < sendPS2(fkbmode2[n]);
- < _delay_ms(pausa);
- < sendPS2(0xF0);
- < sendPS2(fkbmode2[n]);
- < _delay_ms(pausa);
- < eeprom_write_byte((uint8_t*)6, (uint8_t)fkbmode);
- < }
- < break;
- < default:
- < break;
- < }
- <
- < }
- < fnpulsada = 1;
- < fnpulsando = 1;
- < }
- ---
- > KBMODE auxmodo = modo;
- > kbescucha = 0;
- > KBEXT_BIDIR_OFF;
- > opqa_cursors = 0;
- > opqa_numbers = 0;
- > muestramodo:
- > if (modokb == zx) imprimecore(nomZX);
- > if (modokb == cpc) imprimecore(nomCPC);
- > if (modokb == msx) imprimecore(nomMSX);
- > if (modokb == c64) imprimecore(nomC64);
- > if (modokb == at8) imprimecore(nomAT8);
- > if (modokb == bbc) imprimecore(nomBBC);
- > if (modokb == aco) imprimecore(nomACO);
- > if (modokb == ap2) imprimecore(nomAP2);
- > if (modokb == vic) imprimecore(nomVIC);
- > if (modokb == ori) imprimecore(nomORI);
- > if (modokb == sam) imprimecore(nomSAM);
- > if (modokb == jup) imprimecore(nomJUP);
- > if (modokb == sms) imprimecore(nomSMS);
- > if (modokb == c16) imprimecore(nomC16);
- > if (modokb == ht8) imprimecore(nomHT8);
- > if (modokb == galak) imprimecore(nomGALAK);
- > if (modokb == multi) imprimecore(nomMULTI);
- > if (modokb == pc) { kbescucha = 1; timeout_escucha = 0; codeset = 2; imprimecore(nomPC); } // Iniciamos la escucha para que se pueda cambiar al core de PC/XT.
- > if (modokb == pcxt) { kbescucha = 0; codeset = 1; imprimecore(nomPCXT); } // Sin escucha activa para ser usado de forma simultanea junto a un teclado externo.
- > if (modokb == kbext) { kbescucha = 1; timeout_escucha = 0; codeset = 2; imprimecore(nomKBEXT); KBEXT_BIDIR_ON; } // Iniciamos la escucha y mantenemos activa bidireccionalidad, para que pueda ser usado como teclado externo.
- >
- > if (modokb > kbext)
- > {
- > modokb = auxmodo; // Si no se trata de un modo conocido, mantenemos el anterior y lo imprimimos por pantalla.
- > goto muestramodo;
- > }
- > //Uso normal: CK1 = 20, CK2 = 40 // Para codigo sin optimizar (x12) CK1 = 240, CK2 = 480. //JOyPs2 CK1=15 CK2=30 //Mio CK1=4 CK2=8
- > //if(modokb>0) CKm=4; else CKm=1; //Se coge del Nombrecore[]
- >
- > fnpulsada = 1;
- > fnpulsando = 1;
- > cambiomodo = 0; //para salir del bucle del cambiomodo
- > return modokb;
- >
- > }
- >
- > void is_fn(unsigned char row, unsigned char col)
- > {
- > pulsa_y_suelta_teclas_modificadoras(1, 1, 1, 1, 1);
- > matriz[row][col] = 0;
- > }
- >
- > void pulsapausa(unsigned char row, unsigned char col)
- > {
- > sendPS2_aux(0xE1, 0); sendPS2_aux(0x14, 0); sendPS2_aux(0x77, 0); sendPS2_aux(0xE1, 0);
- > sendPS2_aux(0xF0, 0); sendPS2_aux(0x14, 0); sendPS2_aux(0xF0, 0); sendPS2_aux(0x77, 0);
- > _delay_ms(100);
- > }
- >
- > void pulsaimprpant(unsigned char row, unsigned char col)
- > {
- > sendPS2_aux(0xE0, 0); sendPS2_aux(0x12, 0); sendPS2_aux(0xE0, 0); sendPS2_aux(0x7C, 0);
- > _delay_ms(100);
- > sendPS2_aux(0xE0, 0); sendPS2_aux(0xF0, 0); sendPS2_aux(0x12, 0); sendPS2_aux(0xE0, 0); sendPS2_aux(0xF0, 0); sendPS2_aux(0x7C, 0);
- > }
- >
- > void pulsa_alt_code_set1(unsigned char d1, unsigned char d2, unsigned char d3)
- > {
- >
- > if (d1 + d2 + d3 == 0) return;
- >
- > sendPS2_aux(KS1_LALT, 0);
- >
- > if (d1 != 0) { sendPS2_aux(d1, 0); sendPS2_aux(d1 + KS1_RELEASE, 0); }
- > if (d2 != 0) { sendPS2_aux(d2, 0); sendPS2_aux(d2 + KS1_RELEASE, 0); }
- > if (d3 != 0) { sendPS2_aux(d3, 0); sendPS2_aux(d3 + KS1_RELEASE, 0); }
- >
- > sendPS2_aux(KS1_LALT + KS1_RELEASE, 0);
- > }
- >
- > void pulsa_alt_code_set2(unsigned char d1, unsigned char d2, unsigned char d3)
- > {
- >
- > if (d1 + d2 + d3 == 0) return;
- >
- > sendPS2_aux(KEY_LALT, 0);
- >
- > if (d1 != 0) { sendPS2_aux(d1, 0); sendPS2_aux(0xF0, 0); sendPS2_aux(d1, 0); }
- > if (d2 != 0) { sendPS2_aux(d2, 0); sendPS2_aux(0xF0, 0); sendPS2_aux(d2, 0); }
- > if (d3 != 0) { sendPS2_aux(d3, 0); sendPS2_aux(0xF0, 0); sendPS2_aux(d3, 0); }
- >
- > sendPS2_aux(0xF0, 0); sendPS2_aux(KEY_LALT, 0);
- > }
- >
- > void pulsafn(unsigned char row, unsigned char col, unsigned char key, unsigned char key_E0, unsigned char shift, unsigned char ctrl, unsigned char alt, unsigned char altgr, unsigned char lwin)
- > {
- > if (espera) { _delay_us(5); espera = 0; }
- > if (shift) { if (codeset == 2) { sendPS2(KEY_LSHIFT); espera++; } else { sendPS2(KS1_LSHIFT); espera++; } }//El Shift no necesita E0
- > if (ctrl) { if (codeset == 2) { sendPS2(KEY_LCTRL); espera++; } else { sendPS2(KS1_LCTRL); espera++; } }// Pulsamos siempre el CTRL Izquierdo para mayor compatibilidad con todos los cores.
- > if (alt) { if (codeset == 2) { sendPS2(KEY_LALT); espera++; } else { sendPS2(KS1_LALT); espera++; } }// Alt izdo
- > if (altgr) { if (codeset == 2) { sendPS2(0xE0); sendPS2(KEY_RALT); espera++; } else { sendPS2(0xE0); sendPS2(KS1_RALT); espera++; } }// AltGr
- > if (lwin) { if (codeset == 2) { sendPS2(0xE0); sendPS2(KEY_LWIN); espera++; } else { sendPS2(0xE0); sendPS2(KS1_LWIN); espera++; } }// LWin
- > if (espera) { _delay_us(5); espera = 0; }
- > if (key_E0) { sendPS2(0xE0); } //La tecla requiere modo E0 del PS2
- > sendPS2(key);
- > _delay_ms(100);
- > if (key_E0) { sendPS2(0xE0); }
- > if (codeset == 2) sendPS2(0xF0);
- > if (codeset == 2) sendPS2(key); else sendPS2(key + KS1_RELEASE);
- > matriz[row][col] = 0;
- > if (shift) { if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_LSHIFT); } else { sendPS2(KS1_LSHIFT + KS1_RELEASE); } }
- > if (ctrl) { if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_RCTRL); } else { sendPS2(KS1_RCTRL + KS1_RELEASE); } }
- > if (alt) { if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_LALT); } else { sendPS2(KS1_RALT + KS1_RELEASE); } }
- > if (altgr) { if (codeset == 2) { sendPS2(0xE0); sendPS2(0xF0); sendPS2(KEY_LALT); } else { sendPS2(0xE0); sendPS2(KS1_RALT + KS1_RELEASE); } }
- > if (lwin) { if (codeset == 2) { sendPS2(0xE0); sendPS2(0xF0); sendPS2(KEY_LALT); } else { sendPS2(0xE0); sendPS2(KS1_RALT + KS1_RELEASE); } }
- > _delay_us(5);
- > pulsa_y_suelta_teclas_modificadoras(1, 1, 1, 1, 1);
- > matriz[row][col] = 0;
- > }
- >
- > void traducekey(uint8_t &key, uint8_t &keymodif, KBMODE modokb) // con esta funcion ahorramos muchas matrices de mapas y por tanto memoria dinamica del AVR
- > {
- > // 0x1 -> LShift
- > // 0x2 -> LCTrl
- > // 0x4 -> LAlt
- > // 0x8 -> RAlt (AltGr)
- > // 0x10 -> RCTrl
- > // 0x20 -> Requiere 0xE0
- >
- > if (modokb == pc && codeset == 1) return; // pcxt tiene su propio mapa con scancodes distintos
- >
- > // traduccion de key segun el core
- > if (key != 0)
- > {
- > switch (modokb)
- > {
- > #ifdef symbols_cpc
- > case cpc:
- > keymodif =
- > key == KEY_A ? 2 :
- > key == KEY_2 ? 0 :
- > key == KEY_D ? 0 :
- > key == KEY_Y ? 0 :
- > key == KEY_U ? 0 :
- > key == KEY_O ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_Z ? 0 :
- > key == KEY_H ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_2 ? KEY_ACORCHE : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_G ? KEY_BKSLASH :
- > key == KEY_F ? KEY_CCORCHE : key == KEY_D ? KEY_LESS : key == KEY_S ? KEY_ACORCHE : key == KEY_A ? KEY_2 :
- > key == KEY_Y ? KEY_CCORCHE : key == KEY_U ? KEY_BKSLASH : key == KEY_O ? KEY_COMILLA : key == KEY_P ? KEY_2 :
- > key == KEY_V ? KEY_SLASH : key == KEY_C ? KEY_SLASH : key == KEY_X ? KEY_IGUAL : key == KEY_Z ? KEY_PTOCOMA :
- > key == KEY_H ? KEY_IGUAL : key == KEY_J ? KEY_MENOS : key == KEY_K ? KEY_COMILLA : key == KEY_L ? KEY_MENOS :
- > key == KEY_B ? KEY_PTOCOMA : key == KEY_N ? KEY_COMA : key == KEY_M ? KEY_PUNTO :
- > (key == KEY_3 || key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- > break;
- > #endif
- 931,940c1077,1121
- < //Inicializar Joy2PS2
- < void Joy2PS2Init()
- < {
- < uint8_t p;
- <
- < for (p = 0; p < 7; p++)
- < {
- < pinSet(pinsJOY2PS2[p], bcdJOY2PS2[p], _IN);
- < pinPut(pinsJOY2PS2[p], bcdJOY2PS2[p], HI);
- < }
- ---
- > #ifdef symbols_msx
- > case msx:
- > keymodif =
- > key == KEY_W ? 1 :
- > key == KEY_E ? 9 :
- > key == KEY_I ? 1 :
- > key == KEY_1 ? 1 :
- > key == KEY_2 ? 8 :
- > key == KEY_3 ? 8 :
- > key == KEY_4 ? 1 :
- > key == KEY_5 ? 1 :
- > key == KEY_6 ? 1 :
- > key == KEY_8 ? 1 :
- > key == KEY_9 ? 1 :
- > key == KEY_0 ? 1 :
- > key == KEY_T ? 1 :
- > key == KEY_Y ? 8 :
- > key == KEY_U ? 8 :
- > key == KEY_O ? 1 :
- > key == KEY_P ? 1 :
- > key == KEY_A ? 8 :
- > key == KEY_S ? 5 :
- > key == KEY_D ? 8 :
- > key == KEY_F ? 8 :
- > key == KEY_G ? 8 :
- > key == KEY_H ? 1 :
- > key == KEY_L ? 1 :
- > key == KEY_Z ? 1 :
- > key == KEY_X ? 9 :
- > key == KEY_C ? 1 :
- > key == KEY_V ? 1 :
- > key == KEY_B ? 1 :
- > 0;
- > key =
- > key == KEY_Q ? KEY_TLD : key == KEY_W ? KEY_TLD : key == KEY_E ? KEY_1 : key == KEY_I ? KEY_IGUAL :
- > key == KEY_1 ? KEY_1 : key == KEY_2 ? KEY_2 : key == KEY_3 ? KEY_3 : key == KEY_4 ? KEY_4 :
- > key == KEY_5 ? KEY_5 : key == KEY_6 ? KEY_6 : key == KEY_7 ? KEY_MENOS : key == KEY_8 ? KEY_8 :
- > key == KEY_9 ? KEY_9 : key == KEY_0 ? KEY_SLASH : key == KEY_R ? KEY_LESS : key == KEY_T ? KEY_LESS :
- > key == KEY_Y ? KEY_ACORCHE : key == KEY_U ? KEY_CCORCHE : key == KEY_O ? KEY_COMA : key == KEY_P ? KEY_2 :
- > key == KEY_A ? KEY_4 : key == KEY_S ? KEY_1 : key == KEY_D ? KEY_TLD : key == KEY_F ? KEY_COMILLA :
- > key == KEY_G ? KEY_BKSLASH : key == KEY_H ? KEY_ACORCHE : key == KEY_J ? KEY_SLASH : key == KEY_K ? KEY_CCORCHE :
- > key == KEY_L ? KEY_0 : key == KEY_Z ? KEY_PUNTO : key == KEY_X ? KEY_4 : key == KEY_C ? KEY_MENOS : key == KEY_3 ? key :
- > key == KEY_V ? KEY_7 : key == KEY_B ? KEY_CCORCHE : key == KEY_N ? KEY_COMA : key == KEY_M ? KEY_PUNTO : 0;
- > break;
- > #endif
- 942,944c1123,1149
- < pinSet(pinsJOY2PS2[5], bcdJOY2PS2[5], _OUT); // Select como salida y en alto.
- <
- < }
- ---
- > #ifdef symbols_c16_c64
- > case c16:
- > case c64:
- > keymodif =
- > key == KEY_0 ? 4 :
- > key == KEY_2 ? 0 :
- > key == KEY_O ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_Z ? 0 :
- > key == KEY_H ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_K ? 0 :
- > key == KEY_L ? 0 :
- > key == KEY_B ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_0 ? KEY_ACORCHE :
- > key == KEY_2 ? KEY_ACORCHE : key == KEY_R ? KEY_COMA : key == KEY_T ? KEY_PUNTO : key == KEY_S ? KEY_MENOS :
- > key == KEY_Y ? KEY_PTOCOMA : key == KEY_U ? KEY_COMILLA : key == KEY_O ? KEY_COMILLA : key == KEY_P ? KEY_2 :
- > key == KEY_V ? KEY_SLASH : key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_PTOCOMA : key == KEY_H ? KEY_BKSLASH :
- > key == KEY_J ? KEY_MENOS : key == KEY_K ? KEY_F10 : key == KEY_L ? KEY_IGUAL : key == KEY_B ? KEY_CCORCHE :
- > key == KEY_M ? KEY_PUNTO : key == KEY_N ? KEY_COMA :
- > (key == KEY_3 || key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9) ? key : 0;
- > break;
- > #endif
- 946,957c1151,1177
- < void TZXDUINO_pushbutton(uint8_t pin, uint8_t bcd)
- < {
- < // Pulsa
- < pinPut(pin, bcd, LO);
- < pinSet(pin, bcd, _OUT);
- <
- < // Delay de 250 ms
- < _delay_ms(250);
- <
- < // Suelta
- < pinSet(pin, bcd, _IN);
- < pinPut(pin, bcd, HI);
- ---
- > #ifdef symbols_at8
- > case at8:
- > keymodif =
- > key == KEY_T ? 0 :
- > key == KEY_R ? 0 :
- > key == KEY_W ? 0 :
- > key == KEY_Q ? 0 :
- > key == KEY_O ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_K ? 0 :
- > key == KEY_L ? 0 :
- > key == KEY_B ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_8 ? KEY_9 : key == KEY_9 ? KEY_0 : key == KEY_0 ? KEY_ACORCHE :
- > key == KEY_2 ? KEY_8 : key == KEY_T ? KEY_IGUAL : key == KEY_R ? KEY_MENOS : key == KEY_W ? KEY_F12 :
- > key == KEY_Q ? KEY_F11 : key == KEY_D ? KEY_COMILLA : key == KEY_S ? KEY_CCORCHE : key == KEY_Y ? KEY_COMA :
- > key == KEY_U ? KEY_PUNTO : key == KEY_O ? KEY_PTOCOMA : key == KEY_P ? KEY_2 : key == KEY_V ? KEY_SLASH :
- > key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_PTOCOMA : key == KEY_H ? KEY_BKSLASH : key == KEY_J ? KEY_ACORCHE :
- > key == KEY_K ? KEY_COMILLA : key == KEY_L ? KEY_CCORCHE : key == KEY_B ? KEY_BKSLASH : key == KEY_N ? KEY_COMA :
- > key == KEY_M ? KEY_PUNTO :
- > (key == KEY_3 || key == KEY_6 || key == KEY_7) ? key : 0;
- > break;
- > #endif
- 959c1179,1196
- < }
- ---
- > #ifdef symbols_galak
- > case galak:
- > keymodif =
- > key == KEY_O ? 0 :
- > key == KEY_L ? 0 :
- > key == KEY_Z ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_O ? KEY_PTOCOMA : key == KEY_L ? KEY_IGUAL : key == KEY_Z ? KEY_ACORCHE : key == KEY_V ? KEY_SLASH :
- > key == KEY_N ? KEY_COMA : key == KEY_M ? KEY_PUNTO : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA :
- > key == KEY_P ? KEY_2 : key == KEY_J ? KEY_IGUAL : key == KEY_K ? KEY_PTOCOMA : key == KEY_C ? KEY_SLASH :
- > key == KEY_B ? KEY_ACORCHE :
- > (key == KEY_3 || key == KEY_6 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- > break;
- > #endif
- 961,965c1198,1222
- < //Inicializar TZXDUINO
- < void TZXDUINOInit()
- < {
- < pinSet(TZX_ROOT_PIN, TZX_ROOT_BCD, _IN);
- < pinPut(TZX_ROOT_PIN, TZX_ROOT_BCD, HI);
- ---
- > #ifdef symbols_multi
- > case multi:
- > keymodif =
- > key == KEY_7 ? 0 :
- > key == KEY_Y ? 0 :
- > key == KEY_U ? 0 :
- > key == KEY_O ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_L ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_6 ? KEY_7 : key == KEY_8 ? KEY_9 : key == KEY_9 ? KEY_0 :
- > key == KEY_7 ? KEY_COMILLA : key == KEY_0 ? KEY_MENOS : key == KEY_R ? KEY_COMA :
- > key == KEY_T ? KEY_PUNTO : key == KEY_Y ? KEY_ACORCHE : key == KEY_U ? KEY_CCORCHE :
- > key == KEY_O ? KEY_PTOCOMA : key == KEY_P ? KEY_COMILLA : key == KEY_F ? KEY_ACORCHE :
- > key == KEY_G ? KEY_CCORCHE : key == KEY_H ? KEY_6 : key == KEY_J ? KEY_MENOS :
- > key == KEY_K ? KEY_IGUAL : key == KEY_L ? KEY_IGUAL : key == KEY_Z ? KEY_PTOCOMA :
- > key == KEY_C ? KEY_SLASH : key == KEY_V ? KEY_SLASH : key == KEY_B ? KEY_8 :
- > key == KEY_N ? KEY_COMA : key == KEY_M ? KEY_PUNTO :
- > (key == KEY_2 || key == KEY_3) ? key : 0;
- > break;
- > #endif
- 967,968c1224,1249
- < pinSet(TZX_UP_PIN, TZX_UP_BCD, _IN);
- < pinPut(TZX_UP_PIN, TZX_UP_BCD, HI);
- ---
- > #ifdef symbols_ht8
- > case ht8:
- > keymodif =
- > key == KEY_D ? 0 :
- > key == KEY_H ? 0 :
- > key == KEY_Y ? 0 :
- > key == KEY_U ? 0 :
- > key == KEY_2 ? 0 :
- > key == KEY_0 ? 0 :
- > key == KEY_O ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_Z ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_D ? KEY_F2 : key == KEY_H ? KEY_F4 :
- > key == KEY_2 ? KEY_BKSLASH : key == KEY_0 ? KEY_F1 : key == KEY_Y ? KEY_ACORCHE : key == KEY_U ? KEY_CCORCHE :
- > key == KEY_O ? KEY_PTOCOMA : key == KEY_L ? KEY_IGUAL : key == KEY_Z ? KEY_MENOS : key == KEY_V ? KEY_SLASH :
- > key == KEY_N ? KEY_COMA : key == KEY_M ? KEY_PUNTO : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA :
- > key == KEY_P ? KEY_2 : key == KEY_J ? KEY_IGUAL : key == KEY_K ? KEY_PTOCOMA : key == KEY_C ? KEY_SLASH :
- > key == KEY_B ? KEY_MENOS :
- > (key == KEY_3 || key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9) ? key : 0;
- > break;
- > #endif
- 970,971c1251,1273
- < pinSet(TZX_DOWN_PIN, TZX_DOWN_BCD, _IN);
- < pinPut(TZX_DOWN_PIN, TZX_DOWN_BCD, HI);
- ---
- > #ifdef symbols_bbc
- > case bbc:
- > keymodif =
- > key == KEY_2 ? 0 :
- > key == KEY_W ? 0 :
- > key == KEY_A ? 0 :
- > key == KEY_O ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_Z ? 0 :
- > key == KEY_H ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_2 ? KEY_TLD : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_W ? KEY_F12 :
- > key == KEY_Q ? KEY_F12 : key == KEY_S ? KEY_LESS : key == KEY_A ? KEY_MENOS : key == KEY_O ? KEY_PTOCOMA :
- > key == KEY_P ? KEY_2 : key == KEY_V ? KEY_SLASH : key == KEY_C ? KEY_SLASH : key == KEY_X ? KEY_BKSLASH :
- > key == KEY_Z ? KEY_COMILLA : key == KEY_H ? KEY_IGUAL : key == KEY_J ? KEY_BKSLASH : key == KEY_K ? KEY_PTOCOMA :
- > key == KEY_L ? KEY_MENOS : key == KEY_B ? KEY_COMILLA : key == KEY_N ? KEY_COMA : key == KEY_M ? KEY_PUNTO :
- > (key == KEY_3 || key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- > break;
- > #endif
- 973,974c1275,1295
- < pinSet(TZX_PLAY_PIN, TZX_PLAY_BCD, _IN);
- < pinPut(TZX_PLAY_PIN, TZX_PLAY_BCD, HI);
- ---
- > #ifdef symbols_aco
- > case aco:
- > keymodif =
- > key == KEY_D ? 0 :
- > key == KEY_U ? 0:
- > key == KEY_O ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_Z ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_2 ? KEY_0 : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_D ? KEY_BKSLASH :
- > key == KEY_Y ? KEY_ACORCHE : key == KEY_U ? KEY_CCORCHE : key == KEY_O ? KEY_PTOCOMA : key == KEY_P ? KEY_2 :
- > key == KEY_V ? KEY_SLASH : key == KEY_C ? KEY_SLASH : key == KEY_X ? KEY_ACORCHE : key == KEY_Z ? KEY_COMILLA :
- > key == KEY_J ? KEY_MENOS : key == KEY_K ? KEY_PTOCOMA : key == KEY_L ? KEY_MENOS : key == KEY_B ? KEY_COMILLA :
- > key == KEY_N ? KEY_COMA : key == KEY_M ? KEY_PUNTO :
- > (key == KEY_3 || key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- > break;
- > #endif
- 976,978c1297,1318
- < pinSet(TZX_STOP_PIN, TZX_STOP_BCD, _IN);
- < pinPut(TZX_STOP_PIN, TZX_STOP_BCD, HI);
- < }
- ---
- > #ifdef symbols_ap2
- > case ap2:
- > keymodif =
- > key == KEY_7 ? 0 :
- > key == KEY_Y ? 0 :
- > key == KEY_U ? 0 :
- > key == KEY_O ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_L ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_6 ? KEY_7 : key == KEY_7 ? KEY_COMILLA :
- > key == KEY_8 ? KEY_9 : key == KEY_9 ? KEY_0 : key == KEY_0 ? KEY_MENOS : key == KEY_Y ? KEY_ACORCHE :
- > key == KEY_U ? KEY_CCORCHE : key == KEY_O ? KEY_PTOCOMA : key == KEY_P ? KEY_COMILLA : key == KEY_V ? KEY_SLASH :
- > key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_PTOCOMA : key == KEY_H ? KEY_6 : key == KEY_J ? KEY_MENOS :
- > key == KEY_K ? KEY_IGUAL : key == KEY_L ? KEY_IGUAL : key == KEY_B ? KEY_8 : key == KEY_N ? KEY_COMA :
- > key == KEY_M ? KEY_PUNTO : (key == KEY_3 || key == KEY_2) ? key : 0;
- > break;
- > #endif
- 980,983c1320,1346
- < //Inicializar Matriz
- < void matrixInit()
- < {
- < uint8_t c, r;
- ---
- > #ifdef symbols_vic
- > case vic:
- > keymodif =
- > key == KEY_H ? 0x20 :
- > key == KEY_X ? 0x20 :
- > key == KEY_0 ? 2 :
- > key == KEY_2 ? 0 :
- > key == KEY_O ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_Z ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_K ? 0 :
- > key == KEY_L ? 0 :
- > key == KEY_B ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_H ? KEY_DELETE : key == KEY_X ? KEY_INS : key == KEY_D ? KEY_M : key == KEY_0 ? KEY_ACORCHE :
- > key == KEY_2 ? KEY_ACORCHE : key == KEY_R ? KEY_COMA : key == KEY_T ? KEY_PUNTO : key == KEY_S ? KEY_IGUAL :
- > key == KEY_Y ? KEY_PTOCOMA : key == KEY_U ? KEY_COMILLA : key == KEY_O ? KEY_COMILLA : key == KEY_P ? KEY_2 :
- > key == KEY_V ? KEY_SLASH : key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_PTOCOMA : key == KEY_J ? KEY_IGUAL :
- > key == KEY_K ? KEY_MENOS : key == KEY_L ? KEY_BKSLASH : key == KEY_B ? KEY_CCORCHE : key == KEY_M ? KEY_PUNTO :
- > key == KEY_N ? KEY_COMA : key == KEY_0 ? KEY_ACORCHE :
- > (key == KEY_3 || key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9) ? key : 0;
- > break;
- > #endif
- 985,995c1348,1371
- < for (c = 0; c<COLS; c++)
- < {
- < pinSet(pinsC[c], bcdC[c], _IN);
- < pinPut(pinsC[c], bcdC[c], HI);
- < }
- <
- < for (r = 0; r < ROWS; r++)
- < {
- < pinSet(pinsR[r], bcdR[r], _IN);
- < }
- < }
- ---
- > #ifdef symbols_ori
- > case ori:
- > keymodif =
- > key == KEY_D ? 0 :
- > key == KEY_7 ? 0 :
- > key == KEY_Y ? 0 :
- > key == KEY_U ? 0 :
- > key == KEY_O ? 0 :
- > key == KEY_V ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_L ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_G ? KEY_CCORCHE : key == KEY_F ? KEY_ACORCHE :
- > key == KEY_D ? KEY_BKSLASH : key == KEY_S ? KEY_BKSLASH : key == KEY_6 ? KEY_7 : key == KEY_7 ? KEY_COMILLA :
- > key == KEY_8 ? KEY_9 : key == KEY_9 ? KEY_0 : key == KEY_Y ? KEY_ACORCHE : key == KEY_U ? KEY_CCORCHE :
- > key == KEY_O ? KEY_PTOCOMA : key == KEY_P ? KEY_COMILLA : key == KEY_V ? KEY_SLASH : key == KEY_C ? KEY_SLASH :
- > key == KEY_X ? KEY_MENOS : key == KEY_Z ? KEY_PTOCOMA : key == KEY_H ? KEY_6 : key == KEY_J ? KEY_MENOS :
- > key == KEY_K ? KEY_IGUAL : key == KEY_L ? KEY_IGUAL : key == KEY_B ? KEY_8 : key == KEY_N ? KEY_COMA :
- > key == KEY_M ? KEY_PUNTO : (key == KEY_3 || key == KEY_2) ? key : 0;
- > break;
- > #endif
- 997,1016c1373,1396
- < KBMODE cambiarmodo2(KBMODE modokb)
- < {
- < kbescucha = 0;
- < KBEXT_BIDIR_OFF;
- < opqa_cursors = 0;
- < if (modokb == zx) CKm = nomZX[nomZX[0] + 1];
- < if (modokb == cpc) CKm = nomCPC[nomCPC[0] + 1];
- < if (modokb == msx) CKm = nomMSX[nomMSX[0] + 1];
- < if (modokb == c64) CKm = nomC64[nomC64[0] + 1];
- < if (modokb == at8) CKm = nomAT8[nomAT8[0] + 1];
- < if (modokb == bbc) CKm = nomBBC[nomBBC[0] + 1];
- < if (modokb == aco) CKm = nomACO[nomACO[0] + 1];
- < if (modokb == ap2) CKm = nomAP2[nomAP2[0] + 1];
- < if (modokb == vic) CKm = nomVIC[nomVIC[0] + 1];
- < if (modokb == ori) CKm = nomORI[nomORI[0] + 1];
- < if (modokb == sam) CKm = nomSAM[nomSAM[0] + 1];
- < if (modokb == jup) CKm = nomJUP[nomJUP[0] + 1];
- < if (modokb == pc) { CKm = nomPC[nomPC[0] + 1]; kbescucha = 1; timeout_escucha = 0; codeset = 2; } // Iniciamos la escucha para que se pueda cambiar al core de PC/XT.
- < if (modokb == kbext) { CKm = nomKBEXT[nomKBEXT[0] + 1]; kbescucha = 1; timeout_escucha = 0; codeset = 2; KBEXT_BIDIR_ON; } // Iniciamos la escucha y mantenemos activa bidireccionalidad, para que pueda ser usado como teclado externo.
- < if (modokb == pcxt) { CKm = nomPCXT[nomPCXT[0] + 1]; kbescucha = 0; codeset = 1; imprimecore(nomPCXT); } // Sin escucha activa para ser usado de forma simultanea junto a un teclado externo.
- ---
- > #ifdef symbols_sam
- > case sam:
- > keymodif =
- > key == KEY_R ? 0 :
- > key == KEY_G ? 0 :
- > key == KEY_F ? 0 :
- > key == KEY_A ? 0 :
- > key == KEY_7 ? 0 :
- > key == KEY_X ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_K ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_2 ? KEY_BKSLASH : key == KEY_T ? KEY_LESS : key == KEY_R ? KEY_LESS : key == KEY_G ? KEY_BKSLASH :
- > key == KEY_F ? KEY_COMILLA : key == KEY_A ? KEY_PTOCOMA : key == KEY_7 ? KEY_MENOS : key == KEY_0 ? KEY_SLASH :
- > key == KEY_O ? KEY_COMA : key == KEY_P ? KEY_2 : key == KEY_V ? KEY_7 : key == KEY_C ? KEY_MENOS :
- > key == KEY_X ? KEY_ACORCHE : key == KEY_Z ? KEY_PUNTO : key == KEY_H ? KEY_ACORCHE : key == KEY_J ? KEY_SLASH :
- > key == KEY_K ? KEY_CCORCHE : key == KEY_L ? KEY_0 : key == KEY_B ? KEY_CCORCHE : key == KEY_N ? KEY_COMA :
- > key == KEY_M ? KEY_PUNTO :
- > (key == KEY_3 || key == KEY_6 || key == KEY_8 || key == KEY_9) ? key : 0;
- > break;
- > #endif
- 1018,1019c1398,1427
- < return modokb;
- < }
- ---
- > #ifdef symbols_jup
- > case jup:
- > keymodif =
- > key == KEY_U ? 4 :
- > key == KEY_S ? 4 :
- > key == KEY_A ? 0x10 :
- > key == KEY_G ? 0x10 :
- > key == KEY_Q ? 0 :
- > key == KEY_2 ? 0x10 :
- > key == KEY_R ? 0 :
- > key == KEY_D ? 0 :
- > key == KEY_7 ? 0 :
- > key == KEY_X ? 0 :
- > key == KEY_H ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_K ? 0 :
- > key == KEY_N ? 0 :
- > key == KEY_M ? 0 :
- > 1;
- > key =
- > key == KEY_U ? KEY_CCORCHE : key == KEY_S ? KEY_1 : key == KEY_Q ? KEY_BKSLASH :
- > key == KEY_T ? KEY_LESS : key == KEY_R ? KEY_LESS : key == KEY_F ? KEY_COMILLA :
- > key == KEY_D ? KEY_TLD : key == KEY_7 ? KEY_MENOS : key == KEY_0 ? KEY_SLASH : key == KEY_Y ? KEY_ACORCHE :
- > key == KEY_O ? KEY_COMA : key == KEY_P ? KEY_2 : key == KEY_V ? KEY_7 : key == KEY_C ? KEY_MENOS : key == KEY_X ? KEY_COMILLA :
- > key == KEY_Z ? KEY_PUNTO : key == KEY_H ? KEY_ACORCHE : key == KEY_J ? KEY_SLASH : key == KEY_K ? KEY_CCORCHE :
- > key == KEY_L ? KEY_0 : key == KEY_B ? KEY_CCORCHE : key == KEY_N ? KEY_COMA : key == KEY_M ? KEY_PUNTO :
- > (key == KEY_3 || key == KEY_2 || key == KEY_6 || key == KEY_8 || key == KEY_9 || key == KEY_G || key == KEY_A) ? key : 0;
- > break;
- > #endif
- > #ifdef symbols_pc
- 1021,1237c1429,1466
- < KBMODE cambiarmodo(KBMODE modokb)
- < {
- < KBMODE auxmodo = modo;
- < kbescucha = 0;
- < KBEXT_BIDIR_OFF;
- < opqa_cursors = 0;
- < if (modokb == zx) imprimecore(nomZX);
- < if (modokb == cpc) imprimecore(nomCPC);
- < if (modokb == msx) imprimecore(nomMSX);
- < if (modokb == c64) imprimecore(nomC64);
- < if (modokb == at8) imprimecore(nomAT8);
- < if (modokb == bbc) imprimecore(nomBBC);
- < if (modokb == aco) imprimecore(nomACO);
- < if (modokb == ap2) imprimecore(nomAP2);
- < if (modokb == vic) imprimecore(nomVIC);
- < if (modokb == ori) imprimecore(nomORI);
- < if (modokb == sam) imprimecore(nomSAM);
- < if (modokb == jup) imprimecore(nomJUP);
- < if (modokb == pc) { kbescucha = 1; timeout_escucha = 0; codeset = 2; imprimecore(nomPC); } // Iniciamos la escucha para que se pueda cambiar al core de PC/XT.
- < if (modokb == pcxt) { kbescucha = 0; codeset = 1; imprimecore(nomPCXT); } // Sin escucha activa para ser usado de forma simultanea junto a un teclado externo.
- < if (modokb == kbext) { kbescucha = 1; timeout_escucha = 0; codeset = 2; imprimecore(nomKBEXT); KBEXT_BIDIR_ON; } // Iniciamos la escucha y mantenemos activa bidireccionalidad, para que pueda ser usado como teclado externo.
- <
- < if (modokb > kbext) modokb = auxmodo; // Si no se trata de un modo conocido, mantenemos el anterior.
- <
- < //Uso normal: CK1 = 20, CK2 = 40 // Para codigo sin optimizar (x12) CK1 = 240, CK2 = 480. //JOyPs2 CK1=15 CK2=30 //Mio CK1=4 CK2=8
- < //if(modokb>0) CKm=4; else CKm=1; //Se coge del Nombrecore[]
- <
- < fnpulsada = 1;
- < fnpulsando = 1;
- < cambiomodo = 0; //para salir del bucle del cambiomodo
- <
- < return modokb;
- <
- < }
- <
- < void pulsafn(unsigned char row, unsigned char col, unsigned char key, unsigned char key_E0, unsigned char shift, unsigned char ctrl, unsigned char alt, unsigned char useg)
- < {
- < if (espera) { _delay_us(5); espera = 0; }
- < if (shift) { if (codeset == 2) { sendPS2(KEY_LSHIFT); espera++; } else { sendPS2(KS1_LSHIFT); espera++; } }//El Shift no necesita E0
- < if (ctrl) { if (codeset == 2) { sendPS2(0xE0); sendPS2(KEY_RCTRL); espera++; } else { sendPS2(0xE0); sendPS2(KS1_RCTRL); espera++; } }//Se manda E0 para el control derecho (que vale para ambos casos)
- < if (alt) { if (codeset == 2) { sendPS2(KEY_LALT); espera++; } else { sendPS2(KS1_LALT); espera++; } }//Usamos el Alt izdo siempre
- < if (espera) { _delay_us(5); espera = 0; }
- < if (key_E0) { sendPS2(0xE0); } //La tecla requiere modo E0 del PS2
- < sendPS2(key);
- < _delay_ms(50);
- < if (key_E0) { sendPS2(0xE0); }
- < if (codeset == 2) sendPS2(0xF0);
- < if (codeset == 2) sendPS2(key); else sendPS2(key + KS1_RELEASE);
- < matriz[row][col] = 0;
- < if (shift) { if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_LSHIFT); } else { sendPS2(KS1_LSHIFT + KS1_RELEASE); } }
- < if (ctrl) { if (codeset == 2) { sendPS2(0xE0); sendPS2(0xF0); sendPS2(KEY_RCTRL); } else { sendPS2(0xE0); sendPS2(KS1_RCTRL + KS1_RELEASE); } }
- < if (alt) { if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_LALT); } else { sendPS2(KS1_RALT + KS1_RELEASE); } }
- < _delay_us(5);
- < fnpulsada = 1;
- < fnpulsando = 1;
- < kbalt = 0;
- < soltarteclas = 1; // Forzamos a que despues todas las teclas esten soltadas para evitar que se quede pulsada la letra asociada al combo.
- < }
- <
- < unsigned char traducekey(unsigned char key, KBMODE modokb) // con esta funcion ahorramos muchas matrices de mapas y por tanto memoria dinamica del AVR
- < {
- < // Se hace OR 0x80 al key que no requiera shift (KEY_F7 es el unico scancode incompatible, ya se resolveria en caso de necesidad)
- < // combinaciones no usables, comun a todos los cores
- < key =
- < key == KEY_E ? 0 : key == KEY_W ? 0 : key == KEY_Q ? 0 :
- < key == KEY_I ? 0 : key == KEY_SPACE ? 0 : key == KEY_ENTER ? 0 : key;
- <
- < if ((modokb == pc || modokb == pcxt || modokb == kbext) && codeset == 1) return key; // pcxt tiene su propio mapa con scancodes distintos
- <
- < // combinaciones numericas comunes a todos los cores
- < if (key == KEY_1 || key == KEY_3 || key == KEY_4 || key == KEY_5) return key;
- <
- < // traduccion de key segun el core
- < if (key != 0)
- < {
- < switch (modokb)
- < {
- < case cpc:
- < key =
- < key == KEY_2 ? KEY_ACORCHE | 0x80 : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_G ? KEY_BKSLASH :
- < key == KEY_F ? KEY_CCORCHE : key == KEY_D ? KEY_LESS | 0x80 : key == KEY_S ? KEY_ACORCHE : key == KEY_A ? KEY_LESS :
- < key == KEY_Y ? KEY_CCORCHE | 0x80 : key == KEY_U ? KEY_BKSLASH | 0x80 : key == KEY_O ? KEY_COMILLA | 0x80 : key == KEY_P ? KEY_2 :
- < key == KEY_V ? KEY_SLASH | 0x80 : key == KEY_C ? KEY_SLASH : key == KEY_X ? KEY_IGUAL : key == KEY_Z ? KEY_PTOCOMA | 0x80 :
- < key == KEY_H ? KEY_IGUAL | 0x80 : key == KEY_J ? KEY_MENOS | 0x80 : key == KEY_K ? KEY_COMILLA : key == KEY_L ? KEY_MENOS :
- < key == KEY_B ? KEY_PTOCOMA : key == KEY_N ? KEY_COMA | 0x80 : key == KEY_M ? KEY_PUNTO | 0x80 :
- <
- < (key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- < break;
- <
- < case msx:
- < key =
- < key == KEY_2 ? KEY_COMILLA : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_G ? KEY_ACORCHE :
- < key == KEY_F ? KEY_TLD | 0x80 : key == KEY_D ? KEY_BKSLASH | 0x80 : key == KEY_S ? KEY_BKSLASH : key == KEY_A ? KEY_CCORCHE :
- < key == KEY_6 ? KEY_COMILLA | 0x80 : key == KEY_7 ? KEY_PTOCOMA : key == KEY_8 ? KEY_0 : key == KEY_0 ? KEY_IGUAL | 0x80 :
- < key == KEY_Y ? KEY_2 : key == KEY_U ? KEY_ACORCHE | 0x80 : key == KEY_O ? KEY_PTOCOMA | 0x80 : key == KEY_P ? KEY_8 :
- < key == KEY_V ? KEY_SLASH | 0x80 : key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_IGUAL : key == KEY_H ? KEY_7 :
- < key == KEY_J ? KEY_MENOS | 0x80 : key == KEY_K ? KEY_TLD : key == KEY_L ? KEY_6 : key == KEY_B ? KEY_9 :
- < key == KEY_N ? KEY_COMA | 0x80 : key == KEY_M ? KEY_PUNTO | 0x80 : 0;
- < break;
- <
- < case c64:
- < key =
- < key == KEY_2 ? KEY_ACORCHE | 0x80 : key == KEY_T ? KEY_COMA : key == KEY_R ? KEY_LESS : key == KEY_S ? KEY_MENOS :
- < key == KEY_Y ? KEY_PTOCOMA : key == KEY_U ? KEY_COMILLA : key == KEY_O ? KEY_COMILLA | 0x80 : key == KEY_P ? KEY_2 :
- < key == KEY_V ? KEY_SLASH | 0x80 : key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_PTOCOMA | 0x80 : key == KEY_H ? KEY_BKSLASH | 0x80 :
- < key == KEY_J ? KEY_MENOS | 0x80 : key == KEY_K ? KEY_F10 | 0x80 : key == KEY_L ? KEY_IGUAL | 0x80 : key == KEY_B ? KEY_CCORCHE | 0x80 :
- < key == KEY_N ? KEY_LESS | 0x80 : key == KEY_M ? KEY_COMA | 0x80 :
- <
- < (key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- < break;
- <
- < case at8:
- < key =
- < key == KEY_2 ? KEY_8 : key == KEY_T ? KEY_IGUAL | 0x80 : key == KEY_R ? KEY_MENOS | 0x80 : key == KEY_W ? KEY_F12 | 0x80 :
- < key == KEY_Q ? KEY_F11 | 0x80 : key == KEY_D ? KEY_COMILLA : key == KEY_S ? KEY_CCORCHE : key == KEY_Y ? KEY_COMA :
- < key == KEY_U ? KEY_PUNTO : key == KEY_O ? KEY_PTOCOMA | 0x80 : key == KEY_P ? KEY_2 : key == KEY_V ? KEY_SLASH | 0x80 :
- < key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_PTOCOMA : key == KEY_H ? KEY_BKSLASH : key == KEY_J ? KEY_ACORCHE | 0x80 :
- < key == KEY_K ? KEY_COMILLA | 0x80 : key == KEY_L ? KEY_CCORCHE | 0x80 : key == KEY_B ? KEY_BKSLASH | 0x80 : key == KEY_N ? KEY_COMA | 0x80 :
- < key == KEY_M ? KEY_PUNTO | 0x80 :
- <
- < (key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- < break;
- <
- < case bbc:
- < key =
- < key == KEY_2 ? KEY_TLD | 0x80 : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_W ? KEY_F12 | 0x80 :
- < key == KEY_Q ? KEY_F12 : key == KEY_S ? KEY_LESS : key == KEY_A ? KEY_MENOS | 0x80 : key == KEY_O ? KEY_PTOCOMA | 0x80 :
- < key == KEY_P ? KEY_2 : key == KEY_V ? KEY_SLASH | 0x80 : key == KEY_C ? KEY_SLASH : key == KEY_X ? KEY_BKSLASH :
- < key == KEY_Z ? KEY_COMILLA | 0x80 : key == KEY_H ? KEY_IGUAL | 0x80 : key == KEY_J ? KEY_BKSLASH | 0x80 : key == KEY_K ? KEY_PTOCOMA :
- < key == KEY_L ? KEY_MENOS : key == KEY_B ? KEY_COMILLA : key == KEY_N ? KEY_COMA | 0x80 : key == KEY_M ? KEY_PUNTO | 0x80 :
- <
- < (key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- < break;
- <
- < case aco:
- < key =
- < key == KEY_2 ? KEY_0 : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_D ? KEY_BKSLASH | 0x80 :
- < key == KEY_Y ? KEY_ACORCHE : key == KEY_U ? KEY_CCORCHE | 0x80 : key == KEY_O ? KEY_PTOCOMA | 0x80 : key == KEY_P ? KEY_2 :
- < key == KEY_V ? KEY_SLASH | 0x80 : key == KEY_C ? KEY_SLASH : key == KEY_X ? KEY_ACORCHE : key == KEY_Z ? KEY_COMILLA | 0x80 :
- < key == KEY_J ? KEY_MENOS | 0x80 : key == KEY_K ? KEY_PTOCOMA : key == KEY_L ? KEY_MENOS : key == KEY_B ? KEY_COMILLA :
- < key == KEY_N ? KEY_COMA | 0x80 : key == KEY_M ? KEY_PUNTO | 0x80 :
- <
- < (key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- < break;
- <
- < case ap2:
- < key =
- < key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_6 ? KEY_7 : key == KEY_7 ? KEY_COMILLA | 0x80 :
- < key == KEY_8 ? KEY_9 : key == KEY_9 ? KEY_0 : key == KEY_0 ? KEY_MENOS : key == KEY_Y ? KEY_ACORCHE | 0x80 :
- < key == KEY_U ? KEY_CCORCHE | 0x80 : key == KEY_O ? KEY_PTOCOMA | 0x80 : key == KEY_P ? KEY_COMILLA : key == KEY_V ? KEY_SLASH | 0x80 :
- < key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_PTOCOMA : key == KEY_H ? KEY_6 : key == KEY_J ? KEY_MENOS | 0x80 :
- < key == KEY_K ? KEY_IGUAL : key == KEY_L ? KEY_IGUAL | 0x80 : key == KEY_B ? KEY_8 : key == KEY_N ? KEY_COMA | 0x80 :
- < key == KEY_M ? KEY_PUNTO | 0x80 : key == KEY_2 ? key : 0;
- < break;
- <
- < case vic:
- < key =
- < key == KEY_2 ? KEY_ACORCHE | 0x80 : key == KEY_T ? KEY_COMA : key == KEY_R ? KEY_LESS : key == KEY_S ? KEY_IGUAL :
- < key == KEY_Y ? KEY_PTOCOMA : key == KEY_U ? KEY_COMILLA : key == KEY_O ? KEY_COMILLA | 0x80 : key == KEY_P ? KEY_2 :
- < key == KEY_V ? KEY_SLASH | 0x80 : key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_PTOCOMA | 0x80 : key == KEY_J ? KEY_IGUAL | 0x80 :
- < key == KEY_K ? KEY_MENOS | 0x80 : key == KEY_L ? KEY_BKSLASH | 0x80 : key == KEY_B ? KEY_CCORCHE | 0x80 : key == KEY_N ? KEY_LESS | 0x80 :
- < key == KEY_M ? KEY_COMA | 0x80 :
- <
- < (key == KEY_6 || key == KEY_7 || key == KEY_8 || key == KEY_9 || key == KEY_0) ? key : 0;
- < break;
- <
- < case ori:
- < key =
- < key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_G ? KEY_CCORCHE : key == KEY_F ? KEY_ACORCHE :
- < key == KEY_D ? KEY_BKSLASH | 0x80 : key == KEY_S ? KEY_BKSLASH : key == KEY_6 ? KEY_7 : key == KEY_7 ? KEY_COMILLA | 0x80 :
- < key == KEY_8 ? KEY_9 : key == KEY_9 ? KEY_0 : key == KEY_Y ? KEY_ACORCHE | 0x80 : key == KEY_U ? KEY_CCORCHE | 0x80 :
- < key == KEY_O ? KEY_PTOCOMA | 0x80 : key == KEY_P ? KEY_COMILLA : key == KEY_V ? KEY_SLASH | 0x80 : key == KEY_C ? KEY_SLASH :
- < key == KEY_X ? KEY_MENOS : key == KEY_Z ? KEY_PTOCOMA : key == KEY_H ? KEY_6 : key == KEY_J ? KEY_MENOS | 0x80 :
- < key == KEY_K ? KEY_IGUAL : key == KEY_L ? KEY_IGUAL | 0x80 : key == KEY_B ? KEY_8 : key == KEY_N ? KEY_COMA | 0x80 :
- < key == KEY_M ? KEY_PUNTO | 0x80 : key == KEY_0 ? key : 0;
- < break;
- <
- < case sam:
- < key =
- < key == KEY_2 ? KEY_BKSLASH : key == KEY_T ? KEY_LESS : key == KEY_R ? KEY_LESS | 0x80 : key == KEY_G ? KEY_BKSLASH | 0x80 :
- < key == KEY_F ? KEY_COMILLA | 0x80 : key == KEY_A ? KEY_PTOCOMA | 0x80 : key == KEY_7 ? KEY_MENOS | 0x80 : key == KEY_0 ? KEY_SLASH :
- < key == KEY_O ? KEY_COMA : key == KEY_P ? KEY_2 : key == KEY_V ? KEY_7 : key == KEY_C ? KEY_MENOS :
- < key == KEY_X ? KEY_ACORCHE | 0x80 : key == KEY_Z ? KEY_PUNTO : key == KEY_H ? KEY_ACORCHE : key == KEY_J ? KEY_SLASH | 0x80 :
- < key == KEY_K ? KEY_CCORCHE | 0x80 : key == KEY_L ? KEY_0 : key == KEY_B ? KEY_CCORCHE : key == KEY_N ? KEY_COMA | 0x80 :
- < key == KEY_M ? KEY_PUNTO | 0x80 :
- <
- < (key == KEY_6 || key == KEY_8 || key == KEY_9) ? key : 0;
- < break;
- <
- < case jup:
- < key =
- < key == KEY_2 ? KEY_BKSLASH | 0x80 : key == KEY_T ? KEY_LESS : key == KEY_R ? KEY_LESS | 0x80 : key == KEY_F ? KEY_COMILLA :
- < key == KEY_D ? KEY_TLD | 0x80 : key == KEY_7 ? KEY_MENOS | 0x80 : key == KEY_0 ? KEY_SLASH : key == KEY_Y ? KEY_ACORCHE :
- < key == KEY_O ? KEY_COMA : key == KEY_P ? KEY_2 : key == KEY_V ? KEY_7 : key == KEY_C ? KEY_MENOS : key == KEY_X ? KEY_COMILLA | 0x80 :
- < key == KEY_Z ? KEY_PUNTO : key == KEY_H ? KEY_ACORCHE | 0x80 : key == KEY_J ? KEY_SLASH | 0x80 : key == KEY_K ? KEY_CCORCHE | 0x80 :
- < key == KEY_L ? KEY_0 : key == KEY_B ? KEY_CCORCHE : key == KEY_N ? KEY_COMA | 0x80 : key == KEY_M ? KEY_PUNTO | 0x80 :
- <
- < (key == KEY_6 || key == KEY_8 || key == KEY_9) ? key : 0;
- < break;
- < case pc:
- < case pcxt:
- < case kbext:
- < key =
- < key == KEY_0 ? KEY_MENOS : key == KEY_9 ? KEY_0 : key == KEY_8 ? KEY_9 : key == KEY_7 ? KEY_COMILLA | 0x80 :
- < key == KEY_6 ? KEY_7 : key == KEY_T ? KEY_PUNTO : key == KEY_R ? KEY_COMA : key == KEY_G ? KEY_CCORCHE :
- < key == KEY_F ? KEY_ACORCHE : key == KEY_D ? KEY_LESS | 0x80 : key == KEY_S ? KEY_BKSLASH : key == KEY_A ? KEY_TLD :
- < key == KEY_Y ? KEY_ACORCHE | 0x80 : key == KEY_U ? KEY_CCORCHE | 0x80 : key == KEY_O ? KEY_PTOCOMA | 0x80 : key == KEY_P ? KEY_COMILLA :
- < key == KEY_V ? KEY_SLASH | 0x80 : key == KEY_C ? KEY_SLASH : key == KEY_Z ? KEY_PTOCOMA : key == KEY_H ? KEY_6 :
- < key == KEY_J ? KEY_MENOS | 0x80 : key == KEY_K ? KEY_IGUAL : key == KEY_L ? KEY_IGUAL | 0x80 : key == KEY_B ? KEY_8 :
- < key == KEY_N ? KEY_COMA | 0x80 : key == KEY_M ? KEY_PUNTO | 0x80 : key == KEY_2 ? key : 0;
- < break;
- <
- < default:
- < key = 0;
- < break;
- < }
- < }
- ---
- > case pc: // scancodes set 2
- > keymodif =
- > key == KEY_A ? 0x40 :
- > key == KEY_X ? 0x40 :
- > key == KEY_2 ? 8 :
- > key == KEY_3 ? 8 :
- > key == KEY_Q ? 0 :
- > key == KEY_E ? 0 :
- > key == KEY_R ? 0 :
- > key == KEY_S ? 8 :
- > key == KEY_D ? 8 :
- > key == KEY_F ? 8 :
- > key == KEY_G ? 8 :
- > key == KEY_7 ? 0 :
- > key == KEY_U ? 8 :
- > key == KEY_Y ? 8 :
- > key == KEY_K ? 0 :
- > key == KEY_J ? 0 :
- > key == KEY_M ? 0 :
- > key == KEY_N ? 0 :
- > 1;
- > key =
- > key == KEY_A ? 126 : key == KEY_X ? 156 :
- > key == KEY_Q ? KEY_TLD : key == KEY_W ? KEY_TLD : key == KEY_E ? KEY_IGUAL : key == KEY_R ? KEY_LESS : key == KEY_T ? KEY_LESS :
- > key == KEY_S ? KEY_1 : key == KEY_D ? KEY_TLD : key == KEY_F ? KEY_COMILLA : key == KEY_G ? KEY_BKSLASH : key == KEY_0 ? KEY_SLASH :
- > key == KEY_7 ? KEY_MENOS : key == KEY_P ? KEY_2 : key == KEY_O ? KEY_COMA : key == KEY_I ? KEY_IGUAL : key == KEY_U ? KEY_CCORCHE :
- > key == KEY_Y ? KEY_ACORCHE : key == KEY_Z ? KEY_PUNTO : key == KEY_C ? KEY_MENOS : key == KEY_V ? KEY_7 : key == KEY_L ? KEY_0 :
- > key == KEY_K ? KEY_CCORCHE : key == KEY_J ? KEY_SLASH : key == KEY_H ? KEY_ACORCHE : key == KEY_M ? KEY_PUNTO :
- > key == KEY_N ? KEY_COMA : key == KEY_B ? KEY_CCORCHE :
- > (key == KEY_2 || key == KEY_3 || key == KEY_6 || key == KEY_8 || key == KEY_9) ? key : 0;
- > break;
- > #endif
- >
- > default:
- > key = 0;
- > break;
- > }
- > }
- 1239c1468
- < return key;
- ---
- > return;
- 1244,1256c1473,1525
- < unsigned char key = 0, shift = 0;
- < typematicfirst = 0;
- < typematic_codeaux = 0;
- < key = traducekey(mapZX[row][col], modokb);
- < if (key != 0)
- < {
- < if ((modokb == pc || modokb == pcxt || modokb == kbext) && codeset == 1) { key = mapXT1[row][col]; shift = modXT1[row][col]; }
- < else { shift = !(key & 0x80); if (!shift) key ^= 0x80; }
- <
- < if (shift) { if (codeset == 2) { sendPS2(KEY_LSHIFT); typematic_codeaux = KEY_LSHIFT; } else { sendPS2(KS1_LSHIFT); typematic_codeaux = KS1_LSHIFT; } }
- < sendPS2(key);
- < typematic_code = key;
- < }
- ---
- > // 0x1 -> LShift
- > // 0x2 -> LCTrl
- > // 0x4 -> LAlt
- > // 0x8 -> RAlt (AltGr)
- > // 0x10 -> RCTrl
- > // 0x20 -> Requiere 0xE0
- >
- > uint8_t key = 0, keymodif = 0;
- > unsigned char shift = 0, ctrl = 0, rctrl = 0, alt = 0, altgr = 0, specialkey = 0, altcode = 0;
- > typematicfirst = 0;
- > typematic_codeaux = 0;
- > key = codeset == 1 ? mapSET1[row][col] : mapZX[row][col];
- >
- > if (modo)
- > {
- > traducekey(key, keymodif, modokb);
- > if (key)
- > {
- > if (modokb == pc && codeset == 1) { key = mapXT1[row][col]; shift = modXT1[row][col] & 1; altgr = modXT1[row][col] & 8; altcode = modXT1[row][col] & 0x40; }
- > else
- > {
- > shift = (keymodif & 0x1) == 0x1;
- > ctrl = (keymodif & 0x2) == 0x2;
- > alt = (keymodif & 0x4) == 0x4;
- > altgr = (keymodif & 0x8) == 0x8;
- > rctrl = (keymodif & 0x10) == 0x10;
- > specialkey = (keymodif & 0x20) == 0x20;
- > altcode = (keymodif & 0x40) == 0x40;
- > }
- >
- > if (key && !altcode)
- > {
- > if (shift) { if (codeset == 2) { sendPS2(KEY_LSHIFT); typematic_codeaux = KEY_LSHIFT; } else { sendPS2(KS1_LSHIFT); typematic_codeaux = KS1_LSHIFT; } }
- > if (ctrl) { if (codeset == 2) { sendPS2(KEY_LCTRL); typematic_codeaux = KEY_LCTRL; } }
- > if (alt) { if (codeset == 2) { sendPS2(KEY_LALT); typematic_codeaux = KEY_LALT; } }
- > if (altgr) { sendPS2_aux(0xE0, 0); if (codeset == 2) sendPS2(KEY_RALT); else sendPS2(KS1_RALT); } // typematic_codeaux = KEY_RALT; } }
- > if (rctrl) { if (codeset == 2) { sendPS2_aux(0xE0, 0); sendPS2(KEY_RCTRL); } } // typematic_codeaux = KEY_RCTRL; } }
- > if (specialkey) sendPS2_aux(0xE0, 0);
- > if (!altcode)
- > {
- > sendPS2((uint8_t)key);
- > typematic_code = (uint8_t)key;
- > }
- > }
- > }
- > }
- > else
- > {
- > key = mapZX[row][col];
- > sendPS2(KEY_LCTRL); typematic_codeaux = KEY_LCTRL;
- > sendPS2((uint8_t)key);
- > typematic_code = (uint8_t)key;
- > }
- 1260,1273c1529,1596
- < unsigned char key = 0, shift = 0;
- < typematic_code = 0;
- < key = traducekey(mapZX[row][col], modokb);
- < if (key != 0)
- < {
- < if ((modokb == pc || modokb == pcxt || modokb == kbext) && codeset == 1) { key = mapXT1[row][col]; shift = modXT1[row][col]; }
- < else { shift = !(key & 0x80); if (!shift) key ^= 0x80; }
- <
- < if (codeset == 2) { sendPS2(0xF0); sendPS2(key); }
- < else sendPS2(key + KS1_RELEASE);
- <
- < if (shift) { if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_LSHIFT); } else sendPS2(KS1_LSHIFT + KS1_RELEASE); }
- <
- < }
- ---
- > // 0x1 -> LShift
- > // 0x2 -> LCTrl
- > // 0x4 -> LAlt
- > // 0x8 -> RAlt (AltGr)
- > // 0x10 -> RCTrl
- > // 0x20 -> Requiere 0xE0
- >
- > uint8_t key = 0, keymodif = 0;
- > unsigned char shift = 0, ctrl = 0, rctrl = 0, alt = 0, altgr = 0, specialkey = 0, altcode = 0;
- > unsigned char d1 = 0, d2 = 0, d3 = 0;
- > typematic_code = 0;
- > key = mapZX[row][col];
- > if (modo)
- > {
- > traducekey(key, keymodif, modokb);
- > if (key)
- > {
- > if (modokb == pc && codeset == 1) { key = mapXT1[row][col]; shift = modXT1[row][col] & 1; altgr = modXT1[row][col] & 8; altcode = modXT1[row][col] & 0x40; }
- > else
- > {
- > shift = (keymodif & 0x1) == 0x1;
- > ctrl = (keymodif & 0x2) == 0x2;
- > alt = (keymodif & 0x4) == 0x4;
- > altgr = (keymodif & 0x8) == 0x8;
- > rctrl = (keymodif & 0x10) == 0x10;
- > specialkey = (keymodif & 0x20) == 0x20;
- > altcode = (keymodif & 0x40) == 0x40;
- > }
- >
- > if (key)
- > {
- > if (!altcode)
- > {
- > if (codeset == 2)
- > {
- > if (specialkey) sendPS2_aux(0xE0, 0);
- > sendPS2(0xF0);
- > sendPS2((uint8_t)key);
- > }
- > else sendPS2((uint8_t)key + KS1_RELEASE);
- >
- > if (shift) { if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_LSHIFT); } else sendPS2(KS1_LSHIFT + KS1_RELEASE); }
- > if (ctrl) { if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_LCTRL); } }
- > if (alt) { if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_LALT); } }
- > if (altgr) { sendPS2(0xE0); if (codeset == 2) { sendPS2(0xF0); sendPS2(KEY_RALT); } else sendPS2(KS1_RALT + KS1_RELEASE); }
- > if (rctrl) { if (codeset == 2) { sendPS2(0xE0); sendPS2(0xF0); sendPS2(KEY_RCTRL); } }
- >
- > }
- > else
- > {
- > if (key == 126) { d1 = codeset == 2 ? KEYPAD_1 : KS1PAD_1; d2 = codeset == 2 ? KEYPAD_2 : KS1PAD_2; d3 = codeset == 2 ? KEYPAD_6 : KS1PAD_6; }
- > if (key == 156) { d1 = codeset == 2 ? KEYPAD_1 : KS1PAD_1; d2 = codeset == 2 ? KEYPAD_5 : KS1PAD_5; d3 = codeset == 2 ? KEYPAD_6 : KS1PAD_6; }
- >
- > if (codeset == 1) pulsa_alt_code_set1(d1, d2, d3);
- > if (codeset == 2) pulsa_alt_code_set2(d1, d2, d3);
- >
- > }
- >
- > }
- >
- > }
- > }
- > else
- > {
- > key = mapZX[row][col];
- > sendPS2(0xF0); sendPS2((uint8_t)key);
- > sendPS2(0xF0); sendPS2(KEY_LCTRL);
- > }
- 1277,1290c1600,1613
- < typematicfirst = 0;
- < typematic_codeaux = 0;
- < if (!key) //si no esta mapeada saca la mayuscula
- < {
- < if (codeset == 2) { sendPS2(KEY_LSHIFT); typematic_codeaux = KEY_LSHIFT; } else { sendPS2(KS1_LSHIFT); typematic_codeaux = KS1_LSHIFT; }
- < if (codeset == 2) { sendPS2(mapZX[row][col]); typematic_code = mapZX[row][col]; } else { sendPS2(mapSET1[row][col]); typematic_code = mapSET1[row][col]; }
- < }
- < else
- < {
- < if (codeset == 2 && (key == KEY_LEFT || key == KEY_RIGHT || key == KEY_UP || key == KEY_DOWN)) { sendPS2(0xE0); typematic_codeaux = 0xE0; } //Es una tecla del codeset2 que necesita E0
- < if (codeset == 1 && (key == KS1_LEFT || key == KS1_RIGHT || key == KS1_UP || key == KS1_DOWN)) { sendPS2(0xE0); typematic_codeaux = 0xE0; }//Es una tecla del codeset1 que necesita E0
- < sendPS2(key);
- < typematic_code = key;
- < }
- ---
- > typematicfirst = 0;
- > typematic_codeaux = 0;
- > if (!key) //si no esta mapeada saca la mayuscula
- > {
- > if (codeset == 2) { sendPS2(KEY_LSHIFT); typematic_codeaux = KEY_LSHIFT; } else { sendPS2(KS1_LSHIFT); typematic_codeaux = KS1_LSHIFT; }
- > if (codeset == 2) { sendPS2(mapZX[row][col]); typematic_code = mapZX[row][col]; } else { sendPS2(mapSET1[row][col]); typematic_code = mapSET1[row][col]; }
- > }
- > else
- > {
- > if (codeset == 2 && (key == KEY_LEFT || key == KEY_RIGHT || key == KEY_UP || key == KEY_DOWN)) { sendPS2(0xE0); typematic_codeaux = 0xE0; } //Es una tecla del codeset2 que necesita E0
- > if (codeset == 1 && (key == KS1_LEFT || key == KS1_RIGHT || key == KS1_UP || key == KS1_DOWN)) { sendPS2(0xE0); typematic_codeaux = 0xE0; }//Es una tecla del codeset1 que necesita E0
- > sendPS2(key);
- > typematic_code = key;
- > }
- 1295,1307c1618,1630
- < typematic_code = 0;
- < if (!key) //si no esta mapeada saca la mayuscula
- < {
- < if (codeset == 2) { sendPS2(0xF0); sendPS2(mapZX[row][col]); sendPS2(0xF0); sendPS2(KEY_LSHIFT); }
- < else { sendPS2(mapSET1[row][col] + KS1_RELEASE); sendPS2(KS1_LSHIFT + KS1_RELEASE); }
- < }
- < else
- < {
- < if (codeset == 2 && (key == KEY_LEFT || key == KEY_RIGHT || key == KEY_UP || key == KEY_DOWN)) sendPS2(0xE0); //Es una tecla del codeset2 que necesita E0
- < if (codeset == 1 && (key == KS1_LEFT || key == KS1_RIGHT || key == KS1_UP || key == KS1_DOWN)) sendPS2(0xE0); //Es una tecla del codeset1 que necesita E0
- < if (codeset == 2) { sendPS2(0xF0); sendPS2(key); }
- < else sendPS2(key + KS1_RELEASE);
- < }
- ---
- > typematic_code = 0;
- > if (!key) //si no esta mapeada saca la mayuscula
- > {
- > if (codeset == 2) { sendPS2(0xF0); sendPS2(mapZX[row][col]); sendPS2(0xF0); sendPS2(KEY_LSHIFT); }
- > else { sendPS2(mapSET1[row][col] + KS1_RELEASE); sendPS2(KS1_LSHIFT + KS1_RELEASE); }
- > }
- > else
- > {
- > if (codeset == 2 && (key == KEY_LEFT || key == KEY_RIGHT || key == KEY_UP || key == KEY_DOWN)) sendPS2(0xE0); //Es una tecla del codeset2 que necesita E0
- > if (codeset == 1 && (key == KS1_LEFT || key == KS1_RIGHT || key == KS1_UP || key == KS1_DOWN)) sendPS2(0xE0); //Es una tecla del codeset1 que necesita E0
- > if (codeset == 2) { sendPS2(0xF0); sendPS2(key); }
- > else sendPS2(key + KS1_RELEASE);
- > }
- 1312,1555c1635,1878
- < uint8_t isextra2a = 1;
- < uint8_t re = 0, ce = 0, rt = 0, ct = 0;
- < uint8_t csss_status = 0;
- <
- < switch (mapZX[r][c])
- < {
- <
- < case KEY_COMILLA:
- < re = SYMBOL_SHIFT_ROW;
- < ce = SYMBOL_SHIFT_COL;
- < rt = Y_P_ROW;
- < ct = P_COL;
- < ss_counter += p;
- < break;
- < case KEY_PTOCOMA:
- < re = SYMBOL_SHIFT_ROW;
- < ce = SYMBOL_SHIFT_COL;
- < rt = Y_P_ROW;
- < ct = O_COL;
- < ss_counter += p;
- < break;
- < case KEY_F1:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N1_N5_ROW;
- < ct = N1_COL;
- < cs_counter += p;
- < break;
- < case KEY_F3:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N1_N5_ROW;
- < ct = N3_COL;
- < cs_counter += p;
- < break;
- < case KEY_F4:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N1_N5_ROW;
- < ct = N4_COL;
- < cs_counter += p;
- < break;
- < case KEY_F9:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N6_N0_ROW;
- < ct = N9_COL;
- < cs_counter += p;
- < break;
- < case KEY_CAPS:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N1_N5_ROW;
- < ct = N2_COL;
- < cs_counter += p;
- < break;
- < case KEY_DOWN:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N6_N0_ROW;
- < ct = N6_COL;
- < cs_counter += p;
- < break;
- < case KEY_TAB:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = SYMBOL_SHIFT_ROW;
- < ct = SYMBOL_SHIFT_COL;
- < cs_counter += p;
- < break;
- <
- < default:
- < isextra2a = 0;
- < break;
- < }
- <
- < if (del_break_value)
- < {
- < switch (mapZX[r][c])
- < {
- <
- < case KEY_ESCAPE:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N6_N0_ROW;
- < ct = N0_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- <
- < case KEY_BACKSP:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = SPACE_ROW;
- < ct = SPACE_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- <
- < default:
- < break;
- < }
- <
- < }
- < else
- < {
- < switch (mapZX[r][c])
- < {
- <
- < case KEY_BACKSP:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N6_N0_ROW;
- < ct = N0_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- <
- < case KEY_ESCAPE:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = SPACE_ROW;
- < ct = SPACE_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- <
- < default:
- < break;
- < }
- < }
- <
- < if (cursors_kbpc_value)
- < {
- <
- < switch (mapZX[r][c])
- < {
- <
- < case KEY_LEFT:
- < re = SYMBOL_SHIFT_ROW;
- < ce = SYMBOL_SHIFT_COL;
- < rt = B_M_ROW;
- < ct = M_COL;
- < ss_counter += p;
- < isextra2a = 1;
- < break;
- < case KEY_RIGHT:
- < re = SYMBOL_SHIFT_ROW;
- < ce = SYMBOL_SHIFT_COL;
- < rt = B_M_ROW;
- < ct = N_COL;
- < ss_counter += p;
- < isextra2a = 1;
- < break;
- < case KEY_UP:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N1_N5_ROW;
- < ct = N5_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- < case KEY_PUNTO:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N6_N0_ROW;
- < ct = N7_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- < case KEY_COMA:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N6_N0_ROW;
- < ct = N8_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- <
- < default:
- < break;
- < }
- <
- < }
- < else
- < {
- < switch (mapZX[r][c])
- < {
- <
- < case KEY_PUNTO:
- < re = SYMBOL_SHIFT_ROW;
- < ce = SYMBOL_SHIFT_COL;
- < rt = B_M_ROW;
- < ct = M_COL;
- < ss_counter += p;
- < isextra2a = 1;
- < break;
- < case KEY_COMA:
- < re = SYMBOL_SHIFT_ROW;
- < ce = SYMBOL_SHIFT_COL;
- < rt = B_M_ROW;
- < ct = N_COL;
- < ss_counter += p;
- < isextra2a = 1;
- < break;
- < case KEY_LEFT:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N1_N5_ROW;
- < ct = N5_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- < case KEY_UP:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N6_N0_ROW;
- < ct = N7_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- < case KEY_RIGHT:
- < re = CAPS_SHIFT_ROW;
- < ce = CAPS_SHIFT_COL;
- < rt = N6_N0_ROW;
- < ct = N8_COL;
- < cs_counter += p;
- < isextra2a = 1;
- < break;
- <
- < default:
- < break;
- < }
- < }
- <
- < if (isextra2a)
- < {
- < csss_status = matriz[rt][ct] & 0x18;
- < if (p == -1)
- < {
- < if (cs_counter == 0 && ss_counter == 0) matriz[re][ce] = matriz[r][c];
- < }
- < else matriz[re][ce] = matriz[r][c];
- < matriz[rt][ct] = matriz[r][c] | csss_status;
- ---
- > uint8_t isextra2a = 1;
- > uint8_t re = 0, ce = 0, rt = 0, ct = 0;
- > uint8_t csss_status = 0;
- >
- > switch (mapZX[r][c])
- > {
- >
- > case KEY_COMILLA:
- > re = SYMBOL_SHIFT_ROW;
- > ce = SYMBOL_SHIFT_COL;
- > rt = Y_P_ROW;
- > ct = P_COL;
- > ss_counter += p;
- > break;
- > case KEY_PTOCOMA:
- > re = SYMBOL_SHIFT_ROW;
- > ce = SYMBOL_SHIFT_COL;
- > rt = Y_P_ROW;
- > ct = O_COL;
- > ss_counter += p;
- > break;
- > case KEY_F1:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N1_N5_ROW;
- > ct = N1_COL;
- > cs_counter += p;
- > break;
- > case KEY_F3:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N1_N5_ROW;
- > ct = N3_COL;
- > cs_counter += p;
- > break;
- > case KEY_F4:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N1_N5_ROW;
- > ct = N4_COL;
- > cs_counter += p;
- > break;
- > case KEY_F9:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N6_N0_ROW;
- > ct = N9_COL;
- > cs_counter += p;
- > break;
- > case KEY_CAPS:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N1_N5_ROW;
- > ct = N2_COL;
- > cs_counter += p;
- > break;
- > case KEY_DOWN:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N6_N0_ROW;
- > ct = N6_COL;
- > cs_counter += p;
- > break;
- > case KEY_TAB:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = SYMBOL_SHIFT_ROW;
- > ct = SYMBOL_SHIFT_COL;
- > cs_counter += p;
- > break;
- >
- > default:
- > isextra2a = 0;
- > break;
- > }
- >
- > if (del_break_value)
- > {
- > switch (mapZX[r][c])
- > {
- >
- > case KEY_ESCAPE:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N6_N0_ROW;
- > ct = N0_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- >
- > case KEY_BACKSP:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = SPACE_ROW;
- > ct = SPACE_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- >
- > default:
- > break;
- > }
- >
- > }
- > else
- > {
- > switch (mapZX[r][c])
- > {
- >
- > case KEY_BACKSP:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N6_N0_ROW;
- > ct = N0_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- >
- > case KEY_ESCAPE:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = SPACE_ROW;
- > ct = SPACE_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- >
- > default:
- > break;
- > }
- > }
- >
- > if (cursors_kbpc_value)
- > {
- >
- > switch (mapZX[r][c])
- > {
- >
- > case KEY_LEFT:
- > re = SYMBOL_SHIFT_ROW;
- > ce = SYMBOL_SHIFT_COL;
- > rt = B_M_ROW;
- > ct = M_COL;
- > ss_counter += p;
- > isextra2a = 1;
- > break;
- > case KEY_RIGHT:
- > re = SYMBOL_SHIFT_ROW;
- > ce = SYMBOL_SHIFT_COL;
- > rt = B_M_ROW;
- > ct = N_COL;
- > ss_counter += p;
- > isextra2a = 1;
- > break;
- > case KEY_UP:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N1_N5_ROW;
- > ct = N5_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- > case KEY_PUNTO:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N6_N0_ROW;
- > ct = N7_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- > case KEY_COMA:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N6_N0_ROW;
- > ct = N8_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- >
- > default:
- > break;
- > }
- >
- > }
- > else
- > {
- > switch (mapZX[r][c])
- > {
- >
- > case KEY_PUNTO:
- > re = SYMBOL_SHIFT_ROW;
- > ce = SYMBOL_SHIFT_COL;
- > rt = B_M_ROW;
- > ct = M_COL;
- > ss_counter += p;
- > isextra2a = 1;
- > break;
- > case KEY_COMA:
- > re = SYMBOL_SHIFT_ROW;
- > ce = SYMBOL_SHIFT_COL;
- > rt = B_M_ROW;
- > ct = N_COL;
- > ss_counter += p;
- > isextra2a = 1;
- > break;
- > case KEY_LEFT:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N1_N5_ROW;
- > ct = N5_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- > case KEY_UP:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N6_N0_ROW;
- > ct = N7_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- > case KEY_RIGHT:
- > re = CAPS_SHIFT_ROW;
- > ce = CAPS_SHIFT_COL;
- > rt = N6_N0_ROW;
- > ct = N8_COL;
- > cs_counter += p;
- > isextra2a = 1;
- > break;
- >
- > default:
- > break;
- > }
- > }
- >
- > if (isextra2a)
- > {
- > csss_status = matriz[rt][ct] & 0x18;
- > if (p == -1)
- > {
- > if (cs_counter == 0 && ss_counter == 0) matriz[re][ce] = matriz[r][c];
- > }
- > else matriz[re][ce] = matriz[r][c];
- > matriz[rt][ct] = matriz[r][c] | csss_status;
- 1557c1880
- < }
- ---
- > }
- 1561a1885,1997
- > void pulsa_y_suelta_teclas_modificadoras(uint8_t control, uint8_t alt, uint8_t shift, uint8_t altgr, uint8_t lwin)
- > {
- >
- > if (control)
- > {
- > switch (kbcontrol)
- > {
- > case 1:
- > if (codeset == 2) sendPS2_aux(KEY_LCTRL, 0); else sendPS2_aux(KS1_LCTRL, 0);
- > kbcontrol = 2;
- > break;
- > case 2:
- > _delay_ms(delay_specialkeys); // Antes de liberarla añadimos un pequeño delay
- > if (codeset == 2) { sendPS2_aux(0xF0, 0); sendPS2_aux(KEY_LCTRL, 0); }
- > else sendPS2_aux(KS1_LCTRL + KS1_RELEASE, 0);
- > kbcontrol = 0;
- > break;
- > default:
- > break;
- > }
- > }
- >
- > if (alt)
- > {
- > switch (kbalt)
- > {
- > case 1:
- > if (codeset == 2) sendPS2_aux(KEY_LALT, 0); else sendPS2_aux(KS1_LALT, 0);
- > kbalt = 2;
- > break;
- > case 2:
- > _delay_ms(delay_specialkeys); // Antes de liberarla añadimos un pequeño delay
- > if (codeset == 2) { sendPS2_aux(0xF0, 0); sendPS2_aux(KEY_LALT, 0); }
- > else sendPS2_aux(KS1_LALT + KS1_RELEASE, 0);
- > kbalt = 0;
- > break;
- > default:
- > break;
- > }
- > }
- >
- > if (shift)
- > {
- > switch (kbshift)
- > {
- > case 1:
- > if (codeset == 2) sendPS2_aux(KEY_LSHIFT, 0); else sendPS2_aux(KS1_LSHIFT, 0);
- > kbshift = 2;
- > break;
- > case 2:
- > _delay_ms(delay_specialkeys); // Antes de liberarla añadimos un pequeño delay
- > if (codeset == 2) { sendPS2_aux(0xF0, 0); sendPS2_aux(KEY_LSHIFT, 0); }
- > else sendPS2_aux(KS1_LSHIFT + KS1_RELEASE, 0);
- > kbshift = 0;
- > break;
- > default:
- > break;
- > }
- > }
- >
- > if (altgr)
- > {
- > switch (kbaltgr)
- > {
- > case 1:
- > if (codeset == 2) { sendPS2_aux(0xE0, 0); sendPS2_aux(KEY_RALT, 0); }
- > else { sendPS2_aux(0xE0, 0); sendPS2_aux(KS1_RALT, 0); }
- > kbaltgr = 2;
- > break;
- > case 2:
- > _delay_ms(delay_specialkeys); // Antes de liberarla añadimos un pequeño delay
- > if (codeset == 2) { sendPS2_aux(0xE0, 0); sendPS2_aux(0xF0, 0); sendPS2_aux(KEY_RALT, 0); }
- > else { sendPS2_aux(0xE0, 0); sendPS2_aux(KS1_RALT + KS1_RELEASE, 0); }
- > kbaltgr = 0;
- > break;
- > default:
- > break;
- > }
- > }
- >
- > if (lwin)
- > {
- > switch (kblwin)
- > {
- > case 1:
- > if (codeset == 2) { sendPS2_aux(0xE0, 0); sendPS2_aux(KEY_LWIN, 0); }
- > else { sendPS2_aux(0xE0, 0); sendPS2_aux(KS1_LWIN, 0); }
- > kblwin = 2;
- > break;
- > case 2:
- > _delay_ms(delay_specialkeys); // Antes de liberarla añadimos un pequeño delay
- > if (codeset == 2) { sendPS2_aux(0xE0, 0); sendPS2_aux(0xF0, 0); sendPS2_aux(KEY_LWIN, 0); }
- > else { sendPS2_aux(0xE0, 0); sendPS2_aux(KS1_LWIN + KS1_RELEASE, 0); }
- > kblwin = 0;
- > break;
- > default:
- > break;
- > }
- > }
- >
- > }
- >
- > void espera_a_soltar_tecla(uint8_t r, uint8_t c)
- > {
- > //activar row/fila
- > pinSet(pinsR[r], bcdR[r], _OUT);
- > pinPut(pinsR[r], bcdR[r], LO);
- > _delay_us(5);
- > while (pinStat(pinsC[c], bcdC[c])) true;
- > //desact. row/fila
- > pinSet(pinsR[r], bcdR[r], _IN);
- > }
- >
- 1564,1595c2000,2035
- < p1prev.up = p1.up;
- < p1prev.down = p1.down;
- < p1prev.left = p1.left;
- < p1prev.right = p1.right;
- < p1prev.select = p1.select; p1.select = 0;
- < p1prev.start = p1.start; p1.start = 0;
- < p1prev.button1 = p1.button1;
- < p1prev.button2 = p1.button2;
- < p1prev.button3 = p1.button3; p1.button3 = 0;
- < p1prev.button4 = p1.button4; p1.button4 = 0;
- < p1prev.button5 = p1.button5; p1.button5 = 0;
- < p1prev.button6 = p1.button6; p1.button6 = 0;
- <
- < _delay_ms(10); // Para evitar efecto rebote en la lectura de pulsaciones de los gamepads
- <
- < ReadDB9();
- < CheckP1SelectStartNesClon();
- <
- < if (p1.up != p1prev.up) sendCodeMR(P1KeyMap[0], !p1.up, codeset);
- < if (p1.down != p1prev.down) sendCodeMR(P1KeyMap[1], !p1.down, codeset);
- < if (p1.left != p1prev.left) sendCodeMR(P1KeyMap[2], !p1.left, codeset);
- < if (p1.right != p1prev.right) sendCodeMR(P1KeyMap[3], !p1.right, codeset);
- <
- < if (p1.select != p1prev.select) sendCodeMR(P1KeyMap[4], !p1.select, codeset);
- < if (p1.start != p1prev.start) sendCodeMR(P1KeyMap[5], !p1.start, codeset);
- <
- < if (p1.button1 != p1prev.button1) sendCodeMR(P1KeyMap[6], !p1.button1, codeset);
- < if (p1.button2 != p1prev.button2) sendCodeMR(P1KeyMap[7], !p1.button2, codeset);
- < if (p1.button3 != p1prev.button3) sendCodeMR(P1KeyMap[8], !p1.button3, codeset);
- < if (p1.button4 != p1prev.button4) sendCodeMR(P1KeyMap[9], !p1.button4, codeset);
- < if (p1.button5 != p1prev.button5) sendCodeMR(P1KeyMap[10], !p1.button5, codeset);
- < if (p1.button6 != p1prev.button6) sendCodeMR(P1KeyMap[11], !p1.button6, codeset);
- ---
- > p1prev.up = p1.up;
- > p1prev.down = p1.down;
- > p1prev.left = p1.left;
- > p1prev.right = p1.right;
- > p1prev.select = p1.select; p1.select = 0;
- > p1prev.start = p1.start; p1.start = 0;
- > p1prev.button1 = p1.button1;
- > p1prev.button2 = p1.button2;
- > p1prev.button3 = p1.button3; p1.button3 = 0;
- > p1prev.button4 = p1.button4; p1.button4 = 0;
- > p1prev.button5 = p1.button5; p1.button5 = 0;
- > p1prev.button6 = p1.button6; p1.button6 = 0;
- >
- > _delay_ms(10); // Para evitar efecto rebote en la lectura de pulsaciones de los gamepads
- >
- > if (famicom) ReadFamicom();
- > else
- > {
- > ReadDB9();
- > CheckP1SelectStartNesClon();
- > }
- >
- > if (p1.up != p1prev.up) sendCodeMR(P1KeyMap[0], !p1.up, codeset);
- > if (p1.down != p1prev.down) sendCodeMR(P1KeyMap[1], !p1.down, codeset);
- > if (p1.left != p1prev.left) sendCodeMR(P1KeyMap[2], !p1.left, codeset);
- > if (p1.right != p1prev.right) sendCodeMR(P1KeyMap[3], !p1.right, codeset);
- >
- > if (p1.select != p1prev.select) sendCodeMR(P1KeyMap[4], !p1.select, codeset);
- > if (p1.start != p1prev.start) sendCodeMR(P1KeyMap[5], !p1.start, codeset);
- >
- > if (p1.button1 != p1prev.button1) sendCodeMR(P1KeyMap[6], !p1.button1, codeset);
- > if (p1.button2 != p1prev.button2) sendCodeMR(P1KeyMap[7], !p1.button2, codeset);
- > if (p1.button3 != p1prev.button3) sendCodeMR(P1KeyMap[8], !p1.button3, codeset);
- > if (p1.button4 != p1prev.button4) sendCodeMR(P1KeyMap[9], !p1.button4, codeset);
- > if (p1.button5 != p1prev.button5) sendCodeMR(P1KeyMap[10], !p1.button5, codeset);
- > if (p1.button6 != p1prev.button6) sendCodeMR(P1KeyMap[11], !p1.button6, codeset);
- 1599,1600c2039,2040
- < uint8_t r, c;
- < uint8_t keyaux = 0;
- ---
- > uint8_t r, c;
- > uint8_t keyaux = 0;
- 1602,1661c2042,2101
- < fnpulsada = 0; //Se pone a 0 la pulsacion de una tecla de funcion
- <
- < if (pinStat(SYSTEM_PIN, SYSTEM_BCD)) // Gestion del switch SYSTEM (RESET)
- < {
- < _delay_us(10); //debounce
- < if (pinStat(SYSTEM_PIN, SYSTEM_BCD))
- < {
- < if (zxuno_encendido == 1) // Apagar ZX-Uno
- < {
- < tiemout_poweroff--;
- < _delay_ms(10);
- < if (tiemout_poweroff < 100)
- < {
- < tiemout_poweroff = 300;
- < zxuno_encendido = 0;
- < POWER_OFF;
- < while (pinStat(SYSTEM_PIN, SYSTEM_BCD)) _delay_ms(250);
- < }
- < }
- < else // Encender ZX-Uno
- < {
- < tiemout_poweroff = 300;
- < zxuno_encendido = 1;
- < POWER_ON;
- < _delay_ms(250);
- < }
- < }
- < }
- < else
- < {
- < if (tiemout_poweroff < 300)
- < {
- < RESET_ON;
- < _delay_ms(100);
- < RESET_OFF;
- < _delay_ms(250);
- < }
- < tiemout_poweroff = 300;
- < }
- <
- < rescan:
- <
- < //Escaneo de la matriz del teclado
- < if (!fnpulsada) for (r = 0; r < ROWS; r++)
- < {
- < //activar row/fila
- < pinSet(pinsR[r], bcdR[r], _OUT);
- < pinPut(pinsR[r], bcdR[r], LO);
- < _delay_us(5);
- < for (c = 0; c < COLS; c++)
- < {
- <
- < if (pinStat(pinsC[c], bcdC[c]))
- < {
- < _delay_us(10); //debounce
- < if (pinStat(pinsC[c], bcdC[c]))
- < {
- < if (matriz[r][c] & 0x01)
- < {
- < matriz[r][c] |= 0x02; //Marcado como mantenido "0x02"
- ---
- > fnpulsada = 0; //Se pone a 0 la pulsacion de una tecla de funcion
- >
- > if (pinStat(SYSTEM_PIN, SYSTEM_BCD)) // Gestion del switch SYSTEM (RESET)
- > {
- > _delay_us(10); //debounce
- > if (pinStat(SYSTEM_PIN, SYSTEM_BCD))
- > {
- > if (zxuno_encendido == 1) // Apagar ZX-Uno
- > {
- > tiemout_poweroff--;
- > _delay_ms(10);
- > if (tiemout_poweroff < 100)
- > {
- > tiemout_poweroff = 300;
- > zxuno_encendido = 0;
- > POWER_OFF;
- > while (pinStat(SYSTEM_PIN, SYSTEM_BCD)) _delay_ms(250);
- > }
- > }
- > else // Encender ZX-Uno
- > {
- > tiemout_poweroff = 300;
- > zxuno_encendido = 1;
- > POWER_ON;
- > _delay_ms(250);
- > }
- > }
- > }
- > else
- > {
- > if (tiemout_poweroff < 300)
- > {
- > RESET_ON;
- > _delay_ms(100);
- > RESET_OFF;
- > _delay_ms(250);
- > }
- > tiemout_poweroff = 300;
- > }
- >
- > rescan:
- >
- > //Escaneo de la matriz del teclado
- > if (!fnpulsada) for (r = 0; r < ROWS; r++)
- > {
- > //activar row/fila
- > pinSet(pinsR[r], bcdR[r], _OUT);
- > pinPut(pinsR[r], bcdR[r], LO);
- > _delay_us(5);
- > for (c = 0; c < COLS; c++)
- > {
- >
- > if (pinStat(pinsC[c], bcdC[c]))
- > {
- > _delay_us(10); //debounce
- > if (pinStat(pinsC[c], bcdC[c]))
- > {
- > if (matriz[r][c] & 0x01)
- > {
- > matriz[r][c] |= 0x02; //Marcado como mantenido "0x02"
- 1663,1671c2103,2111
- < if (r > 7 && c > 4) // pulsa extra +2A/+3
- < {
- < traduceextra2a(r, c, 0);
- < }
- < #endif
- < }
- < else
- < {
- < matriz[r][c] |= 0x01; // Marcado como pulsado "0x01"
- ---
- > if (r > 7 && c > 4) // pulsa extra +2A/+3
- > {
- > traduceextra2a(r, c, 0);
- > }
- > #endif
- > }
- > else
- > {
- > matriz[r][c] |= 0x01; // Marcado como pulsado "0x01"
- 1673,1686c2113,2124
- < if (r > 7 && c > 4) // pulsa extra +2A/+3
- < {
- < traduceextra2a(r, c, 1);
- < }
- < #endif
- < }
- <
- < }
- <
- < else if (matriz[r][c] & 0x01)
- < {
- < matriz[r][c] &= ~0x02; // Ya no esta mantenida "~0x02"
- < matriz[r][c] &= ~0x01; // Ya no esta pulsada "~0x01"
- < matriz[r][c] |= 0x04; // Marcado para soltar la tecla "0x04" (si entra por debounce)
- ---
- > if (r > 7 && c > 4) // pulsa extra +2A/+3
- > {
- > traduceextra2a(r, c, 1);
- > }
- > #endif
- > }
- > }
- > else if (matriz[r][c] & 0x01)
- > {
- > matriz[r][c] &= ~0x02; // Ya no esta mantenida "~0x02"
- > matriz[r][c] &= ~0x01; // Ya no esta pulsada "~0x01"
- > matriz[r][c] |= 0x04; // Marcado para soltar la tecla "0x04" (si entra por debounce)
- 1688,1692c2126,2130
- < if (r > 7 && c > 4) // suelta extra +2A/+3
- < {
- < traduceextra2a(r, c, -1);
- < matriz[r][c] = 0;
- < }
- ---
- > if (r > 7 && c > 4) // suelta extra +2A/+3
- > {
- > traduceextra2a(r, c, -1);
- > matriz[r][c] = 0;
- > }
- 1695,1701c2133,2139
- < }
- < }
- < else if (matriz[r][c] & 0x01)
- < {
- < matriz[r][c] &= ~0x02; // Ya no esta mantenida "~0x02"
- < matriz[r][c] &= ~0x01; // Ya no esta pulsada "~0x01"
- < matriz[r][c] |= 0x04; // Marcado para soltar la tecla "0x04"
- ---
- > }
- > }
- > else if (matriz[r][c] & 0x01)
- > {
- > matriz[r][c] &= ~0x02; // Ya no esta mantenida "~0x02"
- > matriz[r][c] &= ~0x01; // Ya no esta pulsada "~0x01"
- > matriz[r][c] |= 0x04; // Marcado para soltar la tecla "0x04"
- 1703,2060c2141,2147
- < if (r > 7 && c > 4) // suelta extra +2A/+3
- < {
- < traduceextra2a(r, c, -1);
- < matriz[r][c] = 0;
- < }
- < #endif
- < }
- <
- < }//Fin de Escaneo de las Columnas para el Row/Fila indicado
- < //desact. row/fila
- < pinSet(pinsR[r], bcdR[r], _IN);
- < } //fin escaneo de Rows/Filas de la matriz del teclado
- <
- < if (soltarteclas)
- < {
- < soltarteclas = 0;
- < for (r = 0; r<ROWS8; r++) for (c = 0; c<COLS5; c++) if (matriz[r][c] & 0x01) soltarteclas = 1;
- < goto rescan;
- < }
- <
- < if (cambiomodo)
- < {
- < if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x04) { matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0; if (!modo) { sendPS2(0xF0); sendPS2(CAPS_SHIFT); } }
- < if (matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x04) { matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0; if (!modo) { sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); } }
- <
- < if (matriz[Q_T_ROW][T_COL] & 0x01) cambia_tzxduino(); // TZXDUINO ON / OFF
- < if (matriz[Y_P_ROW][P_COL] & 0x01) cambia_cursors_kbpc(); // XCHG CURSORS KBPC ON / OFF
- < if (matriz[Y_P_ROW][O_COL] & 0x01) cambia_del_break(); // XCHG DEL BREAK ON / OFF
- <
- < for (r = 0; r<ROWS8; r++) for (c = 0; c<COLS5; c++) if (matriz[r][c] & 0x01) modo = cambiarmodo( ((KBMODE)(mapMODO[r][c])) );
- <
- < fnpulsada = 1; //Si no se pulsa ninguna tecla sigue en bucle hasta que se pulse
- < }
- < //Comprobacion de Teclas especiales al tener pulsado Caps Shift y Symbol Shift
- < if (!fnpulsada && (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) && (matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01))
- < {
- < if (!fnpulsando)
- < {//row, col, key, key_E0, shift, ctrl, alt, museg
- <
- < if (modo == pc || modo == pcxt || modo == kbext)
- < {
- < if (matriz[Z_V_ROW][C_COL] & 0x01) opqa_cursors = !opqa_cursors; // OPQA -> Cursores (Activacion / Desactivacion)
- < if (matriz[H_L_ROW][L_COL] & 0x01) kbalt = 1; // Modo Alt activado para F1 - F12
- < _delay_ms(200);
- < }
- < if ((matriz[Y_P_ROW][U_COL] & 0x01) && (fkbmode == 1 || modo))
- < {
- < kbescucha = 0;
- < cambiomodo = 1; fnpulsada = 1; soltarteclas = 1;
- < KBEXT_BIDIR_ON;
- <
- < }
- < if (codeset == 2)
- < {
- < if ((matriz[H_L_ROW][J_COL] & 0x01) && !modo)
- < {
- < fkbmode++;
- < fkbmode = fkbmode > 2 ? 0 : fkbmode;
- < cambiafkbmode();
- < }
- < //Activa el cambio de modo lo que dejara en bucle hasta que se pulse una tecla. El led se enciende.
- < if ((matriz[N1_N5_ROW][N1_COL] & 0x01) && fkbmode != 2) pulsafn(N1_N5_ROW, N1_COL, KEY_F1, 0, 0, 0, 0, 5); //F1
- < if ((matriz[N1_N5_ROW][N2_COL] & 0x01) && fkbmode != 2) pulsafn(N1_N5_ROW, N2_COL, KEY_F2, 0, 0, 0, 0, 5); //F2
- < if ((matriz[N1_N5_ROW][N3_COL] & 0x01) && fkbmode != 2) pulsafn(N1_N5_ROW, N3_COL, KEY_F3, 0, 0, 0, 0, 5); //F3
- < if ((matriz[N1_N5_ROW][N4_COL] & 0x01) && fkbmode != 2) pulsafn(N1_N5_ROW, N4_COL, KEY_F4, 0, 0, 0, 0, 5); //F4
- < if ((matriz[N1_N5_ROW][N5_COL] & 0x01) && fkbmode != 2) pulsafn(N1_N5_ROW, N5_COL, KEY_F5, 0, 0, 0, 0, 5); //F5
- < if ((matriz[N6_N0_ROW][N6_COL] & 0x01) && fkbmode != 2) pulsafn(N6_N0_ROW, N6_COL, KEY_F6, 0, 0, 0, 0, 5); //F6
- < if ((matriz[N6_N0_ROW][N7_COL] & 0x01) && fkbmode != 2) pulsafn(N6_N0_ROW, N7_COL, KEY_F7, 0, 0, 0, 0, 5); //F7
- < if ((matriz[N6_N0_ROW][N8_COL] & 0x01) && fkbmode != 2) pulsafn(N6_N0_ROW, N8_COL, KEY_F8, 0, 0, 0, 0, 5); //F8
- < if ((matriz[N6_N0_ROW][N9_COL] & 0x01) && fkbmode != 2) pulsafn(N6_N0_ROW, N9_COL, KEY_F9, 0, 0, 0, 0, 5); //F9
- < if ((matriz[N6_N0_ROW][N0_COL] & 0x01) && fkbmode != 2) pulsafn(N6_N0_ROW, N0_COL, KEY_F10, 0, 0, 0, 0, 5); //F10
- <
- < if ((matriz[Q_T_ROW][Q_COL] & 0x01) && fkbmode != 2) pulsafn(Q_T_ROW, Q_COL, KEY_F11, 0, 0, 0, 0, 50); //F11
- < if ((matriz[Q_T_ROW][W_COL] & 0x01) && fkbmode != 2) pulsafn(Q_T_ROW, W_COL, KEY_F12, 0, 0, 0, 0, 50); //F12
- <
- < if ((matriz[A_G_ROW][S_COL] & 0x01) && modo)
- < {
- < if (modo == at8) //F8 + F10 para Atari
- < {
- < sendPS2(KEY_F8);
- < _delay_ms(50);
- < sendPS2(KEY_F10);
- <
- < _delay_ms(50);
- <
- < sendPS2(0xF0);
- < sendPS2(KEY_F10);
- < _delay_ms(1000);
- < sendPS2(0xF0);
- < sendPS2(KEY_F8);
- < _delay_ms(50);
- <
- < fnpulsada = 1;
- < fnpulsando = 1;
- < }
- < if (modo == c64) //Ctrl + F12 para C64
- < {
- < pulsafn(A_G_ROW, S_COL, KEY_F12, 0, 0, 1, 0, 5);
- < }
- < }
- < if ((matriz[A_G_ROW][A_COL] & 0x01) && (fkbmode == 1 || modo)) pulsafn(A_G_ROW, A_COL, KEY_F10, 0, 0, 0, 0, 5); //F10 para el NEXT (�Mejor cambiar a otra?)
- <
- < if ((matriz[Y_P_ROW][Y_COL] & 0x01) && (fkbmode != 2 || modo)) pulsafn(Y_P_ROW, Y_COL, KEY_F5, 0, 0, 1, 1, 5); //ZXUNO NMI (Control+Alt+F5)
- < if ((matriz[B_M_ROW][B_COL] & 0x01) && (fkbmode != 2 || modo)) pulsafn(B_M_ROW, B_COL, KEY_BACKSP, 0, 0, 1, 1, 5); //ZXUNO Hard Reset (Control+Alt+Backsp)
- < if ((matriz[B_M_ROW][N_COL] & 0x01) && (fkbmode != 2 || modo)) pulsafn(B_M_ROW, N_COL, KEY_DELETE, 0, 0, 1, 1, 5); //ZXUNO Soft Reset (Control+Alt+Supr)
- < if ((matriz[A_G_ROW][G_COL] & 0x01) && (fkbmode != 2 || modo)) pulsafn(A_G_ROW, G_COL, KEY_SCRLCK, 0, 0, 0, 0, 5); //ZXUNO RGB/VGA Swich (Bloq Despl)
- <
- < if ((matriz[Z_V_ROW][V_COL] & 0x01) && (fkbmode == 1 || modo)) imprimeversion();
- < if ((matriz[Z_V_ROW][X_COL] & 0x01) && (fkbmode == 1 || modo)) eepromsave(); //Guarda en la EEPROM el modo actual de teclado
- <
- < /*
- < if ((matriz[Y_P_ROW][O_COL] & 0x01) && (fkbmode == 1 || modo)) cambia_del_break();
- < if ((matriz[Y_P_ROW][P_COL] & 0x01) && (fkbmode == 1 || modo)) cambia_cursors_kbpc();
- < if ((matriz[Q_T_ROW][T_COL] & 0x01) && (fkbmode == 1 || modo)) cambia_tzxduino();
- < */
- <
- < if ((matriz[Q_T_ROW][E_COL] & 0x01) && modo) pulsafn(Q_T_ROW, E_COL, KEY_PGUP, 1, 0, 0, 0, 5); //Re Pag / Pg Up (Acorn: VGA) (C64 Disco Anterior)
- < if ((matriz[Q_T_ROW][R_COL] & 0x01) && modo) pulsafn(Q_T_ROW, R_COL, KEY_PGDW, 1, 0, 0, 0, 5); //Av Pag / Pg Down (Acorn: RGB) (C64 Disco Siguiente)
- < if ((matriz[A_G_ROW][D_COL] & 0x01) && modo) pulsafn(A_G_ROW, D_COL, KEY_PGUP, 1, 1, 0, 0, 5); //Re Pag / Pg Up + Shift (C64 10 Discos Anteriores)
- < if ((matriz[A_G_ROW][F_COL] & 0x01) && modo) pulsafn(A_G_ROW, F_COL, KEY_PGDW, 1, 1, 0, 0, 5); //Av Pag / Pg Down + Shift (C64 10 Discos Siguientes)
- <
- <
- <
- < }
- < else if (codeset == 1)
- < {
- < if (matriz[N1_N5_ROW][N1_COL] & 0x01) pulsafn(N1_N5_ROW, N1_COL, KS1_F1, 0, 0, 0, kbalt, 5); //F1
- < if (matriz[N1_N5_ROW][N2_COL] & 0x01) pulsafn(N1_N5_ROW, N2_COL, KS1_F2, 0, 0, 0, kbalt, 5); //F2
- < if (matriz[N1_N5_ROW][N3_COL] & 0x01) pulsafn(N1_N5_ROW, N3_COL, KS1_F3, 0, 0, 0, kbalt, 5); //F3
- < if (matriz[N1_N5_ROW][N4_COL] & 0x01) pulsafn(N1_N5_ROW, N4_COL, KS1_F4, 0, 0, 0, kbalt, 5); //F4
- < if (matriz[N1_N5_ROW][N5_COL] & 0x01) pulsafn(N1_N5_ROW, N5_COL, KS1_F5, 0, 0, 0, kbalt, 5); //F5
- < if (matriz[N6_N0_ROW][N6_COL] & 0x01) pulsafn(N6_N0_ROW, N6_COL, KS1_F6, 0, 0, 0, kbalt, 5); //F6
- < if (matriz[N6_N0_ROW][N7_COL] & 0x01) pulsafn(N6_N0_ROW, N7_COL, KS1_F7, 0, 0, 0, kbalt, 5); //F7
- < if (matriz[N6_N0_ROW][N8_COL] & 0x01) pulsafn(N6_N0_ROW, N8_COL, KS1_F8, 0, 0, 0, kbalt, 5); //F8
- < if (matriz[N6_N0_ROW][N9_COL] & 0x01) pulsafn(N6_N0_ROW, N9_COL, KS1_F9, 0, 0, 0, kbalt, 5); //F9
- < if (matriz[N6_N0_ROW][N0_COL] & 0x01) pulsafn(N6_N0_ROW, N0_COL, KS1_F10, 0, 0, 0, kbalt, 5); //F10
- < if (matriz[Q_T_ROW][Q_COL] & 0x01) pulsafn(Q_T_ROW, Q_COL, KS1_F11, 0, 0, 0, kbalt, 5); //F11
- < if (matriz[Q_T_ROW][W_COL] & 0x01) pulsafn(Q_T_ROW, W_COL, KS1_F12, 0, 0, 0, kbalt, 5); //F12
- < if (matriz[B_M_ROW][B_COL] & 0x01) pulsafn(B_M_ROW, B_COL, KS1_BACKSP, 0, 0, 1, 1, 5); //ZXUNO Hard Reset (Control+Alt+Backsp)
- < if (matriz[B_M_ROW][N_COL] & 0x01) pulsafn(B_M_ROW, N_COL, KS1_DELETE, 0, 0, 1, 1, 5); //ZXUNO Soft Reset (Control+Alt+Supr)
- < }
- <
- < }
- < else fnpulsando = 0; //Fin de escaneo de combos
- < }
- <
- < //Control de teclado
- < if (!fnpulsada) //Si no se ha pulsado ningun tecla de funcion
- < {
- < if (tzxduino_value)
- < {
- <
- < if (!tzxduino_snooze)
- < {
- <
- < if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N6_N0_ROW][N7_COL] & 0x01)) // UP
- < {
- < TZXDUINO_pushbutton(TZX_UP_PIN, TZX_UP_BCD);
- < matriz[N6_N0_ROW][N7_COL] = 0;
- < tzxduino_stop = 0;
- < }
- <
- < if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N6_N0_ROW][N6_COL] & 0x01)) // DOWN
- < {
- < TZXDUINO_pushbutton(TZX_DOWN_PIN, TZX_DOWN_BCD);
- < matriz[N6_N0_ROW][N6_COL] = 0;
- < tzxduino_stop = 0;
- < }
- <
- < if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N1_N5_ROW][N5_COL] & 0x01)) // ROOT (LEFT)
- < {
- < TZXDUINO_pushbutton(TZX_ROOT_PIN, TZX_ROOT_BCD);
- < matriz[N1_N5_ROW][N5_COL] = 0;
- < tzxduino_stop = 0;
- < }
- <
- < if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N6_N0_ROW][N8_COL] & 0x01)) // STOP - OFF (RIGHT)
- < {
- < if (tzxduino_stop)
- < {
- < tzxduino_stop = 0;
- < tzxduino_value = 0;
- < tzxduino_snooze = 0;
- < }
- < else
- < {
- < TZXDUINO_pushbutton(TZX_STOP_PIN, TZX_STOP_BCD);
- < tzxduino_stop = 1;
- < }
- < matriz[N6_N0_ROW][N8_COL] = 0;
- < }
- <
- <
- < if (matriz[ENTER_ROW][ENTER_COL] & 0x01) // PLAY/PAUSE (ENTER)
- < {
- < TZXDUINO_pushbutton(TZX_PLAY_PIN, TZX_PLAY_BCD);
- < matriz[ENTER_ROW][ENTER_COL] = 0;
- < tzxduino_stop = 0;
- < }
- <
- < if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N1_N5_ROW][N1_COL] & 0x01)) // EDIT (CONTROL CURSORES/ENTER TECLADO)
- < {
- < matriz[N1_N5_ROW][N1_COL] = 0;
- < tzxduino_snooze = 1;
- < }
- <
- < }
- < else
- < {
- < if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N1_N5_ROW][N1_COL] & 0x01)) // EDIT (CONTROL CURSORES/ENTER TZXDUINO)
- < {
- < matriz[N1_N5_ROW][N1_COL] = 0;
- < tzxduino_snooze = 0;
- < }
- < }
- <
- <
- < }
- <
- < if (!modo) // Si el modo es 0 (ZX-Spectrum)
- < {
- < //Enviar la pulsacion de Caps Shift y/o Symbol Shift si estamos en modo ZX)
- < if ((matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) && !(matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x02)) { sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] |= 0x02; espera++; } // Probar a suprimir matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] |= 0x02; (Ya se deja mantenido durante el scan)
- < if ((matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01) && !(matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x02)) { sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] |= 0x02; espera++; } // Probar a suprimir matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] |= 0x02; (Ya se deja mantenido durante el scan)
- < if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x04) { sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0; espera++; }
- < if (matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x04) { sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0; espera++; }
- < if (espera) { _delay_us(5); espera = 0; }
- < //Enviar el resto de Teclas Pulsadas, nunca entrara por shift o symbol de matrix[r][c] ya que se cambia el valor en el bloque anterior a 3 o 0
- < for (r = 0; r<ROWS8; r++) for (c = 0; c<COLS5; c++)
- < {
- < if ((matriz[r][c] & 0x01) && !(matriz[r][c] & 0x02)) sendPS2(mapZX[r][c]);
- < if (matriz[r][c] & 0x04) { sendPS2(0xF0); sendPS2(mapZX[r][c]); matriz[r][c] = 0; }
- < }
- < }
- < else // Manejo de los otros modos de Keymap
- < {
- < if (!antighosting && cs_counter == 0 && ss_counter == 0)
- < {
- < if (((matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) && !(matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x02)) ||
- < ((matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01) && !(matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x02)))
- < {
- < for (r = 0; r < ROWS8; r++) for (c = 0; c < COLS5; c++)
- < {
- < // Ignoramos teclas capssymbol y symbolshift en el recorrido
- < if (r == CAPS_SHIFT_ROW && c == CAPS_SHIFT_COL) continue;
- < if (r == SYMBOL_SHIFT_ROW && c == SYMBOL_SHIFT_COL) continue;
- < if (matriz[r][c] & 0x01) { antighosting = 1; break; }
- < }
- <
- < }
- < }
- < else
- < {
- < if (!(matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) && !(matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01))
- < antighosting = 0;
- < }
- <
- < for (r = 0; r<ROWS8; r++) for (c = 0; c<COLS5; c++)
- < {
- < // Ignoramos teclas capssymbol y symbolshift en el recorrido
- < if (r == CAPS_SHIFT_ROW && c == CAPS_SHIFT_COL) continue;
- < if (r == SYMBOL_SHIFT_ROW && c == SYMBOL_SHIFT_COL) continue;
- <
- < if ((matriz[r][c] & 0x01) && !(matriz[r][c] & 0x02)) // Gestion de pulsado
- < {
- < if (!antighosting)
- < {
- < if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) matriz[r][c] |= 0x08; // Se marca capsshift
- < if (matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01) matriz[r][c] |= 0x10; // Se marca symbolshift
- < }
- <
- < if ((matriz[r][c] & 0x08) && !(matriz[r][c] & 0x10)) pulsateclaconshift(r, c, codeset == 2 ? mapEXT[r][c] : mapEXT1[r][c]); // Pulsar con capsshift
- < if ((matriz[r][c] & 0x10) && !(matriz[r][c] & 0x08)) pulsateclaconsymbol(r, c, modo); // Pulsar con symbolshift
- < if (!(matriz[r][c] & 0x08) && !(matriz[r][c] & 0x10))
- < {
- <
- < if (opqa_cursors)
- < {
- < typematicfirst = 0;
- < typematic_codeaux = 0;
- <
- < if (codeset == 2)
- < {
- < keyaux = mapZX[r][c];
- < keyaux = keyaux == KEY_O ? KEY_LEFT : keyaux;
- < keyaux = keyaux == KEY_P ? KEY_RIGHT : keyaux;
- < keyaux = keyaux == KEY_Q ? KEY_UP : keyaux;
- < keyaux = keyaux == KEY_A ? KEY_DOWN : keyaux;
- < if (keyaux == KEY_LEFT || keyaux == KEY_RIGHT || keyaux == KEY_UP || keyaux == KEY_DOWN) typematic_codeaux = 0xE0; //Es una tecla del codeset2 que necesita E0
- < }
- < if (codeset == 1)
- < {
- < keyaux = mapSET1[r][c];
- < keyaux = keyaux == KS1_O ? KS1_LEFT : keyaux;
- < keyaux = keyaux == KS1_P ? KS1_RIGHT : keyaux;
- < keyaux = keyaux == KS1_Q ? KS1_UP : keyaux;
- < keyaux = keyaux == KS1_A ? KS1_DOWN : keyaux;
- < if (keyaux == KS1_LEFT || keyaux == KS1_RIGHT || keyaux == KS1_UP || keyaux == KS1_DOWN) typematic_codeaux = 0xE0; //Es una tecla del codeset1 que necesita E0
- < }
- <
- < typematic_code = keyaux;
- < if (typematic_codeaux > 0) sendPS2(0xE0);
- < sendPS2(typematic_code);
- < }
- < else
- < {
- < typematicfirst = 0;
- < if (codeset == 2) typematic_code = mapZX[r][c];
- < else typematic_code = mapSET1[r][c]; // Pulsar sin modificadores
- <
- < typematic_codeaux = 0;
- < sendPS2(typematic_code);
- < }
- < }
- < // Si estan pulsados capsshift y symbolshift, no hacemos nada
- <
- < matriz[r][c] |= 0x02; // Se marca mantenida
- < }
- <
- < if ((matriz[r][c] & 0x04)) // Gestion de liberado
- < {
- < if ((matriz[r][c] & 0x08) && !(matriz[r][c] & 0x10)) sueltateclaconshift(r, c, codeset == 2 ? mapEXT[r][c] : mapEXT1[r][c]); // Liberar con capsshift
- < if ((matriz[r][c] & 0x10) && !(matriz[r][c] & 0x08)) sueltateclaconsymbol(r, c, modo); // Liberar con symbolshift
- < if (!(matriz[r][c] & 0x08) && !(matriz[r][c] & 0x10))
- < {
- < if (opqa_cursors)
- < {
- < typematic_code = 0;
- <
- < if (codeset == 2)
- < {
- < keyaux = mapZX[r][c];
- < keyaux = keyaux == KEY_O ? KEY_LEFT : keyaux;
- < keyaux = keyaux == KEY_P ? KEY_RIGHT : keyaux;
- < keyaux = keyaux == KEY_Q ? KEY_UP : keyaux;
- < keyaux = keyaux == KEY_A ? KEY_DOWN : keyaux;
- <
- < if (keyaux == KEY_LEFT || keyaux == KEY_RIGHT || keyaux == KEY_UP || keyaux == KEY_DOWN) sendPS2(0xE0); //Es una tecla del codeset2 que necesita E0
- < sendPS2(0xF0); sendPS2(keyaux);
- < }
- < if (codeset == 1)
- < {
- < keyaux = mapSET1[r][c];
- < keyaux = keyaux == KS1_O ? KS1_LEFT : keyaux;
- < keyaux = keyaux == KS1_P ? KS1_RIGHT : keyaux;
- < keyaux = keyaux == KS1_Q ? KS1_UP : keyaux;
- < keyaux = keyaux == KS1_A ? KS1_DOWN : keyaux;
- < if (keyaux == KS1_LEFT || keyaux == KS1_RIGHT || keyaux == KS1_UP || keyaux == KS1_DOWN) sendPS2(0xE0); //Es una tecla del codeset1 que necesita E0
- < sendPS2(keyaux + KS1_RELEASE);
- < }
- < }
- < else
- < {
- < if (codeset == 2) { sendPS2(0xF0); sendPS2(mapZX[r][c]); typematic_code = typematic_code == mapZX[r][c] ? 0 : typematic_code; }
- < else { sendPS2(mapSET1[r][c] + KS1_RELEASE); typematic_code = typematic_code == mapSET1[r][c] ? 0 : typematic_code; } // Liberar sin modificadores
- < }
- < }
- < matriz[r][c] = 0; // Fin de gestion de la tecla
- ---
- > if (r > 7 && c > 4) // suelta extra +2A/+3
- > {
- > traduceextra2a(r, c, -1);
- > matriz[r][c] = 0;
- > }
- > #endif
- > }
- 2062,2063c2149,2496
- < }
- < }
- ---
- > }//Fin de Escaneo de las Columnas para el Row/Fila indicado
- > //desact. row/fila
- > pinSet(pinsR[r], bcdR[r], _IN);
- > } //fin escaneo de Rows/Filas de la matriz del teclado
- >
- > if (soltarteclas)
- > {
- > soltarteclas = 0;
- > for (r = 0; r<ROWS8; r++) for (c = 0; c<COLS5; c++) if (matriz[r][c] & 0x01) soltarteclas = 1;
- > goto rescan;
- > }
- >
- > if (funcion || cambiomodo)
- > {
- >
- > if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x04) { matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0; if (!modo) { sendPS2_aux(0xF0, 0); sendPS2_aux(CAPS_SHIFT, 0); } }
- > if (matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x04) { matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0; if (!modo) { sendPS2_aux(0xF0, 0); sendPS2_aux(SYMBOL_SHIFT, 0); } }
- >
- > for (r = 0; r < ROWS8; r++) for (c = 0; c < COLS5; c++)
- > {
- > if (funcion)
- > {
- > if (matriz[r][c] & 0x01)
- > {
- > ejecutarfuncion(mapZX[r][c]);
- > break;
- > }
- > }
- > if (cambiomodo)
- > {
- > if (matriz[r][c] & 0x01) modo = cambiarmodo(((KBMODE)(mapMODO[r][c])));
- > }
- > }
- >
- > fnpulsada = 1; //Si no se pulsa ninguna tecla sigue en bucle hasta que se pulse
- > }
- >
- > //Comprobacion de Teclas especiales al tener pulsado Caps Shift y Symbol Shift
- > if (!fnpulsada && (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) && (matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01))
- > {
- > if (!fnpulsando)
- > {//row, col, key, key_E0, shift, ctrl, alt, museg
- >
- > if (matriz[A_G_ROW][F_COL] & 0x01)
- > {
- > funcion = 1; fnpulsada = 1; soltarteclas = 1;
- > _delay_ms(250);
- > }
- >
- > if ((matriz[Z_V_ROW][Z_COL] & 0x01) && (modo || fkbmode))
- > {
- > kbcontrol = !kbcontrol ? 1 : kbcontrol;
- > pulsa_y_suelta_teclas_modificadoras(1, 0, 0, 0, 0);
- > espera_a_soltar_tecla(Z_V_ROW, Z_COL);
- >
- > }
- >
- > if ((matriz[Z_V_ROW][C_COL] & 0x01) && (modo || fkbmode))
- > {
- > kbalt = !kbalt ? 1 : kbalt;
- > pulsa_y_suelta_teclas_modificadoras(0, 1, 0, 0, 0);
- > espera_a_soltar_tecla(Z_V_ROW, C_COL);
- >
- > }
- > if ((matriz[A_G_ROW][A_COL] & 0x01) && (modo || fkbmode))
- > {
- > kbshift = !kbshift ? 1 : kbshift;
- > pulsa_y_suelta_teclas_modificadoras(0, 0, 1, 0, 0);
- > espera_a_soltar_tecla(A_G_ROW, A_COL);
- >
- > }
- >
- > if ((matriz[Z_V_ROW][X_COL] & 0x01) && (modo || fkbmode))
- > {
- > kblwin = !kblwin ? 1 : kblwin;
- > pulsa_y_suelta_teclas_modificadoras(0, 0, 0, 0, 1);
- > espera_a_soltar_tecla(Z_V_ROW, X_COL);
- >
- > }
- >
- > if ((matriz[B_M_ROW][M_COL] & 0x01) && (modo || fkbmode))
- > {
- > kbaltgr = !kbaltgr ? 1 : kbaltgr;
- > pulsa_y_suelta_teclas_modificadoras(0, 0, 0, 1, 0);
- > espera_a_soltar_tecla(B_M_ROW, M_COL);
- > }
- >
- > // F1 a F12
- > if ((matriz[N1_N5_ROW][N1_COL] & 0x01) && (modo || fkbmode)) pulsafn(N1_N5_ROW, N1_COL, codeset == 1 ? KS1_F1 : KEY_F1, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F1
- > if ((matriz[N1_N5_ROW][N2_COL] & 0x01) && (modo || fkbmode)) pulsafn(N1_N5_ROW, N2_COL, codeset == 1 ? KS1_F2 : KEY_F2, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F2
- > if ((matriz[N1_N5_ROW][N3_COL] & 0x01) && (modo || fkbmode)) pulsafn(N1_N5_ROW, N3_COL, codeset == 1 ? KS1_F3 : KEY_F3, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F3
- > if ((matriz[N1_N5_ROW][N4_COL] & 0x01) && (modo || fkbmode)) pulsafn(N1_N5_ROW, N4_COL, codeset == 1 ? KS1_F4 : KEY_F4, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F4
- > if ((matriz[N1_N5_ROW][N5_COL] & 0x01) && (modo || fkbmode)) pulsafn(N1_N5_ROW, N5_COL, codeset == 1 ? KS1_F5 : KEY_F5, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F5
- > if ((matriz[N6_N0_ROW][N6_COL] & 0x01) && (modo || fkbmode)) pulsafn(N6_N0_ROW, N6_COL, codeset == 1 ? KS1_F6 : KEY_F6, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F6
- > if ((matriz[N6_N0_ROW][N7_COL] & 0x01) && (modo || fkbmode)) pulsafn(N6_N0_ROW, N7_COL, codeset == 1 ? KS1_F7 : KEY_F7, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F7
- > if ((matriz[N6_N0_ROW][N8_COL] & 0x01) && (modo || fkbmode)) pulsafn(N6_N0_ROW, N8_COL, codeset == 1 ? KS1_F8 : KEY_F8, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F8
- > if ((matriz[N6_N0_ROW][N9_COL] & 0x01) && (modo || fkbmode)) pulsafn(N6_N0_ROW, N9_COL, codeset == 1 ? KS1_F9 : KEY_F9, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F9
- > if ((matriz[N6_N0_ROW][N0_COL] & 0x01) && (modo || fkbmode)) pulsafn(N6_N0_ROW, N0_COL, codeset == 1 ? KS1_F10 : KEY_F10, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F10
- > if ((matriz[Q_T_ROW][Q_COL] & 0x01) && (modo || fkbmode)) pulsafn(Q_T_ROW, Q_COL, codeset == 1 ? KS1_F11 : KEY_F11, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F11
- > if ((matriz[Q_T_ROW][W_COL] & 0x01) && (modo || fkbmode)) pulsafn(Q_T_ROW, W_COL, codeset == 1 ? KS1_F12 : KEY_F12, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); //F12
- > //
- >
- > // Teclas especiales
- > if ((matriz[A_G_ROW][S_COL] & 0x01) && (modo || fkbmode)) pulsafn(A_G_ROW, S_COL, codeset == 1 ? KS1_LESS : KEY_LESS, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (Z) KEY_LESS
- > if ((matriz[Y_P_ROW][I_COL] & 0x01) && (modo || fkbmode)) pulsafn(Y_P_ROW, I_COL, codeset == 1 ? KS1_BLOQNUM : KEY_BLOQNUM, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (I) Bloq Num
- > if ((matriz[Y_P_ROW][O_COL] & 0x01) && (modo || fkbmode)) pulsafn(Y_P_ROW, O_COL, codeset == 1 ? KS1_ACORCHE : KEY_ACORCHE, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (O) KEY_ACORCHE
- > if ((matriz[Y_P_ROW][P_COL] & 0x01) && (modo || fkbmode)) pulsafn(Y_P_ROW, P_COL, codeset == 1 ? KS1_CCORCHE : KEY_CCORCHE, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (P) KEY_CCORCHE
- > if ((matriz[Q_T_ROW][E_COL] & 0x01) && (modo || fkbmode)) pulsafn(Q_T_ROW, E_COL, codeset == 1 ? KS1PAD_ASTERISK : KEYPAD_ASTERISK, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (E) Num *
- > if ((matriz[Q_T_ROW][R_COL] & 0x01) && (modo || fkbmode)) pulsafn(Q_T_ROW, R_COL, codeset == 1 ? KS1PAD_MENOS : KEYPAD_MENOS, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (R) Num -
- > if ((matriz[A_G_ROW][D_COL] & 0x01) && (modo || fkbmode)) pulsafn(A_G_ROW, D_COL, codeset == 1 ? KS1PAD_MAS : KEYPAD_MAS, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (D) Num +
- > if ((matriz[Q_T_ROW][T_COL] & 0x01) && (modo || fkbmode)) { pulsaimprpant(Q_T_ROW, T_COL); is_fn(Q_T_ROW, T_COL); } // (T) Impr Pant
- > if ((matriz[Y_P_ROW][Y_COL] & 0x01) && (modo || fkbmode)) pulsafn(Y_P_ROW, Y_COL, codeset == 1 ? KS1_SCRLCK : KEY_SCRLCK, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (Y) Bloq Despl
- > if ((matriz[Y_P_ROW][U_COL] & 0x01) && (modo || fkbmode)) { pulsapausa(Y_P_ROW, U_COL); is_fn(Y_P_ROW, U_COL); } // (U) Pausa
- > if ((matriz[A_G_ROW][G_COL] & 0x01) && (modo || fkbmode)) pulsafn(A_G_ROW, G_COL, codeset == 1 ? KS1_INS : KEY_INS, 1, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (G) Insert
- > if ((matriz[H_L_ROW][H_COL] & 0x01) && (modo || fkbmode)) pulsafn(H_L_ROW, H_COL, codeset == 1 ? KS1_HOME : KEY_HOME, 1, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (H) Home
- > if ((matriz[H_L_ROW][J_COL] & 0x01) && (modo || fkbmode)) pulsafn(H_L_ROW, J_COL, codeset == 1 ? KS1_PGUP : KEY_PGUP, 1, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (J) Re Pag
- > if ((matriz[Z_V_ROW][V_COL] & 0x01) && (modo || fkbmode)) pulsafn(Z_V_ROW, V_COL, codeset == 1 ? KS1_DELETE : KEY_DELETE, 1, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (V) Supr
- > if ((matriz[B_M_ROW][B_COL] & 0x01) && (modo || fkbmode)) pulsafn(B_M_ROW, B_COL, codeset == 1 ? KS1_END : KEY_END, 1, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (B) End
- > if ((matriz[B_M_ROW][N_COL] & 0x01) && (modo || fkbmode)) pulsafn(B_M_ROW, N_COL, codeset == 1 ? KS1_PGDW : KEY_PGDW, 1, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (N) Av Pag
- > if ((matriz[H_L_ROW][K_COL] & 0x01) && (modo || fkbmode)) pulsafn(H_L_ROW, K_COL, codeset == 1 ? KS1_PTOCOMA : KEY_PTOCOMA, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (K) KEY_PTOCOMA
- > if ((matriz[H_L_ROW][L_COL] & 0x01) && (modo || fkbmode)) pulsafn(H_L_ROW, L_COL, codeset == 1 ? KS1_COMILLA : KEY_COMILLA, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (L) KEY_COMILLA
- > if ((matriz[ENTER_ROW][ENTER_COL] & 0x01) && (modo || fkbmode)) pulsafn(ENTER_ROW, ENTER_COL, codeset == 1 ? KS1_BKSLASH : KEY_BKSLASH, 0, kbshift, kbcontrol, kbalt, kbaltgr, kblwin); // (ENTER) KEY_BKSLASH
- > //
- >
- > }
- > }
- > else fnpulsando = 0; //Fin de escaneo de combos
- >
- > //Control de teclado
- > if (!fnpulsada) //Si no se ha pulsado ningun tecla de funcion y el modo es 0 (ZX-Spectrum)
- > {
- > if (tzxduino_value)
- > {
- >
- > if (!tzxduino_snooze)
- > {
- >
- > if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N6_N0_ROW][N7_COL] & 0x01)) // UP
- > {
- > TZXDUINO_pushbutton(TZX_UP_PIN, TZX_UP_BCD);
- > matriz[N6_N0_ROW][N7_COL] = 0;
- > tzxduino_stop = 0;
- > }
- >
- > if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N6_N0_ROW][N6_COL] & 0x01)) // DOWN
- > {
- > TZXDUINO_pushbutton(TZX_DOWN_PIN, TZX_DOWN_BCD);
- > matriz[N6_N0_ROW][N6_COL] = 0;
- > tzxduino_stop = 0;
- > }
- >
- > if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N1_N5_ROW][N5_COL] & 0x01)) // ROOT (LEFT)
- > {
- > TZXDUINO_pushbutton(TZX_ROOT_PIN, TZX_ROOT_BCD);
- > matriz[N1_N5_ROW][N5_COL] = 0;
- > tzxduino_stop = 0;
- > }
- >
- > if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N6_N0_ROW][N8_COL] & 0x01)) // STOP - OFF (RIGHT)
- > {
- > if (tzxduino_stop)
- > {
- > tzxduino_stop = 0;
- > tzxduino_value = 0;
- > tzxduino_snooze = 0;
- > }
- > else
- > {
- > TZXDUINO_pushbutton(TZX_STOP_PIN, TZX_STOP_BCD);
- > tzxduino_stop = 1;
- > }
- > matriz[N6_N0_ROW][N8_COL] = 0;
- > }
- >
- > if (matriz[ENTER_ROW][ENTER_COL] & 0x01) // PLAY/PAUSE (ENTER)
- > {
- > TZXDUINO_pushbutton(TZX_PLAY_PIN, TZX_PLAY_BCD);
- > matriz[ENTER_ROW][ENTER_COL] = 0;
- > tzxduino_stop = 0;
- > }
- >
- > if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N1_N5_ROW][N1_COL] & 0x01)) // EDIT (CONTROL CURSORES/ENTER TECLADO)
- > {
- > matriz[N1_N5_ROW][N1_COL] = 0;
- > tzxduino_snooze = 1;
- > }
- >
- > }
- > else
- > {
- > if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] > 0 && (matriz[N1_N5_ROW][N1_COL] & 0x01)) // EDIT (CONTROL CURSORES/ENTER TZXDUINO)
- > {
- > matriz[N1_N5_ROW][N1_COL] = 0;
- > tzxduino_snooze = 0;
- > }
- > }
- >
- > }
- >
- > if (!modo && !fkbmode)
- > {
- > //Enviar la pulsacion de Caps Shift y/o Symbol Shift si estamos en modo ZX)
- > if ((matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) && !(matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x02)) { sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] |= 0x02; espera++; } // Probar a suprimir matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] |= 0x02; (Ya se deja mantenido durante el scan)
- > if ((matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01) && !(matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x02)) { sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] |= 0x02; espera++; } // Probar a suprimir matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] |= 0x02; (Ya se deja mantenido durante el scan)
- > if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x04) { sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0; espera++; }
- > if (matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x04) { sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0; espera++; }
- > if (espera) { _delay_us(5); espera = 0; }
- > //Enviar el resto de Teclas Pulsadas, nunca entrara por shift o symbol de matrix[r][c] ya que se cambia el valor en el bloque anterior a 3 o 0
- > for (r = 0; r<ROWS8; r++) for (c = 0; c<COLS5; c++)
- > {
- > if ((matriz[r][c] & 0x01) && !(matriz[r][c] & 0x02)) sendPS2(mapZX[r][c]);
- > if (matriz[r][c] & 0x04) { sendPS2(0xF0); sendPS2(mapZX[r][c]); matriz[r][c] = 0; }
- > }
- > }
- > else // Manejo de los otros modos de Keymap
- > {
- >
- >
- > if (!antighosting && cs_counter == 0 && ss_counter == 0)
- > {
- > if (((matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) && !(matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x02)) ||
- > ((matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01) && !(matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x02)))
- > {
- > for (r = 0; r < ROWS8; r++) for (c = 0; c < COLS5; c++)
- > {
- > // Ignoramos teclas capssymbol y symbolshift en el recorrido
- > if (r == CAPS_SHIFT_ROW && c == CAPS_SHIFT_COL) continue;
- > if (r == SYMBOL_SHIFT_ROW && c == SYMBOL_SHIFT_COL) continue;
- > if (matriz[r][c] & 0x01) { antighosting = 1; break; }
- > }
- >
- > }
- > }
- > else
- > {
- > if (!(matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) && !(matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01))
- > antighosting = 0;
- > }
- >
- > for (r = 0; r<ROWS8; r++) for (c = 0; c<COLS5; c++)
- > {
- > // Ignoramos teclas capssymbol y symbolshift en el recorrido
- > if (r == CAPS_SHIFT_ROW && c == CAPS_SHIFT_COL) continue;
- > if (r == SYMBOL_SHIFT_ROW && c == SYMBOL_SHIFT_COL) continue;
- >
- > if ((matriz[r][c] & 0x01) && !(matriz[r][c] & 0x02)) // Gestion de pulsado
- > {
- > if (!antighosting)
- > {
- > if (matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] & 0x01) matriz[r][c] |= 0x08; // Se marca capsshift
- > if (matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] & 0x01) matriz[r][c] |= 0x10; // Se marca symbolshift
- > }
- >
- > if ((matriz[r][c] & 0x08) && !(matriz[r][c] & 0x10)) pulsateclaconshift(r, c, codeset == 2 ? mapEXT[r][c] : mapEXT1[r][c]); // Pulsar con capsshift
- > if ((matriz[r][c] & 0x10) && !(matriz[r][c] & 0x08)) pulsateclaconsymbol(r, c, modo); // Pulsar con symbolshift
- > if (!(matriz[r][c] & 0x08) && !(matriz[r][c] & 0x10))
- > {
- >
- > if (opqa_cursors || opqa_numbers)
- > {
- > typematicfirst = 0;
- > typematic_codeaux = 0;
- >
- > if (codeset == 2)
- > {
- > keyaux = mapZX[r][c];
- > keyaux = keyaux == KEY_O ? KEY_LEFT : keyaux;
- > keyaux = keyaux == KEY_P ? KEY_RIGHT : keyaux;
- > keyaux = keyaux == KEY_Q ? KEY_UP : keyaux;
- > keyaux = keyaux == KEY_A ? KEY_DOWN : keyaux;
- > if (opqa_cursors_m) keyaux = keyaux == KEY_M ? (opqa_cursors || modo == jup) ? KEY_SPACE : KEYPAD_0 : keyaux == KEY_SPACE ? opqa_cursors ? KEY_M : keyaux : keyaux;
- >
- > if ((keyaux == KEY_LEFT || keyaux == KEY_RIGHT || keyaux == KEY_UP || keyaux == KEY_DOWN) && opqa_cursors) typematic_codeaux = 0xE0; //Es una tecla del codeset2 que necesita E0
- >
- > }
- > if (codeset == 1)
- > {
- > keyaux = mapSET1[r][c];
- > keyaux = keyaux == KS1_O ? KS1_LEFT : keyaux;
- > keyaux = keyaux == KS1_P ? KS1_RIGHT : keyaux;
- > keyaux = keyaux == KS1_Q ? KS1_UP : keyaux;
- > keyaux = keyaux == KS1_A ? KS1_DOWN : keyaux;
- > if (opqa_cursors_m) keyaux = keyaux == KS1_M ? KS1_SPACE : keyaux;
- >
- > if (keyaux == KS1_LEFT || keyaux == KS1_RIGHT || keyaux == KS1_UP || keyaux == KS1_DOWN) typematic_codeaux = 0xE0; //Es una tecla del codeset1 que necesita E0
- > }
- >
- > typematic_code = keyaux;
- > if (typematic_codeaux > 0) sendPS2(0xE0);
- > sendPS2(typematic_code);
- > }
- > else
- > {
- > typematicfirst = 0;
- > if (codeset == 2) typematic_code = mapZX[r][c];
- > else typematic_code = mapSET1[r][c]; // Pulsar sin modificadores
- >
- > typematic_codeaux = 0;
- > sendPS2(typematic_code);
- > }
- > }
- > // Si estan pulsados capsshift y symbolshift, no hacemos nada
- >
- > matriz[r][c] |= 0x02; // Se marca mantenida
- > }
- >
- > if ((matriz[r][c] & 0x04)) // Gestion de liberado
- > {
- > if ((matriz[r][c] & 0x08) && !(matriz[r][c] & 0x10)) sueltateclaconshift(r, c, codeset == 2 ? mapEXT[r][c] : mapEXT1[r][c]); // Liberar con capsshift
- > if ((matriz[r][c] & 0x10) && !(matriz[r][c] & 0x08)) sueltateclaconsymbol(r, c, modo); // Liberar con symbolshift
- > if (!(matriz[r][c] & 0x08) && !(matriz[r][c] & 0x10))
- > {
- > if (opqa_cursors || opqa_numbers)
- > {
- > typematic_code = 0;
- >
- > if (codeset == 2)
- > {
- > keyaux = mapZX[r][c];
- > keyaux = keyaux == KEY_O ? KEY_LEFT : keyaux;
- > keyaux = keyaux == KEY_P ? KEY_RIGHT : keyaux;
- > keyaux = keyaux == KEY_Q ? KEY_UP : keyaux;
- > keyaux = keyaux == KEY_A ? KEY_DOWN : keyaux;
- > if (opqa_cursors_m) keyaux = keyaux == KEY_M ? (opqa_cursors || modo == jup) ? KEY_SPACE : KEYPAD_0 : keyaux == KEY_SPACE ? opqa_cursors ? KEY_M : keyaux : keyaux;
- >
- > if ((keyaux == KEY_LEFT || keyaux == KEY_RIGHT || keyaux == KEY_UP || keyaux == KEY_DOWN) && opqa_cursors) sendPS2(0xE0); //Es una tecla del codeset2 que necesita E0
- > sendPS2(0xF0); sendPS2(keyaux);
- > }
- > if (codeset == 1)
- > {
- > keyaux = mapSET1[r][c];
- > keyaux = keyaux == KS1_O ? KS1_LEFT : keyaux;
- > keyaux = keyaux == KS1_P ? KS1_RIGHT : keyaux;
- > keyaux = keyaux == KS1_Q ? KS1_UP : keyaux;
- > keyaux = keyaux == KS1_A ? KS1_DOWN : keyaux;
- > if (opqa_cursors_m) keyaux = keyaux == KS1_M ? KS1_SPACE : keyaux;
- >
- > if (keyaux == KS1_LEFT || keyaux == KS1_RIGHT || keyaux == KS1_UP || keyaux == KS1_DOWN) sendPS2(0xE0); //Es una tecla del codeset 1 que necesita E0
- > sendPS2(keyaux + KS1_RELEASE);
- > }
- > }
- > else
- > {
- > if (codeset == 2) { sendPS2(0xF0); sendPS2(mapZX[r][c]); typematic_code = typematic_code == mapZX[r][c] ? 0 : typematic_code; }
- > else { sendPS2(mapSET1[r][c] + KS1_RELEASE); typematic_code = typematic_code == mapSET1[r][c] ? 0 : typematic_code; } // Liberar sin modificadores
- > }
- > }
- > matriz[r][c] = 0; // Fin de gestion de la tecla
- 2065,2067c2498,2499
- < }//Fin del If/else manejo de modo ZX u otros Keymaps
- < }//Fin del If del control del teclado.
- < }//FIN de Matrixscan
- ---
- > }
- > }
- 2068a2501,2503
- > }//Fin del If/else manejo de modo ZX u otros Keymaps
- > }//Fin del If del control del teclado.
- > }//FIN de Matrixscan
- 2073c2508
- < CPU_PRESCALE(CPU_16MHz);
- ---
- > CPU_PRESCALE(CPU_16MHz);
- 2075,2123c2510,2562
- < POWER_CONFIG;
- < POWER_OFF;
- < RESET_OFF;
- < KBEXT_BIDIR_CONFIG;
- < KBEXT_BIDIR_OFF;
- < LED_CONFIG;
- < LED_ON;
- <
- < ps2Init();
- < matrixInit();
- < Joy2PS2Init();
- < TZXDUINOInit();
- <
- < p1selectnesclon = 0;
- < p1startnesclon = 0;
- <
- < // Configuracion del switch SYSTEM
- < pinSet(SYSTEM_PIN, SYSTEM_BCD, _IN);
- < pinPut(SYSTEM_PIN, SYSTEM_BCD, HI);
- < //
- <
- < const uint8_t ZXUNO_SIGNATURE[] = { 'S','U','G','A','R' };
- < uint8_t checksignature[5];
- < uint8_t issigned = 1;
- <
- < eeprom_read_block((void*)&checksignature, (const void*)0, 5);
- <
- < for (int n = 0; n < 5; n++) if (checksignature[n] != ZXUNO_SIGNATURE[n]) issigned = 0;
- < if (issigned)
- < {
- < modo = cambiarmodo2(((KBMODE)eeprom_read_byte((uint8_t*)5)));
- < fkbmode = eeprom_read_byte((uint8_t*)6);
- < fkbmode = fkbmode > 2 ? 0 : fkbmode;
- <
- < del_break_value = eeprom_read_byte((uint8_t*)7);
- < del_break_value = del_break_value > 1 ? 0 : del_break_value;
- <
- < cursors_kbpc_value = eeprom_read_byte((uint8_t*)8);
- < cursors_kbpc_value = cursors_kbpc_value > 1 ? 0 : cursors_kbpc_value;
- <
- < }
- < else
- < {
- < eeprom_write_block((const void*)&ZXUNO_SIGNATURE, (void*)0, 5); // Guardamos la firma
- < eeprom_write_byte((uint8_t*)5, (uint8_t)0); // Guardamos modo ZX por defecto
- < eeprom_write_byte((uint8_t*)6, (uint8_t)1); // Guardamos ZXFULLCOMBOS por defecto
- < eeprom_write_byte((uint8_t*)7, (uint8_t)0); // Guardamos del_break por defecto
- < eeprom_write_byte((uint8_t*)8, (uint8_t)0); // Guardamos cursors_kbpc por defecto
- < }
- ---
- > POWER_CONFIG;
- > POWER_OFF;
- > RESET_OFF;
- > KBEXT_BIDIR_CONFIG;
- > KBEXT_BIDIR_OFF;
- > LED_CONFIG;
- > LED_ON;
- >
- > ps2Init();
- > matrixInit();
- > Joy2PS2Init();
- > TZXDUINOInit();
- >
- > p1selectnesclon = 0;
- > p1startnesclon = 0;
- >
- > // Configuracion del switch SYSTEM
- > pinSet(SYSTEM_PIN, SYSTEM_BCD, _IN);
- > pinPut(SYSTEM_PIN, SYSTEM_BCD, HI);
- > //
- >
- > const uint8_t ZXUNO_SIGNATURE[] = { 'S','U','G','A','R' };
- > uint8_t checksignature[5];
- > uint8_t issigned = 1;
- >
- > eeprom_read_block((void*)&checksignature, (const void*)0, 5);
- >
- > for (int n = 0; n < 5; n++) if (checksignature[n] != ZXUNO_SIGNATURE[n]) issigned = 0;
- > if (issigned)
- > {
- > modo = cambiarmodo2(((KBMODE)eeprom_read_byte((uint8_t*)5)));
- > fkbmode = eeprom_read_byte((uint8_t*)6);
- > fkbmode = fkbmode > 1 ? 0 : fkbmode;
- >
- > del_break_value = eeprom_read_byte((uint8_t*)7);
- > del_break_value = del_break_value > 1 ? 0 : del_break_value;
- >
- > cursors_kbpc_value = eeprom_read_byte((uint8_t*)8);
- > cursors_kbpc_value = cursors_kbpc_value > 1 ? 0 : cursors_kbpc_value;
- >
- > famicom = eeprom_read_byte((uint8_t*)9);
- > famicom = famicom > 1 ? 0 : famicom;
- >
- > }
- > else
- > {
- > eeprom_write_block((const void*)&ZXUNO_SIGNATURE, (void*)0, 5); // Guardamos la firma
- > eeprom_write_byte((uint8_t*)5, (uint8_t)0); // Guardamos modo ZX por defecto
- > eeprom_write_byte((uint8_t*)6, (uint8_t)1); // Guardamos ZXFULLCOMBOS por defecto
- > eeprom_write_byte((uint8_t*)7, (uint8_t)0); // Guardamos del_break por defecto
- > eeprom_write_byte((uint8_t*)8, (uint8_t)0); // Guardamos cursors_kbpc por defecto
- > eeprom_write_byte((uint8_t*)9, (uint8_t)0); // Guardamos famicom por defecto
- > }
- 2127,2204c2566,2978
- < {
- < if (ps2Stat() && (modo == pc || modo == pcxt || modo == kbext) && (kbescucha || timeout_escucha > 0)) // Lineas CLK y/o DATA a 0 y escucha activa
- < { // Solo hay escucha activa en modo PC, hasta su inicializacion.
- < // Una vez completada la inicializacion de teclado, no es necesario mantener activa la escucha de comandos excepto si se hace eco
- <
- <
- < while (checkState(1000)) // tramos de 5 us (5000 us)
- < {
- < hostdataAnt = hostdata;
- < if (getPS2(&hostdata) == 0)
- < {
- < timeout_escucha = 100000; // Dejamos tiempo para que se complete la inicializacion
- < if (hostdata == 0xEE)
- < {
- < sendPS2(0xEE); // Echo
- < kbescucha = 1; // Si se hace eco, mantenemos la escucha de comandos (necesario en determinados adaptadores PS/2 -> USB)
- < }
- < else
- < {
- < sendPS2(0xFA); // Ack
- < }
- < switch (hostdata)
- < {
- < case 0x00: // second bit of 0xED or 0xF3 (or get scancode set)
- < if (hostdataAnt == 0xF0)
- < {
- < sendPS2(codeset);
- < }
- < break;
- < case 0x01: // set scancode 1
- < if (hostdataAnt == 0xF0)
- < {
- < codeset = 1;
- < }
- < break;
- < case 0x02: // set scancode 2
- < if (hostdataAnt == 0xF0)
- < {
- < codeset = 2;
- < }
- < break;
- < case 0xED: // set/reset LEDs
- < break;
- < case 0xF2: // ID
- < sendPS2(0xAB);
- < sendPS2(0x83);
- < break;
- < case 0xF0: // get/set scancode set
- < break;
- < case 0xF3: // set/reset typematic delay
- < break;
- < case 0xF4: // keyboard is enabled, break loop
- < break;
- < case 0xF5: // keyboard is disabled, break loop
- < break;
- < case 0xFF:
- < // tell host we are ready to connect
- < sendPS2(0xAA);
- < kbescucha = 0; // En el inicio iniciamos la cuenta atras de timeout
- < break;
- < default:
- < break;
- < } //Fin del Swich
- < } //Fin del IF de si detecta dato
- < } //Fin del while que chequea el estado
- < }
- < else
- < {
- < if (timeout_escucha > 0) timeout_escucha--;
- < if ((modo == pc || modo == pcxt || modo == kbext) && typematic_code != 0 && (typematicfirst++ > 1000 || codeset == 2) && typematic++ > 150) // Funcion tipematica simulada para PC
- < {
- < if (typematic_codeaux != 0) sendPS2(typematic_codeaux);
- < sendPS2(typematic_code); typematic = 0;
- < }
- < //No llegan datos del Host, enviamos teclado.
- < matrixScan();
- < joy2ps2Scan();
- < //
- ---
- > {
- > if (ps2Stat() && (modo == pc || modo == pcxt || modo == kbext) && (kbescucha || timeout_escucha > 0)) // Lineas CLK y/o DATA a 0 y escucha activa
- > { // Solo hay escucha activa en modo PC, hasta su inicializacion.
- > // Una vez completada la inicializacion de teclado, no es necesario mantener activa la escucha de comandos excepto si se hace eco
- >
- > while (checkState(1000)) // tramos de 5 us (5000 us)
- > {
- > hostdataAnt = hostdata;
- > if (getPS2(&hostdata) == 0)
- > {
- > timeout_escucha = 100000; // Dejamos tiempo para que se complete la inicializacion
- > if (hostdata == 0xEE)
- > {
- > sendPS2(0xEE); // Echo
- > kbescucha = 1; // Si se hace eco, mantenemos la escucha de comandos (necesario en determinados adaptadores PS/2 -> USB)
- > }
- > else
- > {
- > sendPS2(0xFA); // Ack
- > }
- > switch (hostdata)
- > {
- > case 0x00: // second bit of 0xED or 0xF3 (or get scancode set)
- > if (hostdataAnt == 0xF0)
- > {
- > sendPS2(codeset);
- > }
- > break;
- > case 0x01: // set scancode 1
- > if (hostdataAnt == 0xF0)
- > {
- > codeset = 1;
- > }
- > break;
- > case 0x02: // set scancode 2
- > if (hostdataAnt == 0xF0)
- > {
- > codeset = 2;
- > }
- > break;
- > case 0xED: // set/reset LEDs
- > break;
- > case 0xF2: // ID
- > sendPS2(0xAB);
- > sendPS2(0x83);
- > break;
- > case 0xF0: // get/set scancode set
- > break;
- > case 0xF3: // set/reset typematic delay
- > break;
- > case 0xF4: // keyboard is enabled, break loop
- > break;
- > case 0xF5: // keyboard is disabled, break loop
- > break;
- > case 0xFF:
- > // tell host we are ready to connect
- > sendPS2(0xAA);
- > kbescucha = 0; // En el inicio iniciamos la cuenta atras de timeout
- > break;
- > default:
- > break;
- > } //Fin del Swich
- > } //Fin del IF de si detecta dato
- > } //Fin del while que chequea el estado
- > }
- > else
- > {
- > if (timeout_escucha > 0) timeout_escucha--;
- > if ((modo == pc || modo == pcxt || modo == kbext) && typematic_code != 0 && (typematicfirst++ > 1000 || codeset == 2) && typematic++ > 150) // Funcion tipematica simulada para PC
- > {
- > if (typematic_codeaux != 0) sendPS2(typematic_codeaux);
- > sendPS2(typematic_code); typematic = 0;
- > }
- > //No llegan datos del Host, enviamos teclado.
- > matrixScan();
- > joy2ps2Scan();
- > //
- >
- > }
- > }
- >
- > void cambia_tzxduino()
- > {
- > int n;
- > char pausa = 50;
- > opqa_cursors = 0;
- >
- > tzxduino_value = tzxduino_value ? 0 : 1;
- >
- > if (tzxduino_value) tzxduino_stop = 0;
- >
- > if (!modo)
- > {
- > sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- > sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- > }
- >
- > if (codeset == 2)
- > {
- > _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- > _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- >
- > if (tzxduino_value)
- > {
- > for (n = 0; n < 3; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(enable[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(enable[n]);
- > _delay_ms(pausa);
- > }
- > }
- > else
- > {
- > for (n = 0; n < 4; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(disable[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(disable[n]);
- > _delay_ms(pausa);
- > }
- > }
- >
- > for (n = 0; n < 8; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(tzxduino[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(tzxduino[n]);
- > _delay_ms(pausa);
- > }
- >
- > }
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- >
- > void cambia_joy2ps2()
- > {
- > int n;
- > char pausa = 50;
- > famicom = !famicom;
- >
- > if (!modo)
- > {
- > sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- > sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- > }
- >
- > if (codeset == 2)
- > {
- > _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- > _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- >
- > if (famicom)
- > {
- > for (n = 0; n < 11; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(joy_famicom[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(joy_famicom[n]);
- > _delay_ms(pausa);
- > }
- > }
- > else
- > {
- > for (n = 0; n < 12; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(joy_atarismd[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(joy_atarismd[n]);
- > _delay_ms(pausa);
- > }
- > }
- > eeprom_write_byte((uint8_t*)9, (uint8_t)famicom);
- > }
- >
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- >
- > void cambia_del_break()
- > {
- > int n;
- > char pausa = 50;
- >
- > del_break_value = del_break_value ? 0 : 1;
- >
- > if (!modo)
- > {
- > sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- > sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- > }
- >
- > if (codeset == 2)
- > {
- > _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- > _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- >
- > if (del_break_value)
- > {
- > for (n = 0; n < 3; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(enable[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(enable[n]);
- > _delay_ms(pausa);
- > }
- > }
- > else
- > {
- > for (n = 0; n < 4; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(disable[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(disable[n]);
- > _delay_ms(pausa);
- > }
- > }
- >
- > for (n = 0; n < 9; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(del_break[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(del_break[n]);
- > _delay_ms(pausa);
- > }
- > eeprom_write_byte((uint8_t*)7, (uint8_t)del_break_value);
- >
- > }
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- >
- > void cambia_cursors_kbpc()
- > {
- > int n;
- > char pausa = 50;
- >
- > cursors_kbpc_value = cursors_kbpc_value ? 0 : 1;
- >
- > if (!modo)
- > {
- > sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- > sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- > }
- >
- > if (codeset == 2)
- > {
- > _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- > _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- >
- > if (cursors_kbpc_value)
- > {
- > for (n = 0; n < 3; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(enable[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(enable[n]);
- > _delay_ms(pausa);
- > }
- > }
- > else
- > {
- > for (n = 0; n < 4; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(disable[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(disable[n]);
- > _delay_ms(pausa);
- > }
- > }
- >
- > for (n = 0; n < 12; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(cursors_kbpc[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(cursors_kbpc[n]);
- > _delay_ms(pausa);
- > }
- > eeprom_write_byte((uint8_t*)8, (uint8_t)cursors_kbpc_value);
- >
- > }
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- >
- > void cambiafkbmode()
- > {
- > int n;
- > char pausa = 50;
- > if (!modo)
- > {
- > sendPS2(0xF0); sendPS2(CAPS_SHIFT); matriz[CAPS_SHIFT_ROW][CAPS_SHIFT_COL] = 0;
- > sendPS2(0xF0); sendPS2(SYMBOL_SHIFT); matriz[SYMBOL_SHIFT_ROW][SYMBOL_SHIFT_COL] = 0;
- > }
- > if (codeset == 2)
- > {
- > _delay_ms(pausa); sendPS2(KEY_SPACE); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_SPACE);
- > _delay_ms(pausa); sendPS2(KEY_PUNTO); _delay_ms(pausa); sendPS2(0xF0); sendPS2(KEY_PUNTO);
- >
- > switch (fkbmode)
- > {
- > case 0:
- > for (n = 0; n < 15; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(fkbmode0[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(fkbmode0[n]);
- > _delay_ms(pausa);
- > eeprom_write_byte((uint8_t*)6, (uint8_t)fkbmode);
- > }
- > break;
- > case 1:
- > for (n = 0; n < 12; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(fkbmode1[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(fkbmode1[n]);
- > _delay_ms(pausa);
- > eeprom_write_byte((uint8_t*)6, (uint8_t)fkbmode);
- > }
- > break;
- > case 2:
- > for (n = 0; n < 6; n++)
- > {
- > _delay_ms(pausa);
- > sendPS2(fkbmode2[n]);
- > _delay_ms(pausa);
- > sendPS2(0xF0);
- > sendPS2(fkbmode2[n]);
- > _delay_ms(pausa);
- > eeprom_write_byte((uint8_t*)6, (uint8_t)fkbmode);
- > }
- > break;
- > default:
- > break;
- > }
- >
- > }
- > fnpulsada = 1;
- > fnpulsando = 1;
- > }
- >
- > //Inicializar Joy2PS2
- > void Joy2PS2Init()
- > {
- > uint8_t p;
- >
- > for (p = 0; p < 7; p++)
- > {
- > pinSet(pinsJOY2PS2[p], bcdJOY2PS2[p], _IN);
- > pinPut(pinsJOY2PS2[p], bcdJOY2PS2[p], HI);
- > }
- >
- > pinSet(pinsJOY2PS2[5], bcdJOY2PS2[5], _OUT); // Select como salida y en alto.
- >
- > }
- >
- > void TZXDUINO_pushbutton(uint8_t pin, uint8_t bcd)
- > {
- > // Pulsa
- > pinPut(pin, bcd, LO);
- > pinSet(pin, bcd, _OUT);
- >
- > // Delay de 250 ms
- > _delay_ms(250);
- >
- > // Suelta
- > pinSet(pin, bcd, _IN);
- > pinPut(pin, bcd, HI);
- >
- > }
- >
- > //Inicializar TZXDUINO
- > void TZXDUINOInit()
- > {
- > pinSet(TZX_ROOT_PIN, TZX_ROOT_BCD, _IN);
- > pinPut(TZX_ROOT_PIN, TZX_ROOT_BCD, HI);
- >
- > pinSet(TZX_UP_PIN, TZX_UP_BCD, _IN);
- > pinPut(TZX_UP_PIN, TZX_UP_BCD, HI);
- >
- > pinSet(TZX_DOWN_PIN, TZX_DOWN_BCD, _IN);
- > pinPut(TZX_DOWN_PIN, TZX_DOWN_BCD, HI);
- >
- > pinSet(TZX_PLAY_PIN, TZX_PLAY_BCD, _IN);
- > pinPut(TZX_PLAY_PIN, TZX_PLAY_BCD, HI);
- 2206,2207c2980,2982
- < }
- < }
- ---
- > pinSet(TZX_STOP_PIN, TZX_STOP_BCD, _IN);
- > pinPut(TZX_STOP_PIN, TZX_STOP_BCD, HI);
- > }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement