diff options
author | João Silva | 2017-06-18 16:14:12 +0100 |
---|---|---|
committer | João Silva | 2017-06-18 16:14:12 +0100 |
commit | 10a58e72aa3f74a821fa9be07ffd3992ffa93600 (patch) | |
tree | 5e85bc854af8895ffb8c79026817098b2a87803d | |
parent | 7707a66569dc6ae997070e368ab7aca5dc7d7721 (diff) | |
download | snesemu-10a58e72aa3f74a821fa9be07ffd3992ffa93600.tar.gz snesemu-10a58e72aa3f74a821fa9be07ffd3992ffa93600.tar.bz2 snesemu-10a58e72aa3f74a821fa9be07ffd3992ffa93600.zip |
BSX fixes. Many BSX games are now playable.
-rw-r--r-- | source/getset.h | 11 | ||||
-rw-r--r-- | source/memmap.c | 165 |
2 files changed, 33 insertions, 143 deletions
diff --git a/source/getset.h b/source/getset.h index 7d28a04..4155f75 100644 --- a/source/getset.h +++ b/source/getset.h @@ -18,7 +18,7 @@ INLINE uint8_t S9xGetByte(uint32_t Address) int32_t block; uint8_t* GetAddress = Memory.Map [block = (Address >> MEMMAP_SHIFT) & MEMMAP_MASK]; - if (!CPU.InDMA) + if ((intptr_t) GetAddress != MAP_CPU || !CPU.InDMA) CPU.Cycles += Memory.MemorySpeed [block]; if (GetAddress >= (uint8_t*) MAP_LAST) @@ -77,7 +77,7 @@ INLINE uint16_t S9xGetWord(uint32_t Address) int32_t block; uint8_t* GetAddress = Memory.Map [block = (Address >> MEMMAP_SHIFT) & MEMMAP_MASK]; - if (!CPU.InDMA) + if ((intptr_t) GetAddress != MAP_CPU || !CPU.InDMA) CPU.Cycles += (Memory.MemorySpeed [block] << 1); if (GetAddress >= (uint8_t*) MAP_LAST) @@ -153,10 +153,9 @@ INLINE void S9xSetByte(uint8_t Byte, uint32_t Address) int32_t block; uint8_t* SetAddress = Memory.WriteMap [block = ((Address >> MEMMAP_SHIFT) & MEMMAP_MASK)]; - if (!CPU.InDMA) + if ((intptr_t) SetAddress != MAP_CPU || !CPU.InDMA) CPU.Cycles += Memory.MemorySpeed [block]; - if (SetAddress >= (uint8_t*) MAP_LAST) { #ifdef CPU_SHUTDOWN @@ -242,10 +241,9 @@ INLINE void S9xSetWord(uint16_t Word, uint32_t Address) int32_t block; uint8_t* SetAddress = Memory.WriteMap [block = ((Address >> MEMMAP_SHIFT) & MEMMAP_MASK)]; - if (!CPU.InDMA) + if ((intptr_t) SetAddress != MAP_CPU || !CPU.InDMA) CPU.Cycles += Memory.MemorySpeed [block] << 1; - if (SetAddress >= (uint8_t*) MAP_LAST) { #ifdef CPU_SHUTDOWN @@ -458,5 +456,4 @@ INLINE void S9xSetPCBase(uint32_t Address) CPU.PC = CPU.PCBase + (Address & 0xffff); } - #endif diff --git a/source/memmap.c b/source/memmap.c index 72b5d17..ec1dac8 100644 --- a/source/memmap.c +++ b/source/memmap.c @@ -107,11 +107,9 @@ static bool AllASCII(uint8_t* b, int32_t size) { int32_t i; for (i = 0; i < size; i++) - { if (b[i] < 32 || b[i] > 126) - return (false); - } - return (true); + return false; + return true; } static int32_t ScoreHiROM(bool skip_header, int32_t romoff) @@ -156,7 +154,7 @@ static int32_t ScoreHiROM(bool skip_header, int32_t romoff) if (!AllASCII(&Memory.ROM [o + 0xc0], ROM_NAME_LEN - 1)) score -= 1; - return (score); + return score; } static int32_t ScoreLoROM(bool skip_header, int32_t romoff) @@ -198,7 +196,7 @@ static int32_t ScoreLoROM(bool skip_header, int32_t romoff) if (!AllASCII(&Memory.ROM [o + 0xc0], ROM_NAME_LEN - 1)) score -= 1; - return (score); + return score; } static char* Safe(const char* s) @@ -232,7 +230,7 @@ static char* Safe(const char* s) safe [i] = '?'; } safe [len] = 0; - return (safe); + return safe; } /**********************************************************************************************/ @@ -269,7 +267,7 @@ bool S9xInitMemory() !IPPU.TileCached [TILE_4BIT] || !IPPU.TileCached [TILE_8BIT]) { S9xDeinitMemory(); - return (false); + return false; } // FillRAM uses first 32K of ROM image area, otherwise space just @@ -287,10 +285,7 @@ bool S9xInitMemory() SuperFX.nRomBanks = (2 * 1024 * 1024) / (32 * 1024); SuperFX.pvRom = (uint8_t*) Memory.ROM; - Memory.SDD1Data = NULL; - Memory.SDD1Index = NULL; - - return (true); + return true; } void S9xDeinitMemory() @@ -341,21 +336,6 @@ void S9xDeinitMemory() IPPU.TileCached[t] = NULL; } } - FreeSDD1Data(); -} - -void FreeSDD1Data() -{ - if (Memory.SDD1Index) - { - free(Memory.SDD1Index); - Memory.SDD1Index = NULL; - } - if (Memory.SDD1Data) - { - free(Memory.SDD1Data); - Memory.SDD1Data = NULL; - } } #ifndef LOAD_FROM_MEMORY_TEST @@ -371,7 +351,7 @@ static int32_t ReadInt(FILE* f, uint32_t nbytes) return -1; v = (v << 8) | (c & 0xFF); } - return (v); + return v; } #define IPS_EOF 0x00454F46l @@ -393,8 +373,7 @@ static void CheckForIPSPatch(const char* rom_filename, bool header, int32_t* rom if (!(patch_file = fopen(S9xGetFilename("ips"), "rb"))) return; - if (fread(fname, 1, 5, patch_file) != 5 || - strncmp(fname, "PATCH", 5) != 0) + if (fread(fname, 1, 5, patch_file) != 5 || strncmp(fname, "PATCH", 5) != 0) { fclose(patch_file); return; @@ -496,7 +475,7 @@ static uint32_t FileLoader(uint8_t* buffer, const char* filename, int32_t maxsiz #endif if ((ROMFile = fopen(fname, "rb")) == NULL) - return (0); + return 0; strcpy(Memory.ROMFilename, fname); @@ -635,7 +614,7 @@ again: TotalFileSize = FileLoader(Memory.ROM, filename, MAX_ROM_SIZE); if (!TotalFileSize) - return false; // it ends here + return false; // it ends here else if (!Settings.NoPatch) CheckForIPSPatch(filename, Memory.HeaderCount != 0, &TotalFileSize); #endif @@ -945,17 +924,14 @@ again: if (Memory.ExtendedFormat == SMALLFIRST) Tales = true; - FreeSDD1Data(); InitROM(Tales); #ifdef WANT_CHEATS S9xLoadCheatFile(S9xGetFilename("cht")); S9xInitCheatData(); S9xApplyCheats(); #endif - S9xReset(); - - return (true); + return true; } /* compatibility wrapper */ @@ -1162,9 +1138,7 @@ void InitROM(bool Interleaved) Settings.SPC7110RTC = true; } - if (Settings.BS) - BSLoROMMap(); - else if (Settings.SPC7110) + if (Settings.SPC7110) SPC7110HiROMMap(); else if ((Memory.ROMSpeed & ~0x10) == 0x25) TalesROMMap(Interleaved); @@ -1291,8 +1265,6 @@ void InitROM(bool Interleaved) Memory.SRAMSize = 3; LoROMMap(); } - else if (Settings.BS) - BSLoROMMap(); else LoROMMap(); } @@ -1392,8 +1364,8 @@ void InitROM(bool Interleaved) sprintf(Memory.ROMId, "%s", Safe(Memory.ROMId)); sprintf(Memory.CompanyId, "%s", Safe(Memory.CompanyId)); - sprintf(String, - "\"%s\" [%s] %s, %s, Type: %s, Mode: %s, TV: %s, S-RAM: %s, ROMId: %s Company: %2.2s", + fprintf(stderr, + "\"%s\" [%s] %s, %s, Type: %s, Mode: %s, TV: %s, S-RAM: %s, ROMId: %s Company: %2.2s\n", Memory.ROMName, (Memory.ROMChecksum + Memory.ROMComplementChecksum != 0xffff || Memory.ROMChecksum != Memory.CalculatedChecksum) ? "bad checksum" : "checksum ok", @@ -1406,7 +1378,6 @@ void InitROM(bool Interleaved) Memory.ROMId, Memory.CompanyId); - S9xMessage(String); Settings.ForceHeader = Settings.ForceHiROM = Settings.ForceLoROM = Settings.ForceInterleaved = Settings.ForceNoHeader = Settings.ForceNotInterleaved = @@ -1740,83 +1711,6 @@ void SetaDSPMap() WriteProtectROM(); } -void BSLoROMMap() -{ - int32_t c; - int32_t i; - - if (Settings.BS) - Memory.SRAMSize = 5; - - // Banks 00->3f and 80->bf - for (c = 0; c < 0x400; c += 16) - { - Memory.Map [c + 0] = Memory.Map [c + 0x800] = Memory.RAM; - Memory.Map [c + 1] = Memory.Map [c + 0x801] = Memory.RAM; - Memory.BlockIsRAM [c + 0] = Memory.BlockIsRAM [c + 0x800] = true; - Memory.BlockIsRAM [c + 1] = Memory.BlockIsRAM [c + 0x801] = true; - - Memory.Map [c + 2] = Memory.Map [c + 0x802] = (uint8_t*) MAP_PPU; - Memory.Map [c + 3] = Memory.Map [c + 0x803] = (uint8_t*) MAP_PPU; - Memory.Map [c + 4] = Memory.Map [c + 0x804] = (uint8_t*) MAP_CPU; - Memory.Map [c + 5] = Memory.Map [c + 0x805] = (uint8_t*) Memory.RAM; - Memory.BlockIsRAM [c + 5] = Memory.BlockIsRAM [c + 0x805] = true; - - Memory.Map [c + 6] = Memory.Map [c + 0x806] = (uint8_t*) Memory.RAM; - Memory.BlockIsRAM [c + 6] = Memory.BlockIsRAM [c + 0x806] = true; - Memory.Map [c + 7] = Memory.Map [c + 0x807] = (uint8_t*) Memory.RAM; - Memory.BlockIsRAM [c + 7] = Memory.BlockIsRAM [c + 0x807] = true; - for (i = c + 8; i < c + 16; i++) - { - Memory.Map [i] = Memory.Map [i + 0x800] = &Memory.ROM [(c << 11) % Memory.CalculatedSize] - 0x8000; - Memory.BlockIsROM [i] = Memory.BlockIsROM [i + 0x800] = true; - } - } - - for (c = 0; c < 8; c++) - { - Memory.Map[(c << 4) + 0x105] = MAP_LOROM_SRAM_OR_NONE; - Memory.BlockIsROM [(c << 4) + 0x105] = false; - Memory.BlockIsRAM [(c << 4) + 0x105] = true; - } - - for (c = 1; c <= 4; c++) - { - for (i = 0; i < 16; i++) - { - Memory.Map[0x400 + i + (c << 4)] = MAP_LOROM_SRAM_OR_NONE; - Memory.BlockIsRAM[0x400 + i + (c << 4)] = true; - Memory.BlockIsROM[0x400 + i + (c << 4)] = false; - } - } - - for (i = 0; i < 0x80; i++) - { - Memory.Map[0x700 + i] = &Memory.BSRAM[0x10000 * (i / 16)]; - Memory.BlockIsRAM[0x700 + i] = true; - Memory.BlockIsROM[0x700 + i] = false; - } - for (i = 0; i < 8; i++) - { - Memory.Map[0x205 + (i << 4)] = Memory.Map[0x285 + (i << 4)] = Memory.Map[0x305 - + (i << 4)] = Memory.Map[0x385 + (i << 4)] = Memory.Map[0x705 + (i << 4)]; - Memory.BlockIsRAM[0x205 + (i << 4)] = Memory.BlockIsRAM[0x285 + - (i << 4)] = Memory.BlockIsRAM[0x305 + (i << 4)] = Memory.BlockIsRAM[0x385 + - (i << 4)] = true; - Memory.BlockIsROM[0x205 + (i << 4)] = Memory.BlockIsROM[0x285 + - (i << 4)] = Memory.BlockIsROM[0x305 + (i << 4)] = Memory.BlockIsROM[0x385 + - (i << 4)] = false; - } - for (c = 0; c < 8; c++) - { - Memory.Map[(c << 4) + 0x005] = Memory.BSRAM - 0x5000; - Memory.BlockIsROM [(c << 4) + 0x005] = false; - Memory.BlockIsRAM [(c << 4) + 0x005] = true; - } - MapRAM(); - WriteProtectROM(); -} - void HiROMMap() { int32_t i; @@ -1920,8 +1814,7 @@ void TalesROMMap(bool Interleaved) } for (i = c + 8; i < c + 16; i++) { - Memory.Map [i] = &Memory.ROM [((c << 12) % (Memory.CalculatedSize - 0x400000)) + - OFFSET0]; + Memory.Map [i] = &Memory.ROM [((c << 12) % (Memory.CalculatedSize - 0x400000)) + OFFSET0]; Memory.Map [i + 0x800] = &Memory.ROM [((c << 12) % 0x400000) + OFFSET2]; Memory.BlockIsROM [i] = true; Memory.BlockIsROM [i + 0x800] = true; @@ -2616,17 +2509,17 @@ void SPC7110Sram(uint8_t newstate) const char* TVStandard() { - return (Settings.PAL ? "PAL" : "NTSC"); + return Settings.PAL ? "PAL" : "NTSC"; } const char* Speed() { - return (Memory.ROMSpeed & 0x10 ? "120ns" : "200ns"); + return Memory.ROMSpeed & 0x10 ? "120ns" : "200ns"; } const char* MapType() { - return (Memory.HiROM ? "HiROM" : "LoROM"); + return Memory.HiROM ? "HiROM" : "LoROM"; } const char* StaticRAMSize() @@ -2634,9 +2527,9 @@ const char* StaticRAMSize() static char tmp [20]; if (Memory.SRAMSize > 16) - return ("Corrupt"); + return "Corrupt"; sprintf(tmp, "%dKB", (Memory.SRAMMask + 1) / 1024); - return (tmp); + return tmp; } const char* Size() @@ -2644,9 +2537,9 @@ const char* Size() static char tmp [20]; if (Memory.ROMSize < 7 || Memory.ROMSize - 7 > 23) - return ("Corrupt"); + return "Corrupt"; sprintf(tmp, "%dMbits", 1 << (Memory.ROMSize - 7)); - return (tmp); + return tmp; } const char* KartContents() @@ -2663,7 +2556,7 @@ const char* KartContents() "ROM", "ROM+RAM", "ROM+RAM+BAT" }; if (Memory.ROMType == 0 && !Settings.BS) - return ("ROM only"); + return "ROM only"; sprintf(tmp, "%s", Contents [(Memory.ROMType & 0xf) % 3]); @@ -2698,29 +2591,29 @@ const char* KartContents() sprintf(tmp, "%s+DSP%d", tmp, Settings.DSP == 0 ? 1 : Settings.DSP); } - return (tmp); + return tmp; } const char* MapMode() { static char tmp [4]; sprintf(tmp, "%02x", Memory.ROMSpeed & ~0x10); - return (tmp); + return tmp; } const char* ROMID() { - return (Memory.ROMId); + return Memory.ROMId; } bool match_na(const char* str) { - return (strcmp(Memory.ROMName, str) == 0); + return strcmp(Memory.ROMName, str) == 0; } bool match_id(const char* str) { - return (strncmp(Memory.ROMId, str, strlen(str)) == 0); + return strncmp(Memory.ROMId, str, strlen(str)) == 0; } void ApplyROMFixes() |