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; }
void REGPARAM2 kickmem_bput (uaecptr addr, uae_u32 b) { if (a1000_kickstart_mode) { if (addr >= 0xfc0000) { addr -= kickmem_start & kickmem_mask; addr &= kickmem_mask; kickmemory[addr] = b; return; } else a1000_handle_kickstart (0); } }
void REGPARAM2 kickmem_bput (uaecptr addr, uae_u32 b) { if (a1000_kickstart_mode) { if (addr >= 0xfc0000) { addr -= kickmem_start & kickmem_mask; addr &= kickmem_mask; kickmemory[addr] = b; return; } else a1000_handle_kickstart (0); } else if (currprefs.illegal_mem) printf ("Illegal kickmem lput at %08lx\n", addr); }
void REGPARAM2 kickmem_wput (uaecptr addr, uae_u32 b) { uae_u16 *m; if (a1000_kickstart_mode) { if (addr >= 0xfc0000) { addr -= kickmem_start & kickmem_mask; addr &= kickmem_mask; m = (uae_u16 *)(kickmemory + addr); do_put_mem_word (m, swab_w(b)); return; } else a1000_handle_kickstart (0); } }
void REGPARAM2 kickmem_wput (uaecptr addr, uae_u32 b) { uae_u16 *m; if (a1000_kickstart_mode) { if (addr >= 0xfc0000) { addr -= kickmem_start & kickmem_mask; addr &= kickmem_mask; m = (uae_u16 *)(kickmemory + addr); do_put_mem_word (m, b); return; } else a1000_handle_kickstart (0); } else if (currprefs.illegal_mem) printf ("Illegal kickmem wput at %08lx\n", addr); }
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; }
void a1000_reset (void) { a1000_handle_kickstart (1); }
void memory_reset (void) { int bnk, bnk_end; #ifdef NATMEM_OFFSET delete_shmmaps (0, 0xFFFF0000); #endif init_mem_banks (); currprefs.chipmem_size = changed_prefs.chipmem_size; currprefs.bogomem_size = changed_prefs.bogomem_size; currprefs.mbresmem_low_size = changed_prefs.mbresmem_low_size; currprefs.mbresmem_high_size = changed_prefs.mbresmem_high_size; currprefs.chipset_mask = changed_prefs.chipset_mask; currprefs.cs_a1000ram = changed_prefs.cs_a1000ram; currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev; currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev; currprefs.cs_ide = changed_prefs.cs_ide; currprefs.bootrom = changed_prefs.bootrom; need_hardreset = 0; /* Use changed_prefs, as m68k_reset is called later. */ if (last_address_space_24 != changed_prefs.address_space_24) need_hardreset = 1; last_address_space_24 = changed_prefs.address_space_24; allocate_memory (); if (currprefs.rom_crc32 != changed_prefs.rom_crc32 || strcmp (currprefs.romfile, changed_prefs.romfile) != 0 || strcmp (currprefs.keyfile, changed_prefs.keyfile) != 0) { ersatzkickfile = 0; a1000_handle_kickstart (0); free (a1000_bootrom); a1000_bootrom = 0; a1000_kickstart_mode = 0; currprefs.rom_crc32 = changed_prefs.rom_crc32; memcpy (currprefs.romfile, changed_prefs.romfile, sizeof currprefs.romfile); memcpy (currprefs.keyfile, changed_prefs.keyfile, sizeof currprefs.keyfile); need_hardreset = 1; if (!load_kickstart ()) { init_ersatz_rom (kickmemory); ersatzkickfile = 1; } patch_kick (); } map_banks (&custom_bank, 0xC0, 0xE0 - 0xC0, 0); map_banks (&cia_bank, 0xA0, 32, 0); if (!currprefs.cs_a1000ram) /* D80000 - DDFFFF not mapped (A1000 = custom chips) */ map_banks (&dummy_bank, 0xD8, 6, 0); /* map "nothing" to 0x200000 - 0x9FFFFF (0xBEFFFF if PCMCIA or AGA) */ bnk = allocated_chipmem >> 16; if (bnk < 0x20) bnk = 0x20; bnk_end = (currprefs.chipset_mask & CSMASK_AGA) ? 0xBF : 0xA0; map_banks (&dummy_bank, bnk, bnk_end - bnk, 0); if (currprefs.chipset_mask & CSMASK_AGA) map_banks (&dummy_bank, 0xc0, 0xd8 - 0xc0, 0); if (bogomemory != 0) { int t = allocated_bogomem >> 16; if (t > 0x1C) t = 0x1C; if (t > 0x10 && ((currprefs.chipset_mask & CSMASK_AGA) || currprefs.cpu_model >= 68020)) t = 0x10; map_banks (&bogomem_bank, 0xC0, t, allocated_bogomem); }