static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= SPECIAL_MEM_WRITE; #endif if (expamem_type() != zorroIII) write_log ("warning: WRITE.W to address $%lx : value $%x\n", addr, value); else { switch (addr & 0xff) { case 0x44: if (expamem_type() == zorroIII) { // +Bernd Roesch value = value - 0x3000; // maps to 0x10000000 chipmem_wput (regs.regs[11] + 0x20, value); chipmem_wput (regs.regs[11] + 0x28, value); // -Bernd Roesch expamem_hi = value; (*card_map[ecard]) (); write_log (" Card %d (Zorro%s) done.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III"); ++ecard; if (ecard < MAX_EXPANSION_BOARDS) (*card_init[ecard]) (); else expamem_init_clear2 (); } break; } } }
static void expamem_init_last (void) { expamem_init_clear2 (); write_log (_T("Memory map after autoconfig:\n")); #ifdef DEBUGGER memory_map_dump (); #endif }
static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= SPECIAL_MEM_WRITE; #endif switch (addr & 0xff) { case 0x30: case 0x32: expamem_hi = 0; expamem_lo = 0; expamem_write (0x48, 0x00); break; case 0x48: if (expamem_type () == zorroII) { expamem_hi = value & 0xFF; (*card_map[ecard]) (); write_log (" Card %d (Zorro%s) done.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III"); ++ecard; if (ecard < MAX_EXPANSION_BOARDS) (*card_init[ecard]) (); else expamem_init_clear2 (); } else if (expamem_type() == zorroIII) expamem_lo = value; break; case 0x4a: if (expamem_type () == zorroII) expamem_lo = value; break; case 0x4c: write_log (" Card %d (Zorro %s) had no success.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III"); ++ecard; if (ecard < MAX_EXPANSION_BOARDS) (*card_init[ecard]) (); else expamem_init_clear2 (); break; } }
void expamem_next (void) { expamem_init_clear (); map_banks (&expamem_bank, 0xE8, 1, 0); ++ecard; if (ecard < cardno) { expamem_bank.name = card_name[ecard] ? card_name[ecard] : (TCHAR*) _T("None"); (*card_init[ecard]) (); } else { expamem_init_clear2 (); } }
static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value) { #ifdef JIT special_mem |= SPECIAL_MEM_WRITE; #endif value &= 0xffff; if (ecard >= cardno) return; if (expamem_type() != zorroIII) write_log ("warning: WRITE.W to address $%lx : value $%x\n", addr, value); else { switch (addr & 0xff) { case 0x44: if (expamem_type() == zorroIII) { uae_u32 p1, p2; // +Bernd Roesch & Toni Wilen p1 = get_word (regs.regs[11] + 0x20); if (expamem[0] & add_memory) { // Z3 RAM expansion if (z3num == 0) p2 = z3fastmem_start >> 16; else p2 = z3fastmem2_start >> 16; z3num++; } else { // Z3 P96 RAM p2 = p96ram_start >> 16; } put_word (regs.regs[11] + 0x20, p2); put_word (regs.regs[11] + 0x28, p2); // -Bernd Roesch expamem_hi = p2; (*card_map[ecard]) (); ecard++; if (p1 != p2) write_log (" Card %d remapped %04x0000 -> %04x0000\n", ecard, p1, p2); write_log (" Card %d (Zorro%s) done.\n", ecard, expamem_type () == 0xc0 ? "II" : "III"); if (ecard < cardno) (*card_init[ecard]) (); else expamem_init_clear2 (); }
static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value) { if (expamem_type() != zorroIII) write_log ("warning: WRITE.W to address $%lx : value $%x\n", addr, value); else { switch (addr & 0xff) { case 0x44: if (expamem_type() == zorroIII) { expamem_hi = value; (*card_map[ecard]) (); write_log (" Card %d (Zorro%s) done.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III"); ++ecard; if (ecard < MAX_EXPANSION_BOARDS) (*card_init[ecard]) (); else expamem_init_clear2 (); } break; } } }
static void expamem_init_last (void) { expamem_init_clear2 (); write_log (_T("Memory map after autoconfig:\n")); memory_map_dump (); }