About me

My photo
Vanløse, Copenhagen, Denmark
Mathematician. Working programmer/system developer. Nerd. Married. Father of 3.

26.4.13

NMK Thunder Dragon Repair Log

I have to be honest...ever since I learned, that one of my favourite games Psychic5 was made by NMK for Jaleco, I have completely fallen in love with both companies. So I try to snap up as many games from both (when I find them at a fair price) as I can. Here I'd found an original NMK Thunder Dragon with "graphical errors" on evilBay with a starting price of 2EURO + 28EURO P&P. As I was the only bidder, I got it for the 30EURO all-in-all };-P.
When first booted up, the main intro logo, text layer and sprites looked fine, but some of the background layer was pretty messed up.



So dumped all socketed ROMs (they were fine) and did visual inspection. The board was in very fine physical condition, and the only suspective thing I found, was this


But they all checked out just fine using the continuity tester.
After having eliminated ROMs and physical damage, I had a hunch, that this error was caused by a RAM issue. So I started shortening adjacent data pins on the different RAMs on the board, to see if I could somehow stir up the graphics on screen. I found that the 4 MB84256 at positions IC1-IC4 is involved in generating the different layers on the screen. I googled the data sheet for MB84256-12 (that btw is produced by The Evil F aka Fujitsu) and found that they are just the Fujitsu equivalent of the standard 62256 with 120ns access time. These are not very common (at least not at the boards in my scrap pile), but at last I managed to find 2 pieces at 70ns and 85ns respectively and they both tested good in the Top2005+ };-P. So I tried piggy backing the 4 RAMs one at the time.


I saw a change when piggy backing the one at IC4.



So I desoldered it


and tested it in the Top.


So fitted a socket and installed one of the scrap-RAMs. Now the background layer was perfect again };-P


However it was now evident, that the game also had a sprite problem. I just didn't notice that before because of the issue with the backgrounds.



They all had stripes through them! So I tried piggy backing the 3 other RAMs, and on IC3 I saw a change in the stripe-pattern. So desoldered that IC as well


and tested it in the Top.


So fitted a socket and the 2nd scrap-RAM IC


and presto! All the sprites were back to normal };-P



So the two culprits are ready for the bin


and the case is closed.
The game is very addicting, fast paced, and has a very cool soundtrack. I'm really pleased to have it in my collection };-P

8.4.13

TAD Cabal Trackball To Joystick Conversion

I bought this original TAD Cabal along with another defective (Rezon, that actually plays perfectly) over a year ago. When powered on, it booted, but with no sprites. During visual inspection, however, I quickly stumbled across this


The two ribbons were not properly connected! I pushed them firmly into the sockets, and now the game booted normally with sprites present on screen };-P Coined it up and pushed start. But all I was able to do, was shoot bullets and throw grenades. When I wiggled the joystick, the cross hair moved just a tiny bit from side to side and up and down. Hmmm, a sneaking suspicion began to creep up on me...


And after having dumped all the ROMs, MAME was able to confirm, that this was in fact the trackball version of the game. As I don't own a trackball, I started to search the net to see if it might be possible to convert it into the joystick version. First thing I found, was this comment in the MAME source for the Cabal driver:
/* The joystick version has a PCB marked "Joystick sub" containing a 74ls245. It plugs in the sockets of the two D4701AC */
as well as this on KLOV:
When converting from track ball version, please change IC D4701AC (2pcs) at location C D 1 2, on bottom board with socket plug in adaptor.

Further googling, and I soon found this repair log on porchy's site JAMMARCADE.NET containing two photos of the "JOYSTIC SUB" (no, the missing 'K' is not an error };-P).  So made colour prints of both.


From that, I could see, that it only contained one single component, namely a 74244 (and not 74245, as stated in the MAME source).

Now in order to have any hopes of getting this to work, I would need to do a ROM-swap of the trackball-specific ROMs first, labled 6, 7, 8, and 9 on my board. I decided on trying the "World, Joystick Version" first, as this is the only joystick-set ROM #5 on my board, is in. So programmed 4 27512 EPROMs and installed them on the board, and removed the two D4701ACs from their sockets as well.


