thx
however, I have another question.
I wanna patch a game to make a new driver. The game is sfzj (Street Fighter Zero (Japan 950727)).
The patch is a Boss hack by Yumeji.
the hack should be patched on these two roms: sfzj.03c & sfz.06.
the former is encrypted while the latter isn't.
here is my driver. It doesn't work. I don't know why.
// Street Fighter Zero (Japan 950727 / boss)
static struct BurnRomInfo sfzjbRomDesc[] = {
{ "sfzj.03c", 0x080000, 0xf5444120, 1 | BRF_ESS | BRF_PRG }, // 68k program
{ "sfz.04b", 0x080000, 0x8b73b0e5, 1 | BRF_ESS | BRF_PRG },
{ "sfz.05a", 0x080000, 0x0810544d, 1 | BRF_ESS | BRF_PRG },
{ "sfz.06", 0x080000, 0x806e8f38, 1 | BRF_ESS | BRF_PRG },
{ "sfz.14m", 0x200000, 0x90fefdb3, 3 | BRF_GRA },
{ "sfz.16m", 0x200000, 0x5354c948, 3 | BRF_GRA },
{ "sfz.18m", 0x200000, 0x41a1e790, 3 | BRF_GRA },
{ "sfz.20m", 0x200000, 0xa549df98, 3 | BRF_GRA },
{ "sfz.01", 0x020000, 0xffffec7d, 4 | BRF_ESS | BRF_PRG }, // z80 program
{ "sfz.02", 0x020000, 0x45f46a08, 4 | BRF_ESS | BRF_PRG },
{ "sfz.11m", 0x200000, 0xc4b093cd, 5 | BRF_SND },
{ "sfz.12m", 0x200000, 0x8bdbc4b4, 5 | BRF_SND },
};
STD_ROM_PICK(sfzjb) STD_ROM_FN(sfzjb)
void sfzjb_patch()
{
unsigned char *mem8 = CpsCode;
mem8[0x18E10] = 0xE0;
mem8[0x18E11] = 0xC2;
mem8[0x18E12] = 0x09;
mem8[0x19036] = 0x17;
mem8[0x19460] = 0x17;
mem8[0x1961E] = 0x17;
mem8[0x1965C] = 0x0B;
mem8[0x197E6] = 0xB0;
mem8[0x197F4] = 0x30;
mem8[0x19888] = 0xB0;
mem8[0x198A8] = 0x17;
mem8[0x198BA] = 0x30;
mem8[0x19DC6] = 0x25;
mem8[0x19DC7] = 0x67;
mem8[0x19DC8] = 0xD5;
mem8[0x19DC9] = 0x40;
mem8[0x19DCC] = 0xE4;
mem8[0x19DCD] = 0x60;
mem8[0x19DCE] = 0x8E;
mem8[0x19DCF] = 0xBD;
mem8[0x19DD2] = 0x48;
mem8[0x19DD3] = 0x7D;
mem8[0x19DD4] = 0x55;
mem8[0x19DD5] = 0x9F;
mem8[0x19DE4] = 0x22;
mem8[0x19DE5] = 0x0C;
mem8[0x19DE6] = 0x7A;
mem8[0x19DE7] = 0x99;
mem8[0x19DEA] = 0xB6;
mem8[0x19DEB] = 0x08;
mem8[0x19DEC] = 0x0D;
mem8[0x19DED] = 0xC1;
mem8[0x19DF0] = 0xCD;
mem8[0x19DF1] = 0x1F;
mem8[0x19DF2] = 0x38;
mem8[0x19DF3] = 0x0B;
mem8[0x19E5C] = 0x6F;
mem8[0x19E5D] = 0xE4;
mem8[0x19E5E] = 0x53;
mem8[0x19E5F] = 0xCD;
mem8[0x19E62] = 0xBF;
mem8[0x19E63] = 0xF8;
mem8[0x19E64] = 0x68;
mem8[0x19E65] = 0x85;
mem8[0x19E66] = 0x4A;
mem8[0x19E67] = 0xE5;
mem8[0x19E68] = 0x53;
mem8[0x19E69] = 0x7B;
mem8[0x19E6A] = 0x67;
mem8[0x19E6B] = 0xD7;
mem8[0x19E82] = 0x3C;
mem8[0x19E83] = 0x49;
mem8[0x19E84] = 0xAB;
mem8[0x19E85] = 0x04;
mem8[0x19E86] = 0x54;
mem8[0x19E87] = 0xCE;
mem8[0x19E88] = 0x5F;
mem8[0x19E89] = 0xE4;
mem8[0x19E8A] = 0xD2;
mem8[0x19E8B] = 0xBD;
mem8[0x19E8C] = 0x72;
mem8[0x19E8D] = 0xA6;
mem8[0x19E8E] = 0x32;
mem8[0x19E8F] = 0x8A;
mem8[0x3CC84] = 0x50;
mem8[0x3CC94] = 0xA0;
mem8[0x3CCD0] = 0x04;
mem8[0x3CCE0] = 0xA0;
mem8[0x3CDE2] = 0x2A;
mem8[0x3CDE3] = 0x7D;
mem8[0x3CDEE] = 0xB6;
mem8[0x3CDEF] = 0xE2;
mem8[0x3CDFA] = 0xB2;
mem8[0x3CDFB] = 0xB2;
unsigned char *mem8a = CpsRom;
mem8a[0x1DAA40] = 0x4B;
mem8a[0x1DAA41] = 0x13;
mem8a[0x1DAA42] = 0x02;
mem8a[0x1DAA44] = 0x4F;
mem8a[0x1DAA45] = 0x13;
mem8a[0x1DAA46] = 0x02;
mem8a[0x1DAA48] = 0x53;
mem8a[0x1DAA49] = 0x13;
mem8a[0x1DAA4A] = 0x09;
mem8a[0x1DAA4C] = 0x57;
mem8a[0x1DAA4D] = 0x13;
mem8a[0x1DAA4E] = 0x09;
mem8a[0x1DAA80] = 0x4C;
mem8a[0x1DAA84] = 0x50;
mem8a[0x1DAA88] = 0x54;
mem8a[0x1DAA8C] = 0x58;
mem8a[0x1DAAC0] = 0x4D;
mem8a[0x1DAAC2] = 0x06;
mem8a[0x1DAAC4] = 0x51;
mem8a[0x1DAAC6] = 0x06;
mem8a[0x1DAAC8] = 0x55;
mem8a[0x1DAACA] = 0x0A;
mem8a[0x1DAACC] = 0x59;
mem8a[0x1DAACE] = 0x0A;
mem8a[0x1DAAD0] = 0xF6;
mem8a[0x1DAAD1] = 0x17;
mem8a[0x1DAAD2] = 0x04;
mem8a[0x1DAAD4] = 0xFC;
mem8a[0x1DAAD5] = 0x17;
mem8a[0x1DAAD6] = 0x04;
mem8a[0x1DAB00] = 0x4E;
mem8a[0x1DAB04] = 0x52;
mem8a[0x1DAB08] = 0x56;
mem8a[0x1DAB0C] = 0x5A;
mem8a[0x1DAB10] = 0xF7;
mem8a[0x1DAB11] = 0x17;
mem8a[0x1DAB12] = 0x04;
mem8a[0x1DAB14] = 0xFD;
mem8a[0x1DAB15] = 0x17;
mem8a[0x1DAB16] = 0x04;
mem8a[0x1DAB40] = 0x5B;
mem8a[0x1DAB42] = 0x0B;
mem8a[0x1DAB44] = 0x5D;
mem8a[0x1DAB46] = 0x0B;
mem8a[0x1DAB48] = 0x86;
mem8a[0x1DAB4A] = 0x0D;
mem8a[0x1DAB4C] = 0x88;
mem8a[0x1DAB4E] = 0x0D;
mem8a[0x1DAB50] = 0x67;
mem8a[0x1DAB51] = 0x1D;
mem8a[0x1DAB52] = 0x1A;
mem8a[0x1DAB54] = 0x69;
mem8a[0x1DAB55] = 0x1D;
mem8a[0x1DAB56] = 0x1A;
mem8a[0x1DAB80] = 0x5C;
mem8a[0x1DAB82] = 0x0B;
mem8a[0x1DAB84] = 0x5E;
mem8a[0x1DAB86] = 0x0B;
mem8a[0x1DAB88] = 0x87;
mem8a[0x1DAB8A] = 0x0D;
mem8a[0x1DAB8C] = 0x89;
mem8a[0x1DAB8E] = 0x0D;
mem8a[0x1DAB90] = 0x68;
mem8a[0x1DAB91] = 0x1D;
mem8a[0x1DAB92] = 0x1A;
mem8a[0x1DAB94] = 0x6A;
mem8a[0x1DAB95] = 0x1D;
mem8a[0x1DAB96] = 0x1A;
mem8a[0x1DABC0] = 0x76;
mem8a[0x1DABC4] = 0x7A;
mem8a[0x1DABC8] = 0x7E;
mem8a[0x1DABCC] = 0x82;
mem8a[0x1DABD0] = 0xF8;
mem8a[0x1DABD1] = 0x17;
mem8a[0x1DABD2] = 0x0C;
mem8a[0x1DABD4] = 0xFE;
mem8a[0x1DABD5] = 0x17;
mem8a[0x1DABD6] = 0x0C;
mem8a[0x1DAC00] = 0x77;
mem8a[0x1DAC02] = 0x05;
mem8a[0x1DAC04] = 0x7B;
mem8a[0x1DAC06] = 0x05;
mem8a[0x1DAC08] = 0x7F;
mem8a[0x1DAC0A] = 0x08;
mem8a[0x1DAC0C] = 0x83;
mem8a[0x1DAC0E] = 0x08;
mem8a[0x1DAC10] = 0xF9;
mem8a[0x1DAC11] = 0x17;
mem8a[0x1DAC12] = 0x0C;
mem8a[0x1DAC14] = 0xFF;
mem8a[0x1DAC15] = 0x17;
mem8a[0x1DAC16] = 0x0C;
mem8a[0x1DAC40] = 0x78;
mem8a[0x1DAC44] = 0x7C;
mem8a[0x1DAC48] = 0x80;
mem8a[0x1DAC4C] = 0x84;
mem8a[0x1DAC80] = 0x79;
mem8a[0x1DAC81] = 0x13;
mem8a[0x1DAC82] = 0x03;
mem8a[0x1DAC84] = 0x7D;
mem8a[0x1DAC85] = 0x13;
mem8a[0x1DAC86] = 0x03;
mem8a[0x1DAC88] = 0x81;
mem8a[0x1DAC89] = 0x13;
mem8a[0x1DAC8A] = 0x07;
mem8a[0x1DAC8C] = 0x85;
mem8a[0x1DAC8D] = 0x13;
mem8a[0x1DAC8E] = 0x07;
}
int sfzjbInit()
{
pCpsInitCallback = sfzjb_patch;
return CpsInit();
}
struct BurnDriver BurnDrvCpssfzjb = {
"sfzjb", "sfa", NULL, "2006",
"Street Fighter Zero (Japan 950727 / Boss enabled by Yumeji)\0", NULL, "hack", "CPS2",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE,2,HARDWARE_CAPCOM_CPS2,
NULL, sfzjbRomInfo, sfzjbRomName, DrvInputInfo, NULL,
sfzjbInit, CpsExit,Cps2Frame,CpsRedraw,CpsAreaScan,
&CpsRecalcPal,384,224,4,3
};
PS: the following is got by comparing the decrypted rom of the original "sfzj.03c" and that of the patched "sfzj.03c"
unsigned char *mem8 = CpsCode;
mem8[0x18E10] = 0xE0;
mem8[0x18E11] = 0xC2;
mem8[0x18E12] = 0x09;
mem8[0x19036] = 0x17;
mem8[0x19460] = 0x17;
mem8[0x1961E] = 0x17;
mem8[0x1965C] = 0x0B;
mem8[0x197E6] = 0xB0;
mem8[0x197F4] = 0x30;
mem8[0x19888] = 0xB0;
mem8[0x198A8] = 0x17;
mem8[0x198BA] = 0x30;
mem8[0x19DC6] = 0x25;
mem8[0x19DC7] = 0x67;
mem8[0x19DC8] = 0xD5;
mem8[0x19DC9] = 0x40;
mem8[0x19DCC] = 0xE4;
mem8[0x19DCD] = 0x60;
mem8[0x19DCE] = 0x8E;
mem8[0x19DCF] = 0xBD;
mem8[0x19DD2] = 0x48;
mem8[0x19DD3] = 0x7D;
mem8[0x19DD4] = 0x55;
mem8[0x19DD5] = 0x9F;
mem8[0x19DE4] = 0x22;
mem8[0x19DE5] = 0x0C;
mem8[0x19DE6] = 0x7A;
mem8[0x19DE7] = 0x99;
mem8[0x19DEA] = 0xB6;
mem8[0x19DEB] = 0x08;
mem8[0x19DEC] = 0x0D;
mem8[0x19DED] = 0xC1;
mem8[0x19DF0] = 0xCD;
mem8[0x19DF1] = 0x1F;
mem8[0x19DF2] = 0x38;
mem8[0x19DF3] = 0x0B;
mem8[0x19E5C] = 0x6F;
mem8[0x19E5D] = 0xE4;
mem8[0x19E5E] = 0x53;
mem8[0x19E5F] = 0xCD;
mem8[0x19E62] = 0xBF;
mem8[0x19E63] = 0xF8;
mem8[0x19E64] = 0x68;
mem8[0x19E65] = 0x85;
mem8[0x19E66] = 0x4A;
mem8[0x19E67] = 0xE5;
mem8[0x19E68] = 0x53;
mem8[0x19E69] = 0x7B;
mem8[0x19E6A] = 0x67;
mem8[0x19E6B] = 0xD7;
mem8[0x19E82] = 0x3C;
mem8[0x19E83] = 0x49;
mem8[0x19E84] = 0xAB;
mem8[0x19E85] = 0x04;
mem8[0x19E86] = 0x54;
mem8[0x19E87] = 0xCE;
mem8[0x19E88] = 0x5F;
mem8[0x19E89] = 0xE4;
mem8[0x19E8A] = 0xD2;
mem8[0x19E8B] = 0xBD;
mem8[0x19E8C] = 0x72;
mem8[0x19E8D] = 0xA6;
mem8[0x19E8E] = 0x32;
mem8[0x19E8F] = 0x8A;
mem8[0x3CC84] = 0x50;
mem8[0x3CC94] = 0xA0;
mem8[0x3CCD0] = 0x04;
mem8[0x3CCE0] = 0xA0;
mem8[0x3CDE2] = 0x2A;
mem8[0x3CDE3] = 0x7D;
mem8[0x3CDEE] = 0xB6;
mem8[0x3CDEF] = 0xE2;
mem8[0x3CDFA] = 0xB2;
mem8[0x3CDFB] = 0xB2;
Anyone can help?