Hacking the ST rom


cps1.c says Forgotten Worlds/Lost Worlds uses one as it’s sound program rom. I’m sure there is more uses for it else where.


cps2 ST with a toremo flag in the dip settings would be a killer app :slight_smile:


I’m busy with another project.
Left: CPS2
Right: CPS1’



I know we communicated briefly about referencing the Q-Sound CPS1 games but if you want to see a direct CPS1(non-Q-Sound)-to-CPS2 done by Capcom themselves, they ported the first Rockman/Megaman: Power Battle to CPS2 (for some crazy reason).


I should take a look at it anyway. Even, if it isn’t a direct port. To see what they had to change.

I could drop Mbomber duo and go with sf2 and reuse the qsound chip from sf2 versions on cps2. So I don’t have to deal with the protection that is on Muscle Bomber.


CPS1 to CPS2 gfx notes

SF2:HF rom
Only partially got the graphics interleaved correctly.
s92-1m.3a interleaves with s92-2m.4a and this is for the left 8x16, and only works till 0x1000 in the graphics viewer on 16x16 even then



Hey guys, hope im not breaking too many rules by posting this here (but the other rom hacking threads look a bit dead).

Thanks Jed for the pointers, they really helped!

Here is what I have done so far, now all I have to learn is to get into an encrypted rom, manipulate the crc checks and then it should be good to play on GGPO (I think).

P.S. Sorry the quality is so bad of the videos, my laptop just isnt strong enough to record at a better setting :frowning:


Don’t worry about it I posted a lot of Vsav stuff in this thread all the time and now working on porting a cps1 game to cps2.

Also, feel free to use my A3 hacks which the notes are posted in this thread for removing the counter hit flash and adding the hidden characters to the select screen.

FF86AD aka Player Address + 0x2AD - Status Timer
FF86AE aka Player Address + 0x2AE - Status

Flags for Status
0E - Pure white / air tech
10 - Lighten / throw tech
12 - Red / Priority
14 - Pink / Damage Reduction
16 - Light Blue / Just Defend


Sweeeet! Thanks Jed, I really wanted to add the flash after you mentioned it but after many wasted hours I gave up, just couldn’t find the byte that dictated this. :smiley:


Here is my notes for the changes so far.

Currently im putting my code in the test menu text location, since I figured it was safe to use that location as im not aware of anyone confirming a3 has an intact debug still flaggable.

Also not in the videos I also check for X-Dhalsim and give him a smaller push block strength.

jump instruction for guard cancel: 034820
value max guard: 00FF864C

alpha counter removal - 2EE78 : 042E 0010 024C
replace with (jump to next instruction!): 4EF9 0002 EE7E

Data needed for pushblock during subroutine: 0291BE bsr 2920C

do b@FF8502 = c ; Character is Dan
do b@FF8532 = 1 ; Char is Vism
do b@FF8771 = 03
do D0=7

29278 = the call to do push block animation
Flash screen : do w@80410A=9280

Override who can do PB (all X ism chars)
replacing 2920C: 0C2E 001F 0102
with: jmp 016300 : 4EF9 0001 6300
016300 : cmpi.b 1f, (102,A6) : 0C2E 001F 0102
016306 : beq 01631E : 6716
016308 : cmpi.b ff, (132, a6) : 0C2E 00FF 0132
01630E : bne 016324 : 6614
016310 : move.b (24d, a6), d0 : 102E 024D
016314 : addi.b 1C, d0 : 0600 001C
016318 : cmp.b d0, (24c, a6) : B02E 024C
01631C : bgt 016324 : 6E06
01631E : jmp 029224 : 4EF9 0002 9224
016324 : jmp 029212 : 4EF9 0002 9212
01632A : 