The game booted up just fine with these ROMs, but when I tried to start a game, the controls were acting up. However that was not surprising, as the inputs with the D4701ACs removed from the board, were now floating.
Next I started scrutinizing the data sheets for the D4701AC and the 74244 and the photos of the JOYSTIC SUB PCB. Now as the 244 is just an octal line driver, it was obvious, that the sub PCB just routed the 4 inputs from 1P and 4 inputs from 2P through the 244 to the 8 outputs of the D4701AC-socket for 2P. The rest is apperently implemented in software (the ROMs). Initially I thought, that the 244 was only there for protection against overcurrent caused by static shock and that the 244 should be left open all the time, but more on that later.
First I had to figure out how the 4 different direction were mapped from the edge connector to the 2 sockets. As there are pull-ups on the controller inputs, I could use my scope for that task.


So by exercising the joysticks and proping the socket, I found that
pin1@C1 (1P UP)
pin2@C1 (1P DOWN)
pin4@C1 (1P LEFT)
pin5@C1 (1P RIGHT)
pin1@C2 (2P UP)
pin2@C2 (2P DOWN)
pin4@C2 (2P LEFT)
pin5@C2 (2P RIGHT)
where C1 is the socket nearest the edge connector and C2 is the socket just beside it.
Next I needed to figure out which controller inputs the software expected on the different pins in the C2 socket. In order to pull-up the inputs, I installed a resistor array I desoldered from a scrap board,


and then used a grounded probe to poke the 8 socket-pins while the game was playing.


I've summed up the combined results here:
pin1@C1 (1P UP)    -> pin16@C2 (former D0 on the NEC D4701AC @C2)
pin2@C1 (1P DOWN)  -> pin17@C2 (former D1 on the NEC D4701AC @C2)
pin4@C1 (1P LEFT)  -> pin18@C2 (former D2 on the NEC D4701AC @C2)
pin5@C1 (1P RIGHT) -> pin19@C2 (former D3 on the NEC D4701AC @C2)
pin1@C2 (2P UP)    -> pin20@C2 (former D4 on the NEC D4701AC @C2)
pin2@C2 (2P DOWN)  -> pin21@C2 (former D5 on the NEC D4701AC @C2)
pin4@C2 (2P LEFT)  -> pin22@C2 (former D6 on the NEC D4701AC @C2)
pin5@C2 (2P RIGHT) -> pin23@C2 (former D7 on the NEC D4701AC @C2)
(these connection should be made through the 74244).
Now it was time to start the construction of the actual JOYSTIC SUB. I haven't got equipment to produce real PCBs myself, so given the simpleness of the circuit, I decided on just using a piece of strip board and kynar wires. It ended up looking like this:

 (the lonely pin in the corner is not connected; only added for stability)


And here it's installed in the sockets:


At first, I had just hooked the two enable-pins on the 244 (pins 1 and 19) up to GND leaving it enable all the time. However this resulted in some very strange lock-ups when trying to move the controllers and sometimes the game wouldn't even coin up. Hmmm, tried removing my PCB again and make the connections for 1P with just 4 wires in the socket. That worked just fine. But when hooking up the connections for 2P as well, I had the same result as with my PCB. Strange! This made me wonder if some kind of multiplexing might be going on. So I had a close look at the picture of the JOYSTIC SUB from porchys site again. It wasn't easy to see, but it wasn't obvious that the enable-pins should be grounded. So cut the connection to GND, and attached a wire. I tried to start the game poking this wire against some of the other pins in the C2-socket. And when connected to pin 15 (chip-enable on the D4701AC), there were suddenly no lock-ups, and both 1P and 2P controls worked perfectly };-P


So I made a proper connection with a piece of kynar, and my homemade JOYSTIC SUB was done.
Now the last thing missing was the roll-feature. In the trackball version this is done by rolling the ball fast to either side. But when using a digital control, you'll need a button to make the roll. As the game was not originally designed for joysticks, the 3th button is not connected on the edge connector. However TAD cleverly solved this by letting the TEST- and SERVICE-buttons act as roll for 1P and 2P respectively. So adding hook-ups between the 3th button and these two like this


makes the board act like it's having a standard JAMMA-pinout.

All the above information has already (through porchy) been passed on the MAMEDEV TEAM and they will correct the comment in the source code and also make a how-to making the JOYSTIC SUB.

ADDENDUM: tirino73 has made the above rep log into a complete conversion guide over at citylan.it.
Later, I also made a small batch of conversion kits, as fans had asked me if I would help them do conversion of their trackball Cabal; facebook posts here, here, and here.

