From 596ef772d75b6ec50f196c1f9288d3dc5391b8d6 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 23 May 2021 20:42:54 +0200 Subject: Fix control keys on keyboard mode --- src/filesystem.c | 4 ++-- src/main.c | 31 ++++++++++++++++++++++++++++++- src/uxn/devices/ppu.c | 4 ++-- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/filesystem.c b/src/filesystem.c index 69e23f7..5732e40 100644 --- a/src/filesystem.c +++ b/src/filesystem.c @@ -3,11 +3,11 @@ // Note that the filename should include the null terminator if we want to use // strcmp. #define FILE_NAME_SIZE 27 -#define FILE_CAPACITY 63 +#define FILE_CAPACITY 4 #define FILE_HEADER_OFFSET 2 #define FILE_INDEX_OFFSET 32 #define FILE_DATA_OFFSET KB(2) -#define FILE_MAX_SIZE KB(1) +#define FILE_MAX_SIZE KB(16) #define SRAM ((vu8*)(MEM_CART)) typedef struct File { diff --git a/src/main.c b/src/main.c index 17e0127..b075f4a 100644 --- a/src/main.c +++ b/src/main.c @@ -288,7 +288,36 @@ handle_input(Uxn *u) { update_cursor(cursor_position + KEYBOARD_ROW_SIZE); } if (key_tap(KEY_B)) { - devctrl->dat[3] = keyboard[cursor_position].symbol; + u8 symbol = keyboard[cursor_position].symbol; + switch (symbol) { + case 0x7f: { + // Backspace. + devctrl->dat[3] = 0x08; + } break; + case 0x14: { + // New line. + devctrl->dat[3] = 0x0d; + } break; + case 0x18: { + // Arrow up. + devctrl->dat[2] = 0x10; + } break; + case 0x19: { + // Arrow down. + devctrl->dat[2] = 0x20; + } break; + case 0x1b: { + // Arrow left. + devctrl->dat[2] = 0x40; + } break; + case 0x1a: { + // Arrow right. + devctrl->dat[2] = 0x80; + } break; + default: { + devctrl->dat[3] = symbol; + } break; + } evaluxn(u, mempeek16(devctrl->dat, 0)); devctrl->dat[3] = 0; } diff --git a/src/uxn/devices/ppu.c b/src/uxn/devices/ppu.c index 4a5a13d..e453726 100644 --- a/src/uxn/devices/ppu.c +++ b/src/uxn/devices/ppu.c @@ -316,8 +316,8 @@ KeyboardChar keyboard[] = { {0, 0, '('}, {0, 0, ')'}, {0, 0, '['}, {0, 0, ']'}, {0, 0, '{'}, {0, 0, '}'}, {0, 0, '<'}, {0, 0, '>'}, {0, 0, '+'}, {0, 0, '-'}, {0, 0, '='}, {0, 0, 0x14}, {0, 0, '0'}, {0, 0, '1'}, {0, 0, '2'}, {0, 0, '3'}, {0, 0, '4'}, {0, 0, '5'}, {0, 0, '6'}, {0, 0, '7'}, {0, 0, '8'}, {0, 0, '9'}, {0, 0, '~'}, {0, 0, 0x18}, {0, 0, 'a'}, {0, 0, 'b'}, {0, 0, 'c'}, {0, 0, 'd'}, {0, 0, 'e'}, {0, 0, 'f'}, {0, 0, 'g'}, {0, 0, 'h'}, {0, 0, 'i'}, {0, 0, 'j'}, {0, 0, '/'}, {0, 0, 0x19}, - {0, 0, 'k'}, {0, 0, 'l'}, {0, 0, 'm'}, {0, 0, 'n'}, {0, 0, 'o'}, {0, 0, 'p'}, {0, 0, 'q'}, {0, 0, 'r'}, {0, 0, 's'}, {0, 0, 't'}, {0, 0, '\\'}, {0, 0, 0x1a}, - {0, 0, 'u'}, {0, 0, 'v'}, {0, 0, 'w'}, {0, 0, 'x'}, {0, 0, 'y'}, {0, 0, 'z'}, {0, 0, ','}, {0, 0, '.'}, {0, 0, ';'}, {0, 0, ':'}, {0, 0, '_'}, {0, 0, 0x1b}, + {0, 0, 'k'}, {0, 0, 'l'}, {0, 0, 'm'}, {0, 0, 'n'}, {0, 0, 'o'}, {0, 0, 'p'}, {0, 0, 'q'}, {0, 0, 'r'}, {0, 0, 's'}, {0, 0, 't'}, {0, 0, '\\'}, {0, 0, 0x1b}, + {0, 0, 'u'}, {0, 0, 'v'}, {0, 0, 'w'}, {0, 0, 'x'}, {0, 0, 'y'}, {0, 0, 'z'}, {0, 0, ','}, {0, 0, '.'}, {0, 0, ';'}, {0, 0, ':'}, {0, 0, '_'}, {0, 0, 0x1a}, }; void -- cgit v1.2.1