What's new

djsheep

Multi Boyz Overlord
Immortal
Multi Boyz
Joined
May 20, 2016
Messages
7,956
Reaction score
14,618
Location
Brisbane, Australia
I’m not the greatest at reading MAME drivers. I’m going to convert my Warriors of Fate over to The Punisher and install and openkey.

Just checking I got the sizes of the ROMs / files I need right I need for this:

27C400 x 8
ps-1m.3a 524288 77B7CCAB
ps-2m.4a 524288 64FA58D4
ps-3m.5a 524288 0122720B
ps-4m.6a 524288 60DA42C8
ps-5m.7a 524288 C54EA839
ps-6m.8a 524288 A544F4CC
ps-7m.9a 524288 04C5ACBD
ps-8m.10a 524288 8F02F436

27C040 x 4
ps-q1.1k 524288 31FD8726
ps-q2.2k 524288 980A9EEF
ps-q3.3k 524288 0DD44491
ps-q4.4k 524288 BED42F03

27C4096 x 1
ps_21.6f 524288 8AFFA5A9

8 x 27C1000
pse_24.9e 131072 0F434414
pse_25.10e 131072 B77102E2
pse_26.11e 131072 389A99D2
pse_27.12e 131072 3EB181C3
pse_28.9f 131072 B732345D
pse_29.10f 131072 EC037BCE
pse_30.11f 131072 68FB06AC
pse_31.12f 131072 37108E7B

27C010 x 1
ps_q.5k 131072 49FF4446

GAL16V8 x 1
ioa1 279

Thanks for any help.

p.s. in my notes, I have written that I can condense the 8 x 27C1000 into 2 x 27C4096? What is that theory and would this still work with the openkey?
 
Last edited:
BUMP.

por favor?
 
For the GAL16V8(s)

You shouldn't need to touch ioa1

On the B board replace tk263b with ps63b.1a
On the D board if it has d9k1, replace it with d9k2.9k
 
Bump. Can anyone here double check I've got the sizes of my EPROMs right for the conversion in the original post?

Also, is it possible to use 27C160 in place of 27C400 by doubling the image?
 
Can anyone here double check I've got the sizes of my EPROMs right for the conversion in the original post?
What B-Board are you using? because some B-Boards use 27c4096 and others use 27c400

as for using 27c160 in place of 27c400, not really the 27c160 is longer by 1 row of pins and if there's room for them to hang off the socket (which there might not be) you'd want to tie them to either 5V or GND to keep them from floating.
 
Thanks for chiming in @twistedsymphony. My stack is 91635B-2 and 92636D-3. There seems to be some factory? fixes on here.

WOF_B.JPG
WOF_D.JPG


It also seems like my WOF has suicided... the battery on this was replaced and kabuki reprogrammed a few years ago by @xodaraP -- but it's giving me a flatline on the multimeter. Any reason a new battery would drain that fast?
 
I had the same issue... WOF I bought suicided , replaced the battery and did a C&D conversion... new battery was flat again a little over a year later... I think it's just a combo of the Kabuki drawing more on the battery than most and old batteries not really starting with the best charge. the 2nd battery I installed lasted through another 2 years until I replaced it with an infinity key.

As for your board here the "MASK-ROM-TYPE" uses 27c400 and the "EP-ROM-TYPE" uses 27c4096, for the graphics ROMs. note that the order of the chips is also different between these boards. my WOF->C&D conversion had an EP-ROM-TYPE board and I was having weird graphics issues until I realized the chip order has some swapped around between the b-board versions.

