Technical Background
A number of mid-80's namco boards featured a semi-custom micro-controller
used as the
main sound processor. The processor was, at it's core, a Hitachi 6301, which
is really just a souped-up 6801.
The micro-controller contains 4k of ROM and 128 bytes of internal RAM. This
controller handles the sound effects, music, coin-counters and I/O for the games which use
it.
Functionally the Namco version of this controller behaves just like the
standard part but with two additional op-codes not
supported by a regular 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 these
op-codes were emulated as ADX, add A accumulator to X, which worked fine in the places
the MCU uses the code, but examining the instructions on original hardware showed
this was wrong (!)Revisions
There are 3 known versions of the chip
Type |
Markings |
CUS60 |
60A1 |
CUS63 |
63A1 |
CUS64 |
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 interchangeable.
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 go to that much trouble ;-)
Replacements
So.. having come across a few surplus, already programmed, HD63701
this encouraged me to build a carrier board with the necessary EPROM
and support logic to fit the image
for the controller code. This was later updated to include 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 'deluxe' replacement added a GAL for address decoding
& low-address bus latch, along with a 7400 NAND 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 other version of Skykid, and the 60A1 used by the other games.
The ROM memory map, of both boards, is expanded to 8k from the original 4k,
and fills the space from $E000 to $FFFF
allowing for lots of extra code. Not that the patch really needs a lot of code.
None of the games use this area of
memory so it was 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.
HD6303 and HD6301 CPU's will also work. For reference the use the
operating mode of '2', external multiplexed memory mode.
There had to be a couple of code patches to add support for the two new op-codes
to the standard part.
The Hitachi 6301/3 has the nice feature of being
able to trap invalid op-codes, a big advantage compared to the motorola 6801/3.
To implement the additional functions the invalid op-code trap vector was
re-directed to the extra 4k or ROM where the handling routine simulates the
$12 and $13 op-codes and 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 Metrocross both used these
extended op-codes in their external sound ROMs, so just patching the
micro-controller code wasn't an option.
See the extender source code for details of the patches.
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. There is another revision of skykid with the ROMs prefixed
with "SK2" the earlier version was prefixed
"SK1". The two roms which are different between the versions are
"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 worked on everything I can throw at it (!)
CUS64
The final(?) member of the family of controllers is the "cus64" from
the Namco System 1' game hardware. Pacmania, Galaga'88, Dragon Spirit and Splatterhouse being the most common examples of this boardset. Now the
cus64, aka 64A1, seems to be the same micro-controller as the 60 and 63 but with a different internal ROM. 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 a trusty logic analyzer
there's a write to a memory location, which for some unknown reason, the value of $00 from the controller turns
magically into a
$A6 (?) Haven't figured out why this happens but it does this with all the games tested. It's not the external
game board or ROM
as using a 60a1 in place of the 63701 the replacement board works fine
(!!!) So some feature of the 6xA1 is changing the $00 write to $A6.
It looks to be an odd 'feature' of the original part. A patch to the
voice ROMs and all works perfectly.
|
CUS60 Replacement on a Pacland
|