q800: add easc bool machine class property to switch between ASC and EASC
This determines whether the Apple Sound Chip (ASC) is set to enhanced mode (default) or to original mode. The real Q800 hardware used an EASC chip however a lot of older software only works with the older ASC chip. Adding this as a machine parameter allows QEMU to be used as an developer aid for testing and migrating code from ASC to EASC. 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> Message-ID: <20231004083806.757242-11-mark.cave-ayland@ilande.co.uk> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
9983f6e12e
commit
7afc4356c3
@ -484,7 +484,8 @@ static void q800_machine_init(MachineState *machine)
|
||||
/* Apple Sound Chip */
|
||||
|
||||
object_initialize_child(OBJECT(machine), "asc", &m->asc, TYPE_ASC);
|
||||
qdev_prop_set_uint8(DEVICE(&m->asc), "asctype", ASC_TYPE_EASC);
|
||||
qdev_prop_set_uint8(DEVICE(&m->asc), "asctype", m->easc ? ASC_TYPE_EASC
|
||||
: ASC_TYPE_ASC);
|
||||
if (machine->audiodev) {
|
||||
qdev_prop_set_string(DEVICE(&m->asc), "audiodev", machine->audiodev);
|
||||
}
|
||||
@ -677,6 +678,28 @@ static void q800_machine_init(MachineState *machine)
|
||||
}
|
||||
}
|
||||
|
||||
static bool q800_get_easc(Object *obj, Error **errp)
|
||||
{
|
||||
Q800MachineState *ms = Q800_MACHINE(obj);
|
||||
|
||||
return ms->easc;
|
||||
}
|
||||
|
||||
static void q800_set_easc(Object *obj, bool value, Error **errp)
|
||||
{
|
||||
Q800MachineState *ms = Q800_MACHINE(obj);
|
||||
|
||||
ms->easc = value;
|
||||
}
|
||||
|
||||
static void q800_init(Object *obj)
|
||||
{
|
||||
Q800MachineState *ms = Q800_MACHINE(obj);
|
||||
|
||||
/* Default to EASC */
|
||||
ms->easc = true;
|
||||
}
|
||||
|
||||
static GlobalProperty hw_compat_q800[] = {
|
||||
{ "scsi-hd", "quirk_mode_page_vendor_specific_apple", "on" },
|
||||
{ "scsi-hd", "vendor", " SEAGATE" },
|
||||
@ -710,11 +733,16 @@ static void q800_machine_class_init(ObjectClass *oc, void *data)
|
||||
mc->default_ram_id = "m68k_mac.ram";
|
||||
machine_add_audiodev_property(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_q800, hw_compat_q800_len);
|
||||
|
||||
object_class_property_add_bool(oc, "easc", q800_get_easc, q800_set_easc);
|
||||
object_class_property_set_description(oc, "easc",
|
||||
"Set to off to use ASC rather than EASC");
|
||||
}
|
||||
|
||||
static const TypeInfo q800_machine_typeinfo = {
|
||||
.name = MACHINE_TYPE_NAME("q800"),
|
||||
.parent = TYPE_MACHINE,
|
||||
.instance_init = q800_init,
|
||||
.instance_size = sizeof(Q800MachineState),
|
||||
.class_init = q800_machine_class_init,
|
||||
};
|
||||
|
@ -47,6 +47,7 @@
|
||||
struct Q800MachineState {
|
||||
MachineState parent_obj;
|
||||
|
||||
bool easc;
|
||||
M68kCPU cpu;
|
||||
MemoryRegion rom;
|
||||
GLUEState glue;
|
||||
|
Loading…
x
Reference in New Issue
Block a user