Learning new things: resurrect an arcade system (CPS3)Loïc *WydD* PetitBlockedUnblockFollowFollowingMay 27As a turbo nerd, I have the privilege to learn new skills either at my job or during my hobbies.
In this article, I wanted to showcase a good example of me trying new things and learning along the way.
Maybe you will learn something new too.
Little note of context before we dive in: I got my first arcade motherboard less than a year ago, consider that I didn’t know anything about arcade hardware before that.
The challengeIt’s been a while since I was hunting for an arcade system: the CPS3 to have Street Fighter III Third Strike running on it.
Unfortunately, on normal working conditions, systems like these are extremely rare and pricy.
I’ve seen sets that goes up to 800€ easily.
I’m a madman but I don’t play enough to invest that much.
Then finally, after months of daily emails from ebay and searches through the french forums, I find this beauty: a CPS3 motherboard with all the SIMMs and a cartridge of 3rd strike Asia No-CD for a total of 320£ (~380€ with shipping).
For the price it says “Cart dead, working motherboard and excellent aesthetic condition.
Can be salvaged with darksoft bios”.
The CPS3Ok, you’ve maybe browsed the last paragraph by saying “wtf is he talking about”.
So let’s recap on what is the CPS3, why the price is interesting and why I can theoretically salvage it.
Standard CPS3 hardware with SFIII New Generation courtesy of 8bitplus.
ukThis beauty is a CPS3, let’s see what is in here.
It has one large motherboardIt has a cartridgeIt has a SCSI CD driveIt has memory slots.
In order to run a game, you need: the cartridge and the CD, also you need to verify that you have the right amount of memory modules.
Those memory modules (called SIMMs) are actually flash storage.
When you load a game for the first time, the motherboard will copy data from the CD to the flash.
Afterwards, it will mostly load data from the flash SIMMs and more rarely from the CD.
About the requirements, you can find them here but for instance: 3rd strike requires 4 sticks of 128Mb and 2 sticks of 64Mb.
When you talk price, those SIMMs are really important.
For a long time they were RARE, fortunately Darksoft (a name you will see a lot in this article) created reproductions for $60 the 128Mb stick.
So just the 128Mb would cost $240.
I’ve seen bare motherboards for $400 on ebay.
Adding the right amount of memory would rank the cost to $700+ again.
In my case, it was a 3rd Strike Asia No-CD with all the SIMMs.
So having them all is fortunate because I don’t need to buy more to run all the games I want, but I don’t have a SCSI Drive if needed, we’ll get to that later.
The cartridge contains the startup sequence (BIOS), the decryption key and algorithm for the game it can boot.
Like all CPSes, this cartridge has a suicide mechanism.
It contains a battery, and when the battery runs out, the cartridge wipes its decryption key and you cannot boot the game anymore.
At the time you had to send the game to Capcom for maintenance, allowing them control over their fleet of arcade games and copy protection.
[erratum: only some CPS1 games had a suicide battery]So, what I have is: nearly all the hardware, but the cartridge allegedly committed suicide.
I had some minor issues, like a small chunk of solder was dropped in the cartridge slot and the feet broke during the shipping (20 years old plastic).
The solder could be removed using plyers and I had replacement feet lying around.
The motherboard as I received it with the cartridgeThe resurrection processThis is the part that impresses me the most.
The community is so passionate on the CPS systems that they figured out a way to either reinject the encryption keys (on CPS1 and CPS2 thanks to edcrossed) or by rewriting the BIOS (on CPS3 thanks to Darksoft).
The Darksoft SuperBios allows all games to be loaded to flash and they will be able to run natively without an encryption key loaded.
So in the end, you need only ONE cartridge that will do everything and you also need ONE CD that will contain all games (each game takes ~80–100MB, and there are only 6 games on this system so they fit on a standard CD-ROM).
Here’s the plan: open the cartridge, get the flash memory, write the new bios on it, put it back in the cartridge, get a SCSI drive and use the given CD on it… profit!.Although, there are a lot of things that can go wrong from there and the worst of all: for all I know, the motherboard could be completely dead.
But let’s do this.
Get the cartridge flashAlright, so the first step is to open the cart.
If you look at the back, there are two security screws.
I’m pretty sure there are the same as NES cartridges, you can nudge them using plyers.
The security screwWe can now see the whole PCB.
Condition is clean but the battery had a poor solder quality (forgot to take a photo sorry), maybe this was the culprit for the suicide ????.
Contrary to CPS2 which can sustain an hour without a battery, the CPS3 is very fragile when it comes to destroy itself.
The flash to remove is the TSOP48 chip next to the big processor.
Quick note: this processor is a custom SH2 processor that handles encryption.
It is possible to replace this with a standard SH2 but that requires another BIOS.
The advantage of the standard SH2 is that there are no more encryption to deal with.
But nowadays, even with the encryption, the custom bios has all the key tables.
I remove the battery using a soldering iron, a solder pump, and some solder wick to clean what’s left, nothing fancy but the job is clean.
Disclaimer: I’m not a highly skilled solderer, it is not my job, I have the cheapest equipment you can get and prior to a few months ago I never played with surface mounted components.
That is why I won’t give any advice on soldering.
The only thing I will say: use flux… a lot… clean-up the mess afterwards with alcohol and if you can, find a dummy PCB to test your skills first.
Let’s extract the flash chip.
I was inspired by this video for the whole process, I did my best to repeat what he did.
I did this with a hot air gun (you can find one for 40 bucks on amazon).
I did have some experiment with the hot air gun when I worked on my CPS2 but it was on larger components.
After some hesitations with the temperature to use, it worked well (I won’t tell publicly the temperature because again: it might not be the right one, I’m going as I learn).
The PCB after extractionStep 2.
Program the flashThe easy part is finished, now let’s look at things I don’t know.
I have to reprogram this small boy.
When I say small I mean it: it’s 12×18.
4mm and there are 48 pins.
Problem: I don’t have a flash programmer (if you do, use it obviously!).
I could buy stuff but I never buy something if I can work my way around it and learn things along the way.
After all, I created the CPS2 Companion that was able to burn ROMs with an arduino mega, so burning a flash should be “easy”.
The first step is to be able to wire it up.
There exists TSOP48 adapter to make it similar to standard DIP chip.
This is pretty handy, you can put the chip in there and you can use it on you normal breadboard.
The second step is to find the right documentation.
The generic reference of this chip is 29F400 but there can be variations amongst the constructors.
I found after a lot of searches that it was a fujitsu one and the datasheet can be consulted here.
After looking at the pinout and the basic functionalities, I wired everything using jumper cables on my beloved Arduino Mega.
It requires 40 wires to the arduino to work with some extra things for pull up resistors.
“Kill it with fire” — My arduino flash programmerReading operations are like a ROM.
You select an address and you get a 16bits word on the data bus.
Writing is another story.
When I needed to burn a ROM, it was basically “put a high voltage, put the address and the data, activate the write pin, next…”.
On a flash, it’s much more complex.
The write pin (called here W) is not there to send data to the target address, it’s here to send commands.
For example, if you want to send a write command, you need to do:address 0x555, data 0xAA, impulse on Waddress 0x2AA, data 0x55, impulse on Waddress 0x555, data 0xA0, impulse on WNow you have instructed the flash internal state machine that you want to write, you can now give the desired address and data with a final impulse on W.
Listen to a pin that tells you the internal status, when the pin tells you the chip is ready, you can write another data.
It took me a whole saturday to make it work but in the end I was able to send the whole bios to the flash!.My code is available here.
Put the flash back in placeThat was the step that scared me the most.
I never soldered that kind of SMD components.
But after watching the aforementioned video, I comforted myself in thinking it was doable.
Here’s what I feared: create a bridge between pins.
On videos this seems simple (like “oops there’s bridge, there, fixed”) but in practice it’s harder especially when you are not perfectly equipped.
Flash is now soldered back in place!In the end, it worked more or less as expected.
When I powered it for the first time I saw this and couldn’t believe it.
BIOS Boot with the Darksoft prompt to press Start on P1 for the custom menuThe worst part was that after a couple of hours, the cartridge failed!.It only showed solid colors on the screen.
When I tried to fix it, I made more of a mess creating bridges everywhere, got frustrated, came back the next day and cleaned everything bridge by bridge.
Don’t ever think that everything works perfectly for me every time.
the easy stuff: SCSI2SDRemember a few sections ago, I said that I had a No-CD version but with the new BIOS I needed a CD drive.
We live in the 21th century, and SCSI drives can be a pain (ask any musician with an old sampler, or a collector of vintage computer) so why don’t we try SCSI2SD.
1You can find it for ~60£ at official resellers which also sells ribbon wires (hard to find otherwise).
This device emulates a SCSI device using an SD card (way more convenient than a CD).
It can be tricky to make it work in this case, but fortunately the good folks at the Arcade-Projects forum have a procedure to make it work on a CPS3.
After a few troubles it worked (note: I disabled parity checks because it wouldn’t work, not sure if it was the culprit in the end).
Profit?After some works on the drive (I cleaned the SCSI port with compressed air for instance), everything seems to work and I start the loading of third strike.
Now the board works perfectly, I just had to fiddle with my OSSC on my supergun setup to have the pixel perfect video output.
I did this using the video grid on the test menu.
I had a previous experience when I configured a pixel perfect CPS2 and with the help from a tutorial I followed back then I was able to have a sharp image.
Here are the settings for posterity 320×240 mode, active 384×224, H.
samplerate 546, V.
backporch 22, H.
Final wordsAll I can say is: “It frickin’ works!”.
I wanted to demonstrate here the number of times that I’ve learned something new.
Here’s what I learned along the way:How CPS3 handles its data and encryption.
How to remove SMD component using an hot air gun.
How to solder a very thin SMD component with a basic iron and flux.
How a flash memory works.
I refined also some other skills like basic desoldering and Arduino programming.
And there was lots of skills I already knew and built upon like the arduino interfacing with python or partition creation on the SD card.
Keep on learning.