--- uae/src/ersatz.c 2018/04/24 17:00:02 1.1.1.6 +++ uae/src/ersatz.c 2018/04/24 17:14:13 1.1.1.10 @@ -30,9 +30,11 @@ #define EOP_ALLOCABS 7 #define EOP_LOOP 8 +static int already_failed = 0; + void init_ersatz_rom (uae_u8 *data) { - fprintf(stderr, "Trying to use Kickstart replacement.\n"); + write_log ("Trying to use Kickstart replacement.\n"); *data++ = 0x00; *data++ = 0x08; /* initial SP */ *data++ = 0x00; *data++ = 0x00; *data++ = 0x00; *data++ = 0xF8; /* initial PC */ @@ -66,6 +68,18 @@ void init_ersatz_rom (uae_u8 *data) *data++ = 0x4E; *data++ = 0x75; } +static void ersatz_failed (void) +{ + if (already_failed) + return; + already_failed = 1; +#if 0 + notify_user (NUMSG_KICKREPNO); + uae_restart (-1, NULL); +#endif + uae_quit (); +} + static void ersatz_doio (void) { uaecptr request = m68k_areg(regs, 1); @@ -75,8 +89,8 @@ static void ersatz_doio (void) break; default: - fprintf(stderr, "Only CMD_READ supported in DoIO()\n"); - abort(); + write_log ("Only CMD_READ supported in DoIO()\n"); + ersatz_failed (); } { uaecptr dest = get_long (request + 0x28); @@ -100,7 +114,7 @@ static void ersatz_init (void) uaecptr a; if (disk_empty (0)) { - fprintf (stderr, "You need to have a diskfile in DF0 to use the Kickstart replacement!\n"); + write_log ("You need to have a diskfile in DF0 to use the Kickstart replacement!\n"); uae_quit (); m68k_setpc (0xF80010); return; @@ -140,9 +154,9 @@ static void ersatz_init (void) /* kickstart disk loader */ if (get_long(0x4000) == 0x4b49434b) { /* a kickstart disk was found in drive 0! */ - fprintf (stderr, "Loading Kickstart rom image from Kickstart disk\n"); + write_log ("Loading Kickstart rom image from Kickstart disk\n"); /* print some notes... */ - fprintf (stderr, "NOTE: if UAE crashes set CPU to 68000 and/or chipmem size to 512KB!\n"); + write_log ("NOTE: if UAE crashes set CPU to 68000 and/or chipmem size to 512KB!\n"); /* read rom image from kickstart disk */ put_word (request + 0x1C, 2); @@ -164,14 +178,14 @@ static void ersatz_init (void) disk_eject (0); m68k_setpc (0xFC0002); - fill_prefetch_0 (); - uae_reset (); + fill_prefetch_slow (); + uae_reset (0); ersatzkickfile = 0; return; } m68k_setpc (0x400C); - fill_prefetch_0 (); + fill_prefetch_slow (); /* Init the hardware */ put_long (0x3000, 0xFFFFFFFEul); @@ -224,9 +238,10 @@ void ersatz_perform (uae_u16 what) break; case EOP_NIMP: - fprintf (stderr, "Unimplemented Kickstart function called\n"); - uae_quit (); - + write_log ("Unimplemented Kickstart function called\n"); + ersatz_failed (); + break; + /* fall through */ case EOP_LOOP: m68k_setpc (0xF80010); @@ -234,7 +249,8 @@ void ersatz_perform (uae_u16 what) case EOP_OPENLIB: default: - fprintf(stderr, "Internal error. Giving up.\n"); - abort (); + write_log ("Internal error. Giving up.\n"); + ersatz_failed (); + break; } }