From: geijoenr Date: Sun, 1 Feb 2015 18:10:18 +0000 (+0000) Subject: msx2: add localized keyboard matrices X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=1503cedacec37f78cf10559f5a82edfec3099f50;p=FUZIX.git msx2: add localized keyboard matrices Only JP,UK,ES are available for now. --- diff --git a/Kernel/platform-msx2/devtty.c b/Kernel/platform-msx2/devtty.c index d5f9a517..0787b3b9 100644 --- a/Kernel/platform-msx2/devtty.c +++ b/Kernel/platform-msx2/devtty.c @@ -5,6 +5,7 @@ #include #include #include +#include "msx2.h" #undef DEBUG /* UNdefine to delete debug code sequences */ @@ -21,6 +22,67 @@ struct s_queue ttyinq[NUM_DEV_TTY + 1] = { /* ttyinq[0] is never used */ {tbuf2, tbuf2, tbuf2, TTYSIZ, 0, TTYSIZ / 2} }; +/* + * International key matrix + */ +uint8_t keyboard[11][8] = { + {'0','1','2', '3','4','5','6','7'}, + {'8','9','-','=','\\','[',']',';'}, + { 39, '`', ',', '.','/',' ','a','b'}, + {'c','d','e', 'f','g','h','i','j'}, + {'k','l','m', 'n','o','p','q','r'}, + {'s','t','u', 'v','w','x','y','z'}, + {0/*SHIFT*/,0/*CTRL*/,0/*GRPH*/,0/*CAPS*/,0/*CODE*/ , KEY_F3 , KEY_F2 , KEY_F1 }, + {KEY_F4 , KEY_F5, KEY_ESC , '\t', KEY_STOP ,KEY_BS , 0 , 13}, + {32 , KEY_HOME, KEY_INSERT , KEY_DEL, KEY_LEFT , KEY_UP , KEY_DOWN , KEY_RIGHT}, + {'*','+','/','0','1' ,'2','3','4'}, + {'5','6','7','8','9' ,'-',',','.'} +}; + +uint8_t shiftkeyboard[11][8] = { + {')','!','@', '#','$','%','^','&'}, + {'*','(','_','+','|','{','}',':'}, + {'"','~','<','>','?',' ','A','B'}, + {'C','D','E', 'F','G','H','I','J'}, + {'K','L','M', 'N','O','P','Q','R'}, + {'S','T','U', 'V','W','X','Y','Z'}, + {0/*SHIFT*/,0/*CTRL*/,0/*GRPH*/,0/*CAPS*/,0/*CODE*/, KEY_F3 , KEY_F2 , KEY_F1 }, + {KEY_F4 , KEY_F5, KEY_ESC , '\t', KEY_STOP ,KEY_BS , 0/*SELECT*/ , 13}, + {32 ,KEY_HOME, KEY_INSERT , KEY_DEL, KEY_LEFT , KEY_UP , KEY_DOWN , KEY_RIGHT}, + {'*','+','/','0','1' ,'2','3','4'}, + {'5','6','7','8','9' ,'-',',','.'} +}; + +/* + * Japan + */ +uint8_t keyboard_jp[3][8] = { + {'0','1','2', '3','4','5','6','7'}, + {'8','9','-','^',KEY_YEN,'@','[',';'}, + {':',']', ',', '.','/',' ','a','b'}}; + +uint8_t shiftkeyboard_jp[3][8] = { + {' ','!','"', '#','$','%','&',39}, + {'(',')','=','~','|','`','{','+'}, + {'*','}','<','>','?','_','A','B'}}; +/* + * UK + */ +uint8_t shiftkeyboard_uk[1][8] = { + {39,'`', ',', '.','/',KEY_POUND,'A','B'}}; /* row 2 */ + +/* + * Spanish + */ +uint8_t keyboard_es[2][8] = { + {'8','9','-','=','\\','[',']', 'N'/* Ñ */}, /* row 1 */ + {39, ':', ',', '.','/',' ','a','b'}}; + +uint8_t shiftkeyboard_es[2][8] = { + {'*','(','_','+','|','{','}', 'n' /* ñ */}, /* row 1 */ + {'"',':','<','>','?',' ','A','B'}}; + + /* tty1 is the screen tty2 is the debug port */ /* Output for the system console (kprintf etc) */ @@ -47,7 +109,7 @@ void tty_putc(uint8_t minor, unsigned char c) vtoutput(&c, 1); // return; // } - tty_debug2 = c; + tty_debug2 = c; } int tty_carrier(uint8_t minor) @@ -59,6 +121,22 @@ int tty_carrier(uint8_t minor) void tty_setup(uint8_t minor) { minor; + + /* setup termios to use msx keys */ + ttydata[1].termios.c_cc[VERASE] = KEY_BS; + ttydata[1].termios.c_cc[VSTOP] = KEY_STOP; + ttydata[1].termios.c_cc[VSTART] = KEY_STOP; + + /* keyboard layout selection: default is international */ + if ((infobits & KBDTYPE_MASK) == KBDTYPE_JPN) { + memcpy(keyboard, keyboard_jp, 24); + memcpy(shiftkeyboard, shiftkeyboard_jp, 24); + } else if ((infobits & KBDTYPE_MASK) == KBDTYPE_UK) { + memcpy(&shiftkeyboard[2][0],shiftkeyboard_uk,8); + } else if ((infobits & KBDTYPE_MASK) == KBDTYPE_ES) { + memcpy(&keyboard[1][0], keyboard_es, 16); + memcpy(&shiftkeyboard[1][0], shiftkeyboard_es, 16); + } } @@ -100,37 +178,6 @@ static void keyproc(void) } } -/* TODO: use locale indicator in addr 002c BIOS, for now only - international layout */ - -uint8_t keyboard[11][8] = { - {'0','1','2', '3','4','5','6','7'}, - {'8','9','-','=','\\','[',']',';'}, - { 0, 0, ',', '.','/',' ','a','b'}, - {'c','d','e', 'f','g','h','i','j'}, - {'k','l','m', 'n','o','p','q','r'}, - {'s','t','u', 'v','w','x','y','z'}, - { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, /* f3 f2 f1 code caps graph ctrl shift */ - { 0 , 0, 27 , '\t',24 ,8 , 0 , 13}, /* ret select bs stop tab esc f5 f4 */ - {32 ,12, 0 , 127, 0 , 0 , 0 , 0 }, /* right down up left del ins home space */ - {'*','+','/','0','1' ,'2','3','4'}, /* numeric keyboard */ - {'5','6','7','8','9' ,'-',',','.'} -}; - -uint8_t shiftkeyboard[11][8] = { - {')','!','@', '#','$','%','^','&'}, - {'*','(','_','+','|','{','}',':'}, - {'"','~','<','>','?',' ','A','B'}, - {'C','D','E', 'F','G','H','I','J'}, - {'K','L','M', 'N','O','P','Q','R'}, - {'S','T','U', 'V','W','X','Y','Z'}, - { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, /* f3 f2 f1 code caps graph ctrl shift */ - { 0 , 0, 27 , '\t',24 ,8 , 0 , 13}, /* ret select bs stop tab esc f5 f4 */ - {32 ,12, 0 , 127, 0 , 0 , 0 , 0 }, /* right down up left del ins home space */ - {'*','+','/','0','1' ,'2','3','4'}, /* numeric keyboard */ - {'5','6','7','8','9' ,'-',',','.'} -}; - static uint8_t capslock = 0; static void keydecode(void) @@ -142,7 +189,7 @@ static void keydecode(void) return; } - if (keymap[6] & 1) /* shift */ + if (keymap[6] & 3 ) /* shift or control */ c = shiftkeyboard[keybyte][keybit]; else c = keyboard[keybyte][keybit];