14

A slightly odd question, but is it possible to take an old 16K computer that wasn't designed for memory upgrades, such as a Commodore 16 or PET 4016, and upgrade it to 64K as a hardware hack?

I'm not a hardware engineer; here are my initial loose thoughts:

Suppose the memory chips are DRAM, standard 4116, eight of them. You'd need to take them out and replace them with 4164s. That's the easy part. If they're soldered rather than socketed, you would have to desolder the old chips.

Are there any differences in addressing the two kinds of chips? If there are, that probably kills the project right there?

If not, you would then really need to arrange for bank switching between the new RAM and the existing ROM in order to keep the upgraded computer actually usable. Can that be done by replacing a memory controller chip with something suitable?

  • 3
    Not all of these computers had memory controller chips or memory managers - sometimes it was just a series of logic gates used for address decoding. So the answer here will vary a lot based on the specific system in mind and how it was architected. – Joe Dec 26 '17 at 16:47
  • 5
    Many 8-bit machines allocated portions of memory space to ROM and memory-mapped I/O. Even if the machine might relatively easily be rewired to use larger RAM chips, the conflict with ROM & I/O would either result in losing some of that RAM at best (similar to the way typical IBM PC & clone systems can only make use of 640K of RAM in the 1st megabyte) and losing ROM access or total non-functioning of the machine at worst. – manassehkatz Dec 26 '17 at 17:06
  • 1
    Yes, it is possible within bounds, and not too hard. It was a common hack back when the Vic 20 was still new. The 6502 processor supports 64K addressing space, so there's a bit of hotwiring and soldering involved, plus watching the ROM boundaries. I'd have to reach back many decades to a mis-spent youth to give any more detail than that. – pojo-guy Dec 27 '17 at 4:05
  • 1
    One thing to keep in mind is that the dynamic ram must be refreshed on all the address lines. If the refresh circuit does not count on the highest RAS/CAS line the RAM will not be refreshed properly even if the new higher address lines are correctly multiplexed. – KalleMP Dec 27 '17 at 22:28
21

It all depends on the computer to be modified and it's RAM system. Let's for now focus on the pure RAM expansion issue and drop the part about bank switching, as this is complete machine dependent and a generalized answer, as requested, will be impossible. Even so there are still many hurdles to overcome. One after the other:

RAM Type

Some machines, like original PETs are based on static RAM. They lack any logic to multiplex addresses thus dynamic can't be used as (direct) replacement. Also, no provisions are on board for refresh (*1).

RAM Organization

The C16 mentioned above does use dynamic RAM, but with x4 organization (4416 - they are already 64Kib chips anyway :)), so x1 chips can't be used as (direct) replacement. Corresponding 256Kib x4 (4464) chips are available, still the hardware needs the capability to handle the additional address line(s).

Addressing Capabilities

Even if a machine, like the 4016 does use x1 chips (4116), it also must provide means to multiplex all 16 address bits, which the 4016 doesn't. Only the 14 lower lines are multiplexed (*2). If at all, a working extension would be using additional 4116, wired in parallel with their CS connected to a small decoder for A14/A15 - and of course only if there is address space available to do so.

The C16 in contrast is already (somewhat) prepared for 64 KiB. The RAM chips can be replaced right away, just A14/A15 have to be supplied to the multiplexers (74257).

Address Space

Next hardware hurdle is where to put the RAM. Even in a 16KiB machine, the remaining 48KiB address space are neither unused nor free. There is ROM somewhere, I/O and maybe a screen RAM.

The CBM 4000 series for example got it's screen RAM at 8000h followed by I/O and ROM areas. That's the main reason why there never was a 4048.

The C16 in contrast is already prepared to have 64KiB - after all, it's a 264 design, like the plus/4. The address decoder is made to handle full 64 KiB RAM in addition to the ROM and I/O areas. Screen memory is all the way down (*3).

Software Access

Even if one is able to squeeze in the additional RAM hardware wise, most Software, like BASIC, will not use it. The C16 is again a notable exception, as its BASIC is prepared to work with a full 64KiB RAM.