Modifying how much push block is given:
replacing 29258: (move.b 1f, A4) 197C 001F 02C2
with: jmp 01631C : 4EF9 0001 632A
01632A : move.b 1f, (2C2, a4) : 197C 001F 02C2
016330 : cmpi.b 1f, (102,a6) : 0C2E 001F 0102
016336 : beq 016372 : 673A
016338 : cmpi.b ff, (132, a6) : 0C2E 00FF 0132
01633E : bne 016372 : 6632
016340 : move.b ff, (24b, a6) : 1D7C 00FF 024B
016346 : move.b 1C, (29a, a6) : 1D7C 001C 029A
01634C : addi.b 1C, (24d, a6) : 062E 001C 024D
016352 : addi.b 1C, (24f, a6) : 062E 001C 024F
016358 : cmpi.b 0f, (102,a6) : 0C2E 000F 0102
01635E : bne 016366 : 6606
016360 : move.b 15, (2C2, a4) : 197C 0015 02C2
016366 : moveq 0, d0 : 7000
016368 : moveq 3a, d3 : 763A
01636A : moveq 2f, d4 : 782F
01636C : jmp 02927C : 4EF9 0002 927C
016372 : jmp 02925E : 4EF9 0002 925E

return to 2925E for regular anim, jump to 2927C to skip anim so remain in block.

do b@FF864B = Timer to initiate gauge recharge
do b@FF869A = :FF869A = v: 1343 029A
do b@FF864D = 24:FF864D = v+(FF864D): D729 024D
do b@FF864F = 24:FF864F = v+(FF864F): D729 024F


I had an idea for the right side all day. And it seemed likely it would work I didn’t do it at first. I just wanted to figure out how to get past the 0x1000 hurdle more.

Unmodified Palette


CPS1 Palette with some liberty


The the idea was to use 4 as the base interleave it with 3 for the left side graphics.


Huh, I thought it was only 2 days of silence.



Need to get rid of the doubling that lasts from 0x2000 to 0x3FFF and etc


Dude, if you or anyone ports cps1 audio into ST a reality, I will donate an arcade cab.


Jed is already making room for your cab.


Not going to happen, unless some one wants to do a hack job of wiring the Kabuki on to your cps2 board. I’ll be using the q-sound still. Probably going to just reuse ST sound programming and samples. Then maybe, switch to HSF2 at a later for the CPS1 character voice samples. But this is way down the line I still need to fix the graphics, get past the ram checks, rewrite memory locations, fix inputs, fix any bugs, then either settings rewrite or sound.


Dah, I forgot about the Kabuki chip. Isn’t that just a custom Z80? I wonder if anyone’s ever sussed out the differences between it and a vanilla Z80.

I figured there would be a lot of nagging manipulation like that. Once you have a game fairly well ported (as a proof of concept), it would be awesome to get some other people on board working on the whole CPS1 library. Especially with Darksoft’s CPS2 flash cart coming soon (I was shocked to discover how far along he is). That would be amazing to have the CPS1 & CPS2 libraries running on the same hardware. And since it will be easily updatable, people will be contributing bug reports & fixes (similar to what we see in the MAME community). Also all sorts of hacks and homebrew will likely pop up. For those of you not following, here’s the interest thread on neo-geo: http://www.neo-geo.com/forums/showthread.php?254247-CPS2-Multi-Game-Cartridge


Here’s the differences sound hardware wise.
There is more than just the Z80 that is different. Kabuki custom Z80 with encryption, YM-2151 and OKIM6295 for the sound processing. Cps2 uses Z80 with a q-sound chip. CPS1 dash forgoes the Z80 and uses the main 68k and q-sound for sound as well reading q-sound data and ram for protection.


So any idea how I would go about getting my changes into the sfa3.zip (encrypted) romset?

I figured I could just play the decrypted rom on ggpo via the unsupported room but sfa3ud.zip rom isnt supported by ggpofba.


@wazeem: use XCopy to decrypt & re-encrypt the roms - https://www.mediafire.com/folder/tsu2b5ndrl0ut/ST_hacking


@pof‌ I have tried already but no version seems to work.

Does it have to be a specific version or something?