Shinra team

Gemini - A 1MB or 2MB RAM expansion for Amstrad Plus

picture of the Gemini hardware

Why yet another RAM expansion?

Lately there has been a large development in hardware for the Amstrad CPC series. This is great! You now can chose from several design and manufacturers if you are looking for extra hardware for your machine. I thought I could retire from hardware manufacturing and find better ways to waste my time. Unfortunately, that time has not come yet, as the existing expansions all had a problem.

The issue is specific to the Amstrad Plus machines which add yet another complication to the memory mapping handling on CPC machines. Basically, the ASIC can be memory mapped and hide a part of the RAM. This works well for the main RAM bank, and on the CPC, it also works for the internal extra 64K of RAM, which can be mapped at the same address. If you try to map both the RAM and the ASIC there, the ASIC is mapped and the RAM is not accessible until the ASIC is moved out of the way.

Unfortunately, memory expansions designed for the classic CPC does not take this into account. For some of them, because they were designed before the Amstrad Plus ASIC existed, and for some, the designers didn't think of it or decided it was not important. As a result, these extensions can enter in conflict with the ASIC, which will result, at best, in software crashes, and at worst, in damage to the hardware.

Software that is known to hit this problem with existing memory expansions:

The other problem is some expansions use old chips that may be out of production, and, who still uses DIP through-hole packages in 2022 anyway? In my case I picked much smaller surface mounted components. Also, all the needed design files are available and the board can be assembled without expansive hardware. You'll need a GAL programmer if you want to build one yourself, but that's easy to hand assemble if you don't want to buy one (that's what I did). So this should make sure this design remains available even when I'm not able to manufacture it anymore.

How does it work

The board uses two ATF22V10 GALs, one mostly replicating the role of the internal PAL in the classic CPC, and the other reproducing the logic used for the ASIC lock and unlock sequence (it was almost, but not completely, possible to fit all this in just two chips, unfortunately some extra glue logic had to be added). The board internally tracks the unlock sequence and the status of the RMR2 register to know if the ASIC is mapped to the CPU. When that's the case, it will automatically disable the RAM page that may be accessible at the same address. Gemini also provides two LEDs to tell you when it thinks the ASIC is unlocked, and mapped into memory. You can watch these light up and blink as you run software using Plus features.

The Plus version of the card can also be used on the CPC 6128, but it will still hide one of its pages if some software attempts to unlock and map the ASIC. So, a CPC 6128 version of the expansion is also available. It is exactly the same board, but with the ASIC unlock detection chips removed.

The card is NOT compatible with the CPC 464 and 664. These machines require special handling due to limitations in their memory mapping support, which I did not want to mess with, in part because I don't own any of these machines. So, if you have a CPC 464 or CPC 664, don't buy this device. You will find other people who are willing to help you. The 464 Plus has no such problems, and this card can be used as designed there.

Using more than 512K of expansion RAM on the CPC/Plus

The original design of the CPC 6128 leaves 3 unused bits in the MMR register. These bits are used by other memory expansions (for example the DkTronics ones) to allow mapping in more memory banks in a similar way to the internal 64KiB of bank memory in the CPC. With these, we can get access to 8 banks of 64KiB, or a total of 512KiB of bank memory (in addition to 64KiB of central RAM, of course).

To go past this 512KiB limit, this extension uses the scheme introduced in Ram7's MEMCARD, that is, when accessing the MMR, two additionnal address bits are decoded. Accessing the MMR at its usual 7Fxx address allows access to the first 512K of memory, using addresses 7Exx, 7Dxx and 7Cxx allow to access more memory for a total of 2MiB.

There is a switch to select if you want to enable the full 1MB/2MB of RAM, or, in case some software has problems with that, restrict it to 512K instead. If that still causes problems and you need 64 or 128K of RAM, just unplug the card from the computer.

Where to get it?

The Gemini is manufactured by PulkoMandy. Contact me by email to make sure I have boards in stock, and we can arrange payment and shipping.

Costs (including worldwide shipping) for each version:

Software

For once I don't need to write any software to accompany this hardware! It is compatible with anything that uses the DKTronics memory expansion scheme as well as the Yarek/RAM7 further extensions to that to go past the 512K memory limit.

So, you can run SymbOS, FutureOS, ParaDOS, ... and any software that knows how to use all this RAM. Or write your own. Have fun with it!

Valid HTML 4.01 Strict Site fait à La Rache