The standard memory expansions are often credited to Dk'tronics and Dobbertin (not sure which company initially developed it though). There's also an extended standard which may be credited to probably RAM7 (seen at least in comp.sys.amstrad.8bit FAQ v0.90, 11 september 1997) or Yarek.
Technical
The standard expansions are based on the RAM banking logic from the CPC6128. This is handled by a PAL16L8 but to the programmer it appears to be the fourth register in the Gate Array.
The I/O decoding is different to the Gate-Array.
- PAL16L8 decodes A15=0 only
- Gate-Array decodes A15=0 and A14=1
To access the RAM and Gate-Array port 7fxx is used. In addition the RAM answers when the data has bit 7=1 and bit 6=1, which is unused in the Gate-Array.
External expansions have their own PAL or hardware which performs the same operation. Later CPC revisions with the costdown ASIC and the Plus have the RAM expansion logic inside their ASICs.
Simple 64K Expansion (CPC6128-style)
- Accessing a 64K expansion (or the first 64K of a bigger expansion) is compatible to the 128K in the CPC6128
- For full CPC6128 compatibility one may need some patches (eg. CP/M Plus will still refuse to work; because it "detects" the 128K by checking the BASIC ROMs version number)
Standard 128K-512K Expansions (dk'tronics/dobbertin-style)
Expansions bigger than 64K combine the CPC6128-style mapping with some formerly unused bits in the value written to the RAM select:
Port 7Fxxh:
7-6 Must be both set to 1 5-3 Bank number in 64K units (for expansions bigger than 64K) (max = 512K) 2.0 RAM configuration as on CPC6128 taken from the selected bank
Caution - The 64K bank numbers don't always start at bank 0 (In the Dk'tronics 256K Silicon Disc, the 64K banks are numbered 4..7).
Extended 1M-4M Expansions (RAM7/Yarek-style)
Expansions bigger than 512K extend that above standard. The LSBs of the 64K bank number is kept in D5-D3 data bits (as above), the MSBs of the 64K bank number are in A10-A8 address bits. Typically in inverted form (so the first 512K block is accessed via Port 7Fxxh, the next via 7Exxh, etc.
OUT [01111aaaxxxxxxxx],11bbbccc aaa = upper bits of 64K bank selection (512K-step) (A8,A9,A10 bits) bbb = lower bits of 64K bank selection (64K-step) (D3,D4,D5 bits) ccc = configuration (as in CPC6128) xxxxxxxx = should be set so that it doesn't conflict with other ports (*)
(*) For example 7B01h or 7B7Fh would be no good, because the FDC command register at FB7Fh is mirrored to these locations. Using 7B80h..7BFFh would fix that problem, but might conflict with other connected expansion hardware.
- Compatibility - The first 512K (Port 7Fxxh) are fully compatible with dk'tronics. Using the next 1.5MB (Port 7Exxh,7Dxxh,7Cxxh) should work without conflicting with the other hardware expansions.
- Compatibility Problems - The last 2MB (Port 7Bxxh,7Axxh,79xxh,78xxh) can conflict with other hardware. As workaround: Either leave them unused, or use values for "xx" that do not conflict with your hardware (which values are good for "xx" and which aren't good depends on what other hardware you have connected) (and obviously, different "xx" may be needed in 7Bxxh as in 7Axxh, for example).
Capacity
Standard expansions can contain between 64K and 512K memory.
- A nnK expansion adds nn Kbytes to the internal 64 Kbytes in the CPC. So the resulting total size is nn+64 Kbytes.
- That nn+64 Kbytes formula does in most (or all) cases also apply on the CPC 6128:
- only 64 Kbytes of it's internal memory are used
- the 2nd half of internal memory is disabled and replaced by the expansion RAM
- so, the resulting size is only nn+64 Kbytes, not nn+128 Kbytes
Standard Expansions
- Dk'tronics Memory Expansion and Silicon Disc - 64K and 256K expansions
- Dobbertin Memory Expansion
- RAM BOX
- SYMBiFACE II - includes (among others) 512K RAM expansion
- X-MEM
Extended-Standard Expansions
- RAM7 2MB memory expansion (RAM7) - compatible with standard 512 Kbyte expansion (plus extra extended-standard 1.5 MBbyte)
- CPC4MB (Yarek) (DIY) - compatible with standard 512 Kbyte expansion (plus extra extended-standard 3.5 MBbyte)
Semi-Standard Expansions
- Aleste 520EX - a CPC clone that allows to access 256K (of its total 512K memory) in Inicron-style fashion (ie. as on a 64K computer with 192K expansion which can be mapped to 4000h..7FFFh).
- Inicron RAM-Box - not fully compatible with standard expansions (can map expansion RAM only to 4000h..7FFFh).
Non-Standard Expansions
- c't 512 KB internal RAM expansion - works similar to dk'tronics expansions, but, alltogether, there isn't much compatibility between c't and dk'tronics.
- Otten & Fecht 1 MB RAM-Disc - Accessed through I/O ports (RAM is not mapped to memory)
- Vortex Expansions RAM card - an older expansion, uses 32K-banks, not compatible with the later standard
Expansions that are unknown how they work, and if they are standard or not
- Data Media Memory Expansion - an older thing, said to be not dk'tronics compatible, nothing else known
- Phoenix M64 - all unknown