From fbd906ba8d25b03ad556776e096c369beb33bf26 Mon Sep 17 00:00:00 2001 From: zeromus Date: Tue, 3 Mar 2009 20:04:16 +0000 Subject: [PATCH] try fixing unresolved link errors with gcc --- desmume/src/MMU.cpp | 133 ++++------------------------------- desmume/src/MMU.h | 125 ++++++++++++++++++++++++++++++-- desmume/src/armcpu.h | 8 +-- desmume/src/windows/main.cpp | 4 +- 4 files changed, 137 insertions(+), 133 deletions(-) diff --git a/desmume/src/MMU.cpp b/desmume/src/MMU.cpp index 0a18af9fd..c92126598 100644 --- a/desmume/src/MMU.cpp +++ b/desmume/src/MMU.cpp @@ -52,116 +52,7 @@ #define ASSERT_UNALIGNED(x) #endif -static void FASTCALL _MMU_ARM9_write08(u32 adr, u8 val); -static void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val); -static void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val); -static u8 FASTCALL _MMU_ARM9_read08(u32 adr); -static u16 FASTCALL _MMU_ARM9_read16(u32 adr); -static u32 FASTCALL _MMU_ARM9_read32(u32 adr); -static void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val); -static void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val); -static void FASTCALL _MMU_ARM7_write32(u32 adr, u32 val); -static u8 FASTCALL _MMU_ARM7_read08(u32 adr); -static u16 FASTCALL _MMU_ARM7_read16(u32 adr); -static u32 FASTCALL _MMU_ARM7_read32(u32 adr); - - -u8 _MMU_read08(const int PROCNUM, u32 addr) { - if(PROCNUM==ARMCPU_ARM9) - if((addr&(~0x3FFF)) == MMU.DTCMRegion) - { - //Returns data from DTCM (ARM9 only) - return T1ReadByte(ARM9Mem.ARM9_DTCM, addr & 0x3FFF); - } - - if ( (addr & 0x0F000000) == 0x02000000) - return T1ReadByte( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF); - - if(PROCNUM==ARMCPU_ARM9) return _MMU_ARM9_read08(addr); - else return _MMU_ARM7_read08(addr); -} - -u16 _MMU_read16(const int PROCNUM, u32 addr) { - if(PROCNUM==ARMCPU_ARM9) - if((addr&(~0x3FFF)) == MMU.DTCMRegion) - { - //Returns data from DTCM (ARM9 only) - return T1ReadWord(ARM9Mem.ARM9_DTCM, addr & 0x3FFF); - } - - if ( (addr & 0x0F000000) == 0x02000000) - return T1ReadWord( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF); - - if(PROCNUM==ARMCPU_ARM9) return _MMU_ARM9_read16(addr); - else return _MMU_ARM7_read16(addr); -} - -u32 _MMU_read32(int PROCNUM, u32 addr) { - if(PROCNUM==ARMCPU_ARM9) - if((addr&(~0x3FFF)) == MMU.DTCMRegion) - { - //Returns data from DTCM (ARM9 only) - return T1ReadLong(ARM9Mem.ARM9_DTCM, addr & 0x3FFF); - } - - if ( (addr & 0x0F000000) == 0x02000000) - return T1ReadLong( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF); - - if(PROCNUM==ARMCPU_ARM9) return _MMU_ARM9_read32(addr); - else return _MMU_ARM7_read32(addr); -} - -void _MMU_write08(const int PROCNUM, u32 addr, u8 val) { - if(PROCNUM==ARMCPU_ARM9) - if((addr&(~0x3FFF)) == MMU.DTCMRegion) - { - T1WriteByte(ARM9Mem.ARM9_DTCM, addr & 0x3FFF, val); - return; - } - - if ( (addr & 0x0F000000) == 0x02000000) { - T1WriteByte( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF, val); - return; - } - - if(PROCNUM==ARMCPU_ARM9) _MMU_ARM9_write08(addr,val); - else _MMU_ARM7_write08(addr,val); -} - -void _MMU_write16(const int PROCNUM, u32 addr, u16 val) { - if(PROCNUM==ARMCPU_ARM9) - if((addr&(~0x3FFF)) == MMU.DTCMRegion) - { - T1WriteWord(ARM9Mem.ARM9_DTCM, addr & 0x3FFF, val); - return; - } - - if ( (addr & 0x0F000000) == 0x02000000) { - T1WriteWord( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF, val); - return; - } - - if(PROCNUM==ARMCPU_ARM9) _MMU_ARM9_write16(addr,val); - else _MMU_ARM7_write16(addr,val); -} - -void _MMU_write32(const int PROCNUM, u32 addr, u32 val) { - if(PROCNUM==ARMCPU_ARM9) - if((addr&(~0x3FFF)) == MMU.DTCMRegion) - { - T1WriteLong(ARM9Mem.ARM9_DTCM, addr & 0x3FFF, val); - return; - } - - if ( (addr & 0x0F000000) == 0x02000000) { - T1WriteLong( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF, val); - return; - } - - if(PROCNUM==ARMCPU_ARM9) _MMU_ARM9_write32(addr,val); - else _MMU_ARM7_write32(addr,val); -} //http://home.utah.edu/~nahaj/factoring/isqrt.c.html static u64 isqrt (u64 x) { @@ -1607,7 +1498,7 @@ static INLINE void MMU_IPCSync(u8 proc, u32 val) //========================================================================================================= //========================================================================================================= //================================================= MMU write 08 -static void FASTCALL _MMU_ARM9_write08(u32 adr, u8 val) +void FASTCALL _MMU_ARM9_write08(u32 adr, u8 val) { #ifdef INTERNAL_DTCM_WRITE if(((adr & ~0x3FFF) == MMU.DTCMRegion)) @@ -1821,7 +1712,7 @@ static void FASTCALL _MMU_ARM9_write08(u32 adr, u8 val) } //================================================= MMU ARM9 write 16 -static void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val) +void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val) { #ifdef INTERNAL_DTCM_WRITE if((adr & ~0x3FFF) == MMU.DTCMRegion) @@ -2404,7 +2295,7 @@ static void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val) } //================================================= MMU ARM9 write 32 -static void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val) +void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val) { #ifdef INTERNAL_DTCM_WRITE if((adr&(~0x3FFF)) == MMU.DTCMRegion) @@ -2956,7 +2847,7 @@ static void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val) } //================================================= MMU ARM9 read 08 -static u8 FASTCALL _MMU_ARM9_read08(u32 adr) +u8 FASTCALL _MMU_ARM9_read08(u32 adr) { #ifdef INTERNAL_DTCM_READ if((adr&(~0x3FFF)) == MMU.DTCMRegion) @@ -2985,7 +2876,7 @@ static u8 FASTCALL _MMU_ARM9_read08(u32 adr) } //================================================= MMU ARM9 read 16 -static u16 FASTCALL _MMU_ARM9_read16(u32 adr) +u16 FASTCALL _MMU_ARM9_read16(u32 adr) { #ifdef INTERNAL_DTCM_READ if((adr&(~0x3FFF)) == MMU.DTCMRegion) @@ -3056,7 +2947,7 @@ static u16 FASTCALL _MMU_ARM9_read16(u32 adr) } //================================================= MMU ARM9 read 32 -static u32 FASTCALL _MMU_ARM9_read32(u32 adr) +u32 FASTCALL _MMU_ARM9_read32(u32 adr) { #ifdef INTERNAL_DTCM_READ if((adr&(~0x3FFF)) == MMU.DTCMRegion) @@ -3225,7 +3116,7 @@ static u32 FASTCALL _MMU_ARM9_read32(u32 adr) //========================================================================================================= //========================================================================================================= //================================================= MMU ARM7 write 08 -static void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val) +void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val) { #ifdef EXPERIMENTAL_GBASLOT if ( (adr >= 0x08000000) && (adr < 0x0A000000) ) @@ -3278,7 +3169,7 @@ static void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val) } //================================================= MMU ARM7 write 16 -static void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val) +void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val) { #ifdef EXPERIMENTAL_GBASLOT if ( (adr >= 0x08000000) && (adr < 0x0A000000) ) @@ -3700,7 +3591,7 @@ static void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val) T1WriteWord(MMU.MMU_MEM[ARMCPU_ARM7][adr>>20], adr&MMU.MMU_MASK[ARMCPU_ARM7][adr>>20], val); } //================================================= MMU ARM7 write 32 -static void FASTCALL _MMU_ARM7_write32(u32 adr, u32 val) +void FASTCALL _MMU_ARM7_write32(u32 adr, u32 val) { #ifdef EXPERIMENTAL_GBASLOT if ( (adr >= 0x08000000) && (adr < 0x0A000000) ) @@ -3960,7 +3851,7 @@ static void FASTCALL _MMU_ARM7_write32(u32 adr, u32 val) } //================================================= MMU ARM7 read 08 -static u8 FASTCALL _MMU_ARM7_read08(u32 adr) +u8 FASTCALL _MMU_ARM7_read08(u32 adr) { #ifdef EXPERIMENTAL_WIFI /* wifi mac access */ @@ -3992,7 +3883,7 @@ static u8 FASTCALL _MMU_ARM7_read08(u32 adr) return MMU.MMU_MEM[ARMCPU_ARM7][(adr>>20)&0xFF][adr&MMU.MMU_MASK[ARMCPU_ARM7][(adr>>20)&0xFF]]; } //================================================= MMU ARM7 read 16 -static u16 FASTCALL _MMU_ARM7_read16(u32 adr) +u16 FASTCALL _MMU_ARM7_read16(u32 adr) { #ifdef EXPERIMENTAL_WIFI /* wifi mac access */ @@ -4052,7 +3943,7 @@ static u16 FASTCALL _MMU_ARM7_read16(u32 adr) return T1ReadWord(MMU.MMU_MEM[ARMCPU_ARM7][(adr >> 20) & 0xFF], adr & MMU.MMU_MASK[ARMCPU_ARM7][(adr >> 20) & 0xFF]); } //================================================= MMU ARM7 read 32 -static u32 FASTCALL _MMU_ARM7_read32(u32 adr) +u32 FASTCALL _MMU_ARM7_read32(u32 adr) { #ifdef EXPERIMENTAL_WIFI /* wifi mac access */ diff --git a/desmume/src/MMU.h b/desmume/src/MMU.h index 2cc42e501..a248677a7 100644 --- a/desmume/src/MMU.h +++ b/desmume/src/MMU.h @@ -27,10 +27,18 @@ #include "FIFO.h" #include "dscard.h" +#include "mem.h" #include "ARM9.h" #include "mc.h" +//HACK!!!! REMOVE ME SOON! +#ifndef ARMCPU_ARM7 +#define ARMCPU_ARM7 1 +#define ARMCPU_ARM9 0 +#define ARMPROC (PROCNUM?NDS_ARM7:NDS_ARM9) +#endif + /* theses macros are designed for reading/writing in memory (m is a pointer to memory, like MMU.MMU_MEM[proc], and a is an address, like 0x04000000 */ #define MEM_8(m, a) (((u8*)(m[((a)>>20)&0xff]))[((a)&0xfff)]) @@ -182,12 +190,117 @@ template void _MMU_write08(u32 addr, u8 val); template void _MMU_write16(u32 addr, u16 val); template void _MMU_write32(u32 addr, u32 val); -FORCEINLINE extern u8 _MMU_read08(const int PROCNUM, u32 addr); -FORCEINLINE extern u16 _MMU_read16(const int PROCNUM, u32 addr); -FORCEINLINE extern u32 _MMU_read32(const int PROCNUM, u32 addr); -FORCEINLINE extern void _MMU_write08(const int PROCNUM, u32 addr, u8 val); -FORCEINLINE extern void _MMU_write16(const int PROCNUM, u32 addr, u16 val); -FORCEINLINE extern void _MMU_write32(const int PROCNUM, u32 addr, u32 val); +void FASTCALL _MMU_ARM9_write08(u32 adr, u8 val); +void FASTCALL _MMU_ARM9_write16(u32 adr, u16 val); +void FASTCALL _MMU_ARM9_write32(u32 adr, u32 val); +u8 FASTCALL _MMU_ARM9_read08(u32 adr); +u16 FASTCALL _MMU_ARM9_read16(u32 adr); +u32 FASTCALL _MMU_ARM9_read32(u32 adr); + +void FASTCALL _MMU_ARM7_write08(u32 adr, u8 val); +void FASTCALL _MMU_ARM7_write16(u32 adr, u16 val); +void FASTCALL _MMU_ARM7_write32(u32 adr, u32 val); +u8 FASTCALL _MMU_ARM7_read08(u32 adr); +u16 FASTCALL _MMU_ARM7_read16(u32 adr); +u32 FASTCALL _MMU_ARM7_read32(u32 adr); + + +FORCEINLINE u8 _MMU_read08(const int PROCNUM, u32 addr) { + if(PROCNUM==ARMCPU_ARM9) + if((addr&(~0x3FFF)) == MMU.DTCMRegion) + { + //Returns data from DTCM (ARM9 only) + return T1ReadByte(ARM9Mem.ARM9_DTCM, addr & 0x3FFF); + } + + if ( (addr & 0x0F000000) == 0x02000000) + return T1ReadByte( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF); + + if(PROCNUM==ARMCPU_ARM9) return _MMU_ARM9_read08(addr); + else return _MMU_ARM7_read08(addr); +} + +FORCEINLINE u16 _MMU_read16(const int PROCNUM, u32 addr) { + if(PROCNUM==ARMCPU_ARM9) + if((addr&(~0x3FFF)) == MMU.DTCMRegion) + { + //Returns data from DTCM (ARM9 only) + return T1ReadWord(ARM9Mem.ARM9_DTCM, addr & 0x3FFF); + } + + if ( (addr & 0x0F000000) == 0x02000000) + return T1ReadWord( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF); + + if(PROCNUM==ARMCPU_ARM9) return _MMU_ARM9_read16(addr); + else return _MMU_ARM7_read16(addr); +} + +FORCEINLINE u32 _MMU_read32(int PROCNUM, u32 addr) { + if(PROCNUM==ARMCPU_ARM9) + if((addr&(~0x3FFF)) == MMU.DTCMRegion) + { + //Returns data from DTCM (ARM9 only) + return T1ReadLong(ARM9Mem.ARM9_DTCM, addr & 0x3FFF); + } + + if ( (addr & 0x0F000000) == 0x02000000) + return T1ReadLong( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF); + + if(PROCNUM==ARMCPU_ARM9) return _MMU_ARM9_read32(addr); + else return _MMU_ARM7_read32(addr); +} + +FORCEINLINE void _MMU_write08(const int PROCNUM, u32 addr, u8 val) { + if(PROCNUM==ARMCPU_ARM9) + if((addr&(~0x3FFF)) == MMU.DTCMRegion) + { + T1WriteByte(ARM9Mem.ARM9_DTCM, addr & 0x3FFF, val); + return; + } + + if ( (addr & 0x0F000000) == 0x02000000) { + T1WriteByte( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF, val); + return; + } + + if(PROCNUM==ARMCPU_ARM9) _MMU_ARM9_write08(addr,val); + else _MMU_ARM7_write08(addr,val); +} + +FORCEINLINE void _MMU_write16(const int PROCNUM, u32 addr, u16 val) { + if(PROCNUM==ARMCPU_ARM9) + if((addr&(~0x3FFF)) == MMU.DTCMRegion) + { + T1WriteWord(ARM9Mem.ARM9_DTCM, addr & 0x3FFF, val); + return; + } + + if ( (addr & 0x0F000000) == 0x02000000) { + T1WriteWord( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF, val); + return; + } + + if(PROCNUM==ARMCPU_ARM9) _MMU_ARM9_write16(addr,val); + else _MMU_ARM7_write16(addr,val); +} + +FORCEINLINE void _MMU_write32(const int PROCNUM, u32 addr, u32 val) { + if(PROCNUM==ARMCPU_ARM9) + if((addr&(~0x3FFF)) == MMU.DTCMRegion) + { + T1WriteLong(ARM9Mem.ARM9_DTCM, addr & 0x3FFF, val); + return; + } + + if ( (addr & 0x0F000000) == 0x02000000) { + T1WriteLong( ARM9Mem.MAIN_MEM, addr & 0x3FFFFF, val); + return; + } + + if(PROCNUM==ARMCPU_ARM9) _MMU_ARM9_write32(addr,val); + else _MMU_ARM7_write32(addr,val); +} + #ifdef MMU_ENABLE_ACL void FASTCALL MMU_write8_acl(u32 proc, u32 adr, u8 val); diff --git a/desmume/src/armcpu.h b/desmume/src/armcpu.h index f97cac9f2..ff45635ca 100644 --- a/desmume/src/armcpu.h +++ b/desmume/src/armcpu.h @@ -22,14 +22,14 @@ #ifndef ARM_CPU #define ARM_CPU -#include "types.h" -#include "bits.h" -#include "MMU.h" - #define ARMCPU_ARM7 1 #define ARMCPU_ARM9 0 #define ARMPROC (PROCNUM?NDS_ARM7:NDS_ARM9) +#include "types.h" +#include "bits.h" +#include "MMU.h" + #define CODE(i) (((i)>>25)&0x7) #define OPCODE(i) (((i)>>21)&0xF) #define SIGNEBIT(i) BIT_N(i,20) diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 586156d67..c457b1365 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -1363,7 +1363,7 @@ int WINAPI WinMain (HINSTANCE hThisInstance, &arm9_memio, &arm9_direct_memory_iface); if ( arm9_gdb_stub == NULL) { - MessageBox(hwnd,"Failed to create ARM9 gdbstub","Error",MB_OK); + MessageBox(MainWindow->getHWnd(),"Failed to create ARM9 gdbstub","Error",MB_OK); return -1; } } @@ -1373,7 +1373,7 @@ int WINAPI WinMain (HINSTANCE hThisInstance, &arm7_base_memory_iface); if ( arm7_gdb_stub == NULL) { - MessageBox(hwnd,"Failed to create ARM7 gdbstub","Error",MB_OK); + MessageBox(MainWindow->getHWnd(),"Failed to create ARM7 gdbstub","Error",MB_OK); return -1; } }