Browse Source

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.
pull/340/head v3.2.1-rc.1
Wayne Warthen 3 years ago
parent
commit
53e201bd28
  1. 21
      Source/HBIOS/hbios.asm
  2. 2
      Source/ver.inc
  3. 2
      Source/ver.lib

21
Source/HBIOS/hbios.asm

@ -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
@ -6367,12 +6368,12 @@ HB_RDSEC:
LD A,E ; VALUE TO A
RET
;
#ELSE
#ENDIF
;
HB_CPUSPD2:
; HANDLE NO RTC OR NOT TICKING
OR $FF ; SIGNAL ERROR
RET ; NO RTC, ABORT
;
#ENDIF
RET ; AND DONE
;
; SYSTEM CHECK: DUMP MACHINE STATE AND CONTINUE?
;

2
Source/ver.inc

@ -2,7 +2,7 @@
#DEFINE RMN 2
#DEFINE RUP 1
#DEFINE RTP 0
#DEFINE BIOSVER "3.2.1-rc.0"
#DEFINE BIOSVER "3.2.1-rc.1"
#define rmj RMJ
#define rmn RMN
#define rup RUP

2
Source/ver.lib

@ -3,5 +3,5 @@ rmn equ 2
rup equ 1
rtp equ 0
biosver macro
db "3.2.1-rc.0"
db "3.2.1-rc.1"
endm

Loading…
Cancel
Save