Beispiel #1
0
static void MyWrite32(unsigned int a,unsigned int   d) {
	unsigned int b=((a&0xF0000)>>16);
	a&=0xFFFFFF;
    d&=0xFFFFFFFF;
		switch((a&0xFF0000)>>20) {
	case 0x1:
		WRITE_WORD_ROM(memory.ram + (a&0xffff),d>>16);
		WRITE_WORD_ROM(memory.ram + (a&0xffff)+2,d&0xFFFF);
		return;
		break;
	case 0x3:
		if (b==0xc) {
			mem68k_store_video_word(a,d>>16);
			mem68k_store_video_word(a+2,d & 0xffff);
			return;
		}
		if (b==8) {mem68k_store_pd4990_long(a,d);return;}
		if (b==2) {mem68k_store_z80_long(a,d);return;}
		if (b==0xA) {mem68k_store_setting_long(a,d);return;}
		break;	
	case 0x4:
		if (b==0) mem68k_store_pal_long(a,d);return;
		break;
	case 0xD:
		if (b==0) mem68k_store_sram_long(a,d);return;
		break;
	case 0x2:
		if (b==0xF) mem68k_store_bk_normal_long(a,d);return;
		break;
	case 0x8:
		if (b==0) mem68k_store_memcrd_long(a,d);return;
		break;
	}
Beispiel #2
0
static void MyWrite16(unsigned int a,unsigned int d) {
	unsigned int b=((a&0xF0000)>>16);
	a&=0xFFFFFF;
    d&=0xFFFF;
    //if (d&0x8000) printf("WEIRD %x %x\n",a,d);

	switch((a&0xFF0000)>>20) {
	case 0x1:
		WRITE_WORD_ROM(memory.ram + (a&0xffff),d);
		return;
		//mem68k_store_ram_word(a,d);return;
		break;
	case 0x3:
		if (b==0xc) {
            mem68k_store_video_word(a,d);return;}
		if (b==8) {mem68k_store_pd4990_word(a,d);return;}
		if (b==2) {mem68k_store_z80_word(a,d);return;}
		if (b==0xA) {mem68k_store_setting_word(a,d);return;}
		break;	
	case 0x4:
		if (b==0) mem68k_store_pal_word(a,d);return;
		break;
	case 0xD:
		if (b==0) mem68k_store_sram_word(a,d);return;
		break;
	case 0x2:
		if (b==0xF) mem68k_store_bk_normal_word(a,d);return;
		break;
	case 0x8:
		if (b==0) mem68k_store_memcrd_word(a,d);return;
		break;
	}

	//printf("Unhandled write16 @ %08x = %04x\n",a,d);
}
Beispiel #3
0
void setup_misc_patch(char *name) {


	if (!strcmp(name, "ssideki")) {
		WRITE_WORD_ROM(&memory.rom.cpu_m68k.p[0x2240], 0x4e71);
	}

	//if (!strcmp(name, "fatfury3")) {
	//	WRITE_WORD_ROM(memory.rom.cpu_m68k.p, 0x0010);
	//}

	if (!strcmp(name, "mslugx")) {
		/* patch out protection checks */
		int i;
		Uint8 *RAM = memory.rom.cpu_m68k.p;
		for (i = 0; i < memory.rom.cpu_m68k.size; i += 2) {
			if ((READ_WORD_ROM(&RAM[i + 0]) == 0x0243)
					&& (READ_WORD_ROM(&RAM[i + 2]) == 0x0001) && /* andi.w  #$1, D3 */
			(READ_WORD_ROM(&RAM[i + 4]) == 0x6600)) { /* bne xxxx */

				WRITE_WORD_ROM(&RAM[i + 4], 0x4e71);
				WRITE_WORD_ROM(&RAM[i + 6], 0x4e71);
			}
		}

		WRITE_WORD_ROM(&RAM[0x3bdc], 0x4e71);
		WRITE_WORD_ROM(&RAM[0x3bde], 0x4e71);
		WRITE_WORD_ROM(&RAM[0x3be0], 0x4e71);
		WRITE_WORD_ROM(&RAM[0x3c0c], 0x4e71);
		WRITE_WORD_ROM(&RAM[0x3c0e], 0x4e71);
		WRITE_WORD_ROM(&RAM[0x3c10], 0x4e71);

		WRITE_WORD_ROM(&RAM[0x3c36], 0x4e71);
		WRITE_WORD_ROM(&RAM[0x3c38], 0x4e71);
	}

}
Beispiel #4
0
void setup_misc_patch(char *name)
{
    sram_protection_hack = -1;
    if (!strcmp(name,"fatfury3") ||
            !strcmp(name,"samsho3") ||
            !strcmp(name,"samsho3a") ||
            !strcmp(name,"samsho4") ||
            !strcmp(name,"aof3") ||
            !strcmp(name,"rbff1") ||
            !strcmp(name,"rbffspec") ||
            !strcmp(name,"kof95") ||
            !strcmp(name,"kof96") ||
            !strcmp(name,"kof96h") ||
            !strcmp(name,"kof97") ||
            !strcmp(name,"kof97a") ||
            !strcmp(name,"kof97pls") ||
            !strcmp(name,"kof98") ||
            !strcmp(name,"kof98k") ||
            !strcmp(name,"kof98n") ||
            !strcmp(name,"kof99") ||
            !strcmp(name,"kof99a") ||
            !strcmp(name,"kof99e") ||
            !strcmp(name,"kof99n") ||
            !strcmp(name,"kof99p") ||
            !strcmp(name,"kof2000") ||
            !strcmp(name,"kof2000n") ||
            !strcmp(name,"kizuna") ||
            !strcmp(name,"lastblad") ||
            !strcmp(name,"lastblda") ||
            !strcmp(name,"lastbld2") ||
            !strcmp(name,"rbff2") ||
            !strcmp(name,"rbff2a") ||
            !strcmp(name,"mslug2") ||
            !strcmp(name,"mslug3") ||
            !strcmp(name,"garou") ||
            !strcmp(name,"garouo") ||
            !strcmp(name,"garoup"))
        sram_protection_hack = 0x100;



    if (!strcmp(name, "pulstar"))
        sram_protection_hack = 0x35a;


    if (!strcmp(name, "ssideki")) {
        WRITE_WORD_ROM(&memory.cpu[0x2240], 0x4e71);
    }


    if (!strcmp(name, "fatfury3")) {
        WRITE_WORD_ROM(memory.cpu, 0x0010);
    }


    /* Many mgd2 dump have a strange initial PC, so as some MVS */
    if ((!strcmp(name, "aodk")) ||
            (!strcmp(name, "bjourney")) ||
            (!strcmp(name, "maglord")) ||
            (!strcmp(name, "mosyougi")) ||
            (!strcmp(name, "twinspri")) ||
            (!strcmp(name, "whp")) ||
            (conf.rom_type == MGD2) ||
            (CF_BOOL(cf_get_item_by_name("forcepc"))) ) {
        Uint8 *RAM = memory.cpu;
        WRITE_WORD_ROM(&RAM[4], 0x00c0);
        WRITE_WORD_ROM(&RAM[6], 0x0402);
    }

    if (!strcmp(name, "mslugx")) {
        /* patch out protection checks */
        int i;
        Uint8 *RAM = memory.cpu;
        for (i = 0; i < memory.cpu_size; i += 2) {
            if ((READ_WORD_ROM(&RAM[i + 0]) == 0x0243) &&
                    (READ_WORD_ROM(&RAM[i + 2]) == 0x0001) &&  /* andi.w  #$1, D3 */
                    (READ_WORD_ROM(&RAM[i + 4]) == 0x6600)) {  /* bne xxxx */

                WRITE_WORD_ROM(&RAM[i + 4], 0x4e71);
                WRITE_WORD_ROM(&RAM[i + 6], 0x4e71);
            }
        }

        WRITE_WORD_ROM(&RAM[0x3bdc], 0x4e71);
        WRITE_WORD_ROM(&RAM[0x3bde], 0x4e71);
        WRITE_WORD_ROM(&RAM[0x3be0], 0x4e71);
        WRITE_WORD_ROM(&RAM[0x3c0c], 0x4e71);
        WRITE_WORD_ROM(&RAM[0x3c0e], 0x4e71);
        WRITE_WORD_ROM(&RAM[0x3c10], 0x4e71);

        WRITE_WORD_ROM(&RAM[0x3c36], 0x4e71);
        WRITE_WORD_ROM(&RAM[0x3c38], 0x4e71);
    }


}