Handle Overflow in CPUSPD

Edge case where the CPU speed detection routine would overflow in a fast emulator and return a speed of 0.000 MHz.  Modified to fail back to the default CPU speed from the config file if an overflow occurs.
This commit is contained in:
Wayne Warthen
2023-04-09 12:48:36 -07:00
parent 51d962aeab
commit 53e201bd28
3 changed files with 14 additions and 13 deletions

View File

@@ -1908,7 +1908,7 @@ HB_CPU1:
; LATER.
;
CALL HB_CPUSPD ; DYNAMIC CPU SPEED DETECTION
JR NZ,HB_CPUSPD2 ; SKIP AHEAD IF FAILED
JR NZ,HB_CPU2 ; SKIP AHEAD IF FAILED
;
; RECORD THE UPDATED CPU OSCILLATOR SPEED
;
@@ -1921,7 +1921,7 @@ HB_CPU1:
;
LD (HB_CPUOSC),HL ; RECORD MEASURED SPEED
;
HB_CPUSPD2:
HB_CPU2:
;
; INIT CPUKHZ BASED ON OSCILLATOR SPEED
;
@@ -6299,14 +6299,15 @@ HB_CPUSPD1:
POP AF
OUT0 (Z180_DCNTL),A
#ENDIF
;
LD A,H
OR L
RET Z ; FAILURE, USE DEFAULT CPU SPEED
;
; MOVE LOOP COUNT TO HL
PUSH DE
POP HL
;
; CHECK FOR OVERFLOW (NOT TICKING)
LD A,H
OR L
JR Z,HB_CPUSPD2 ; FAILURE, USE DEFAULT CPU SPEED
;
; TIMES 4 FOR CPU SPEED IN KHZ
; RES 0,L ; GRANULARITY
@@ -6366,14 +6367,14 @@ HB_RDSEC:
CALL DSRTC_END ; FINISH IT
LD A,E ; VALUE TO A
RET
;
#ELSE
;
OR $FF ; SIGNAL ERROR
RET ; NO RTC, ABORT
;
#ENDIF
;
HB_CPUSPD2:
; HANDLE NO RTC OR NOT TICKING
OR $FF ; SIGNAL ERROR
RET ; AND DONE
;
; SYSTEM CHECK: DUMP MACHINE STATE AND CONTINUE?
;
SYSCHKA: