80 lines
No EOL
1.7 KiB
C++
80 lines
No EOL
1.7 KiB
C++
#pragma once
|
|
#include "stdafx.h"
|
|
#include "BaseCoprocessor.h"
|
|
#include "../Utilities/HermiteResampler.h"
|
|
|
|
class Console;
|
|
class MemoryManager;
|
|
class BaseCartridge;
|
|
class Spc;
|
|
class Gameboy;
|
|
class GbPpu;
|
|
|
|
class SuperGameboy : public BaseCoprocessor
|
|
{
|
|
private:
|
|
Console* _console = nullptr;
|
|
MemoryManager* _memoryManager = nullptr;
|
|
BaseCartridge* _cart = nullptr;
|
|
Spc* _spc = nullptr;
|
|
Gameboy* _gameboy = nullptr;
|
|
GbPpu* _ppu = nullptr;
|
|
|
|
uint8_t _control = 0;
|
|
uint64_t _resetClock = 0;
|
|
double _clockRatio = 0;
|
|
|
|
uint8_t _input[4] = {};
|
|
uint8_t _inputIndex = 0;
|
|
|
|
bool _listeningForPacket = false;
|
|
bool _waitForHigh = true;
|
|
bool _packetReady = false;
|
|
uint64_t _inputWriteClock = 0;
|
|
uint8_t _inputValue = 0;
|
|
uint8_t _packetData[16] = {};
|
|
uint8_t _packetByte = 0;
|
|
uint8_t _packetBit = 0;
|
|
|
|
uint8_t _lcdRowSelect = 0;
|
|
uint16_t _readPosition = 0;
|
|
uint8_t _lcdBuffer[4][1280] = {};
|
|
|
|
HermiteResampler _resampler;
|
|
int16_t* _mixBuffer = nullptr;
|
|
uint32_t _mixSampleCount = 0;
|
|
|
|
uint8_t GetLcdRow();
|
|
uint8_t GetLcdBufferRow();
|
|
uint8_t GetPlayerCount();
|
|
|
|
public:
|
|
SuperGameboy(Console* console);
|
|
~SuperGameboy();
|
|
|
|
void Reset() override;
|
|
|
|
uint8_t Read(uint32_t addr) override;
|
|
void Write(uint32_t addr, uint8_t value) override;
|
|
|
|
void Run() override;
|
|
|
|
void ProcessInputPortWrite(uint8_t value);
|
|
|
|
void LogPacket();
|
|
|
|
void WriteLcdColor(uint8_t scanline, uint8_t pixel, uint8_t color);
|
|
|
|
void MixAudio(uint32_t targetRate, int16_t* soundSamples, uint32_t sampleCount);
|
|
|
|
void UpdateClockRatio();
|
|
uint32_t GetClockRate();
|
|
|
|
uint8_t GetInputIndex();
|
|
uint8_t GetInput();
|
|
|
|
uint8_t Peek(uint32_t addr) override;
|
|
void PeekBlock(uint32_t addr, uint8_t* output) override;
|
|
AddressInfo GetAbsoluteAddress(uint32_t address) override;
|
|
void Serialize(Serializer& s) override;
|
|
}; |