return false;
if (!m68kint && iplemu && active) {
+
uae_u8 ppcipl = (~io_reg[CSIII_REG_IPL_EMU]) & P5_PPC_IPL_MASK;
if (new_m68k_ipl < 0)
new_m68k_ipl = 0;
if (is_a2630()) {
addr &= 65535;
if (addr == 0x0040) {
- write_log(_T("A2630 write %04x\n"), b);
+ write_log(_T("A2630 write %04x PC=%08x\n"), b, M68K_GETPC);
a2630_io = b;
// bit 0: unmap 0x000000
// bit 1: unmap 0xf80000
if (b & 2) {
- map_banks(&kickmem_bank, 0xf80000 >> 16, 65536 >> 16, 0);
+ map_banks(&kickmem_bank, 0xf80000 >> 16, 131072 >> 16, 0);
write_log(_T("A2630 boot rom unmapped\n"));
}
// bit 2: autoconfig region enable
static void blizzard_copymaprom(void)
{
- uae_u8 *src = get_real_address(BLIZZARD_MAPROM_BASE);
- uae_u8 *dst = kickmem_bank.baseaddr;
- protect_roms(false);
- memcpy(dst, src, 524288);
- protect_roms(true);
- set_roms_modified();
+ if (!maprom_state) {
+ reload_roms();
+ } else {
+ uae_u8 *src = get_real_address(BLIZZARD_MAPROM_BASE);
+ if (src) {
+ uae_u8 *dst = kickmem_bank.baseaddr;
+ protect_roms(false);
+ memcpy(dst, src, 524288);
+ protect_roms(true);
+ set_roms_modified();
+ }
+ }
}
static void cyberstorm_copymaprom(void)
{
- if (blizzardmaprom_bank.baseaddr) {
+ if (!maprom_state) {
+ reload_roms();
+ } else if (blizzardmaprom_bank.baseaddr) {
uae_u8 *src = blizzardmaprom_bank.baseaddr;
uae_u8 *dst = kickmem_bank.baseaddr;
protect_roms(false);
if (is_csmk3() || is_blizzardppc()) {
if (!(io_reg[CSIII_REG_IRQ] & (P5_IRQ_SCSI_EN | P5_IRQ_SCSI))) {
INTREQ_0(0x8000 | 0x0008);
- }
- if (!(io_reg[CSIII_REG_IRQ] & (P5_IRQ_PPC_1 | P5_IRQ_PPC_2))) {
+ } else if (!(io_reg[CSIII_REG_IRQ] & (P5_IRQ_PPC_1 | P5_IRQ_PPC_2))) {
INTREQ_0(0x8000 | 0x0008);
}
check_ppc_int_lvl();
write_log(_T("BPPC: maprom disabled\n"));
maprom_state = 0;
blizzardppc_maprom();
+ cyberstorm_copymaprom();
}
}
addr /= 8;
}
if (!(io_reg[CSIII_REG_SHADOW] & P5_SELF_RESET)) {
if (!(regval & P5_AMIGA_RESET)) {
+ uae_ppc_cpu_stop();
uae_reset(0, 0);
write_log(_T("CS: Amiga Reset\n"));
io_reg[addr] |= P5_AMIGA_RESET;
cpuboard_clear();
}
+static void restore_roms(void)
+{
+ roms_modified = false;
+ protect_roms (false);
+ write_log (_T("ROM loader.. (%s)\n"), currprefs.romfile);
+ kickstart_rom = 1;
+ a1000_handle_kickstart (0);
+ xfree (a1000_bootrom);
+ a1000_bootrom = 0;
+ a1000_kickstart_mode = 0;
+
+ memcpy (currprefs.romfile, changed_prefs.romfile, sizeof currprefs.romfile);
+ memcpy (currprefs.romextfile, changed_prefs.romextfile, sizeof currprefs.romextfile);
+ need_hardreset = true;
+ mapped_free (&extendedkickmem_bank);
+ mapped_free (&extendedkickmem2_bank);
+ extendedkickmem_bank.allocated = 0;
+ extendedkickmem2_bank.allocated = 0;
+ extendedkickmem_type = 0;
+ load_extendedkickstart (currprefs.romextfile, 0);
+ load_extendedkickstart (currprefs.romextfile2, EXTENDED_ROM_CDTV);
+ kickmem_bank.mask = ROM_SIZE_512 - 1;
+ if (!load_kickstart ()) {
+ if (_tcslen (currprefs.romfile) > 0) {
+ error_log (_T("Failed to open '%s'\n"), currprefs.romfile);
+ notify_user (NUMSG_NOROM);
+ }
+ load_kickstart_replacement ();
+ } else {
+ struct romdata *rd = getromdatabydata (kickmem_bank.baseaddr, kickmem_bank.allocated);
+ if (rd) {
+ write_log (_T("Known ROM '%s' loaded\n"), rd->name);
+ if ((rd->cpu & 8) && changed_prefs.cpu_model < 68030) {
+ notify_user (NUMSG_KS68030PLUS);
+ uae_restart (-1, NULL);
+ } else if ((rd->cpu & 3) == 3 && changed_prefs.cpu_model != 68030) {
+ notify_user (NUMSG_KS68030);
+ uae_restart (-1, NULL);
+ } else if ((rd->cpu & 3) == 1 && changed_prefs.cpu_model < 68020) {
+ notify_user (NUMSG_KS68EC020);
+ uae_restart (-1, NULL);
+ } else if ((rd->cpu & 3) == 2 && (changed_prefs.cpu_model < 68020 || changed_prefs.address_space_24)) {
+ notify_user (NUMSG_KS68020);
+ uae_restart (-1, NULL);
+ }
+ if (rd->cloanto)
+ cloanto_rom = 1;
+ kickstart_rom = 0;
+ if ((rd->type & (ROMTYPE_SPECIALKICK | ROMTYPE_KICK)) == ROMTYPE_KICK)
+ kickstart_rom = 1;
+ if ((rd->cpu & 4) && currprefs.cs_compatible) {
+ /* A4000 ROM = need ramsey, gary and ide */
+ if (currprefs.cs_ramseyrev < 0)
+ changed_prefs.cs_ramseyrev = currprefs.cs_ramseyrev = 0x0f;
+ changed_prefs.cs_fatgaryrev = currprefs.cs_fatgaryrev = 0;
+ if (currprefs.cs_ide != IDE_A4000)
+ changed_prefs.cs_ide = currprefs.cs_ide = -1;
+ }
+ } else {
+ write_log (_T("Unknown ROM '%s' loaded\n"), currprefs.romfile);
+ }
+ }
+ patch_kick ();
+ write_log (_T("ROM loader end\n"));
+ protect_roms (true);
+}
+
+void reload_roms(void)
+{
+ if (roms_modified)
+ restore_roms();
+}
+
void memory_reset (void)
{
int bnk, bnk_end;
|| _tcscmp (currprefs.romfile, changed_prefs.romfile) != 0
|| _tcscmp (currprefs.romextfile, changed_prefs.romextfile) != 0)
{
- roms_modified = false;
- protect_roms (false);
- write_log (_T("ROM loader.. (%s)\n"), currprefs.romfile);
- kickstart_rom = 1;
- a1000_handle_kickstart (0);
- xfree (a1000_bootrom);
- a1000_bootrom = 0;
- a1000_kickstart_mode = 0;
-
- memcpy (currprefs.romfile, changed_prefs.romfile, sizeof currprefs.romfile);
- memcpy (currprefs.romextfile, changed_prefs.romextfile, sizeof currprefs.romextfile);
- need_hardreset = true;
- mapped_free (&extendedkickmem_bank);
- mapped_free (&extendedkickmem2_bank);
- extendedkickmem_bank.allocated = 0;
- extendedkickmem2_bank.allocated = 0;
- extendedkickmem_type = 0;
- load_extendedkickstart (currprefs.romextfile, 0);
- load_extendedkickstart (currprefs.romextfile2, EXTENDED_ROM_CDTV);
- kickmem_bank.mask = ROM_SIZE_512 - 1;
- if (!load_kickstart ()) {
- if (_tcslen (currprefs.romfile) > 0) {
- error_log (_T("Failed to open '%s'\n"), currprefs.romfile);
- notify_user (NUMSG_NOROM);
- }
- load_kickstart_replacement ();
- } else {
- struct romdata *rd = getromdatabydata (kickmem_bank.baseaddr, kickmem_bank.allocated);
- if (rd) {
- write_log (_T("Known ROM '%s' loaded\n"), rd->name);
- if ((rd->cpu & 8) && changed_prefs.cpu_model < 68030) {
- notify_user (NUMSG_KS68030PLUS);
- uae_restart (-1, NULL);
- } else if ((rd->cpu & 3) == 3 && changed_prefs.cpu_model != 68030) {
- notify_user (NUMSG_KS68030);
- uae_restart (-1, NULL);
- } else if ((rd->cpu & 3) == 1 && changed_prefs.cpu_model < 68020) {
- notify_user (NUMSG_KS68EC020);
- uae_restart (-1, NULL);
- } else if ((rd->cpu & 3) == 2 && (changed_prefs.cpu_model < 68020 || changed_prefs.address_space_24)) {
- notify_user (NUMSG_KS68020);
- uae_restart (-1, NULL);
- }
- if (rd->cloanto)
- cloanto_rom = 1;
- kickstart_rom = 0;
- if ((rd->type & (ROMTYPE_SPECIALKICK | ROMTYPE_KICK)) == ROMTYPE_KICK)
- kickstart_rom = 1;
- if ((rd->cpu & 4) && currprefs.cs_compatible) {
- /* A4000 ROM = need ramsey, gary and ide */
- if (currprefs.cs_ramseyrev < 0)
- changed_prefs.cs_ramseyrev = currprefs.cs_ramseyrev = 0x0f;
- changed_prefs.cs_fatgaryrev = currprefs.cs_fatgaryrev = 0;
- if (currprefs.cs_ide != IDE_A4000)
- changed_prefs.cs_ide = currprefs.cs_ide = -1;
- }
- } else {
- write_log (_T("Unknown ROM '%s' loaded\n"), currprefs.romfile);
- }
- }
- patch_kick ();
- write_log (_T("ROM loader end\n"));
- protect_roms (true);
+ restore_roms();
}
if ((cloanto_rom || extendedkickmem_bank.allocated) && currprefs.maprom && currprefs.maprom < 0x01000000) {
}
#endif
#ifdef CDTV
+ if (currprefs.cs_cdtvcr)
+ map_banks(&cdtvcr_bank, 0xB8, 1, 0);
if (currprefs.cs_cdtvcd)
cdtv_check_banks ();
#endif