diff mbox series

[v2,19/20] q800: add alias for MacOS toolbox ROM at 0x40000000

Message ID 20230909094827.33871-20-mark.cave-ayland@ilande.co.uk
State New
Headers show
Series q800: add support for booting MacOS Classic - part 2 | expand

Commit Message

Mark Cave-Ayland Sept. 9, 2023, 9:48 a.m. UTC
According to the Apple Quadra 800 Developer Note document, the Quadra 800 ROM
consists of 2 ROM code sections based at offsets 0x0 and 0x800000. A/UX attempts
to access the toolbox ROM at the lower offset during startup, so provide a
memory alias to allow the access to succeed.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/m68k/q800.c         | 5 +++++
 include/hw/m68k/q800.h | 1 +
 2 files changed, 6 insertions(+)

Comments

Laurent Vivier Sept. 26, 2023, 8:06 a.m. UTC | #1
Le 09/09/2023 à 11:48, Mark Cave-Ayland a écrit :
> According to the Apple Quadra 800 Developer Note document, the Quadra 800 ROM
> consists of 2 ROM code sections based at offsets 0x0 and 0x800000. A/UX attempts
> to access the toolbox ROM at the lower offset during startup, so provide a
> memory alias to allow the access to succeed.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>   hw/m68k/q800.c         | 5 +++++
>   include/hw/m68k/q800.h | 1 +
>   2 files changed, 6 insertions(+)
> 
> diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c
> index b5b2cabc33..87665c6407 100644
> --- a/hw/m68k/q800.c
> +++ b/hw/m68k/q800.c
> @@ -657,6 +657,11 @@ static void q800_machine_init(MachineState *machine)
>           filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
>           memory_region_add_subregion(get_system_memory(), MACROM_ADDR, &m->rom);
>   
> +        memory_region_init_alias(&m->rom_alias, NULL, "m68k_mac.rom-alias",
> +                                 &m->rom, 0, MACROM_SIZE);
> +        memory_region_add_subregion(get_system_memory(), 0x40000000,
> +                                    &m->rom_alias);
> +
>           /* Load MacROM binary */
>           if (filename) {
>               bios_size = load_image_targphys(filename, MACROM_ADDR, MACROM_SIZE);
> diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h
> index 348eaf4703..a9661f65f6 100644
> --- a/include/hw/m68k/q800.h
> +++ b/include/hw/m68k/q800.h
> @@ -50,6 +50,7 @@ struct Q800MachineState {
>       bool easc;
>       M68kCPU cpu;
>       MemoryRegion rom;
> +    MemoryRegion rom_alias;
>       GLUEState glue;
>       MOS6522Q800VIA1State via1;
>       MOS6522Q800VIA2State via2;

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
diff mbox series

Patch

diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c
index b5b2cabc33..87665c6407 100644
--- a/hw/m68k/q800.c
+++ b/hw/m68k/q800.c
@@ -657,6 +657,11 @@  static void q800_machine_init(MachineState *machine)
         filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
         memory_region_add_subregion(get_system_memory(), MACROM_ADDR, &m->rom);
 
+        memory_region_init_alias(&m->rom_alias, NULL, "m68k_mac.rom-alias",
+                                 &m->rom, 0, MACROM_SIZE);
+        memory_region_add_subregion(get_system_memory(), 0x40000000,
+                                    &m->rom_alias);
+
         /* Load MacROM binary */
         if (filename) {
             bios_size = load_image_targphys(filename, MACROM_ADDR, MACROM_SIZE);
diff --git a/include/hw/m68k/q800.h b/include/hw/m68k/q800.h
index 348eaf4703..a9661f65f6 100644
--- a/include/hw/m68k/q800.h
+++ b/include/hw/m68k/q800.h
@@ -50,6 +50,7 @@  struct Q800MachineState {
     bool easc;
     M68kCPU cpu;
     MemoryRegion rom;
+    MemoryRegion rom_alias;
     GLUEState glue;
     MOS6522Q800VIA1State via1;
     MOS6522Q800VIA2State via2;