Mesen-S/Core/Rtc4513.h
2020-02-16 21:11:01 -05:00

44 lines
1.1 KiB
C++

#pragma once
#include "stdafx.h"
#include "../Utilities/ISerializable.h"
class Console;
class Rtc4513 : public ISerializable
{
private:
Console* _console;
uint64_t _lastTime = 0;
uint8_t _enabled = 0;
int8_t _mode = -1;
int8_t _index = -1;
uint8_t _regs[0x10] = {};
bool IsReset() { return (_regs[0xF] & 0x01) != 0; }
bool IsStop() { return (_regs[0xF] & 0x02) != 0; }
bool IsHold() { return (_regs[0xD] & 0x01) != 0; }
uint8_t GetSeconds() { return _regs[0] + ((_regs[1] & 0x07) * 10); }
uint8_t GetMinutes() { return _regs[2] + ((_regs[3] & 0x07) * 10); }
uint8_t GetHours() { return _regs[4] + ((_regs[5] & 0x03) * 10); }
uint8_t GetDay() { return _regs[6] + ((_regs[7] & 0x03) * 10); }
uint8_t GetMonth() { return _regs[8] + ((_regs[9] & 0x01) * 10); }
uint8_t GetYear() { return _regs[10] + (_regs[11] * 10); }
uint8_t GetDoW() { return _regs[12] & 0x07; }
void UpdateTime();
public:
Rtc4513(Console* console);
virtual ~Rtc4513();
void LoadBattery();
void SaveBattery();
uint8_t Read(uint16_t addr);
void Write(uint16_t addr, uint8_t value);
void Serialize(Serializer& s) override;
};