编辑: 丶蓶一 | 2013-10-19 |
REG_KEYINPUT 寄存器: NDS有一个硬件寄存器,当按键被按下时,寄存器的值会改变.寄存器REG_KEYINPUT 位于内存地址的0x4000130处.它是只读寄存器.当按键时,值会改变: KEYS Bit ? Key ndslib' define ? ? ? Down if ? Up if ?
0 ? ? ? ? A KEY_A Cleared ? Set ?
1 ? ? ? ? B KEY_B Cleared ? Set ?
2 ? ? Select KEY_SELECT ? ? Cleared ? Set ?
3 ? ? Start KEY_START ? ? ? Cleared ? Set ?
4 ? Directional Right ? ? ? ? KEY_RIGHT ? ? ? Cleared ? Set ?
5 ? Directional Left KEY_LEFT ? ? ? ? Cleared ? Set ?
6 ? Directional Up KEY_UP Cleared ? Set ?
7 ? Directional Down ? ? ? ? KEY_DOWN ? ? ? Cleared ? Set ?
8 ? Right Alternate Button ? KEY_R Cleared ? Set ?
9 ? Left Alternate Button ? KEY_L Cleared ? Set REG_KEYXY 寄存器: 你会注意到这里漏掉了两个键, 'X' 和'Y'. 这两个键是从不同的寄存器读取的,REG_KEYXY寄存器,在内存地址0x04000136处.不幸的是这个寄存器只能被ARM7读取. 为了让它能被ARM9读取,在LIBNDS的ARM7样板代码中,ARM7在垂直间隔中断时读取寄存器值并储存在IPC数据结构中,IPC可被ARM9读取.这是相关代码片: void InterruptHandler(void) { ? [...] ? but = REG_KEYXY;
? [...] ? IPC->heartbeat = heartbeat;
? IPC->buttons ? = but;
? IPC->touchX ? = x;
? [...] } REG_KEYXY 寄存器不仅包含X、Y键状态位,它还包括触控笔和NDS屏幕和上或打开的状态位: XKEYS Bit Key ? ? 'ndslib' define ? Down if... ? Up if ... ?
0 ? ? X
1