From 9e3ddf7fe788bf5c30eb44a12144e0d4ee7878af Mon Sep 17 00:00:00 2001 From: mtabachenko Date: Thu, 19 Nov 2009 11:43:05 +0000 Subject: [PATCH] core: - add handling keypad interrupt (demo http://www.double.co.nz/nintendo_ds/nds_develop8.html) --- desmume/src/NDSSystem.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/desmume/src/NDSSystem.cpp b/desmume/src/NDSSystem.cpp index e9fd3f4f5..2dd9b5ec2 100644 --- a/desmume/src/NDSSystem.cpp +++ b/desmume/src/NDSSystem.cpp @@ -2964,6 +2964,36 @@ static void NDS_applyFinalInput() ((u16 *)MMU.ARM9_REG)[0x130>>1] = (u16)pad; ((u16 *)MMU.ARM7_REG)[0x130>>1] = (u16)pad; + u16 k_cnt = ((u16 *)MMU.ARM9_REG)[0x132>>1]; + if ( k_cnt & (1<<14)) + { + //INFO("ARM9: KeyPad IRQ (pad 0x%04X, cnt 0x%04X (condition %s))\n", pad, k_cnt, k_cnt&(1<<15)?"AND":"OR"); + u16 k_cnt_selected = (k_cnt & 0x3F); + if (k_cnt&(1<<15)) // AND + { + if ((~pad & k_cnt_selected) == k_cnt_selected) NDS_makeARM9Int(12); + } + else // OR + { + if (~pad & k_cnt_selected) NDS_makeARM9Int(12); + } + } + + k_cnt = ((u16 *)MMU.ARM7_REG)[0x132>>1]; + if ( k_cnt & (1<<14)) + { + //INFO("ARM7: KeyPad IRQ (pad 0x%04X, cnt 0x%04X (condition %s))\n", pad, k_cnt, k_cnt&(1<<15)?"AND":"OR"); + u16 k_cnt_selected = (k_cnt & 0x3F); + if (k_cnt&(1<<15)) // AND + { + if ((~pad & k_cnt_selected) == k_cnt_selected) NDS_makeARM7Int(12); + } + else // OR + { + if (~pad & k_cnt_selected) NDS_makeARM7Int(12); + } + } + if(input.touch.isTouch) {