diff --git a/core/hw/naomi/naomi_cart.cpp b/core/hw/naomi/naomi_cart.cpp index a4fb16c3b..23071e9a3 100644 --- a/core/hw/naomi/naomi_cart.cpp +++ b/core/hw/naomi/naomi_cart.cpp @@ -13,6 +13,7 @@ u32 RomSize; #include #include + #include #endif fd_t* RomCacheMap; @@ -26,7 +27,7 @@ bool naomi_cart_LoadRom(char* file) printf("\nnullDC-Naomi rom loader v1.2\n"); size_t folder_pos = strlen(file) - 1; - while (folder_pos>1 && file[folder_pos] != '\\') + while (folder_pos>1 && (file[folder_pos] != '\\' && file[folder_pos] != '/')) folder_pos--; folder_pos++; @@ -99,10 +100,11 @@ bool naomi_cart_LoadRom(char* file) #if HOST_OS == OS_WINDOWS RomPtr = (u8*)VirtualAlloc(0, RomSize, MEM_RESERVE, PAGE_NOACCESS); #else - RomPtr = (u8*)mmap(0, RomSize, PROT_NONE, MAP_PRIVATE, 0, 0); + RomPtr = (u8*)mmap(0, RomSize, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0); #endif verify(RomPtr != 0); + verify(RomPtr != (void*)-1); strcpy(t, file); @@ -242,4 +244,4 @@ void* naomi_cart_GetPtr(u32 offset, u32 size) { verify((offset + size) < RomSize); return &RomPtr[offset]; -} \ No newline at end of file +} diff --git a/core/hw/sh4/dyna/driver.cpp b/core/hw/sh4/dyna/driver.cpp index 8a5c3781b..71801bcb2 100644 --- a/core/hw/sh4/dyna/driver.cpp +++ b/core/hw/sh4/dyna/driver.cpp @@ -408,7 +408,7 @@ void recSh4_Init() bm_Init(); bm_Reset(); - verify(rcb_noffs(p_sh4rcb->fpcb) == -(FPCB_SIZE*sizeof(void*) + 0x40000)); + verify(rcb_noffs(p_sh4rcb->fpcb) == FPCB_OFFSET); verify(rcb_noffs(p_sh4rcb->sq_buffer) == -512); diff --git a/core/hw/sh4/sh4_if.h b/core/hw/sh4/sh4_if.h index 8ddac4e9f..957a9f361 100644 --- a/core/hw/sh4/sh4_if.h +++ b/core/hw/sh4/sh4_if.h @@ -307,11 +307,13 @@ typedef void DYNACALL TaListVoidFP(void* data); #define FPCB_SIZE (RAM_SIZE/2) #define FPCB_MASK (FPCB_SIZE -1) - +//#defeine FPCB_PAD 0x40000 +#define FPCB_PAD 0x100000 +#define FPCB_OFFSET (-(FPCB_SIZE*sizeof(void*) + FPCB_PAD)) struct Sh4RCB { void* fpcb[FPCB_SIZE]; - u64 _pad[(0x40000-sizeof(Sh4Context)-64-sizeof(void*)*2)/8]; + u64 _pad[(FPCB_PAD-sizeof(Sh4Context)-64-sizeof(void*)*2)/8]; TaListVoidFP* tacmd_voud; //*TODO* remove (not used) sqw_fp* do_sqw_nommu; u64 sq_buffer[64/8]; @@ -346,4 +348,4 @@ s32 rcb_poffs(T* ptr) //Get an interface to sh4 interpreter void Get_Sh4Interpreter(sh4_if* cpu); -void Get_Sh4Recompiler(sh4_if* cpu); \ No newline at end of file +void Get_Sh4Recompiler(sh4_if* cpu); diff --git a/core/rec-ARM/ngen_arm.S b/core/rec-ARM/ngen_arm.S index 09f2be78e..63c46eeee 100644 --- a/core/rec-ARM/ngen_arm.S +++ b/core/rec-ARM/ngen_arm.S @@ -173,8 +173,8 @@ do_iter: HIDDEN(no_update) CSYM(no_update): @ next_pc _MUST_ be on r4 *R4 NOT R0 anymore* -#if RAM_SIZE == 33554432 - sub r2,r8,#67371008 +#if DC_PLATFORM == DC_PLATFORM_NAOMI + sub r2,r8,#0x4100000 ubfx r1,r4,#1,#24 #else sub r2,r8,#33816576 diff --git a/core/rec-ARM/rec_arm.cpp b/core/rec-ARM/rec_arm.cpp index ad2dff4b1..b68e7aabc 100644 --- a/core/rec-ARM/rec_arm.cpp +++ b/core/rec-ARM/rec_arm.cpp @@ -409,11 +409,10 @@ u32 DynaRBI::Relink() { #ifdef CALLSTACK #error offset broken + SUB(r2, r8, -FPCB_OFFSET); #if RAM_SIZE == 33554432 - SUB(r2, r8, 67371008); UBFX(r1, r4, 1, 24); #else - SUB(r2, r8, 33816576); UBFX(r1, r4, 1, 23); #endif @@ -437,11 +436,10 @@ u32 DynaRBI::Relink() #if 1 //this is faster //why ? (Icache ?) + SUB(r2, r8, -FPCB_OFFSET); #if RAM_SIZE == 33554432 - SUB(r2, r8, 67371008); UBFX(r1, r4, 1, 24); #else - SUB(r2, r8, 33816576); UBFX(r1, r4, 1, 23); #endif LDR(r15,r2,r1,Offset,true,S_LSL,2); @@ -456,11 +454,11 @@ u32 DynaRBI::Relink() } else { + SUB(r2, r8, -FPCB_OFFSET); + #if RAM_SIZE == 33554432 - SUB(r2, r8, 67371008); UBFX(r1, r4, 1, 24); #else - SUB(r2, r8, 33816576); UBFX(r1, r4, 1, 23); #endif NOP();NOP(); //2