29 Mar 2017

Gunbird - Psikyo 1994 (repair log)


The game was stuck in a reset loop.
After a quick inspection of the board I found the only Fujitsu chip installed is used to generate the /RESET signal.
It was obviously bad (it's a MB3771)...
I tricked it by shorting two legs and game booted fine:






Very easy this time. Everything happens!

22 Mar 2017

Samurai Shodown II (MVS) - SNK 1994 (repair log)

Nothing impressive this time.
The game worked fined but with a crackling sound.
As usual I checked all the traces but didn't find any broken.
So it was time to pull the V ROMs (4 of them) and compare them with the MAME romset.
V1 to V3 were fine however V4 wasn't.
This ROM has a Toshiba reference but is pin to pin compatible with a standard 27C800.
So it was just a matter of programming the .v4 file in it.
After resoldering the 4 V ROMs, sound was restored and 100% perfect.



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.

4) Material needed

4.1) If you use a 91634B-2 B-board (EPROM)
- 10 * 27C4096 ROM (8 for the graphics and 2 for the program)
- 2 * 27C010 ROM (audio)
- 1 * 27C512 ROM (audio)
- 1 * GAL16V8 (PAL)

4.2) If you use a 91635B-2 B-board (mask ROM)
- 8 * 27C400 ROM (graphics)
- 2 * 27C4096 ROM (program)
- 2 * 27C010 ROM (audio)
- 1 * 27C512 ROM (audio)
- 1 * GAL16V8 (PAL)

5) ROMs and PAL burning

Now it's time to burn the files on the appropriated devices.

5.1) If you use a 91634B-2 B-board (EPROM)
- ROMs 01/02/03/04/05/06/07/08/22/23 => 27C4096
- ROM 09 => 27C512
- ROM 18/19 => 27C010
- FW_PAL_1A.jed => GAL16V8

5.2) If you use a 91635B-2 B-board (mask ROM)
- ROMs 01/02/03/04/05/06/07/08 => 27C400
- ROMs 22/23 => 27C4096
- ROM 09 => 27C512
- ROM 18/19 => 27C010
- FW_PAL_1A.jed => GAL16V8

6) ROMs installation

All SF2' ROMs must be removed from the B-board.
The PAL named S963B at position 1A has to be removed too.
Double check you've put the devices the right way (the silkscreen should help you)!

6.1) If you use a 91634B-2 B-board (EPROM)
- Install the ROMs in the corresponding socket (ROM 01 in socket 01, etc.)
- Install the GAL16V8 in position 1A (where the S963B was)

6.2) If you use a 91635B-2 B-board (mask ROM)
- Install the ROMs 01/04/05/08/09/18/19/22/23 in the corresponding socket (ROM 01 in socket 01, etc.)
- Install ROM 02 in socket 03
- Install ROM 03 in socket 02
- Install ROM 06 in socket 07
- Install ROM 07 in socket 06
- Install the GAL16V8 in position 1A (where the S963B was)

7) Test








[EDIT 31/03/17]
I just realised I put the wrong PAL file in the archive. That's fixed.

[EDIT 01/11/17]
Found a bug: sometimes after starting a new game your character would just rotate anti-clockwise slowly even with no button depressed and power cycling the game would fix the problem. It's fixed now.



8 Mar 2017

The Main Event - Konami 1987 (repair log)

That one was super easy, upon boot game indicated 2 bad RAMs @ C11 & I5: I replaced them but the game hanged up. RAM @ C14 was faulty too (although indicated as OK).





Then sound was glitchy: bad RAM @ F5 (not tested on startup, can't be tested in test mode). Sound was still glitchy: bad ROM (27C256) @ F7 (can't be tested in test mode either).
Game fixed.



1 Mar 2017

Conversion SF2' to Ghouls'n'Ghosts (World, not resale) CPS1

1) Presentation

On CPS1 it's possible to convert any game to run with any B-board and with any C-board.

To use a different C-board:
- program ROMs have to be modified according to the tables of the C-board used

To use a different B-board:
- the graphic PAL has to be modified to handle graohic ROMs addressing
- ROMs have to be splitted/merged depending of the initial B-board and the conversion B-board

The conversion of SF2' to Daimakaimura is well know online, and there's a reason for it, it requires only ROM and PAL swap.
But I'm not happy with this conversion, as everyone outside of Japan I grew up on Ghouls'n'Ghosts not Daimakaimura (and I love the bat style title screen).
The conversion I propose is to convert a SF2' game using a 91634B-2 (EPROM) or 91635B-2 (mask ROM) B-board and a C-board with CPS-B-21 chip to the World (Export) version of Ghouls'n'Ghosts originally using a 88620B B-board with embedded CPS-B-01 chip (no C-board on this early CPS1 game).
The link to the files is available at the end of this post.

2) Material needed

