The PCBs
arrived today, a little later than I hoped, but still with time to play with
them.
For my first stab at a cartridge PCB, they're not bad. I went with
the cheap non-solder-mask, non-silkscreen versions to test.
There were
four problems with them.
The first problem was they were slightly too
wide, it made for a very tight fit... I trimmed less than half a millimeter off
the edge to solve that. I fixed this in the layout file.
The second was
that the card edge was not beveled, but I knew this going in because ExpressPCB
doesn't do beveling as far as I know. I used the dremel to bevel the edge as
well. It's not perfect, but it works. ;)>
The
third was that one of my traces didn't actually make it to the pad -- it was
there, but was just barely not touching. Fixed that both on the board and in the
layout file.
The fourth was an outright layout error - one of the EPROM
control pins was left floating when it needed to be tied high. That needs a
jumper wire, but I patched that up too.
The final problem I simply didn't
foresee. I had intended to use ZIF sockets on the first board to more easily
test the ROMs, and I hadn't realized that the ZIF sockets were MUCH larger than
the raw ICs, not to mention they wouldn't fit in the Genesis. So, I extended the
pins on one socket, and attached just it for testing.
The good news, is that Thunder Force 2 and the menu work perfectly on
this, without the oddities I saw on the previous cartridge. (At least so far). I
am going to independently test 3 and 4 with the single EPROM approach before I
got for soldering one together permanently.
But, before I went that far,
I did one more thing. I felt bad that Thunder Force IV was not region free while
2 and 3 were, so I undertook to fix that.
I found three parts that read
the region register:
First part:
0482 move.b $a10001,d0 read version reg
and.w #$80,d0 mask out region
move.w d0,$f0b6.w Store REGION at $f0b6
Second
part:
0542 move.b $a10001,d0 read version reg
and.w #$40,d0 mask out tv
bne invalid if PAL, branch
tst.w $f0b6.w check region
bne $620 go ahead and run if not Japan
invalid:
bsr $2444 failure?
third
part (after Sega logo -- this is just deciding whether to say Technosoft or
Tecnosoft):
c3a2 tst.b $a10001 test version register
bmi $c3b4 branch if not Japan
So,
presumably, all we really need to do is set the "bne invalid" in the second
block to "bra $620". Then, of course, we update the three game checksums
previously discussed.
They were pretty paranoid about region coding,
eh?
Anyway, the branch is too far for a short jump, so we end up
overwriting both the bne and part of the tst.w. But, this should be
okay.
So, at $54C, replace "6608 4a78" with "6000 00D2"
At $15FF8,
replace the checksum with "F9A3 23AF" - this should let you collect 1-ups
At
$BFF8, replace the checksum with "BDE6 6EE0" - this should let you clear the
second half stages
At $18E, replace the checksum with "0977" - this should
let it boot.