[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 17/20] mac_via: always clear ADB interrupt when switching to A/UX
|
From: |
Laurent Vivier |
|
Subject: |
[PULL 17/20] mac_via: always clear ADB interrupt when switching to A/UX mode |
|
Date: |
Sun, 8 Oct 2023 08:23:46 +0200 |
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
When the NetBSD kernel initialises it can leave the ADB interrupt asserted
depending upon where in the ADB poll cycle the MacOS ADB interrupt handler
is when the NetBSD kernel disables interrupts.
The NetBSD ADB driver uses the ADB interrupt state to determine if the ADB
is busy and refuses to send ADB commands unless it is clear. To ensure that
this doesn't happen, always clear the ADB interrupt when switching to A/UX
mode to ensure that the bus enumeration always occurs.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-ID: <20231004083806.757242-18-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
hw/misc/mac_via.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index 3c41d6263d45..500ece5872bd 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -875,6 +875,15 @@ static void via1_auxmode_update(MOS6522Q800VIA1State *v1s)
if (irq != oldirq) {
trace_via1_auxmode(irq);
qemu_set_irq(v1s->auxmode_irq, irq);
+
+ /*
+ * Clear the ADB interrupt. MacOS can leave VIA1B_vADBInt asserted
+ * (low) if a poll sequence doesn't complete before NetBSD disables
+ * interrupts upon boot. Fortunately NetBSD switches to the so-called
+ * "A/UX" interrupt mode after it initialises, so we can use this as
+ * a convenient place to clear the ADB interrupt for now.
+ */
+ s->b |= VIA1B_vADBInt;
}
}
--
2.41.0
- [PULL 07/20] audio: add Apple Sound Chip (ASC) emulation, (continued)
- [PULL 07/20] audio: add Apple Sound Chip (ASC) emulation, Laurent Vivier, 2023/10/08
- [PULL 09/20] q800: add Apple Sound Chip (ASC) audio to machine, Laurent Vivier, 2023/10/08
- [PULL 10/20] q800: add easc bool machine class property to switch between ASC and EASC, Laurent Vivier, 2023/10/08
- [PULL 11/20] swim: add trace events for IWM and ISM registers, Laurent Vivier, 2023/10/08
- [PULL 12/20] swim: split into separate IWM and ISM register blocks, Laurent Vivier, 2023/10/08
- [PULL 13/20] swim: update IWM/ISM register block decoding, Laurent Vivier, 2023/10/08
- [PULL 14/20] mac_via: work around underflow in TimeDBRA timing loop in SETUPTIMEK, Laurent Vivier, 2023/10/08
- [PULL 15/20] mac_via: workaround NetBSD ADB bus enumeration issue, Laurent Vivier, 2023/10/08
- [PULL 16/20] mac_via: implement ADB_STATE_IDLE state if shift register in input mode, Laurent Vivier, 2023/10/08
- [PULL 18/20] q800: add ESCC alias at 0xc000, Laurent Vivier, 2023/10/08
- [PULL 17/20] mac_via: always clear ADB interrupt when switching to A/UX mode,
Laurent Vivier <=
- [PULL 20/20] mac_via: extend timer calibration hack to work with A/UX, Laurent Vivier, 2023/10/08
- [PULL 19/20] q800: add alias for MacOS toolbox ROM at 0x40000000, Laurent Vivier, 2023/10/08
- Re: [PULL 00/20] Q800 for 8.2 patches, Stefan Hajnoczi, 2023/10/09