Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}