[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 06/20] q800: allow accesses to RAM area even if less memory is
From: |
Mark Cave-Ayland |
Subject: |
[PATCH v3 06/20] q800: allow accesses to RAM area even if less memory is available |
Date: |
Fri, 29 Sep 2023 18:59:03 +0100 |
MacOS attempts a series of writes and reads over the entire RAM area in order
to determine the amount of RAM within the machine. Allow accesses to the
entire RAM area ignoring writes and always reading zero for areas where there
is no physical RAM installed to allow MacOS to detect the memory size without
faulting.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
hw/m68k/q800.c | 30 +++++++++++++++++++++++++++++-
include/hw/m68k/q800.h | 1 +
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c
index 081b95e9cf..3209309173 100644
--- a/hw/m68k/q800.c
+++ b/hw/m68k/q800.c
@@ -86,6 +86,9 @@
#define MAC_CLOCK 3686418
+/* Size of whole RAM area */
+#define RAM_SIZE 0x40000000
+
/*
* Slot 0x9 is reserved for use by the in-built framebuffer whilst only
* slots 0xc, 0xd and 0xe physically exist on the Quadra 800
@@ -218,6 +221,27 @@ static const MemoryRegionOps machine_id_ops = {
},
};
+static uint64_t ramio_read(void *opaque, hwaddr addr, unsigned size)
+{
+ return 0x0;
+}
+
+static void ramio_write(void *opaque, hwaddr addr, uint64_t val,
+ unsigned size)
+{
+ return;
+}
+
+static const MemoryRegionOps ramio_ops = {
+ .read = ramio_read,
+ .write = ramio_write,
+ .endianness = DEVICE_BIG_ENDIAN,
+ .valid = {
+ .min_access_size = 1,
+ .max_access_size = 4,
+ },
+};
+
static void q800_machine_init(MachineState *machine)
{
Q800MachineState *m = Q800_MACHINE(machine);
@@ -262,7 +286,11 @@ static void q800_machine_init(MachineState *machine)
qemu_register_reset(main_cpu_reset, &m->cpu);
/* RAM */
- memory_region_add_subregion(get_system_memory(), 0, machine->ram);
+ memory_region_init_io(&m->ramio, OBJECT(machine), &ramio_ops, &m->ramio,
+ "ram", RAM_SIZE);
+ memory_region_add_subregion(get_system_memory(), 0x0, &m->ramio);
+
+ memory_region_add_subregion(&m->ramio, 0, machine->ram);
/*
* Create container for all IO devices
diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h
index 98097165d9..04e4e0bce3 100644
--- a/include/hw/m68k/q800.h
+++ b/include/hw/m68k/q800.h
@@ -60,6 +60,7 @@ struct Q800MachineState {
MacfbNubusState macfb;
DJMEMCState djmemc;
IOSBState iosb;
+ MemoryRegion ramio;
MemoryRegion macio;
MemoryRegion macio_alias;
MemoryRegion machine_id;
--
2.39.2
- [PATCH v3 00/20] q800: add support for booting MacOS Classic - part 2, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 01/20] q800-glue.c: convert to Resettable interface, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 02/20] q800: add djMEMC memory controller, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 03/20] q800: add machine id register, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 04/20] q800: implement additional machine id bits on VIA1 port A, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 05/20] q800: add IOSB subsystem, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 06/20] q800: allow accesses to RAM area even if less memory is available,
Mark Cave-Ayland <=
- [PATCH v3 08/20] asc: generate silence if FIFO empty but engine still running, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 07/20] audio: add Apple Sound Chip (ASC) emulation, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 11/20] swim: add trace events for IWM and ISM registers, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 09/20] q800: add Apple Sound Chip (ASC) audio to machine, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 10/20] q800: add easc bool machine class property to switch between ASC and EASC, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 12/20] swim: split into separate IWM and ISM register blocks, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 14/20] mac_via: work around underflow in TimeDBRA timing loop in SETUPTIMEK, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 13/20] swim: update IWM/ISM register block decoding, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 17/20] mac_via: always clear ADB interrupt when switching to A/UX mode, Mark Cave-Ayland, 2023/09/29
- [PATCH v3 18/20] q800: add ESCC alias at 0xc000, Mark Cave-Ayland, 2023/09/29