17 auto location = 0x7FC0;
18 rom_size_ = 0x400 << rom_data[location + 0x17];
19 sram_size_ = 0x400 << rom_data[location + 0x18];
23 const size_t copy_size = std::min<size_t>(
rom_size_, rom_data.size());
24 std::copy(rom_data.begin(), rom_data.begin() + copy_size,
rom_.begin());
27 std::fill(
ram_.begin(),
ram_.end(), 0);
29 LOG_DEBUG(
"Memory",
"LoROM initialized: ROM size=$%06X (%zuKB) SRAM size=$%04X",
31 LOG_DEBUG(
"Memory",
"Reset vector at ROM offset $7FFC-$7FFD = $%02X%02X",
32 rom_data[0x7FFD], rom_data[0x7FFC]);
68 if (((bank >= 0x70 && bank < 0x7e) || bank >= 0xf0) && adr < 0x8000 &&
76 if (adr >= 0x8000 || bank >= 0x40) {
77 uint32_t rom_offset = ((bank << 15) | (adr & 0x7fff)) & (
rom_size_ - 1);
78 return rom_[rom_offset];
85 if (((bank >= 0x70 && bank < 0x7e) || bank > 0xf0) && adr < 0x8000 &&
94 if (bank < 0x40 && adr >= 0x6000 && adr < 0x8000 && sram_size_ > 0) {
96 return ram_[(((bank & 0x3f) << 13) | (adr & 0x1fff)) & (
sram_size_ - 1)];
98 if (adr >= 0x8000 || bank >= 0x40) {
100 return rom_[(((bank & 0x3f) << 16) | adr) & (
rom_size_ - 1)];
106 if ((bank & 0x7f) < 0x40 && adr >= 0x6000 && adr < 0x8000 && sram_size_ > 0) {
108 return ram_[(((bank & 0x3f) << 13) | (adr & 0x1fff)) & (
sram_size_ - 1)];
110 bool secondHalf = bank < 0x80;
112 if (adr >= 0x8000 || bank >= 0x40) {
114 return rom_[(((bank & 0x3f) << 16) | (secondHalf ? 0x400000 : 0) | adr) &
122 if (bank < 0x40 && adr >= 0x6000 && adr < 0x8000 && sram_size_ > 0) {
124 ram_[(((bank & 0x3f) << 13) | (adr & 0x1fff)) & (
sram_size_ - 1)] = val;
std::vector< uint8_t > rom_
std::vector< uint8_t > ram_
uint8_t cart_readHirom(uint8_t bank, uint16_t adr)
uint32_t GetMappedAddress(uint32_t address) const
uint8_t cart_read(uint8_t bank, uint16_t adr)
void cart_writeLorom(uint8_t bank, uint16_t adr, uint8_t val)
uint8_t cart_readLorom(uint8_t bank, uint16_t adr)
uint8_t cart_readExHirom(uint8_t bank, uint16_t adr)
void cart_write(uint8_t bank, uint16_t adr, uint8_t val)
void cart_writeHirom(uint8_t bank, uint16_t adr, uint8_t val)
void Initialize(const std::vector< uint8_t > &romData, bool verbose=false)
#define LOG_DEBUG(category, format,...)
Main namespace for the application.