Yeah, I'm not really sure why I used two pull-up resistors - the switch controls an address line on both ICs at the same time, so that's kind of wasteful. Anyway, it worked fine.
This Commodore 128 is an older model, the kernal and BASIC ROMs are the first revisions and not the later, bug-fixed versions. But you don't install the old versions when you replace the ICs, do you? That would make no sense. By upgrading the kernals I now had a Franken128 with new kernals and old BASICs. That's easy to fix, just replace the two BASIC ROMs with two new EPROMs, right? Right.
A better way
Two EPROMs instead of four? Sounds like something I want to explore.
$0000 - C64 kernal & BASIC
$4000 - C128 kernal
$8000 - C64 JiffyDOS kernal & BASIC
$C000 - C128 JiffyDOS kernal
This layout is easily produced by concatenating these ROM images:
$0000 - basic.901226-01.bin (C64 BASIC)
$2000 - kernal.901227-03.bin (C64 kernal)
$4000 - kernal.318020-05.bin (C128 kernal)
$8000 - basic.901226-01.bin (C64 BASIC)
$A000 - JiffyDOS_C64_6.01.bin (C64 JiffyDOS kernal)
$C000 - JiffyDOS_C128_6.01.bin (C128 JiffyDOS kernal)
Using MS-DOS, it's as simple as
C:\>copy /b basic.901226-01.bin+kernal.901227-03.bin+kernal.318020-05.bin+basic.901226-01.bin+JiffyDOS_C64_6.01.bin+JiffyDOS_C128_6.01.bin U32_64KiB.bin
This is simply the basic.318022-02.bin ROM image as found in the 128DCR.
Preparing the C128
- J3 - instructs the 8721 PLA to use 32 KiB ROMs, the signals generated on the ROM1-ROM4 lines sent to the ICs at U32, U33, U34 and U35 as "output enable" will be different.
- J4 - supplies address bus A14 to A14 at U34
- J6 - supplies 64/128 mode line to A14 at U32
Can you spot the bug? Well, here's what happens. The problem is the BASIC ROM, U34. The CPU needs to see U34 at $4000-$BFFF. If we simply mirror A14 on U34's A14, A14 is high when addressing the low 16 KiB ($4000-$7FFF) and low when addressing the high 16 KiB ($8000-$BFFF). This is the opposite of what we want. One solution is to swap the two 16 KiB banks before burning the EPROM. Another solution, which the 128DCR uses, it to supply A15 to U34's A14 instead, as A15 is low when accessing $4000 and high when accessing $8000. Problem solved. Both solutions work, but only the latter makes the setup compatible with ROMs from the 128DCR and that's probably a good thing to do.
To be able to switch in JiffyDOS, all that remains is to solder a 4.7k pull-up resistor between pin 28 (VCC) and pin 1 (A15) on the U32 ROM, and a switch between pin 1 and pin 14 (GND). A15 is then pulled high, and JiffyDOS switched in, until the switch is closed and A15 goes low. When seating the chip in the socket, pin 1 should be bent out slightly (or cut off) so it doesn't make contact with the socket, as the board supplies 5V to it.