Skip to content

Commit b79b126

Browse files
authored
Merge pull request #1154 from GmEsoft/GmEsoft_trs80_AZERTY
Added AZERTY keyboard support for TRS-80 Model 4/4p in Kernel/platform/platform-trs80/devtty.c
2 parents 433c6d1 + 11fc712 commit b79b126

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

Kernel/platform/platform-trs80/devtty.c

+43
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
#include <devinput.h>
1010
#include <stdarg.h>
1111

12+
//#define AZERTY // uncomment this for AZERTY keyboards
13+
1214
static char tbuf1[TTYSIZ];
1315
static char tbuf2[TTYSIZ];
1416
static char tbuf3[TTYSIZ];
@@ -246,6 +248,16 @@ static void keyproc(void)
246248
}
247249

248250
uint8_t keyboard[8][8] = {
251+
#ifdef AZERTY
252+
{'>', 'q', 'b', 'c', 'd', 'e', 'f', 'g' },
253+
{'h', 'i', 'j', 'k', 'l', ',', 'n', 'o' },
254+
{'p', 'a', 'r', 's', 't', 'u', 'v', 'z' },
255+
{'x', 'y', 'w', '^', '@', 'm', '\\','}' },
256+
{'}', '&', '[', '"', '\'','(', '|', ']' },
257+
{'!', '{', ')', '-', '$', ';', ':', '=' },
258+
{ KEY_ENTER, KEY_CLEAR, KEY_STOP, KEY_UP, KEY_DOWN, KEY_BS, KEY_DEL, ' '},
259+
{ 0, 0, 0, 0, KEY_F1, KEY_F2, KEY_F3, 0 }
260+
#else
249261
{'@', 'a', 'b', 'c', 'd', 'e', 'f', 'g' },
250262
{'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o' },
251263
{'p', 'q', 'r', 's', 't', 'u', 'v', 'w' },
@@ -254,9 +266,20 @@ uint8_t keyboard[8][8] = {
254266
{'8', '9', ':', ';', ',', '-', '.', '/' },
255267
{ KEY_ENTER, KEY_CLEAR, KEY_STOP, KEY_UP, KEY_DOWN, KEY_BS, KEY_DEL, ' '},
256268
{ 0, 0, 0, 0, KEY_F1, KEY_F2, KEY_F3, 0 }
269+
#endif
257270
};
258271

259272
uint8_t shiftkeyboard[8][8] = {
273+
#ifdef AZERTY
274+
{'<', 'Q', 'B', 'C', 'D', 'E', 'F', 'G' },
275+
{'H', 'I', 'J', 'K', 'L', '?', 'N', 'O' },
276+
{'P', 'A', 'R', 'S', 'T', 'U', 'V', 'Z' },
277+
{'X', 'Y', 'W', '`', '*', 'M', '%', '{' },
278+
{'0', '1', '2', '3', '4', '5', '6', '7' },
279+
{'8', '9', '~', '_', '#', '.', '/', '+' },
280+
{ KEY_ENTER, KEY_CLEAR, KEY_STOP, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, ' '},
281+
{ 0, 0, 0, 0, KEY_F1, KEY_F2, KEY_F3, 0 }
282+
#else
260283
{'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G' },
261284
{'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O' },
262285
{'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W' },
@@ -265,6 +288,7 @@ uint8_t shiftkeyboard[8][8] = {
265288
{'(', ')', '*', '+', '<', '=', '>', '?' },
266289
{ KEY_ENTER, KEY_CLEAR, KEY_STOP, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, ' '},
267290
{ 0, 0, 0, 0, KEY_F1, KEY_F2, KEY_F3, 0 }
291+
#endif
268292
};
269293

270294
static uint8_t capslock = 0;
@@ -298,6 +322,24 @@ static void keydecode(void)
298322
with control */
299323
if (keymap[7] & 4) { /* control */
300324
m |= KEYPRESS_CTRL;
325+
#ifdef AZERTY
326+
if (!(keymap[7] & 3)) { /* no shift */
327+
if (c == '&')
328+
c = '|';
329+
else if (c == '^')
330+
c = '[';
331+
else if (c == '@')
332+
c = ']';
333+
else if (c == '=')
334+
c = '~';
335+
else if (c == '$')
336+
c = '`';
337+
else if (c == '>')
338+
c = '\\';
339+
else if (c > 31 && c < 127)
340+
c &= 31;
341+
}
342+
#else
301343
if (keymap[7] & 3) { /* shift */
302344
if (c == '(')
303345
c = '{';
@@ -319,6 +361,7 @@ static void keydecode(void)
319361
else if (c > 31 && c < 127)
320362
c &= 31;
321363
}
364+
#endif
322365
}
323366
else if (capslock && c >= 'a' && c <= 'z')
324367
c -= 'a' - 'A';

0 commit comments

Comments
 (0)