15 Mar 2017

Conversion SF2' to Forgotten Worlds (CPS1)

I was about to post a repair log this week but I've been asked many times to release my Forgotten Worlds conversion with hacked controls.

So here it is!

1) Presentation

A conversion I made ~15 years ago cause I couldn't find the approriate spinners to play the game.
So I hacked the controls to use buttons instead of spinners (similar to the Megadrive version):
- button 1 is fire just as usual
- button 2 is used to rotate anti-clockwise
- button 3 is used to rotate clockwise
The hack supports 2 player game.
As usual a link to the files is available at the end of this post.

2) Technical info

Forgotten Worlds use a LWIO PAL instead of the classical IOB1 in order to be able to send requests (reset) and read from the NEC µPD4701AC used to handle spinners.
Related addresses are :
- 0x800040 to request a counter reset of spinner 1
- 0x800048 to request a counter reset of spinner 2
- 0x800052 to read counter (position) of spinner 1
- 0x80005a to read counter (position) of spinner 2

What I did is I searched within the program ROMs for occurences of "800052". There is only one @ 0x000660.
From that I've deducted :
- player 1 buttons status is stored in RAM @ 0xFFFFB26E
- player 2 buttons status is stored in RAM @ 0xFFFFB270
- player 1 angle is stored in RAM @ 0xFFFFB36A
- player 2 angle is stored in RAM @ 0xFFFFB3BA
- clockwise rotation increases the counter (anti-clockwise rotation decreases the counter indeed)
- a full round is 0x800
- if you go above 0xFFFF counter goes back to 0x0000
- if you go under 0x0000 counter goes to 0xFFFF

3) The hack

After having merged and concatenated the original ROMs to be used on a SF2' board I modified the program ROM 23 in order to:
- be able ro read buttons 2 & 3 for each player (which aren't used originally by the game)
- decrease counter if button 2 is pressed
- increase counter if button 3 is pressed
I've reused the lines used to read the spinners, there was enought space for my hack.

9 comments:

I followed your instructions and converted a Street Fighter 2 CE Mask ROM board to Forgotten Worlds using your ROM files. The game boots and plays perfectly, but there's an odd bug where both player characters slowly rotate clockwise when no controller buttons are being pressed. Buttons 2 and 3 both still rotate the character appropriately when pressed-Button 3 makes the character rotate faster than when no button is being pressed. Any idea what the cause could be?

The board has been power-cycled a few times, so I don't think it's a RAM initialization problem. In the end, I traded the A Board with my other Ghouls N' Ghosts conversion board set, and the problem cleared up. Ghouls N' Ghosts still works fine with the former Forgotten Worlds A Board, so I'll just leave them this way. Strange, but happy to have both games working!

Thank you for the awesome information you share here - looking forward to more articles!

Weird. Anyway let me know if the problem appears again and if you can see a pattern that could lead to it.Also I'd like to thank you a lot for your donation! You deserve a shout out in the next article (what about a Final Fight conversion?).