[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 24/24] mac_via: fix rtc command decoding for the PRAM seconds regi
From: |
Laurent Vivier |
Subject: |
[PULL 24/24] mac_via: fix rtc command decoding for the PRAM seconds registers |
Date: |
Thu, 22 Jun 2023 09:55:44 +0200 |
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Analysis of the MacOS toolbox ROM code shows that on startup it attempts 2
separate reads of the seconds registers with commands 0x9d...0x91 followed by
0x8d..0x81 without resetting the command to its initial value. The PRAM seconds
value is only accepted when the values of the 2 separate reads match.
>From this we conclude that bit 4 of the rtc command is not decoded or we don't
care about its value when reading the PRAM seconds registers. Implement this
decoding change so that both reads return successfully which allows the MacOS
toolbox ROM to correctly set the date/time.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20230621085353.113233-25-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
hw/misc/mac_via.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index 85c2e65856eb..0787a0268d17 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -362,10 +362,10 @@ static void pram_update(MOS6522Q800VIA1State *v1s)
*
* Command byte Register addressed by the command
*
- * z0000001 Seconds register 0 (lowest-order byte)
- * z0000101 Seconds register 1
- * z0001001 Seconds register 2
- * z0001101 Seconds register 3 (highest-order byte)
+ * z00x0001 Seconds register 0 (lowest-order byte)
+ * z00x0101 Seconds register 1
+ * z00x1001 Seconds register 2
+ * z00x1101 Seconds register 3 (highest-order byte)
* 00110001 Test register (write-only)
* 00110101 Write-Protect Register (write-only)
* z010aa01 RAM address 100aa ($10-$13) (first 20 bytes only)
@@ -373,6 +373,7 @@ static void pram_update(MOS6522Q800VIA1State *v1s)
* z0111aaa Extended memory designator and sector number
*
* For a read request, z=1, for a write z=0
+ * The letter x indicates don't care
* The letter a indicates bits whose value depend on what parameter
* RAM byte you want to address
*/
@@ -389,7 +390,7 @@ static int via1_rtc_compact_cmd(uint8_t value)
}
if ((value & 0x03) == 0x01) {
value >>= 2;
- if ((value & 0x1c) == 0) {
+ if ((value & 0x18) == 0) {
/* seconds registers */
return read | (REG_0 + (value & 0x03));
} else if ((value == 0x0c) && !read) {
--
2.40.1
- [PULL 12/24] q800: move VIA1 device to Q800MachineState, (continued)
- [PULL 12/24] q800: move VIA1 device to Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 03/24] q800: introduce Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 02/24] q800: add missing space after parent object in GLUEState, Laurent Vivier, 2023/06/22
- [PULL 10/24] q800: introduce mac-io container memory region, Laurent Vivier, 2023/06/22
- [PULL 17/24] q800: move escc_orgate device to Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 14/24] hw/net/dp8393x.c: move TYPE_DP8393X and dp8393xState into dp8393x.h, Laurent Vivier, 2023/06/22
- [PULL 21/24] q800: don't access Nubus bus directly from the mac-nubus-bridge device, Laurent Vivier, 2023/06/22
- [PULL 15/24] q800: move dp8393x device to Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 09/24] q800: move GLUE device to Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 23/24] mac_via: fix rtc command decoding from PRAM addresses 0x0 to 0xf, Laurent Vivier, 2023/06/22
- [PULL 24/24] mac_via: fix rtc command decoding for the PRAM seconds registers,
Laurent Vivier <=
- [PULL 08/24] q800-glue.c: switch TypeInfo registration to use DEFINE_TYPES() macro, Laurent Vivier, 2023/06/22
- [PULL 11/24] q800: reimplement mac-io region aliasing using IO memory region, Laurent Vivier, 2023/06/22
- [PULL 06/24] q800: move ROM memory region to Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 13/24] q800: move VIA2 device to Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 16/24] q800: move ESCC device to Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 07/24] q800: move GLUE device into separate q800-glue.c file, Laurent Vivier, 2023/06/22
- [PULL 18/24] q800: move ESP device to Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 20/24] q800: move mac-nubus-bridge device to Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 05/24] q800: move CPU object into Q800MachineState, Laurent Vivier, 2023/06/22
- [PULL 19/24] q800: move SWIM device to Q800MachineState, Laurent Vivier, 2023/06/22