X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fjaguar.cpp;h=177f97cc81cbfaac4713605b235aabd145d5c1cc;hb=2331a1bdcde6b52b34e163f6d11de0fdd737f817;hp=2ad0e969fc89da0799536bd34cd62d66ea5bb1ee;hpb=55185aba2676444e7763ef6b374d3c7c57768be8;p=virtualjaguar diff --git a/src/jaguar.cpp b/src/jaguar.cpp index 2ad0e96..177f97c 100644 --- a/src/jaguar.cpp +++ b/src/jaguar.cpp @@ -1,8 +1,8 @@ // // JAGUAR.CPP // -// by Cal2 -// GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS) +// Originally by David Raingeard (Cal2) +// GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Carwin Jones (BeOS) // Cleanups and endian wrongness amelioration by James L. Hammons // Note: Endian wrongness probably stems from the MAME origins of this emu and // the braindead way in which MAME handles memory. :-) @@ -15,7 +15,8 @@ #define CPU_DEBUG //Do this in makefile??? Yes! Could, but it's easier to define here... -#define LOG_UNMAPPED_MEMORY_ACCESSES +//#define LOG_UNMAPPED_MEMORY_ACCESSES +//#define ABORT_ON_UNMAPPED_MEMORY_ACCESS #define CPU_DEBUG_MEMORY // Private function prototypes @@ -42,7 +43,7 @@ char * whoName[9] = uint32 jaguar_active_memory_dumps = 0; -uint32 jaguar_mainRom_crc32; +uint32 jaguar_mainRom_crc32, jaguarRomSize, jaguarRunAddress; /*static*/ uint8 * jaguar_mainRam = NULL; /*static*/ uint8 * jaguar_bootRom = NULL; @@ -380,9 +381,11 @@ if (address == 0xF02110) else { jaguar_unknown_writeword(address, value, M68K); +#ifdef LOG_UNMAPPED_MEMORY_ACCESSES WriteLog("\tA0=%08X, A1=%08X, D0=%08X, D1=%08X\n", m68k_get_reg(NULL, M68K_REG_A0), m68k_get_reg(NULL, M68K_REG_A1), m68k_get_reg(NULL, M68K_REG_D0), m68k_get_reg(NULL, M68K_REG_D1)); +#endif } } @@ -462,6 +465,8 @@ void jaguar_unknown_writebyte(unsigned address, unsigned data, uint32 who/*=UNKN { #ifdef LOG_UNMAPPED_MEMORY_ACCESSES WriteLog("Jaguar: Unknown byte %02X written at %08X by %s (M68K PC=%06X)\n", data, address, whoName[who], m68k_get_reg(NULL, M68K_REG_PC)); +#endif +#ifdef ABORT_ON_UNMAPPED_MEMORY_ACCESS extern bool finished; finished = true; extern bool doDSPDis; @@ -474,6 +479,8 @@ void jaguar_unknown_writeword(unsigned address, unsigned data, uint32 who/*=UNKN { #ifdef LOG_UNMAPPED_MEMORY_ACCESSES WriteLog("Jaguar: Unknown word %04X written at %08X by %s (M68K PC=%06X)\n", data, address, whoName[who], m68k_get_reg(NULL, M68K_REG_PC)); +#endif +#ifdef ABORT_ON_UNMAPPED_MEMORY_ACCESS extern bool finished; finished = true; extern bool doDSPDis; @@ -486,6 +493,8 @@ unsigned jaguar_unknown_readbyte(unsigned address, uint32 who/*=UNKNOWN*/) { #ifdef LOG_UNMAPPED_MEMORY_ACCESSES WriteLog("Jaguar: Unknown byte read at %08X by %s (M68K PC=%06X)\n", address, whoName[who], m68k_get_reg(NULL, M68K_REG_PC)); +#endif +#ifdef ABORT_ON_UNMAPPED_MEMORY_ACCESS extern bool finished; finished = true; extern bool doDSPDis; @@ -499,6 +508,8 @@ unsigned jaguar_unknown_readword(unsigned address, uint32 who/*=UNKNOWN*/) { #ifdef LOG_UNMAPPED_MEMORY_ACCESSES WriteLog("Jaguar: Unknown word read at %08X by %s (M68K PC=%06X)\n", address, whoName[who], m68k_get_reg(NULL, M68K_REG_PC)); +#endif +#ifdef ABORT_ON_UNMAPPED_MEMORY_ACCESS extern bool finished; finished = true; extern bool doDSPDis; @@ -816,17 +827,27 @@ void jaguar_reset(void) memcpy(jaguar_mainRam, jaguar_bootRom, 8); else { - SET32(jaguar_mainRam, 4, 0x00802000); +// Should also make a run address global as well, for when we reset the jag (PD mainly) +/* SET32(jaguar_mainRam, 4, 0x00802000); // Handle PD stuff... // This should definitely go elsewhere (like in the cart load section)! +//NOTE: The bytes 'JAGR' should also be at position $1C... if (jaguar_mainRom[0] == 0x60 && jaguar_mainRom[1] == 0x1A) { - uint32 runAddress = GET32(jaguar_mainRom, 0x2A); - uint32 progLength = GET32(jaguar_mainRom, 0x02); - WriteLog("Setting up PD ROM... Run address: %08X, length: %08X\n", runAddress, progLength); - memcpy(jaguar_mainRam + runAddress, jaguar_mainRom + 0x2E, progLength); + uint32 loadAddress = GET32(jaguar_mainRom, 0x22), runAddress = GET32(jaguar_mainRom, 0x2A); +//This is not always right! Especially when converted via bin2jag1!!! +//We should have access to the length of the furshlumiger file that was loaded anyway! +//Now, we do! ;-) +// uint32 progLength = GET32(jaguar_mainRom, 0x02); +//jaguarRomSize +//jaguarRunAddress +// WriteLog("Jaguar: Setting up PD ROM... Run address: %08X, length: %08X\n", runAddress, progLength); +// memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0x2E, progLength); + WriteLog("Jaguar: Setting up PD ROM... Run address: %08X, length: %08X\n", runAddress, jaguarRomSize - 0x2E); + memcpy(jaguar_mainRam + loadAddress, jaguar_mainRom + 0x2E, jaguarRomSize - 0x2E); SET32(jaguar_mainRam, 4, runAddress); - } + }//*/ + SET32(jaguar_mainRam, 4, jaguarRunAddress); } // WriteLog("jaguar_reset():\n"); @@ -872,6 +893,7 @@ if (effect_start) WriteLog("JagExe: VP=%u, VI=%u, VDB=%u, VBB=%u CPU CPS=%u, GPU CPS=%u\n", vp, vi, vdb, vbb, M68KCyclesPerScanline, RISCCyclesPerScanline); }//*/ +//extern int start_logging; for(uint16 i=0; i