static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksum, int *cloanto_rom) { unsigned char buffer[20]; int i, j, cr = 0; fprintf(stderr,"read_kickstart\n"); if (cloanto_rom) *cloanto_rom = 0; i = zfile_fread (buffer, 1, 11, f); if (strncmp ((char *) buffer, "AMIROMTYPE1", 11) != 0) { zfile_fseek (f, 0, SEEK_SET); } else { cr = 1; } if (cloanto_rom) *cloanto_rom = cr; i = zfile_fread (mem, 1, size, f); if (i != 8192 && i != 65536 && i != 131072 && i != 262144 && i != 524288 && i != 524288 * 2 && i != 524288 * 4) { gui_message ("Error while reading Kickstart ROM file."); return 0; } if (i == size / 2) memcpy (mem + size / 2, mem, size / 2); if (cr) { if (!decode_cloanto_rom (mem, size, i, 0)) return 0; } if (currprefs.cs_a1000ram) { int off = 0; a1000_bootrom = xcalloc (262144, 1); while (off + i < 262144) { memcpy (a1000_bootrom + off, kickmemory, i); off += i; } memset (kickmemory, 0, kickmem_size); a1000_handle_kickstart (1); dochecksum = 0; i = 524288; } zfile_fclose (f); for (j = 0; j < 256 && i >= 262144; j++) { if (!memcmp (mem + j, kickstring, strlen (kickstring) + 1)) break; } if (j == 256 || i < 262144) dochecksum = 0; if (dochecksum) kickstart_checksum (mem, size); return 1; }
static int read_kickstart (FILE *f, uae_u8 *mem, int size, int dochecksum, int *cloanto_rom) { unsigned char buffer[20]; int i, cr = 0; if (cloanto_rom) *cloanto_rom = 0; i = uae4all_rom_fread (buffer, 1, 11, f); if (strncmp ((char *) buffer, "AMIROMTYPE1", 11) != 0) { uae4all_rom_fseek (f, 0, SEEK_SET); } else { cr = 1; } i = uae4all_rom_fread (mem, 1, size, f); if (i == 8192) { a1000_bootrom = (uae_u8*)xmalloc (8192); memcpy (a1000_bootrom, kickmemory, 8192); a1000_handle_kickstart (1); } else if (i == size / 2) { memcpy (mem + size / 2, mem, i); } else if (i != size) { write_log ("Error while reading Kickstart.\n"); uae4all_rom_fclose (f); return 0; } uae4all_rom_fclose (f); if (cr) decode_cloanto_rom (mem, size, i); if (dochecksum && i >= 262144) kickstart_checksum (mem, size); if (cloanto_rom) *cloanto_rom = cr; return 1; }