1 #include "../copyright" 2 3 #ifndef _memmap_h_ 4 #define _memmap_h_ 5 6 #include "snes9x.h" 7 8 #ifdef FAST_LSB_WORD_ACCESS 9 #define READ_WORD(s) (*(uint16_t *) (s)) 10 #define READ_DWORD(s) (*(uint32_t *) (s)) 11 #define WRITE_WORD(s, d) (*(uint16_t *) (s)) = (d) 12 #define WRITE_DWORD(s, d) (*(uint32_t *) (s)) = (d) 13 #define READ_3WORD(s) ((*(uint32_t *) (s)) & 0x00ffffff) 14 #define WRITE_3WORD(s, d) *(uint16_t *) (s) = (uint16_t)(d), *((uint8_t *) (s) + 2) = (uint8_t) ((d) >> 16) 15 #else 16 #define READ_WORD(s) (*(uint8_t *) (s) | (*((uint8_t *) (s) + 1) << 8)) 17 #define READ_DWORD(s) (*(uint8_t *) (s) | (*((uint8_t *) (s) + 1) << 8) | (*((uint8_t *) (s) + 2) << 16) | (*((uint8_t *) (s) + 3) << 24)) 18 #define WRITE_WORD(s, d) *(uint8_t *) (s) = (d), *((uint8_t *) (s) + 1) = (d) >> 8 19 #define WRITE_DWORD(s, d) *(uint8_t *) (s) = (uint8_t) (d), *((uint8_t *) (s) + 1) = (uint8_t) ((d) >> 8), *((uint8_t *) (s) + 2) = (uint8_t) ((d) >> 16), *((uint8_t *) (s) + 3) = (uint8_t) ((d) >> 24) 20 #define WRITE_3WORD(s, d) *(uint8_t *) (s) = (uint8_t) (d), *((uint8_t *) (s) + 1) = (uint8_t) ((d) >> 8), *((uint8_t *) (s) + 2) = (uint8_t) ((d) >> 16) 21 #define READ_3WORD(s) (*(uint8_t *) (s) | (*((uint8_t *) (s) + 1) << 8) | (*((uint8_t *) (s) + 2) << 16)) 22 #endif 23 24 #define MEMMAP_BLOCK_SIZE (0x1000) 25 #define MEMMAP_NUM_BLOCKS (0x1000000 / MEMMAP_BLOCK_SIZE) 26 #define MEMMAP_BLOCKS_PER_BANK (0x10000 / MEMMAP_BLOCK_SIZE) 27 #define MEMMAP_SHIFT 12 28 #define MEMMAP_MASK (MEMMAP_BLOCK_SIZE - 1) 29 30 /* Extended ROM Formats */ 31 #define NOPE 0 32 #define YEAH 1 33 #define BIGFIRST 2 34 #define SMALLFIRST 3 35 36 #ifdef LOAD_FROM_MEMORY_TEST 37 bool LoadROM(const struct retro_game_info* game); 38 #else 39 bool LoadROM(const char*); 40 #endif 41 void InitROM(bool); 42 bool S9xInitMemory(void); 43 void S9xDeinitMemory(void); 44 void FreeSDD1Data(void); 45 46 void WriteProtectROM(void); 47 void FixROMSpeed(void); 48 void MapRAM(void); 49 void MapExtraRAM(void); 50 51 void BSLoROMMap(void); 52 void JumboLoROMMap(bool); 53 void LoROMMap(void); 54 void LoROM24MBSMap(void); 55 void SRAM512KLoROMMap(void); 56 void SRAM1024KLoROMMap(void); 57 void SufamiTurboLoROMMap(void); 58 void HiROMMap(void); 59 void SuperFXROMMap(void); 60 void TalesROMMap(bool); 61 void AlphaROMMap(void); 62 void SA1ROMMap(void); 63 void BSHiROMMap(void); 64 void SPC7110HiROMMap(void); 65 void SPC7110Sram(uint8_t); 66 void SetaDSPMap(void); 67 void ApplyROMFixes(void); 68 void DSPMap(void); 69 void CapcomProtectLoROMMap(void); 70 71 const char* TVStandard(void); 72 const char* Speed(void); 73 const char* StaticRAMSize(void); 74 const char* MapType(void); 75 const char* MapMode(void); 76 const char* KartContents(void); 77 const char* Size(void); 78 const char* Headers(void); 79 const char* ROMID(void); 80 const char* CompanyID(void); 81 void ParseSNESHeader(uint8_t*); 82 83 enum 84 { 85 MAP_PPU, MAP_CPU, MAP_DSP, MAP_LOROM_SRAM, MAP_HIROM_SRAM, 86 MAP_NONE, MAP_DEBUG, MAP_C4, MAP_BWRAM, MAP_BWRAM_BITMAP, 87 MAP_BWRAM_BITMAP2, MAP_SA1RAM, MAP_SPC7110_ROM, MAP_SPC7110_DRAM, 88 MAP_RONLY_SRAM, MAP_OBC_RAM, MAP_SETA_DSP, MAP_SETA_RISC, MAP_LAST 89 }; 90 91 enum 92 { 93 MAX_ROM_SIZE = 0x800000 94 }; 95 96 enum 97 { 98 MAP_TYPE_I_O, 99 MAP_TYPE_ROM, 100 MAP_TYPE_RAM 101 }; 102 103 typedef struct 104 { 105 uint8_t* RAM; 106 uint8_t* ROM; 107 uint8_t* VRAM; 108 uint8_t* SRAM; 109 uint8_t* BWRAM; 110 uint8_t* FillRAM; 111 uint8_t* C4RAM; 112 bool HiROM; 113 bool LoROM; 114 uint16_t SRAMMask; 115 uint8_t SRAMSize; 116 uint8_t* Map [MEMMAP_NUM_BLOCKS]; 117 uint8_t* WriteMap [MEMMAP_NUM_BLOCKS]; 118 uint8_t MemorySpeed [MEMMAP_NUM_BLOCKS]; 119 uint8_t BlockIsRAM [MEMMAP_NUM_BLOCKS]; 120 uint8_t BlockIsROM [MEMMAP_NUM_BLOCKS]; 121 char ROMName [ROM_NAME_LEN]; 122 char ROMId [5]; 123 char CompanyId [3]; 124 uint8_t ROMSpeed; 125 uint8_t ROMType; 126 uint8_t ROMSize; 127 int32_t ROMFramesPerSecond; 128 int32_t HeaderCount; 129 uint32_t CalculatedSize; 130 uint32_t CalculatedChecksum; 131 uint32_t ROMChecksum; 132 uint32_t ROMComplementChecksum; 133 char ROMFilename [_MAX_PATH]; 134 uint8_t ROMRegion; 135 uint8_t ExtendedFormat; 136 uint8_t* BSRAM; 137 } CMemory; 138 139 void ResetSpeedMap(void); 140 141 extern CMemory Memory; 142 void S9xDeinterleaveMode2(void); 143 144 uint8_t S9xGetByte(uint32_t Address); 145 uint16_t S9xGetWord(uint32_t Address); 146 void S9xSetByte(uint8_t Byte, uint32_t Address); 147 void S9xSetWord(uint16_t Byte, uint32_t Address); 148 void S9xSetPCBase(uint32_t Address); 149 uint8_t* S9xGetMemPointer(uint32_t Address); 150 uint8_t* GetBasePointer(uint32_t Address); 151 152 extern uint8_t OpenBus; 153 #endif /* _memmap_h_ */ 154