From: Alan Cox Date: Fri, 6 Jul 2018 23:41:59 +0000 (+0100) Subject: trs80: turn on input support and fix keyboard bits X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=b1bf3a2cec5a2153496dfcfeac7c6e2b014e7149;p=FUZIX.git trs80: turn on input support and fix keyboard bits --- diff --git a/Kernel/platform-trs80/Makefile b/Kernel/platform-trs80/Makefile index 9112cd61..5540280a 100644 --- a/Kernel/platform-trs80/Makefile +++ b/Kernel/platform-trs80/Makefile @@ -1,6 +1,6 @@ CSRCS = devlpr.c devtty.c devfd.c devhd.c devgfx.c -CSRCS += devices.c main.c +CSRCS += devices.c main.c devinput.c DISCARD_CSRCS = discard.c devhd_discard.c ASRCS = trs80.s trs80-bank94.s crt0.s diff --git a/Kernel/platform-trs80/config.h b/Kernel/platform-trs80/config.h index 2048ede4..bd3d9e01 100644 --- a/Kernel/platform-trs80/config.h +++ b/Kernel/platform-trs80/config.h @@ -18,7 +18,10 @@ #define CONFIG_VT_MULTI /* Banked memory set up */ #define CONFIG_BANK_FIXED - +/* Input device support */ +#define CONFIG_INPUT +/* Full key up/down support */ +#define CONFIG_INPUT_GRABMAX 3 /* Support extra banked expansion memory using port 0x94 */ #define CONFIG_MAP94 diff --git a/Kernel/platform-trs80/devtty.c b/Kernel/platform-trs80/devtty.c index 330524ca..86f30acc 100644 --- a/Kernel/platform-trs80/devtty.c +++ b/Kernel/platform-trs80/devtty.c @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include char tbuf1[TTYSIZ]; @@ -205,8 +207,13 @@ static void keyproc(void) int m = 1; for (n = 0; n < 8; n++) { if ((key & m) && (keymap[i] & m)) { - if (!(shiftmask[i] & m)) + if (!(shiftmask[i] & m)) { + if (keyboard_grab == 3) { + queue_input(KEYPRESS_UP); + queue_input(keyboard[i][n]); + } keysdown--; + } } if ((key & m) && !(keymap[i] & m)) { if (!(shiftmask[i] & m)) { @@ -252,6 +259,7 @@ static uint8_t kbd_timer; static void keydecode(void) { uint8_t c; + uint8_t m = 0; if (keybyte == 7 && keybit == 3) { capslock = 1 - capslock; @@ -259,6 +267,7 @@ static void keydecode(void) } if (keymap[7] & 3) { /* shift */ + m = KEYPRESS_SHIFT; c = shiftkeyboard[keybyte][keybit]; /* VT switcher */ if (c == KEY_F1 || c == KEY_F2) { @@ -274,6 +283,7 @@ static void keydecode(void) /* The keyboard lacks some rather important symbols so remap them with control */ if (keymap[7] & 4) { /* control */ + m |= KEYPRESS_CTRL; if (keymap[7] & 3) { /* shift */ if (c == '(') c = '{'; @@ -286,10 +296,10 @@ static void keydecode(void) if (c == '<') c = '^'; } else { - if (c == '(') + if (c == '8') c = '['; else if (c == ')') - c = ']'; + c = '9'; else if (c == '-') c = '|'; else if (c > 31 && c < 127) @@ -298,8 +308,30 @@ static void keydecode(void) } else if (capslock && c >= 'a' && c <= 'z') c -= 'a' - 'A'; - if (c) - vt_inproc(inputtty+1, c); + if (c) { + switch(keyboard_grab) { + case 0: + vt_inproc(inputtty + 1, c); + break; + case 1: + /* Proper rule needed FIXME */ + if (c <= 0x83) { + vt_inproc(inputtty + 1, c); + break; + } + /* Fall through */ + case 2: + queue_input(KEYPRESS_DOWN); + queue_input(c); + break; + case 3: + /* Queue an event giving the base key (unshifted) + and the state of shift/ctrl/alt */ + queue_input(KEYPRESS_DOWN | m); + queue_input(keyboard[keybyte][keybit]); + break; + } + } } void kbd_interrupt(void) diff --git a/Kernel/platform-trs80/fuzix.lnk b/Kernel/platform-trs80/fuzix.lnk index ee07683b..e2458e48 100644 --- a/Kernel/platform-trs80/fuzix.lnk +++ b/Kernel/platform-trs80/fuzix.lnk @@ -38,9 +38,11 @@ swap.rel bankfixed.rel vt.rel devsys.rel +devinput.rel platform-trs80/devlpr.rel platform-trs80/devtty.rel platform-trs80/discard.rel platform-trs80/devdw.rel platform-trs80/drivewire.rel +platform-trs80/devinput.rel -e