Skip to content

Universal Amstrad CPC RAM Card

revaldinho edited this page May 2, 2020 · 11 revisions
Universal RAM Card Photo

The Universal Amstrad CPC RAM Card provides a full 512K RAM expansion for all Amstrad CPC Computers.

DIP switches are used to select three different main modes of operation

  • 6128 and plus machines
  • 464/664 DK'Tronics compatible mode
  • 464/664 Amstrad C3 (FutureOS) compatible mode

In 6128 mode the card behaves the same as the Old School Card. For 6128 users I recommend the Old School card instead because that requires much less power and is more tolerant of voltage drop on dirty edge connectors than this (and other) CPLD based cards.

For 464/664 computers, this card provides full DK'Tronics compatibility in common with other expansions. To achieve this, the universal card has to backdrive the electrical signals (as the DK'Tronics cards did) in order to write protect CPC RAM when writing to the expansion RAM.

The unique feature of this card compared with all other CPC464/664 cards is that is it able to mimic the CPC6128's video mode 'C3' operation. No other card, including the original DK'Tronics cards, are able to do this. This allows CPC464/664's expanded with this universal card to be able to run FutureOS and other software which depend on this mode - something which was previously possible only with actual 6128s.

Full documentation for this card is included in the release notes for the CPLD firmware..

DK'Tronics Compatibility

The board is fully compatible with the DK'Tronics/Amstrad bank switching schemes described in the DK'Tronics Peripheral Technical Manual.

In this scheme there are 8 possible 64K banks, and each bank is split into 4 16K blocks.

Selecting a 64K bank is done by writing to the Z80 IO address 0x7Fxx with an 8 bit dataword 0b11cccbbb, where

  • ccc - picks one of 8 possible 64K banks
  • bbb - selects a block switching scheme within the chosen bank

The bank switching schemes for the 6128 and Plus machines are illustrated in the table below, where

  • '-' indicates access to internal RAM
  • 0-3 indicate access to the relevant block in the selected external bank
Address\bbb 000 001 010 011 100 101 110 011
0xC000-0xFFFF - 3 3 3 - - - -
0x8000-0xBFFF - - 2 - - - - -
0x4000-0x7FFF - - 1 ** 0 1 2 3
0x0000-0x3FFF - - 0 - - - - -

Note that bank 0 would normally select the single 64K expansion bank already in a 6128, but when the card is attached this bank is disabled and the first bank in the external expansion is accessed instead. In any case the total memory available with the card fitted is 576KBytes: the 64K internal RAM and the 512K external.

In the special case '**' marked in column '011' internal memory at 0x4000-0x7FFF is remapped to 0xC000-0xFFFF. This is handled internally in the CPC6128 and plus machines. The 464 and 664 don't perform this remapping. Further, the 464 and 664 do not write protect internal RAM when external memory is accessed. On the original DK-Tronics expansions these two issues were handled by backdriving the A15 and MREQ* signals on the bus, overdriving the values from the Z80 CPU in an electrical conflict. This card achieves the same effect by overdriving the A15 and RD* signals (RD* is interpreted as 'write not read' by the CPC's gate array chip). In this was full DK'Tronics compatibility is provided on all models of Amstrad Computer including the CPC464 and 664.

License

All programs and data files in this project are made available under the terms of the GNU General Public License v3.

Clone this wiki locally