fixed ticks to delay timer conversion
This commit is contained in:
@@ -145,16 +145,16 @@ void Interpreter::tick() {
|
|||||||
case 0xF000: // several unique instructions
|
case 0xF000: // several unique instructions
|
||||||
switch(inst & 0xF0FF) {
|
switch(inst & 0xF0FF) {
|
||||||
case 0xF007: // FX07 - read timer register
|
case 0xF007: // FX07 - read timer register
|
||||||
mvReg[iRegDst] = (mvSpecialReg[SR_T1] + mcTicksPerSecond - 1) / mcTicksPerSecond;
|
mvReg[iRegDst] = (mvSpecialReg[SR_T1] * scTimerFreq + (mcTicksPerSecond - 1)) / mcTicksPerSecond;
|
||||||
break;
|
break;
|
||||||
case 0xF015: // FX15 - set timer register
|
case 0xF015: // FX15 - set timer register
|
||||||
mvSpecialReg[SR_T1] = mcTicksPerSecond * mvReg[iRegDst];
|
mvSpecialReg[SR_T1] = (mcTicksPerSecond * mvReg[iRegDst]) / scTimerFreq;
|
||||||
break;
|
break;
|
||||||
case 0xF018: // FX18 - set sound timer register
|
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();
|
mrBuzzer.on();
|
||||||
}
|
}
|
||||||
mvSpecialReg[SR_T1] = mcTicksPerSecond * mvReg[iRegDst];
|
mvSpecialReg[SR_T2] = (mcTicksPerSecond * mvReg[iRegDst]) / scTimerFreq;
|
||||||
break;
|
break;
|
||||||
case 0xF01E: // FX1E - add to I
|
case 0xF01E: // FX1E - add to I
|
||||||
mvSpecialReg[SR_I] += mvReg[iRegDst];
|
mvSpecialReg[SR_I] += mvReg[iRegDst];
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
constexpr static sreg_t scLowRestFontAddr = 0x0000;
|
constexpr static sreg_t scLowRestFontAddr = 0x0000;
|
||||||
constexpr static sreg_t scResetVector = 0x0200;
|
constexpr static sreg_t scResetVector = 0x0200;
|
||||||
|
constexpr static sreg_t scTimerFreq = 60;
|
||||||
constexpr static size_t scMemorySize = 4096;
|
constexpr static size_t scMemorySize = 4096;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|||||||
Reference in New Issue
Block a user