From 1b1765d3a27b97dc282b6295aa206d92c32f33d9 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 10 Apr 2023 19:48:30 +0200 Subject: Fix uxn_eval triggering too often on input handling --- src/main.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index beb65e3..8d0eba8 100644 --- a/src/main.c +++ b/src/main.c @@ -282,7 +282,15 @@ file_deo(u8 id, u8 *ram, u8 *d, u8 port) { void console_deo(u8 *d, u8 port) { - txt_printf("%c", d[port]); + switch(port) { + case 0x8: + txt_putc(d[port]); + return; + case 0x9: + txt_printf("ERROR: %c"); + txt_putc(d[port]); + return; + } } void @@ -307,7 +315,6 @@ emu_dei(Uxn *u, u8 addr) { case 0xc0: return datetime_dei(&u->dev[d], p); } return u->dev[addr]; - return 0; } void @@ -423,20 +430,27 @@ handle_input(Uxn *u) { *flag &= ~0x80; } - uxn_eval(u, GETVEC(d)); + if (key_prev != key_curr) { + uxn_eval(u, GETVEC(d)); + } d[3] = 0; } else if (ctrl_methods[ctrl_idx] == CONTROL_MOUSE) { u8 *d = &u->dev[0x90]; // Detect "mouse key press". u8 flag = d[6]; + bool event = false; if (key_tap(KEY_B)) { + event = true; flag |= 0x01; } else if (key_released(KEY_B)) { + event = true; flag &= ~0x01; } if (key_tap(KEY_A)) { + event = true; flag |= 0x10; } else if (key_released(KEY_A)) { + event = true; flag &= ~0x10; } @@ -451,20 +465,26 @@ handle_input(Uxn *u) { // Detect mouse movement. if (key_pressed(KEY_UP)) { + event = true; mouse.y = CLAMP(mouse.y - MOUSE_DELTA, 0, SCREEN_HEIGHT - 8); } else if (key_pressed(KEY_DOWN)) { + event = true; mouse.y = CLAMP(mouse.y + MOUSE_DELTA, 0, SCREEN_HEIGHT - 8); } if (key_pressed(KEY_LEFT)) { + event = true; mouse.x = CLAMP(mouse.x - MOUSE_DELTA, 0, SCREEN_WIDTH - 8); } else if (key_pressed(KEY_RIGHT)) { + event = true; mouse.x = CLAMP(mouse.x + MOUSE_DELTA, 0, SCREEN_WIDTH - 8); } // Eval mouse. POKDEV(0x2, mouse.x); POKDEV(0x4, mouse.y); - uxn_eval(u, GETVEC(d)); + if (event) { + uxn_eval(u, GETVEC(d)); + } } else if (ctrl_methods[ctrl_idx] == CONTROL_KEYBOARD) { u8 *d = &u->dev[0x80]; if (key_tap(KEY_LEFT)) { -- cgit v1.2.1