mirror of
https://github.com/OpenDriver2/REDRIVER2.git
synced 2024-11-25 11:52:32 +01:00
97e738ba36
- re-arrange includes
199 lines
2.5 KiB
C
199 lines
2.5 KiB
C
|
|
#include "driver2.h"
|
|
#include "sysclock.h"
|
|
|
|
tmr_func tmrsub[8];
|
|
|
|
int timerflag = 0;
|
|
int timerhz;
|
|
int reentryflag;
|
|
|
|
long tickset;
|
|
long tickval;
|
|
long ticks;
|
|
long libticks = 0;
|
|
long g_currentthread = 1;
|
|
long timerevent;
|
|
|
|
void resettick()
|
|
{
|
|
tickset = 0;
|
|
tickval = 0;
|
|
ticks = 0;
|
|
}
|
|
|
|
void initgp()
|
|
{
|
|
}
|
|
|
|
void savegp(long* st)
|
|
{
|
|
}
|
|
|
|
void restoregp(long gp)
|
|
{
|
|
}
|
|
|
|
// process timer interrupt
|
|
long tmrint(void)
|
|
{
|
|
tmr_func* ptmr;
|
|
int i;
|
|
long _saved_gp;
|
|
|
|
savegp(&_saved_gp);
|
|
|
|
ptmr = tmrsub;
|
|
|
|
ticks++;
|
|
g_currentthread = 1;
|
|
libticks++;
|
|
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
if (tmrsub[i] != NULL)
|
|
(tmrsub[i])();
|
|
|
|
ptmr++;
|
|
}
|
|
|
|
g_currentthread = 0;
|
|
restoregp(_saved_gp);
|
|
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
void timedwait(long ms)
|
|
{
|
|
long oldTick;
|
|
|
|
oldTick = gettick();
|
|
|
|
while (gettick() - (oldTick + ms) < 0)
|
|
systemtask(0);
|
|
|
|
return;
|
|
}*/
|
|
|
|
void addtimer(tmr_func func)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
if (tmrsub[i] == func) // already added?
|
|
return;
|
|
|
|
if (tmrsub[i] == NULL)
|
|
{
|
|
tmrsub[i] = func;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void restoretimer()
|
|
{
|
|
DisableEvent(timerevent);
|
|
timerflag = 0;
|
|
}
|
|
|
|
void reinittimer()
|
|
{
|
|
EnableEvent(timerevent);
|
|
timerflag = 1;
|
|
}
|
|
|
|
void inittimer(int hz)
|
|
{
|
|
if (hz == 0)
|
|
hz = 100;
|
|
|
|
EnterCriticalSection();
|
|
|
|
if (timerflag == 0)
|
|
{
|
|
memset((u_char*)&tmrsub, 0, sizeof(tmrsub));
|
|
|
|
timerevent = OpenEvent(RCntCNT2, 2, RCntMdINTR, tmrint);
|
|
EnableEvent(timerevent);
|
|
timerflag = 1;
|
|
|
|
//addexit(restoretimer);
|
|
}
|
|
|
|
initgp();
|
|
|
|
if (hz == 0) {
|
|
trap(0x1c00);
|
|
}
|
|
if ((hz == -1) && (false)) {
|
|
trap(0x1800);
|
|
}
|
|
|
|
reentryflag = 0;
|
|
timerhz = hz;
|
|
|
|
SetRCnt(RCntCNT2, (4233600 / hz), EvSpTRAP);
|
|
StartRCnt(RCntCNT2);
|
|
|
|
ExitCriticalSection();
|
|
resettick();
|
|
|
|
//addexit(restoretimer);
|
|
}
|
|
|
|
Clock_tGameClock clock_realTime;
|
|
int clock_InterruptStarted;
|
|
int generic128HzClock = 0;
|
|
int stopClock = 0;
|
|
|
|
void Clock_MasterInterruptHandler(void)
|
|
{
|
|
long oldgp;
|
|
|
|
savegp(&oldgp);
|
|
|
|
if (stopClock == 0)
|
|
{
|
|
clock_realTime.time128Hz++;
|
|
generic128HzClock++;
|
|
|
|
if ((clock_realTime.time128Hz & 1U) == 0)
|
|
{
|
|
clock_realTime.time64Hz++;
|
|
|
|
if ((clock_realTime.time64Hz & 1U) == 0)
|
|
{
|
|
clock_realTime.time32Hz++;
|
|
|
|
if ((clock_realTime.time32Hz & 1U) == 0)
|
|
{
|
|
//Input_Update__Fv();
|
|
}
|
|
|
|
//Input_Store__Fv();
|
|
}
|
|
}
|
|
}
|
|
|
|
restoregp(oldgp);
|
|
}
|
|
|
|
void Clock_SystemStartUp(void)
|
|
{
|
|
stopClock = 0;
|
|
generic128HzClock = 0;
|
|
|
|
if (clock_InterruptStarted == 0)
|
|
{
|
|
clock_InterruptStarted = 1;
|
|
|
|
addtimer(Clock_MasterInterruptHandler);
|
|
|
|
clock_realTime.time128Hz = 0;
|
|
clock_realTime.time64Hz = 0;
|
|
clock_realTime.time32Hz = 0;
|
|
}
|
|
} |