コード例 #1
0
ファイル: expansion.cpp プロジェクト: fdagosti/WinUAE
static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value)
{
#ifdef EXP_DEBUG
	write_log (_T("expamem_wput %x %x\n"), addr, value);
#endif
#ifdef JIT
	special_mem |= S_WRITE;
#endif
	value &= 0xffff;
	if (ecard >= cardno)
		return;
	if (expamem_type() != zorroIII)
		write_log (_T("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
					p2 = 0;
					while (!p2 && z3num < 2) {
						if (z3num == 0 && currprefs.z3fastmem_size)
							p2 = z3fastmem_start >> 16;
						else if (z3num == 1 && currprefs.z3fastmem2_size)
							p2 = z3fastmem2_start >> 16;
						if (!p2)
							z3num++;
					}
					z3num++;
				} else {
					// Z3 P96 RAM
					if (p96ram_start & 0xff000000)
コード例 #2
0
ファイル: expansion.c プロジェクト: BackupTheBerlios/arp2-svn
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;
	}
    }
}
コード例 #3
0
ファイル: expansion.c プロジェクト: engur/PUAE
static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value)
{
#ifdef EXP_DEBUG
	write_log (_T("expamem_wput %x %x\n"), addr, value);
#endif
#ifdef JIT
	special_mem |= S_WRITE;
#endif
	value &= 0xffff;
	if (ecard >= cardno)
		return;
	if (expamem_type () != zorroIII)
		write_log (_T("warning: WRITE.W to address $%x : value $%x\n"), addr, value);
	else {
		switch (addr & 0xff) {
		case 0x44:
			if (expamem_type () == zorroIII) {
				if (currprefs.jit_direct_compatible_memory) {
					uae_u32 p1, p2 = 0;
					// +Bernd Roesch & Toni Wilen
					p1 = get_word (regs.regs[11] + 0x20);
					if (expamem[0] & add_memory) {
						// Z3 RAM expansion
						p2 = 0;
						while (!p2 && z3num < 2) {
							if (z3num == 0 && currprefs.z3fastmem_size)
								p2 = z3fastmem_bank.start >> 16;
							else if (z3num == 1 && currprefs.z3fastmem2_size)
								p2 = z3fastmem2_bank.start >> 16;
							if (!p2)
								z3num++;
						}
						z3num++;
					} else {
						// Z3 P96 RAM
						if (gfxmem_bank.start & 0xff000000)
							p2 = gfxmem_bank.start >> 16;
					}
					put_word (regs.regs[11] + 0x20, p2);
					put_word (regs.regs[11] + 0x28, p2);
					// -Bernd Roesch
					expamem_hi = p2;
					(*card_map[ecard]) ();
					if (p1 != p2)
						write_log (_T("   Card %d remapped %04x0000 -> %04x0000\n"), ecard + 1, p1, p2);
				} else {
コード例 #4
0
ファイル: expansion.c プロジェクト: voorhees1979/PUAE
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 ();
            }
コード例 #5
0
ファイル: expansion.c プロジェクト: BackupTheBerlios/arp2-svn
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;
    }
}
コード例 #6
0
ファイル: expansion.c プロジェクト: bernds/UAE
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;
	}
    }
}