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;
	}
    }
}
Exemple #2
0
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;
    }
}
Exemple #4
0
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 ();
	}
}
Exemple #5
0
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 ();
            }
Exemple #6
0
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;
	}
    }
}
Exemple #7
0
static void expamem_init_last (void)
{
	expamem_init_clear2 ();
	write_log (_T("Memory map after autoconfig:\n"));
	memory_map_dump ();
}