dosgame1/system/Timer.h

50 lines
699 B
C++

#ifndef TICKS_H
#define TICKS_H
#include <cstdint>
#ifdef BUILD_SDL
#else
#include <dpmi.h>
#endif
class Timer {
public:
using Callback = void (*)();
Timer();
~Timer();
void setFrequency(uint16_t freq);
void setDivider(uint16_t div);
Callback setCallback(Callback);
[[nodiscard]] uint32_t getTicks() const;
[[nodiscard]] uint16_t getFrequency() const;
static Timer &instance();
private:
friend void timerISR();
#ifdef BUILD_SDL
#else
_go32_dpmi_seginfo _oldIsr{}, _newIsr{};
#endif
uint32_t _ticks{0};
uint32_t _elapsed{0};
uint16_t _div{0};
uint16_t _freq{0};
void (*_callback)(){nullptr};
void update();
};
#endif