summaryrefslogtreecommitdiff
path: root/arm9/source/core.c
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2024-12-16 14:52:54 +1300
committerBen Bridle <ben@derelict.engineering>2024-12-16 14:52:54 +1300
commit0d9978228b9226d16ba8272a03dd7e6c9ad83b3d (patch)
tree442ce8a1d37f2f9a0e9e655d3250849e874c2d41 /arm9/source/core.c
parentdbe8171815ea3b51c3ac87dae1996ae0d8f6eb04 (diff)
downloadbedrock-nds-0d9978228b9226d16ba8272a03dd7e6c9ad83b3d.zip
Implement a toggleable keyboard on the lower screen
Diffstat (limited to 'arm9/source/core.c')
-rw-r--r--arm9/source/core.c19
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;