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 load_kickstart (void) { FILE *f = uae4all_rom_fopen(romfile, "rb"); if (f == NULL) { #if defined(AMIGA)||defined(__POS__) #define USE_UAE_ERSATZ "USE_UAE_ERSATZ" if (!getenv (USE_UAE_ERSATZ)) { write_log ("Using current ROM. (create ENV:%s to " "use uae's ROM replacement)\n", USE_UAE_ERSATZ); memcpy (kickmemory, (char *) 0x1000000 - kickmem_size, kickmem_size); kickstart_checksum (kickmemory, kickmem_size); goto chk_sum; } #endif return 0; } if (!read_kickstart (f, kickmemory, kickmem_size, 1, &cloanto_rom)) return 0; 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; }
static int load_kickstart (void) { struct zfile *f = NULL; int i; fprintf(stderr,"load_kickstart\n"); if (currprefs.rom_crc32) { for (i = 0;; i++) { struct romlist *rl = romlist_from_idx (i, ROMTYPE_KICK, 1); if (!rl) break; fprintf(stderr,"rom_crc32 trying idx %d\n",i); if (rl->rd->crc32 == currprefs.rom_crc32) { f = zfile_open (rl->path, "rb"); break; } else { fprintf(stderr,"rom_crc32 %x != %x\n", rl->rd->crc32, currprefs.rom_crc32); } } } else { f = zfile_open (currprefs.romfile, "rb"); #ifdef __QNXNTO__ if(f) { fprintf(stderr,"romfile = %s\n", currprefs.romfile); } else { /* nothing to lose hunt for 1.2 or 1.3 A500 kickstart ... */ fprintf(stderr,"hunting for a kickstart ...\n"); for (i = 0;; i++) { struct romlist *rl = romlist_from_idx (i, ROMTYPE_KICK, 1); if (!rl) break; /* Since no crc32 was initally set and the romfile is null * but we possibly have a match from pre-cached roms lets try * kickstart 1.2 or 1.3 i.e A500 as last ditch attempt */ fprintf(stderr,"kickstart rev %d\n", rl->rd->rev); if( (rl->rd->rev == 3) || (rl->rd->rev == 4) ) currprefs.rom_crc32 = rl->rd->crc32; if (rl->rd->crc32 == currprefs.rom_crc32) { f = zfile_open (rl->path, "rb"); if(!f) fprintf(stderr,"open failed for '%s'\n", rl->path); else goto readDaKick; break; } } } #endif } /* fprintf(stderr,"kick rom open '%s'\n", currprefs.romfile); f = zfile_open( currprefs.romfile, "rb"); if(!f) fprintf(stderr,"zFile_open failed to load %s %s\n". currprefs.romfile, strerror(errno) ); */ if (f == NULL) { fprintf(stderr,"\nmemory_init: kickstart failed to open %s\n", currprefs.romfile); readDaKick: #if defined (AMIGA) #define USE_UAE_ERSATZ "USE_UAE_ERSATZ" if (!getenv (USE_UAE_ERSATZ)) { printf ("Using current ROM. (create ENV:%s to " "use uae's ROM replacement)\n", USE_UAE_ERSATZ); memcpy (kickmemory, (char *) 0x1000000 - kickmem_size, kickmem_size); kickstart_checksum (kickmemory, kickmem_size); goto chk_sum; } #endif return 0; } if (!read_kickstart (f, kickmemory, kickmem_size, 1, &cloanto_rom)) { fprintf(stderr,"read_kickstart() error"); return 0; } #if defined (AMIGA) chk_sum: #endif kickstart_version = (kickmemory[12] << 8) | kickmemory[13]; fprintf(stderr,"kickstart version %d\n", kickstart_version ); return 1; }