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; }
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); }
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); } }
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); } }