From 09c6e68ec326bc632ec9caad288f760974d6f453 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 19 Jan 2020 13:41:04 +0200 Subject: [PATCH] Fix extended CD32 ROM patch, after init change, it was called before roms were loaded. --- akiko.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/akiko.cpp b/akiko.cpp index cbcd207c..b0d225a4 100644 --- a/akiko.cpp +++ b/akiko.cpp @@ -2002,26 +2002,29 @@ addrbank akiko_bank = { ABFLAG_IO | ABFLAG_SAFE, S_READ, S_WRITE }; -static const uae_u8 patchdata[]={0x0c,0x82,0x00,0x00,0x03,0xe8,0x64,0x00,0x00,0x46}; -static void patchrom (void) +static const uae_u8 patchdata[] = { 0x0c, 0x82, 0x00, 0x00, 0x03, 0xe8, 0x64, 0x00, 0x00, 0x46 }; +static const uae_u8 patchdata2[] = { 0x0c, 0x82, 0x00, 0x00, 0x03, 0xe8, 0x4e, 0x71, 0x4e, 0x71 }; +static void patchrom(void) { int i; if (currprefs.cpu_model > 68020 || currprefs.cachesize || currprefs.m68k_speed != 0) { uae_u8 *p = extendedkickmem_bank.baseaddr; if (p) { - for (i = 0; i < 524288 - sizeof (patchdata); i++) { - if (!memcmp (p + i, patchdata, sizeof(patchdata))) { - protect_roms (false); + for (i = 0; i < 524288 - sizeof(patchdata); i++) { + if (!memcmp(p + i, patchdata2, sizeof(patchdata2))) + return; + if (!memcmp(p + i, patchdata, sizeof(patchdata))) { + protect_roms(false); p[i + 6] = 0x4e; p[i + 7] = 0x71; p[i + 8] = 0x4e; p[i + 9] = 0x71; - protect_roms (true); - write_log (_T("CD32: extended rom delay loop patched at 0x%08x\n"), i + 6 + 0xe00000); + protect_roms(true); + write_log(_T("CD32: extended rom delay loop patched at 0x%08x\n"), i + 6 + 0xe00000); return; } } - write_log (_T("CD32: couldn't patch extended rom\n")); + write_log(_T("CD32: couldn't patch extended rom\n")); } } } @@ -2064,6 +2067,7 @@ static int akiko_thread_do(int start) static void akiko_reset(int hardreset) { + patchrom(); cdaudiostop_do (); nvram_read (); eeprom_reset(cd32_eeprom); @@ -2118,7 +2122,6 @@ int akiko_init (void) cdrom_playing = cdrom_paused = 0; cdrom_data_offset = -1; } - patchrom (); akiko_thread_do(1); gui_flicker_led (LED_HD, 0, -1); akiko_inited = true; -- 2.47.3