From 3f3af6858210f7af315aa8e08e278a874a679b46 Mon Sep 17 00:00:00 2001 From: Maxim Poliakovski Date: Sun, 14 Aug 2022 22:49:24 +0200 Subject: [PATCH] machinegossamer: add Whisper ID PROM. --- devices/sound/awacs.h | 2 +- machines/machinegossamer.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/devices/sound/awacs.h b/devices/sound/awacs.h index eb8a245..c2c51c2 100644 --- a/devices/sound/awacs.h +++ b/devices/sound/awacs.h @@ -21,7 +21,7 @@ along with this program. If not, see . /** AWAC sound devices family definitions. - Audio Waveform Aplifier and Converters (AWACs) is a family of custom audio + Audio Waveform Amplifier and Converters (AWACs) is a family of custom audio chips used in Power Macintosh. */ diff --git a/machines/machinegossamer.cpp b/machines/machinegossamer.cpp index 453855d..e05f975 100644 --- a/machines/machinegossamer.cpp +++ b/machines/machinegossamer.cpp @@ -26,6 +26,7 @@ along with this program. If not, see . #include #include +#include #include #include #include @@ -41,6 +42,12 @@ along with this program. If not, see . #include #include +// EEPROM ID content for a Whisper personality card. +const uint8_t WhisperID[16] = { + 0x0F, 0xAA, 0x55, 0xAA, 0x57, 0x68, 0x69, 0x73, 0x70, 0x65, 0x72, 0x00, + 0x00, 0x00, 0x00, 0x02 +}; + static void setup_ram_slot(std::string name, int i2c_addr, int capacity_megs) { if (!capacity_megs) return; @@ -95,6 +102,14 @@ int initialize_gossamer(std::string& id) I2CBus* i2c_bus = dynamic_cast(gMachineObj->get_comp_by_type(HWCompType::I2C_HOST)); i2c_bus->register_device(0x28, dynamic_cast(gMachineObj->get_comp_by_name("Athens"))); + // create ID EEPROM for the Whisper personality card and register it with the I2C host + gMachineObj->add_device("Perch", std::unique_ptr(new I2CProm(0x53, 256))); + I2CProm* perch_id = dynamic_cast(gMachineObj->get_comp_by_name("Perch")); + perch_id->fill_memory(0, 256, 0); + perch_id->fill_memory(32, 223, 0xFF); + perch_id->set_memory(0, WhisperID, sizeof(WhisperID)); + i2c_bus->register_device(0x53, perch_id); + // initialize virtual CPU and request MPC750 CPU aka G3 ppc_cpu_init(grackle_obj, PPC_VER::MPC750, 16705000ULL);