Technical Background
A number of mid-80's namco board featured a semi-custom processor for the
main sound CPU. The processor was,at it's core, basically a Hitachi 6301 which itself is a souped up 6801.
The micro-controller contains 4k of ROMand 128 bytes of internal RAM. This
controller handles the sound effects, music, count-counters and I/O for the games which use
it.
The Namco version of this controller had two additional op-codes not
supported by the normal 6301 CPU.
The new op-codes are 0x12 & 0x13 and their function is to add the value at the top of the stack to the X register
while preserving all
other registers, both op-codes appear to do exactly the same thing..
Interestingly... in the JAS arcade simulator I emulated these
commands as ADX, add A accumulator to X, which worked fine in the places
the MCU uses the code, but it's wrong (!)Versions
There appear to be 3 versions of the chip the 'cus60' marked 60A1,
the 'cus63' marked 63A1 and the 'cus64' marked 64A1. The 64A1 is used with Namco
system 1 hardware, more on that a little later. The instruction set of
these
MCU's all appear to be the same, running in external bus mode, with the
right EPROM, they're fully interchangable.
Interestingly the code in the 63A1 looks like a binary level patched version of the
60A1 (!?!?) Haven't sat down to figure out exactly what the changes do or if I even really want to do that ;-)
Replacements
So.. having come across a few surplus HD63701
this encouraged me to build a carrier board with the necessary EPROM
and support logic to fit the images
for the two different versions of the micro-controller code.
The schematics for a 'classic' 6301/3 external ROM system are included
here [HD6301 carrier PCB schematics],
should anyone want to do a bit of the their own prototyping. This
was the design used for the first test board. It uses a 27c512 only as I
have a lot of these handy.
Expanding on this the replacement uses a GAL for address decoding
& low-address bus latch, along with a 74HC00 just for
inverting a signal and providing the output enable for the EPROM. The other feature is a jumper to swap between
63A1, from the early version of Skykid and the 60A1 used by the other games.
The memory map is also expanded to 8k from the original 4k, $e000 to $ffff
allowing some space for extra code. None of the games use this area of
memory so it was pretty safe to overlay it with extra ROM.
The main CPU on this example is a 63A701 running in external bus mode so it can read the EPROM.
The HD6303 and HD6301 CPU's will also work. For reference the use the
operating mode of '2', extenal multiplexed memory mode.
There had to be a couple of code patches to fix two un-supported op-codes which the original IC did support.
The Hitachi 6301/3 had the nice feature, over the motorola 6801/3 or being
able to trap invalid op-codes. The invalid op-code vector was
directed to the extra 4k or ROM where the handling routined simulates the
$12 and $13 op-codes, then returns control back to the point the op-code
was executed. This allows all the games to work without patches to
the game sound ROMs, Baraduke, and I think metrocross, used these
extended op-codes in their external sound ROMs, so just patching the
micro-controller code wasn't an option.
Non-exhaustive list of Games which used the 60A1 "cus60":
Pacland, Skykid, , Baraduke, Alien Sector, Dragon Buster, Metrocross
also the "system 87" hardware which included Rolling Thunder, Hopping
Mappy, Skykid DX
The only game I've found which uses the 63A1 "cus63" is the first revision of
Skykid.
My later revision board, whic uses the 60A1 has two of the ROMs marked "SK2-2" and "SK2-4"
Anything I've missed here ?
Anyway..on the right are pics of the carrier board on a pacland. So far
testing has been great, it's work on everything I can throw at it (!)
CUS64
The 'final' member of the family of controllers is the "cus64" from
the'System 1' game hardware. Pacmania, Galaga'88, Dragon Spirit and Splatterhouse being the most common examples of this boardset. Now the
cus64 , 64A1, seems to be the same micro-controller as the 60 and 63 but with a different core program. My
replacement board works with this board and the correct ROM file for the cus64, however (!) Weird happenings.. with
one of the 60a1, 63a1 CPU's in external memory mode all is fine, using a replacement 63701 or 6301 the game fails
the self test.
Why, well... from tracing the code execution with my trusty logic analyzer
there's a write to memory location, which for some unknown reason, a write of $00 from the controller turns into a
$A6 (?) Haven't figured out why this happens but it does this with all the games tested. It's not the external board or ROM
as the original controller works fine (!)
I think it's some odd 'feature' of the original part. A simple patch to the
voice ROMs and all works perfectly, it doesn't even use custom instructions as a 6803 will work just fine too.
|
CUS60 Replacement on a Pacland
|