fixed ticks to delay timer conversion
This commit is contained in:
@@ -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];
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user