StrikeBox/src/core/openxbox/hw/basic/i8254.h

40 lines
817 B
C
Raw Normal View History

#pragma once
#include <cstdint>
#include <thread>
#include "irq.h"
#include "openxbox/io.h"
namespace openxbox {
#define PORT_PIT_DATA_0 0x40
#define PORT_PIT_DATA_1 0x41
#define PORT_PIT_DATA_2 0x42
#define PORT_PIT_COMMAND 0x43
#define PORT_PIT_BASE PORT_PIT_DATA_0
#define PORT_PIT_COUNT (PORT_PIT_COMMAND - PORT_PIT_DATA_0 + 1)
class i8254 : public IODevice {
public:
i8254(IRQHandler *irqHandler, float tickRate = 1000.0f);
2018-03-16 18:59:33 -04:00
virtual ~i8254();
void Reset();
bool MapIO(IOMapper *mapper);
bool IORead(uint32_t port, uint32_t *value, uint8_t size) override;
bool IOWrite(uint32_t port, uint32_t value, uint8_t size) override;
void Run();
private:
IRQHandler *m_irqHandler;
float m_tickRate;
bool m_running;
std::thread m_timerThread;
};
}