From b45813b45f15443d8e411f0875cd861573b41cef Mon Sep 17 00:00:00 2001 From: Tormod Volden Date: Fri, 8 May 2015 22:23:19 +0200 Subject: [PATCH] dragon ports: Add CoCo keyboard map One of the few differences between Dragon and CoCo 1/2. Signed-off-by: Tormod Volden --- Kernel/platform-dragon-nx32/config.h | 3 +++ Kernel/platform-dragon-nx32/devtty.c | 24 ++++++++++++++++++++++++ Kernel/platform-dragon/config.h | 3 +++ Kernel/platform-dragon/devtty.c | 24 ++++++++++++++++++++++++ 4 files changed, 54 insertions(+) diff --git a/Kernel/platform-dragon-nx32/config.h b/Kernel/platform-dragon-nx32/config.h index 43f4c64e..ed783454 100644 --- a/Kernel/platform-dragon-nx32/config.h +++ b/Kernel/platform-dragon-nx32/config.h @@ -36,6 +36,9 @@ extern unsigned char vt_mangle_6847(unsigned char c); #define VT_MAP_CHAR(x) vt_mangle_6847(x) +/* RS/Tandy Color Computer keyboard */ +#undef COCO_KBD + #define TICKSPERSEC 50 /* Ticks per second */ /* FIXME: This will move once we put the display in the kernel bank and sort the banker out */ diff --git a/Kernel/platform-dragon-nx32/devtty.c b/Kernel/platform-dragon-nx32/devtty.c index 720796a9..a1e421cd 100644 --- a/Kernel/platform-dragon-nx32/devtty.c +++ b/Kernel/platform-dragon-nx32/devtty.c @@ -141,6 +141,29 @@ static void keyproc(void) } } +#ifdef COCO_KBD +uint8_t keyboard[8][7] = { + { '@', 'h', 'p', 'x', '0', '8', KEY_ENTER }, + { 'a', 'i', 'q', 'y', '1', '9', 0 /* clear - used as ctrl*/ }, + { 'b', 'j', 'r', 'z', '2', ':', KEY_ESC /* break (used for esc) */ }, + { 'c', 'k', 's', '^' /* up */, '3', ';' , 0 /* NC */ }, + { 'd', 'l', 't', '|' /* down */, '4', ',', 0 /* NC */ }, + { 'e', 'm', 'u', KEY_BS /* left */, '5', '-', 0 /* NC */ }, + { 'f', 'n', 'v', KEY_TAB /* right */, '6', '.', 0 /* NC */ }, + { 'g', 'o', 'w', ' ', '7', '/', 0 /* shift */ }, +}; + +uint8_t shiftkeyboard[8][7] = { + { '\\', 'H', 'P', 'X', '_', '(', KEY_ENTER }, + { 'A', 'I', 'Q', 'Y', '!', ')', 0 /* clear - used as ctrl */ }, + { 'B', 'J', 'R', 'Z', '"', '*', CTRL('C') /* break */ }, + { 'C', 'K', 'S', '[' /* up */, '#', '+', 0 /* NC */ }, + { 'D', 'L', 'T', ']' /* down */, '$', '<', 0 /* NC */ }, + { 'E', 'M', 'U', '{' /* left */, '%', '=', 0 /* NC */ }, + { 'F', 'N', 'V', '}' /* right */, '&', '>', 0 /* NC */ }, + { 'G', 'O', 'W', ' ', '\'', '?', 0 /* shift */ }, +}; +#else uint8_t keyboard[8][7] = { { '0', '8', '@', 'h', 'p', 'x', KEY_ENTER }, { '1', '9', 'a', 'i', 'q', 'y', 0 /* clear - used as ctrl*/ }, @@ -162,6 +185,7 @@ uint8_t shiftkeyboard[8][7] = { { '&', '>', 'F', 'N', 'V', '}' /* right */, 0 /* NC */ }, { '\'', '?', 'G', 'O', 'W', ' ', 0 /* shift */ }, }; +#endif /* COCO_KBD */ static void keydecode(void) { diff --git a/Kernel/platform-dragon/config.h b/Kernel/platform-dragon/config.h index 68ca6bf3..ad81e32a 100644 --- a/Kernel/platform-dragon/config.h +++ b/Kernel/platform-dragon/config.h @@ -36,6 +36,9 @@ extern unsigned char vt_mangle_6847(unsigned char c); #define VT_MAP_CHAR(x) vt_mangle_6847(x) +/* RS/Tandy Color Computer keyboard */ +#undef COCO_KBD + #define TICKSPERSEC 50 /* Ticks per second */ /* FIXME: This will move once we put the display in the kernel bank and sort the banker out */ diff --git a/Kernel/platform-dragon/devtty.c b/Kernel/platform-dragon/devtty.c index 720796a9..a1e421cd 100644 --- a/Kernel/platform-dragon/devtty.c +++ b/Kernel/platform-dragon/devtty.c @@ -141,6 +141,29 @@ static void keyproc(void) } } +#ifdef COCO_KBD +uint8_t keyboard[8][7] = { + { '@', 'h', 'p', 'x', '0', '8', KEY_ENTER }, + { 'a', 'i', 'q', 'y', '1', '9', 0 /* clear - used as ctrl*/ }, + { 'b', 'j', 'r', 'z', '2', ':', KEY_ESC /* break (used for esc) */ }, + { 'c', 'k', 's', '^' /* up */, '3', ';' , 0 /* NC */ }, + { 'd', 'l', 't', '|' /* down */, '4', ',', 0 /* NC */ }, + { 'e', 'm', 'u', KEY_BS /* left */, '5', '-', 0 /* NC */ }, + { 'f', 'n', 'v', KEY_TAB /* right */, '6', '.', 0 /* NC */ }, + { 'g', 'o', 'w', ' ', '7', '/', 0 /* shift */ }, +}; + +uint8_t shiftkeyboard[8][7] = { + { '\\', 'H', 'P', 'X', '_', '(', KEY_ENTER }, + { 'A', 'I', 'Q', 'Y', '!', ')', 0 /* clear - used as ctrl */ }, + { 'B', 'J', 'R', 'Z', '"', '*', CTRL('C') /* break */ }, + { 'C', 'K', 'S', '[' /* up */, '#', '+', 0 /* NC */ }, + { 'D', 'L', 'T', ']' /* down */, '$', '<', 0 /* NC */ }, + { 'E', 'M', 'U', '{' /* left */, '%', '=', 0 /* NC */ }, + { 'F', 'N', 'V', '}' /* right */, '&', '>', 0 /* NC */ }, + { 'G', 'O', 'W', ' ', '\'', '?', 0 /* shift */ }, +}; +#else uint8_t keyboard[8][7] = { { '0', '8', '@', 'h', 'p', 'x', KEY_ENTER }, { '1', '9', 'a', 'i', 'q', 'y', 0 /* clear - used as ctrl*/ }, @@ -162,6 +185,7 @@ uint8_t shiftkeyboard[8][7] = { { '&', '>', 'F', 'N', 'V', '}' /* right */, 0 /* NC */ }, { '\'', '?', 'G', 'O', 'W', ' ', 0 /* shift */ }, }; +#endif /* COCO_KBD */ static void keydecode(void) { -- 2.34.1