mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
76 lines
No EOL
1.9 KiB
C++
76 lines
No EOL
1.9 KiB
C++
#pragma once
|
|
#include "pch.h"
|
|
#include "PCE/CdRom/PceScsiBus.h"
|
|
#include "PCE/CdRom/PceAdpcm.h"
|
|
#include "PCE/CdRom/PceCdAudioPlayer.h"
|
|
#include "PCE/CdRom/PceAudioFader.h"
|
|
#include "PCE/PceTypes.h"
|
|
#include "Shared/MemoryType.h"
|
|
#include "Shared/CdReader.h"
|
|
#include "Utilities/ISerializable.h"
|
|
|
|
class Emulator;
|
|
class PceConsole;
|
|
class PceMemoryManager;
|
|
|
|
class PceCdRom final : public ISerializable
|
|
{
|
|
private:
|
|
Emulator* _emu = nullptr;
|
|
PceConsole* _console = nullptr;
|
|
|
|
DiscInfo _disc;
|
|
PceScsiBus _scsi;
|
|
PceAdpcm _adpcm;
|
|
PceAudioFader _audioFader;
|
|
PceCdAudioPlayer _audioPlayer;
|
|
PceCdRomState _state = {};
|
|
uint64_t _latchChannelStamp = 0;
|
|
|
|
uint8_t* _cdromRam = nullptr;
|
|
uint32_t _cdromRamSize = 0;
|
|
uint8_t* _saveRam = nullptr;
|
|
uint32_t _saveRamSize = 0;
|
|
uint8_t* _orgSaveRam = nullptr;
|
|
|
|
void UpdateIrqState();
|
|
|
|
public:
|
|
PceCdRom(Emulator* emu, PceConsole* console, DiscInfo& disc);
|
|
~PceCdRom();
|
|
|
|
void SaveBattery();
|
|
void InitMemoryBanks(uint8_t* readBanks[0x100], uint8_t* writeBanks[0x100], MemoryType bankMemType[0x100], uint8_t* unmappedBank);
|
|
|
|
PceCdRomState& GetState() { return _state; }
|
|
PceScsiBusState& GetScsiState() { return _scsi.GetState(); }
|
|
PceAdpcmState& GetAdpcmState() { return _adpcm.GetState(); }
|
|
PceAudioFaderState& GetAudioFaderState() { return _audioFader.GetState(); }
|
|
PceCdAudioPlayerState& GetCdPlayerState() { return _audioPlayer.GetState(); }
|
|
|
|
__forceinline void Exec()
|
|
{
|
|
if(_scsi.NeedExec()) {
|
|
_scsi.Exec();
|
|
}
|
|
if(_adpcm.NeedExec()) {
|
|
_adpcm.Exec();
|
|
}
|
|
_audioPlayer.Exec();
|
|
}
|
|
|
|
PceCdAudioPlayer& GetAudioPlayer() { return _audioPlayer; }
|
|
PceAudioFader& GetAudioFader() { return _audioFader; }
|
|
|
|
uint32_t GetCurrentSector();
|
|
|
|
void ProcessAudioPlaybackStart();
|
|
|
|
void SetIrqSource(PceCdRomIrqSource src);
|
|
void ClearIrqSource(PceCdRomIrqSource src);
|
|
|
|
void Write(uint16_t addr, uint8_t value);
|
|
uint8_t Read(uint16_t addr);
|
|
|
|
void Serialize(Serializer& s) override;
|
|
}; |