28.3.13

Taito Bubble Bobble Bootleg Repair Log & REDUX

About a month ago, my dear friend porchy made this post on his blog. Now it is 'common knowledge' in the arcade society, that bootlegs of Taitos Bubble Bobble doesn't play like the original. The reason why, is that the original board has a custom chip (know as the PS4...the one featuring a picture of Bub from the game on the silk screen) that shares the SRAM with the main CPU (a Z80). The PS4 is a 6800-based CPU also containing some memory in the form of ROM. Every now and then, the PS4 changes some bits and pieces in the SRAM, so that certain events occur in the game. The things that most people notice as wrong is enemy movements and that the sequence of the EXTEND-letters is not randomized.
The bootleggers back in the days, were not able to extract the program data from the PS4, so they tried to deduce the data by the use of a technique known as 'blackboxing'. You throw a lot of different input at the chip and then record the output. You then analyze both the input and output and try to make your own program do the same as the chip. They did that by exploiting some unused interrupt cycles of the main CPU to execute this PS4-emulation. However they didn't get it quite right.
But recently MAMEDev succeeded in reading the program from a PS4 by using a technique known as decapping. In short, you cut off the top of the IC, look at the silicon plate under a strong microscope, and manually read every single bit. This way they made it possible to make a perfect emulation of the original game in MAME.
Now this is where joaoljr, a brazilian member on the arcadeotaku forum, got the idea that it might be possible to make all those old bootlegs play correctly! He took the 6800 assembler-code extracted from the PS4 via decap, rewrote it to Z80 assembler, and excecuted it in the spare interrupt cycles of the main CPU just the like bootleggers back in he days. He calls the project REDUX, and you can read all about it in this thread.

Phew, that was a long intro...but when I had read all this, I started looking for a cheap bootleg, and soon found an untested one from a french seller on evilBay. From the auction photo, I made sure, that this was indeed a REDUX-able type of bootleg ie doesn't have an 68705 MCU.


The auction closed at 29.90EURO with a shipping price to Denmark of 13.90EURO; so all-in-all ~45EURO for an untested bootleg Bobble Bobble...sweet! };-P

When the board arrived, I did the usual visual inspection. It was obvious that this board had been made in a rush; some components had not been pressed correctly into the holes, before the board went into the flowsoldering machine (this is the worst example)


However all the pins made fine contact, so if I could get it up and running, I didn't bother. Also some rather ugly mod/repairs had been done on the secondary board



But again, if I could make it work, why bother. One thing about this board looked extremely strange though


Notice that the two ribbon connectors doesn't match up. Also notice that both the upper and lower PCB has the parts side facing up. This is very rare on arcade boards, as they are usually back-to-back/front-to-front. I tried to check for contact between GND on the edge connector and GND on an IC on the secondary PCB with my multimeter and found none. Hmmm, this started to smell bad };-S I removed the legs and flipped the secondary board 180 degrees so the PCB was now back-to-back, and viola


suddenly the two ribbon connectors matched up. And I checked for connection between GND on the two PCBs, I got a fine beep };-P Now I was extremely happy, that the seller didn't test this board, as the consequences could have been disastrous. My only hope was, that he was telling the truth.
Next, I started dumping all the ROMs on the board, but when I got to the one labeled "2", I found this


and ofcause I was unable to read it in the Top. Now it is actually possible to transplant pins from an old IC, if there is just a tiny bit of the pin left, so I tried doing that


and was now able to read it in the Top. All the ROMs validated against MAME };-P Next step, was to actually test the board. I found the pinout at mikesarcade.com and threw together a QAD adaptor with only power, video, and sound.


The board booted up just fine


however the colours looked a bit strange. Either the pinout I had found was wrong, or this was a unique type, where blue and red crossed. I switched the two wires, and got this


Perfect colours and the sound was fine too. Quickly I hooked up the rest of the wires


and was able to play a test game...both 1P and 2P worked perfectly...sweeeet! };-P

Now for the REDUX-part. I downloaded the package with the prepatched ROMs (linked from the thread), and programmed them onto 3 27C256 EPROMs. Slammed them into the board (I have to make some nice custom stickers };-P),


and fired her up



Meesa liiiike dat!!! Haven't played it to the end yet, but it seems to play just flawlessly };-P REDUX FTW!!! A special thnx to joaoljr for the big effort.