mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
70 lines
1.1 KiB
C++
70 lines
1.1 KiB
C++
#pragma once
|
|
#include "pch.h"
|
|
#include "Utilities/ISerializable.h"
|
|
#include "Utilities/Serializer.h"
|
|
|
|
class Emulator;
|
|
|
|
class BaseEeprom24C0X : public ISerializable
|
|
{
|
|
protected:
|
|
enum class Mode
|
|
{
|
|
Idle = 0,
|
|
Address = 1,
|
|
Read = 2,
|
|
Write = 3,
|
|
SendAck = 4,
|
|
WaitAck = 5,
|
|
ChipAddress = 6
|
|
};
|
|
|
|
Emulator* _emu = nullptr;
|
|
|
|
Mode _mode = Mode::Idle;
|
|
Mode _nextMode = Mode::Idle;
|
|
uint8_t _chipAddress = 0;
|
|
uint8_t _address = 0;
|
|
uint8_t _data = 0;
|
|
uint8_t _counter = 0;
|
|
uint8_t _output = 0;
|
|
uint8_t _prevScl = 0;
|
|
uint8_t _prevSda = 0;
|
|
uint8_t _romData[256] = {};
|
|
|
|
void Serialize(Serializer& s) override
|
|
{
|
|
SVArray(_romData, 256);
|
|
SV(_mode);
|
|
SV(_nextMode);
|
|
SV(_chipAddress);
|
|
SV(_address);
|
|
SV(_data);
|
|
SV(_counter);
|
|
SV(_output);
|
|
SV(_prevScl);
|
|
SV(_prevSda);
|
|
}
|
|
|
|
public:
|
|
virtual ~BaseEeprom24C0X() = default;
|
|
|
|
virtual void Write(uint8_t scl, uint8_t sda) = 0;
|
|
virtual void SaveBattery() = 0;
|
|
|
|
uint8_t Read()
|
|
{
|
|
return _output;
|
|
}
|
|
|
|
void WriteScl(uint8_t scl)
|
|
{
|
|
Write(scl, _prevSda);
|
|
}
|
|
|
|
void WriteSda(uint8_t sda)
|
|
{
|
|
Write(_prevScl, sda);
|
|
}
|
|
};
|
|
|