50 lines
692 B
C++
50 lines
692 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;
|
|
|
|
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();
|
|
};
|
|
|
|
extern Timer timer;
|
|
|
|
#endif
|