Program ROMs should be 27c4096 (in slots 20-23, don't bother with 27c1000s in 24-31)
PAL @1A should be GAL16V8

Q-Sound roms are 27c040

I think the only one I'm unsure of is the audio program ROM as a 27c1000, it may be a 27c010, I don't remember other than I got this one wrong on my first try also... though again it may be different depending on PCB version.

you may want to look at the ROM mapping in mame between the USA and JP releases, if I recall different regions tended to get different PCBs so that will lend you some clues.
 
Thanks for that @twistedsymphony.

One question.

Program ROMs should be 27c4096 (in slots 20-23, don't bother with 27c1000s in 24-31).

How do I handle these files?

pse_24.9e 131072 0F434414
pse_25.10e 131072 B77102E2
pse_26.11e 131072 389A99D2
pse_27.12e 131072 3EB181C3
pse_28.9f 131072 B732345D
pse_29.10f 131072 EC037BCE
pse_30.11f 131072 68FB06AC
pse_31.12f 131072 37108E7B
 
so you're going from paired 8-bit roms to 16 bit ROMs so the data will need to be interleaved.
there are a couple of ways to do this.
I wrote a python script for this kind of task: https://github.com/twistedsymphony/ts_rom_tool
there is also porchy's BINman tool: https://www.jammarcade.net/programs/

if you look at punisherj you'll see it uses 3 16-bit ROMs for the program:
Code:
/* B-Board 91634B-2 */
ROM_START( punisherj )
	ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
	ROM_LOAD16_WORD_SWAP( "psj_23.8f", 0x000000, 0x80000, CRC(6b2fda52) SHA1(5f95a79b7b802609ae9ddd6641cc52610d428bf4) )
	ROM_LOAD16_WORD_SWAP( "psj_22.7f", 0x080000, 0x80000, CRC(e01036bc) SHA1(a01886014dabe8f9ab45619865c6bd9f27472eae) )
	ROM_LOAD16_WORD_SWAP( "psj_21.6f", 0x100000, 0x80000, CRC(8affa5a9) SHA1(268760b83b1723ff50a019ec51ef7af2e49935bf) )    // == ps_21.6f
these are all 0x80000 in size (which is what you'd expect for a 27c4096) and you can see based on the starting positions that ROM23 has the first section of the code ROM22 has the middle section of the code as ROM21 has the last section of code.

now lets look at the world version:
Code:
/* B-Board 91635B-2 */
ROM_START( punisher )
	ROM_REGION( CODE_SIZE, "maincpu", 0 )      /* 68000 code */
	ROM_LOAD16_BYTE( "pse_26.11e",    0x000000, 0x20000, CRC(389a99d2) SHA1(e97f4225554e4603cb0e3edd296a90bb2e467ca7) )
	ROM_LOAD16_BYTE( "pse_30.11f",    0x000001, 0x20000, CRC(68fb06ac) SHA1(189e25ca7e4aaa80492c03ce06696952cc1b1553) )
	ROM_LOAD16_BYTE( "pse_27.12e",    0x040000, 0x20000, CRC(3eb181c3) SHA1(a2442449f4bbe3be03d2be7d4e2cbb69f9741dac) )
	ROM_LOAD16_BYTE( "pse_31.12f",    0x040001, 0x20000, CRC(37108e7b) SHA1(78aaa6e2913e6b1b852b39416557ac4a394d7d8b) )
	ROM_LOAD16_BYTE( "pse_24.9e",     0x080000, 0x20000, CRC(0f434414) SHA1(aaacf835a93551fc792571d6e824a01f3c5d4469) )
	ROM_LOAD16_BYTE( "pse_28.9f",     0x080001, 0x20000, CRC(b732345d) SHA1(472d84f846e9f73f129562d78352376194e0211e) )
	ROM_LOAD16_BYTE( "pse_25.10e",    0x0c0000, 0x20000, CRC(b77102e2) SHA1(2e39b2c2c0eed5ca2320a57e69bcf377f809a20c) )
	ROM_LOAD16_BYTE( "pse_29.10f",    0x0c0001, 0x20000, CRC(ec037bce) SHA1(f86e7feb63d7662a38048e6d51d7b5a69dafaffb) )
	ROM_LOAD16_WORD_SWAP( "ps_21.6f", 0x100000, 0x80000, CRC(8affa5a9) SHA1(268760b83b1723ff50a019ec51ef7af2e49935bf) )

so we can see that PS_21 is already the correct 16-bit format and size so the last section of code is solved for us.

based on the organization here
"pse_26.11e", "pse_30.11f", "pse_27.12e", and "pse_31.12f" make up ROM23
and
"pse_24.9e","pse_28.9f", "pse_25.10e", and "pse_29.10f" make up ROM22

we can tell that these are 8-bit ROMs being loaded in pairs to make 16-bit code from the "ROM_LOAD16_BYTE" command being used, BYTE meaning it's only loading half of a 16-bit word, also if you notice the start position every other one ends 1 instead of 0. 0 means it's loading the even byte of the word and 1 means it's loading the odd byte of the word. Interleaving means you need to merge the files together taking one byte from one file and the next byte from the other file back and forth. Not as simple as just concatenating, and why you need a program like my tool or the BINman tool.

So what you'd need to do
interleave 26 + 30 to create 23_lower_half
interleave 27 + 31 to create 23_upper_half
concatenate 23_lower_half + 23_upper_half to create ROM 23

interleave 24 + 28 to create 22_lower_half
interleave 25 + 29 to create 22_upper_half
concatenate 22_lower_half + 22_upper_half to create ROM 22

not to add confusion but for the sake of completeness you can alternatively concatenate before you interleave, the result would be the same
concatenate 26 + 27 to create 23_even
concatenate 30 + 31 to create 23_odd
interleave 23_even + 23_odd to create ROM 23

concatenate 24 + 25 to create 22_even
concatenate 28 + 29 to create 22_odd
interleave 22_even + 22_odd to create ROM 22
 
Last edited:
Thanks to everyone on this thread for the help in getting this going. Even though it's a relatively simple conversion, I learnt a lot throughout this process. Nice to have another project finally done and dusted. Here's a work log in case anyone else is ever looking.

CPS-1.5: Warriors of Fate (MASK-ROM-TYPE) to The Punisher (Japan) Conversion with openkey-cps1/kabuki.

Firstly, burn the following EPROMs:

27C4100 / 27C400 x 8 (Graphics)
ps-1m.3a 524288 77B7CCAB
ps-2m.4a 524288 64FA58D4
ps-3m.5a 524288 0122720B
ps-4m.6a 524288 60DA42C8
ps-5m.7a 524288 C54EA839
ps-6m.8a 524288 A544F4CC
ps-7m.9a 524288 04C5ACBD
ps-8m.10a 524288 8F02F436

27C040 x 4 (Q-Sound)
ps-q1.1k 524288 31FD8726
ps-q2.2k 524288 980A9EEF
ps-q3.3k 524288 0DD44491
ps-q4.4k 524288 BED42F03

27C4096 x 3 (Program)
ps_21.6f 524288 8AFFA5A9
psj_22.7f 524288 E01036BC
psj_23.8f 524288 6B2FDA52

27C1001 / 27C010 x 1 (CPU)
ps_q.5k 131072 49FF4446

GAL16V8B x 2
ps63b.1a
d9k2.9k (only required if your board has a d9k1).

NOTE: To burn the GAL, you might need to convert the .BIN from MAME into a .JED so that your programmer can read it (Top3000). I used the tool JEDUTIL.EXE which is included with MAME. There's a good write up about how to use this tool here: https://www.jammarcade.net/how-to-use-jedutil/
  • After burning and verifying the EPROMs, remove and replace the existing ones. Take your time to make sure that they're in the correct orientation and everything is seated fine.

  • Next, de-solder the batteries on both the C-Board and D-Board.

  • Remove the Kabuki chip, set the DIP switch on the openkey-kabuki and replace it with the kabuki seated on the openkey.

  • Set the DIP switch on the openkey-cps1 and place your battery-less C-Board on it. Install this on your B-Board.

  • Plug everything in, turn it on, and you should be good to go.
punisher_1.JPG
punisher_2.JPG
punisher_3.JPG
 
Back
Top