I did on purpose focus on the machines listed in the original question, as otherwise this would be an endless story. Even when confined to Commodore. But I hope you get the picture.


*1 - Then again, adding static RAM is less work (no multiplexer to considere) and nowadays even for DRAM machines the best choice. Just add it - especially if a suitable expansion bus is available.

*2 - Well, the multiplexer(74153) needed is available on (most) boards, but not wired, so it still be less work to use 4116s or add a new multiplexer on a sub board

*3 - The 264 does show that Commodore enginers where willing to learn. Unlike the C64 which was just a quick hack, the 264 series was planed with extensibility and maximum usage in mind.

  • 1
    It might be worth also looking at how people did 32KiB to 64KiB upgrades to the Dragon 32, doco for which can still be found. – JdeBP Dec 27 '17 at 12:15
9

The 4116 and 4164 have different pin allocations for the reason you'd expect: the 4164 has an additional address line (for two more bits of address in total because row and column are multiplexed). So you can't just drop one in, in place of the other. The 4116 also receives a 12v signal, which the 4164 doesn't. So you can't perform a straight substitution.

enter image description here

If you want to hack in 64kb where no original provision was provided, you'll need to make sure you don't connect that 12v signaland implement some sort of paging scheme of your own, to buffer an additional two bits and provide either one upon RAS and CAS. Or a single bit to supply regardless of RAS and CAS, to give 32kb in a 16kb slot.

So that means cutting or bending pins 8 and 9, connecting 8 to the board where 9 was, and providing a different input for 9.

  • 1
    And the different input for pin 9 is the hard part. Remember that this pin has two address lines multiplexed onto it, so you're going to need to detect when the main board logic is producing the RAS and CAS signals in order to choose which of your two extra bits of address you want to give it. As pointed out, in a machine not designed for 64K there's probably no unused address lines coming out of the processor, so you're going to need to implement some kind of paging scheme. – Jules Dec 26 '17 at 22:58
  • 1
    Of course, there were lots of addons available at the time that did this, e.g. see users.globalnet.co.uk/~jg27paw4/yr08/yr08_22.htm for a relatively simple and cheap addon you could get to turn a 48K spectrum into 80+K ... or do it the modern way and watch a youtube video where somebody's done it. – Jules Dec 26 '17 at 23:06
4

In general on old computers, the whole address space will be used in some way or other, even with less than 64 KB RAM (for ROM or I/O). So you'll have to do bank switching of some kind, or you loose the ability to use original software.

That said, a common method to do RAM (or ROM) extension is "piggybacking": You solder a second RAM chip of the same type on top of the first RAM chip, bend off the CAS pin (or CS pin), connect all the CAS pins. Then you need to find whatever chip on the motherboard drives the CAS (or CS) pins, cut it, add a chip (e.g. mux) to switch between both banks, and find some I/O port to control the bank switch chip.

Here is a description with a bit more details for a Z80 system.

This can double the available RAM; if you want to quadruple it, it will get more complicated (e.g. use modern chips, desolder old chips, add an extra board and get signals from where the old chips where).

It's even easier with ROMs if you just want to add some kind of functionality (e.g. switch a character set generator, or custom system ROM): In that case, a simple physical switch instead of a more complex bank select scheme is often all you need.

3

On the ZX Spectrum (at least with some versions of the logic board) you could upgrade from 16K to 48K (by installing 32 KB of memory plus a few logic chips), and IIRC you could also install 64KB and do bank switching (where the ROM and lower 16KB of RAM are fixed, and the upper 32KB are switched).

1

Even if the main board does not feature place for additional memory chips, in the past it was quite possible just to solder the extra row of chips on the top of the existing ones. All power, control and data buses can be shared, often just a single chip selection pin must be bent apart and separately connected.

Address resolution logic requires some tweaks to produce the selection signal for the top row. It may be necessary to cut the track of the bottom row control signal and implement a different logic for it as well.

Of course, such changes are only easy to do for somebody why understands the computer well and most likely have assembled it with own hands. Here is the fragment of the Radio86RK mainboard where amount of RAM has been doubled this way (I am the author). The chips are the Soviet clones of 4116.

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.