Moon Patrol Repair Logs
Symptom: Garbage & RAM NG message on the screen
RAM NG is RAM No Good. Error on screen was: RAM NG 8000 55 95
Looked at the schematic. The only RAM location labeled was E000-E7FF for the main program RAM. Checked the wire harnesses between the boards and found that the harness for CN2 on each board had 3 wires cut out. (WHY?) Two of the wires went to nothing. The third went to CN2, pin 17A, which connected to pin 11 of the 74LS157 at location 8L. This was 1/2 of the multiplexed address line A6/H256B signal to address line A6 for the 2114 SRAM ICs at location 7K and 7L on the character board.
Patched the wire on the harness and tested the board. Reassembled the board stack and replaced 5 broken standoffs.
Symptom: Horizontal lines of garbage or solid colors on screen
The video data is written to a set of Intel 2125 SRAM ICs (or equivalent) before being sent out to the monitor. If one of these ICs is bad then you will get thin horizontal lines of junk on the screen.
Symptom: The board is dead.
Wow! This board didn't look like a bootleg at all. But of course it is, when looking closer. The MP-712A (Williams' product code for Moon Patrol) on the silkscreen of the top board should actually read M52-SOUND-C, and this gives away both the name of the game as well as the country this board was targeted to by the bootleggers. The quality of the PCB is very high for a bootleg, and the soldering looks as good as professionally done. The solder mask color is also unexpected for a bootleg and perfectly mimics the original. The only aesthetical issue with this was that it was completely covered with crud. Lots of it (see the remnants in the picture)!
As the game is a stack-up of four different PCBs but with a shared link cable pinout, one can service the game by "simply" altering the order of the stack-up to have the board under investigation on top of the pile. The sound board can be shoved out of the way thanks to its generously long ribbon cable, and it can be completely detached without the game complaining if needs be. Schematics are also available, and this bootleg matches them almost perfectly; including the identifiers on the silkscreen.
After partially wiring the adapter, I got presented with a black screen and no sound. Syncs were however present. Poking the scope at the character and scroll boards felt like performing an autopsy: every single bit of logic was stuck either high or low. Basically a corpse. Yuck!
The clock generator sits on the CPU board, and it was happily heartbeating. The counters at 5C, 5D, 5F and 5H were also running, and going further downstream I reached the culprit of this first issue: a battery of dead XOR gates whose purpose is to implement screen flipping. All of the ICs at 6D, 6E, 6F and 6H were completely dead except one single gate. By soldering in four brand new 74LS86 I got just a black screen with some static garbage. Meh...
Luckily the software of the board came to the rescue. At times when booting the board I got a RAM error at E000 displayed upside down. A quick look at the schematics identified the component to replace: the 2128 at 3B. On my board there was a 6116, which I socketed and replaced in order to finally get... an "out of range" message from my LCD monitor. WTF?!?
As most of you already know, scaler ICs for LCD monitors typically measure the timings of the horizontal and vertical syncs in order to determine what signal we are feeding them with. What is mostly unkown is that scalers also try to determine where the borders of the image are, in order to nicely fit the image to the screen. After having invested some time in verifying the timings of the sync signals I finally started disconnecting the color signals one by one. Disconnecting the blue wire fooled the monitor into locking to the signal and displaying it. Therefore the out of range message actually meant "sorry, this is too tall and wouldn't fit completely on screen". Yay for software that "cares" for the needs of a dumb zombie-customer! But I wanted to see the image in full color and didn't want to bother disconnecting wires at every boot, therefore I wired a switch to the capacitor C3. When booting the board I kept the switch on, thereby keeping the board in reset. In this condition the RGB outputs are black but the syncs are present anyway. Once the scaler of the monitor had completed the Autoscaling procedure, I turned off my switch to finally start the board. Et voilà! A fully RGB video of Moon Patrol on an otherwise unwilling monitor. ;) Still upside-down though.
Quite on the right track but not there yet: the scrolling background was showing correctly, and the title logo was ok. Sprites were however all messed up in shape and color, and they were not moving fluidly on the screen but rather shifting in very coarse steps as if they were on a grid. The problem was obviously on the Character board, therefore unscrew-disconnect-swap-rescrew-reconnect and I had the character board on top of the pile ready for investigation.
Poking at the ROMs while triggering on the vertical sync showed data coming out of them but moving around in coarse steps as displayed on screen. Tracking back to the origins brought me to the RAMs at 7K and 7L. One of them had a data bus which, although populated, looked a bit too silent when compared to the other. I have plenty of 2114 on stock, therefore I gave it a try. I socketed both of them, and once I have replaced the RAM at 7L I finally got the sprites back in shape, color and movement. The only remaining issue was the screen still being completely upside-down.
The dip switch information is not really clear about screen flipping. But looking at the schematics is a lot more helpful. The FLIP* signal is controlled by DSW2.1 through a XOR gate at 6K which allows the CPU to invert the user setting; and guess what? Another 74LS86 went to the dustbin. I finally had the picture on screen with the right orientation. Hurray! Now it was the time to finish wiring up the adapter by connecting the controls. Too bad I was up for another surprise: the board wouldn't coin up. *SIGH*
The coin inputs are wired to two separate 74LS244 at 1E and 1C for the CPU to read through memory mapped read accesses. The scope showed unhealty levels on the input side, and both inputs turned out to have an internal low impedance path to VCC. All other inputs worked however. Maybe someone has misinterpreted the connector wiring diagram and wired the coin counters there instead of the coin mech? Anyway, two more ICs hit the bottom of the dustbin.
Now the game is finally playable, and kept me entertained for more than one hour. ;) Luckily enough, the sound had no issue apart from a shorted tantalum cap... :/