fixed ticks to delay timer conversion

This commit is contained in:
2025-03-14 01:21:12 -04:00
parent 3c30d2a04f
commit af39b2ab07
2 changed files with 5 additions and 4 deletions

View File

@@ -145,16 +145,16 @@ void Interpreter::tick() {
case 0xF000: // several unique instructions
switch(inst & 0xF0FF) {
case 0xF007: // FX07 - read timer register
mvReg[iRegDst] = (mvSpecialReg[SR_T1] + mcTicksPerSecond - 1) / mcTicksPerSecond;
mvReg[iRegDst] = (mvSpecialReg[SR_T1] * scTimerFreq + (mcTicksPerSecond - 1)) / mcTicksPerSecond;
break;
case 0xF015: // FX15 - set timer register
mvSpecialReg[SR_T1] = mcTicksPerSecond * mvReg[iRegDst];
mvSpecialReg[SR_T1] = (mcTicksPerSecond * mvReg[iRegDst]) / scTimerFreq;
break;
case 0xF018: // FX18 - set sound timer register
if(mvSpecialReg[SR_T1] == 0 && mvReg[iRegDst] != 0) {
if(mvSpecialReg[SR_T2] == 0 && mvReg[iRegDst] != 0) {
mrBuzzer.on();
}
mvSpecialReg[SR_T1] = mcTicksPerSecond * mvReg[iRegDst];
mvSpecialReg[SR_T2] = (mcTicksPerSecond * mvReg[iRegDst]) / scTimerFreq;
break;
case 0xF01E: // FX1E - add to I
mvSpecialReg[SR_I] += mvReg[iRegDst];

View File

@@ -16,6 +16,7 @@ private:
public:
constexpr static sreg_t scLowRestFontAddr = 0x0000;
constexpr static sreg_t scResetVector = 0x0200;
constexpr static sreg_t scTimerFreq = 60;
constexpr static size_t scMemorySize = 4096;
enum {