/*****************************************************************************\ Snes9x - Portable Super Nintendo Entertainment System (TM) emulator. This file is licensed under the Snes9x License. For further information, consult the LICENSE file in the root directory. \*****************************************************************************/ #pragma once #include #include inline constexpr int32_t MEMMAP_BLOCK_SIZE = 0x1000; inline constexpr size_t MEMMAP_NUM_BLOCKS = 0x1000000 / MEMMAP_BLOCK_SIZE; inline constexpr uint32_t MEMMAP_SHIFT = 12; inline constexpr uint32_t MEMMAP_MASK = MEMMAP_BLOCK_SIZE - 1; struct CMemory { enum { MAX_ROM_SIZE = 0x800000 }; enum { NOPE, YEAH, BIGFIRST, SMALLFIRST }; enum { MAP_TYPE_I_O, MAP_TYPE_RAM }; enum { MAP_CPU, MAP_PPU, MAP_LOROM_SRAM, MAP_HIROM_SRAM, MAP_SA1RAM, MAP_RONLY_SRAM, MAP_NONE, MAP_LAST }; std::unique_ptr RAM; std::unique_ptr RealROM; uint8_t *ROM; std::unique_ptr SRAM; std::unique_ptr VRAM; uint8_t *FillRAM; uint8_t *Map[MEMMAP_NUM_BLOCKS]; uint8_t *WriteMap[MEMMAP_NUM_BLOCKS]; uint8_t BlockIsRAM[MEMMAP_NUM_BLOCKS]; uint8_t BlockIsROM[MEMMAP_NUM_BLOCKS]; uint8_t ExtendedFormat; char ROMName[ROM_NAME_LEN]; char ROMId[5]; uint8_t ROMRegion; uint8_t ROMSpeed; uint8_t ROMType; bool HiROM; bool LoROM; uint8_t SRAMSize; uint32_t SRAMMask; uint32_t CalculatedSize; bool Init(); void Deinit(); int ScoreHiROM(bool, int32_t romoff = 0); int ScoreLoROM(bool, int32_t romoff = 0); int First512BytesCountZeroes() const; bool LoadROMSNSF(const uint8_t *, int32_t, const uint8_t *, int32_t); char *Safe(const char *); void ParseSNESHeader(uint8_t *); void InitROM(); uint32_t map_mirror(uint32_t, uint32_t); void map_lorom(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); void map_hirom(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); void map_lorom_offset(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); void map_hirom_offset(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); void map_space(uint32_t, uint32_t, uint32_t, uint32_t, uint8_t *); void map_index(uint32_t, uint32_t, uint32_t, uint32_t, int, int); void map_System(); void map_WRAM(); void map_LoROMSRAM(); void map_HiROMSRAM(); void map_WriteProtectROM(); void Map_Initialize(); void Map_LoROMMap(); void Map_NoMAD1LoROMMap(); void Map_JumboLoROMMap(); void Map_ROM24MBSLoROMMap(); void Map_SRAM512KLoROMMap(); void Map_SDD1LoROMMap(); void Map_HiROMMap(); void Map_ExtendedHiROMMap(); bool match_na(const char *); bool match_nn(const char *); bool match_id(const char *); void ApplyROMFixes(); }; extern CMemory Memory; enum s9xwrap_t { WRAP_NONE, WRAP_BANK, WRAP_PAGE }; enum s9xwriteorder_t { WRITE_01, WRITE_10 }; #include "getset.h"