void BaseMapper::ProcessNotification(ConsoleNotificationType type, void* parameter) { switch(type) { case ConsoleNotificationType::CheatAdded: case ConsoleNotificationType::CheatRemoved: ApplyCheats(); break; default: break; } }
void EmuUpdate() { // Do not allow hotkeys inside a softcall from HLE BIOS if (!Config.HLE || !hleSoftCall) SysUpdate(); ApplyCheats(); // reamed hack { extern void pl_frame_limit(void); pl_frame_limit(); } }
void EmuUpdate() { // Do not allow hotkeys inside a softcall from HLE BIOS if (!Config.HLE || !hleSoftCall) SysUpdate(); ApplyCheats(); if (vblank_count_hideafter) { if (!(--vblank_count_hideafter)) { GPU_showScreenPic(NULL); } } if (Config.RewindInterval > 0 && !(++rewind_counter%Config.RewindInterval)) { CreateRewindState(); } }
void BaseMapper::Initialize(RomData &romData) { _mapperID = romData.MapperID; _subMapperID = romData.SubMapperID; _databaseInfo = romData.DatabaseInfo; _romName = romData.RomName; _romFilename = romData.Filename; _batteryFilename = GetBatteryFilename(); _hasBattery = (romData.HasBattery || ForceBattery()); if(romData.SaveRamSize == -1 || ForceSaveRamSize()) { _saveRamSize = GetSaveRamSize(); } else { _saveRamSize = romData.SaveRamSize; } if(_saveRamSize == 0) { _hasBattery = false; } if(romData.WorkRamSize == -1 || ForceWorkRamSize()) { _workRamSize = GetWorkRamSize(); } else { _workRamSize = romData.WorkRamSize; } _allowRegisterRead = AllowRegisterRead(); memset(_isReadRegisterAddr, 0, sizeof(_isReadRegisterAddr)); memset(_isWriteRegisterAddr, 0, sizeof(_isWriteRegisterAddr)); AddRegisterRange(RegisterStartAddress(), RegisterEndAddress(), MemoryOperation::Any); _nesHeader = romData.NesHeader; _romFormat = romData.Format; _mirroringType = romData.Mirroring; _prgSize = (uint32_t)romData.PrgRom.size(); _chrRomSize = (uint32_t)romData.ChrRom.size(); _originalPrgRom = romData.PrgRom; _originalChrRom = romData.ChrRom; _prgRom = new uint8_t[_prgSize]; _chrRom = new uint8_t[_chrRomSize]; memcpy(_prgRom, romData.PrgRom.data(), _prgSize); if(_chrRomSize > 0) { memcpy(_chrRom, romData.ChrRom.data(), _chrRomSize); } _hasChrBattery = romData.SaveChrRamSize > 0 || ForceChrBattery(); _gameSystem = romData.System; _hashInfo.Crc32Hash = romData.Crc32; _hashInfo.PrgCrc32Hash = romData.PrgCrc32; _hashInfo.PrgChrCrc32Hash = romData.PrgChrCrc32; _hashInfo.Sha1Hash = romData.Sha1; _hashInfo.PrgChrMd5Hash = romData.PrgChrMd5; switch(romData.BusConflicts) { case BusConflictType::Default: _hasBusConflicts = HasBusConflicts(); break; case BusConflictType::Yes: _hasBusConflicts = true; break; case BusConflictType::No: _hasBusConflicts = false; break; } _saveRam = new uint8_t[_saveRamSize]; _workRam = new uint8_t[_workRamSize]; BaseMapper::InitializeRam(_saveRam, _saveRamSize); BaseMapper::InitializeRam(_workRam, _workRamSize); memset(_prgPageNumbers, 0xEE, sizeof(_prgPageNumbers)); memset(_chrPageNumbers, 0xEE, sizeof(_chrPageNumbers)); memset(_cartNametableRam, 0, sizeof(_cartNametableRam)); memset(_nametableIndexes, 0, sizeof(_nametableIndexes)); for(int i = 0; i <= 0xFF; i++) { //Allow us to map a different page every 256 bytes _prgPages[i] = nullptr; _prgPageAccessType[i] = MemoryAccessType::NoAccess; _chrPages[i] = nullptr; _chrPageAccessType[i] = MemoryAccessType::NoAccess; } if(_chrRomSize == 0) { //Assume there is CHR RAM if no CHR ROM exists _onlyChrRam = true; InitializeChrRam(romData.ChrRamSize); //Map CHR RAM to 0x0000-0x1FFF by default when no CHR ROM exists SetPpuMemoryMapping(0x0000, 0x1FFF, 0, ChrMemoryType::ChrRam); _chrRomSize = _chrRamSize; } else if(romData.ChrRamSize >= 0) { InitializeChrRam(romData.ChrRamSize); } else if(GetChrRamSize()) { InitializeChrRam(); } //Load battery data if present LoadBattery(); if(romData.HasTrainer) { if(_workRamSize >= 0x2000) { memcpy(_workRam + 0x1000, romData.TrainerData.data(), 512); } else if(_saveRamSize >= 0x2000) { memcpy(_saveRam + 0x1000, romData.TrainerData.data(), 512); } } //Setup a default work/save ram in 0x6000-0x7FFF space if(HasBattery() && _saveRamSize > 0) { SetCpuMemoryMapping(0x6000, 0x7FFF, 0, PrgMemoryType::SaveRam); } else if(_workRamSize > 0) { SetCpuMemoryMapping(0x6000, 0x7FFF, 0, PrgMemoryType::WorkRam); } InitMapper(); InitMapper(romData); MessageManager::RegisterNotificationListener(this); ApplyCheats(); }