2.1) If you use a 91634B-2 B-board (EPROM)
- 10 * 27C4096 ROM (8 for the graphics and 2 for the program)
- 1 * 27C010 ROM (audio)
- 1 * GAL16V8 (PAL)

2.2) If you use a 91635B-2 B-board (mask ROM)
- 8 * 27C400 ROM (graphics)
- 2 * 27C4096 ROM (program)
- 1 * 27C010 ROM (audio)
- 1 * GAL16V8 (PAL)

3) Technical explanation

3.1) C-board conversion
For the C-board there isn't any problem as the CPS-B-21 chip is a CPS-B-01 with volatile registers. If no suicide battery is used it's identical to the CPS-B-01 therefore no program modification is needed.

3.2) B-board conversion

3.2.1) Graphic PAL
For the B-board the job has already been done for the PAL: we can use the DAM63B file used for Daimakaimura to replace the S963B PAL present on the SF2' B-board.

3.2.2) ROM merging
Some files have to be merged other can be used as is.

Ghousl'b'Ghost (World) romset contains the following files:
09.4a
10.4b
11.4c
12.4d
13.4e
14.4f
15.4g
16.4h
18.7a
19.7b
20.7c
21.7d
22.7e
23.7f
24.7g
25.7h
26.10a
dm-05.3a
dm-06.3c
dm-07.3f
dm-08.3g
dm-17.7j
dme_27.9h
dme_28.9j
dme_29.10h
dme_30.10j

The goal of the conversion is to obtain graphic ROMs at positions 01 to 08, audio ROM at position 09 and program ROMs at positions 22 & 23.

dm-05.3a corresponds to ROM at position 01.
dm-06.3c corresponds to ROM at position 02.
dm-07.3f corresponds to ROM at position 03.
dm-08.3g corresponds to ROM at position 04.

It's a bit more complicated for ROM at position 05: early CPS1 games use four 128kb * 8 bit ROMs instad of big 256kb * 16 bit ROMs.
Four files have to be merged: 09.4a (LSB LOW), 18.7a (MSB LOW), 10.4b (LSB HIGH) and 19.7b (MSB HIGH). The file we obtain is only 256kb so we can leave the other half of the ROM blanked (filled with $FF just like in the Daimakaimura resale version) or we can double the file which is what I did.

11.4c (LSB LOW), 20.7c (MSB LOW), 12.4d (LSB HIGH) and 21.7d (MSB HIGH) correspond to ROM at position 06.
13.4e (LSB LOW), 22.7e (MSB LOW), 14.4f (LSB HIGH) and 23.7f (MSB HIGH) correspond to ROM at position 07.
15.4g (LSB LOW), 24.7g (MSB LOW), 16.4h (LSB HIGH) and 25.7d (MSB HIGH) correspond to ROM at position 08.
dam-09.12a corresponds to ROM at position 09 and have to be doubled.
dm-17.7j corresponds to ROM at position 22. Warning a byteswap is needed.
dme_30.10j (LSB LOW), dme_29.10h (MSB LOW), dme_28.9j (LSB HIGH) and dme_27.9h (MSB HIGH) correspond to ROM at position 23.

4) ROMs and PAL burning

Now it's time to burn the files on the appropriated devices.

4.1) If you use a 91634B-2 B-board (EPROM)
- ROMs 01/02/03/04/05/06/07/08/22/23 => 27C4096
- ROM 09 => 27C010
- GNG_PAL_1A.jed => GAL16V8

4.2) If you use a 91635B-2 B-board (mask ROM)
- ROMs 01/02/03/04/05/06/07/08 => 27C400
- ROMs 22/23 => 27C4096
- ROM 09 => 27C010
- GNG_PAL_1A.jed => GAL16V8

5) ROMs installation

All SF2' ROMs must be removed from the B-board.
The PAL named S963B at position 1A has to be removed too.
Double check you've put the devices the right way (the silkscreen should help you)!

5.1) If you use a 91634B-2 B-board (EPROM)
- Install the ROMs in the corresponding socket (ROM 01 in socket 01, etc.)
- Install the GAL16V8 in position 1A (where the S963B was)

5.2) If you use a 91635B-2 B-board (mask ROM)
- Install the ROMs 01/04/05/08/09/22/23 in the corresponding socket (ROM 01 in socket 01, etc.)
- Install ROM 02 in socket 03
- Install ROM 03 in socket 02
- Install ROM 06 in socket 07
- Install ROM 07 in socket 06
- Install the GAL16V8 in position 1A (where the S963B was)

6) Test

Finally! It should work:
(Screenshots made with MAME but conversion has been tested on real hardware too)



I've done many more conversions on CPS1:
- Final Fight
- U.N. Squadron (World, not resale)
- Forgotten Worlds (with hacked controls to use buttons instead of spinners)
- etc.

So stay tuned!