- Add functions for a lid open/close. Holding key (default "Backspace" in Windows port) while game is freeze/non freeze
This commit is contained in:
mtabachenko 2008-12-24 00:25:48 +00:00
parent 068adfadbd
commit 693df94cb6
5 changed files with 41 additions and 11 deletions

View File

@ -28,6 +28,7 @@
- Add RTC implementations (not fully) [CrazyMax]
- Rewrite VRAM mapping control and render (old save states broken) [CrazyMax]
- Add a GUI hud system; start adding some HUD elements
- Add functions for a lid open/close. Holding key (default "Backspace" in Windows port) while game is freeze/non freeze. [CrazyMax]
Mac OS X port:
- Fixed: Filenames and paths with unicode characters now work. [Jeff]
- Fixed: Load state from file button works again. [Jeff]

View File

@ -33,10 +33,15 @@
#include "ROMReader.h"
#include "gfx3d.h"
#include "debug.h"
#ifdef _WIN32
#include "./windows/disView.h"
#endif
static BOOL LidClosed = FALSE;
static u8 LidKeyCount = 0;
/* the count of bytes copied from the firmware into memory */
#define NDS_FW_USER_SETTINGS_MEM_BYTE_COUNT 0x70
@ -489,6 +494,9 @@ void NDS_Reset( void)
MMU_write16(1, 0x04000130, 0x3FF);
MMU_write8(1, 0x04000136, 0x43);
LidClosed = FALSE;
LidKeyCount = 0;
/*
* Setup a copy of the firmware user settings in memory.
* (this is what the DS firmware would do).
@ -1590,7 +1598,7 @@ u32 NDS_exec(s32 nb)
}
}
if(MMU.reg_IE[0]&(1<<21))
if(MMU.reg_IE[ARMCPU_ARM9]&(1<<21))
NDS_makeARM9Int(21); // GX geometry
if((MMU.reg_IF[0]&MMU.reg_IE[0]) && (MMU.reg_IME[0]))
@ -1641,12 +1649,13 @@ void NDS_setPadFromMovie(u16 pad)
FIX(pad,9),
FIX(pad,10),
FIX(pad,11),
FIX(pad,12)
FIX(pad,12),
FIX(pad,13)
);
#undef FIX
}
void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,bool X,bool W,bool E,bool G)
void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,bool X,bool W,bool E,bool G, bool F)
{
//this macro is the opposite of what you would expect
@ -1665,6 +1674,7 @@ void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,b
int w = FIX(W);
int e = FIX(E);
int g = FIX(G);
int f = FIX(F);
u16 pad = (0 |
((a) >> 7) |
@ -1681,17 +1691,31 @@ void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,b
((u16 *)ARM9Mem.ARM9_REG)[0x130>>1] = (u16)pad;
((u16 *)MMU.ARM7_REG)[0x130>>1] = (u16)pad;
u16 padExt = (((u16 *)MMU.ARM7_REG)[0x136>>1] & 0x00F0) |
u16 padExt = (((u16 *)MMU.ARM7_REG)[0x136>>1] & 0x0070) |
((x) >> 7) |
((y) >> 6) |
((g) >> 4) |
0x0034;
// todo: mute sound when Lided close
if (!f)
{
LidKeyCount++;
if (LidKeyCount > 50)
{
LidKeyCount = 0;
LidClosed = (!LidClosed) & 0x01;
if (!LidClosed)
NDS_makeARM7Int(22);
}
} else LidKeyCount = 0;
if (LidClosed) padExt |= 1 << 7;
((u16 *)MMU.ARM7_REG)[0x136>>1] = (u16)padExt;
//put into the format we want for the movie system
//RLDUTSBAYXWEG
//RLDUTSBAYXWEGF
#undef FIX
#define FIX(b) (b?1:0)
@ -1708,6 +1732,7 @@ void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,b
w = FIX(W);
e = FIX(E);
g = FIX(G);
f = FIX(F);
nds.pad =
@ -1723,7 +1748,8 @@ void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,b
(FIX(x)<<9)|
(FIX(w)<<10)|
(FIX(e)<<11)|
(FIX(g)<<12);
(FIX(g)<<12)|
(FIX(f)<<13);
// TODO: low power IRQ
}

View File

@ -189,7 +189,7 @@ NDS_header * NDS_getROMHeader(void);
void NDS_setTouchPos(u16 x, u16 y);
void NDS_releaseTouch(void);
void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,bool X,bool W,bool E,bool G);
void NDS_setPad(bool R,bool L,bool D,bool U,bool T,bool S,bool B,bool A,bool Y,bool X,bool W,bool E,bool G, bool F);
void NDS_setPadFromMovie(u16 pad);
int NDS_LoadROM(const char *filename, int bmtype, u32 bmsize,

View File

@ -188,6 +188,8 @@ const char *DIJoyNames[0x04] = { "JUp", "JDown", "JLeft", "JRight" };
#define KEY_X 10
#define KEY_Y 11
#define KEY_DEBUG 12
#define KEY_FOLD 13
#define KEY_POWER 14
char *keyPadNames [MAXKEYPAD] = { "A", "B", "SELECT", "START",
@ -415,8 +417,9 @@ void NDS_inputPost(BOOL paused, LPSTR buf)
bool W = (buf[keyPad[KEY_L]] & 0x80)!=0;
bool E = (buf[keyPad[KEY_R]] & 0x80)!=0;
bool G = (buf[keyPad[KEY_DEBUG]] & 0x80)!=0;
bool F = (buf[keyPad[KEY_FOLD]] & 0x80)!=0;
NDS_setPad( R, L, D, U, T, S, B, A, Y, X, W, E, G);
NDS_setPad( R, L, D, U, T, S, B, A, Y, X, W, E, G, F);
}
// TODO

View File

@ -1267,7 +1267,7 @@ BEGIN
EDITTEXT IDC_EDIT10,268,7,50,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EDIT11,248,30,34,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EDIT12,285,30,30,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EDIT13,7,127,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
EDITTEXT IDC_EDIT13,7,127,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_EDIT14,95,127,26,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
EDITTEXT IDC_EDIT15,28,30,34,14,ES_CENTER | ES_AUTOHSCROLL | ES_READONLY | WS_DISABLED
PUSHBUTTON "OK",IDOK,205,127,50,14
@ -1287,7 +1287,7 @@ BEGIN
LTEXT "L",IDC_STATIC,60,10,8,8
LTEXT "right",IDC_STATIC,63,73,16,8
LTEXT "power",IDC_STATIC,36,46,21,8,WS_DISABLED
LTEXT "open/close fold",IDC_STATIC,36,129,50,8,WS_DISABLED
LTEXT "open/close lid",IDC_STATIC,36,129,44,8
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDFRAME,95,41,141,77
LTEXT "debug",IDC_STATIC,123,129,21,8,WS_DISABLED
END