aboutsummaryrefslogtreecommitdiff
path: root/include/hw/misc
diff options
context:
space:
mode:
authorMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>2023-10-04 09:38:00 +0100
committerLaurent Vivier <laurent@vivier.eu>2023-10-06 10:33:43 +0200
commit366d27796ca1d09d6b6a6ad69a89cb7644d92930 (patch)
tree46ea26b3950d1e1cd407e889a247f4cc63a71111 /include/hw/misc
parent994af0b2e020a91729a39f8c4af4a522ccd3a556 (diff)
downloadqemu-366d27796ca1d09d6b6a6ad69a89cb7644d92930.zip
qemu-366d27796ca1d09d6b6a6ad69a89cb7644d92930.tar.gz
qemu-366d27796ca1d09d6b6a6ad69a89cb7644d92930.tar.bz2
mac_via: work around underflow in TimeDBRA timing loop in SETUPTIMEK
The MacOS toolbox ROM calculates the number of branches that can be executed per millisecond as part of its timer calibration. Since modern hosts are considerably quicker than original hardware, the negative counter reaches zero before the calibration completes leading to division by zero later in CALCULATESLOD. Instead of trying to fudge the timing loop (which won't work for TimeDBRA/TimeSCCDB anyhow), use the pattern of access to the VIA1 registers to detect when SETUPTIMEK has finished executing and write some well-known good timer values to TimeDBRA and TimeSCCDB taken from real hardware with a suitable scaling factor. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-ID: <20231004083806.757242-15-mark.cave-ayland@ilande.co.uk> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Diffstat (limited to 'include/hw/misc')
-rw-r--r--include/hw/misc/mac_via.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h
index 422da43..63cdcf7 100644
--- a/include/hw/misc/mac_via.h
+++ b/include/hw/misc/mac_via.h
@@ -74,6 +74,9 @@ struct MOS6522Q800VIA1State {
int64_t next_second;
QEMUTimer *sixty_hz_timer;
int64_t next_sixty_hz;
+
+ /* SETUPTIMEK hack */
+ int timer_hack_state;
};