From 0d9978228b9226d16ba8272a03dd7e6c9ad83b3d Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Mon, 16 Dec 2024 14:52:54 +1300 Subject: Implement a toggleable keyboard on the lower screen --- arm9/source/core.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'arm9/source/core.c') diff --git a/arm9/source/core.c b/arm9/source/core.c index 7584296..8abcfcb 100644 --- a/arm9/source/core.c +++ b/arm9/source/core.c @@ -35,6 +35,14 @@ void rouse_br(Bedrock *br) { br->sys.wake = 0x0; return; } + if (TEST(br->sys.sleep, 0x0400)) { // SCREEN + if (br->scr.wake) { + br->scr.wake = FALSE; + br->awake = TRUE; + br->sys.wake = 0x5; + return; + } + } if (TEST(br->sys.sleep, 0x0800)) { // INPUT if (br->inp.wake) { br->inp.wake = FALSE; @@ -121,8 +129,8 @@ u8 dev_read(Bedrock *br, u8 port) { case 0x45: return LOW(br->inp.x); case 0x46: return HIGH(br->inp.y); case 0x47: return LOW(br->inp.y); - case 0x48: return BOOL(br->inp.keyboard); - // TODO: Keyboard input + case 0x48: return BOOL(is_keyboard_open()); + case 0x49: return cb_read_byte(&br->inp.keybuffer); case 0x4A: return br->inp.navigation; case 0x4C: return br->inp.gamepad; // SCREEN DEVICE @@ -195,6 +203,9 @@ Signal dev_write(Bedrock *br, u8 port, u8 v) { case 0x3D: set_timer_low( &br->clk.t3,v); return 0; case 0x3E: set_timer_high(&br->clk.t4,v); return 0; case 0x3F: set_timer_low( &br->clk.t4,v); return 0; +// INPUT DEVICE + case 0x48: v ? open_keyboard() : close_keyboard(); return 0; + case 0x49: cb_clear(&br->inp.keybuffer); return 0; // SCREEN DEVICE case 0x54: SET_HIGH(br->scr.x,v); return 0; case 0x55: SET_LOW( br->scr.x,v); return 0; @@ -209,8 +220,8 @@ Signal dev_write(Bedrock *br, u8 port, u8 v) { case 0x5E: draw_dispatch(&br->scr,v); return 0; case 0x5F: move_cursor(&br->scr,v); return 0; // LOCAL DEVICE - case 0x86: printf("%c", v); return 0; - case 0x87: printf("%c", v); return 0; + case 0x86: std_write(v); return 0; + case 0x87: std_write(v); return 0; // FILE DEVICE case 0xA0: fs_push_entry(&br->fs,v); return 0; case 0xA1: fs_push_action(&br->fs,v); return 0; -- cgit v1.2.3-70-g09d2