diff options
author | Ben Bridle <ben@derelict.engineering> | 2024-12-16 14:52:54 +1300 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2024-12-16 14:52:54 +1300 |
commit | 0d9978228b9226d16ba8272a03dd7e6c9ad83b3d (patch) | |
tree | 442ce8a1d37f2f9a0e9e655d3250849e874c2d41 /arm9/source/core.c | |
parent | dbe8171815ea3b51c3ac87dae1996ae0d8f6eb04 (diff) | |
download | bedrock-nds-0d9978228b9226d16ba8272a03dd7e6c9ad83b3d.zip |
Implement a toggleable keyboard on the lower screen
Diffstat (limited to 'arm9/source/core.c')
-rw-r--r-- | arm9/source/core.c | 19 |
1 files changed, 15 insertions, 4 deletions
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; |