C64/128 ISA expansion PLUS
What is itReplace the 6510 of your C64 by a 65816 and add the PC ISA bus and you can use an enormous variaty of PC cards. But as the 8502 of the C128 is almost the same, you also can read: "Replace the 8502 of your C128 by a 65816 and add the PC ISA bus and you can use an enormous variaty of PC cards".
The ideaAlready in 1991 I built an expansion card that gave the C64 access to the 8-bits ISA bus. It enabled me to use a MGA card as main video system. Unfortunately I lost that card during a move :(
In May 2013 I started to work on an ISA expansion for the VIC-20. This project included to replace the 6502 by a 65816 as well. I already proofed that a 65816 can replace a 6510 so I designed a C64 version as well. But the board became so crowded that I decided design two new versions:
- a version without the 65816.
- a version that uses an extra board, this page. While designing the board, I realised the 8502 is almost the same so I created a two-CPU card.
The design - the general ideaWhat we do in fact is replacing the 6510/8502 by a 6502 in the first place. And then we replace the 6502 by the ISA expansion card. But the 6510/8502 has an onboard port, the 6502 hasn't. So we need to add one in the form of a 6526. The moment the 6502 needs to address the 6526, the data bus has to be seperated from the one of the C64/128. That's why we need IC7.
A 6502 cannot be tristated. So we need IC4, IC5 and IC16 that will do the job. I know, the 65816 can be tristated but that would mean we have to feed the AEC signal to the 65816 in one or another way. If you really wanted that, it would be possible. But also remember we need some means to disable the host the moment the 65816 addresses memory or I/O outside the host's own range. It could be done by connecting the OE pin of the PLA to the ORG signal but I'm not sure if this works! I also didn't find a quick way to disable the C128 so I defenitely decided to stick to the safe method.
Personal note: busy building the first version, I would use this version in a C128 anyway.
The design - the glue logicHere we can be very short: just one GAL 20V10 is needed (but I changed my mind).
The design - get more from your 6526Soldering a 6526 and using only 6 or 7 bits is a waist of the rest. But in the 6510/8502 mode the 65816 can only access two registers. But if you read ISA expansion, you may remember we reserved three output pins for future use. So far not having an idea where to use them for, why not using one to select this 6526? The GAL takes care of the rest.
The design - IC6 / U15 = 74LS139This is about the 'strange' construction at the left/bottom of the schematic. First I need to tap the original VIC and SID signals and then I have to feed back the edited ones. The main idea was to piggyback the board on top of the C64 board and the 6510 would serve as main support. Not wanting to work with loose wires I decided to use the U15 as support as well. In both cases the support is made out of some sockets on top of each other. In case of the 139, the support would end up under IC6, nothing more then a empty socket. A second socket now contains the actual 139. What remains is laying the needed connections.
As you already noticed, I needed to edit the RDY signal as well. So why didn't I use here two sockets as well? For the simple reason that I hadn't thought about it :( I solved this matter by cutting the connection between the socket on the board and the first one under the board and soldering the wires as needed. Why didn't I use this solution with the 139? Because I didn't think about that then.
The design - an extra featureIn The VIC-20 Expanded I got a nice idea about how to use a FlashRAM in a different way and I decided to implement it here as well. A 29F020 enables me to handle up to 16 complete sets of ROMs! Four free pins of the 6526 enable me to choose the right set through a menu. Four jumpers enable me to select one in a more quick way.
Having no more free GAL outputs, I decided to add a 74LS08 AND gate, as I did with the first version. But to be honest, I'm not that familiar with GALs yet and I'm not sure about using pin 13, OE/I10, as input pin. So I changed my mind and replaced the 74LS08 with a GAL16V8.
You can email me here.