CPC 6320 / CPC 6512 - internal 320K / 512K for CPC 6128

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search

A 2022s RAM expansion - straight from the mid 80s

Imagine it's spring 1987, you would have opened your favourite Amstrad magazine and a huge article says "320KB for your 6128 - DIY - dk'tronics compatible". And then it explains that cost will be in the range of just £25 / 65DM / 220Fr / 4500Pts and that all you need is a soldering iron, 3 logic ICs, a few sockets and 8 RAM ICs - all of it probably available at your local electronics store. No special skills (besides soldering) and no special equipment required.

I personally would have been fascinated and I know at least 3 people from my friends that would have instantly done that.

As we all know this never happened. RAM expansions were expensive, bulky, external pieces of hardware. The German magazine C'T published a DIY internal RAM expansion up to 512K but you had to be able to program a PAL, needed to make your own PCB and it was not compatible with dk'tronics. All you could do is, write your own programs for it. You can guess how successful it was.

But: the idea that the C'T followed was brilliant. The 41256 RAM ICs that they used could replace the 4164 chips in the 6128 out of the box. Even RAM refresh for 8 address rows was already built into the CPCs architecture. Everything is basically there. All that is missing was logic that drives the additional address line A8. And unlike the C'T it needs to be done in an easy and compatible way.

And that, it turns out, is easier than expected: By replacing the 64Kbit ICs of the second RAM bank with 256Kbit ICs (41256) and the addition of 3 standard logic ICs, the new address line A8 of these RAM ICs can be driven and a 6128 will become a 6320.

That would have been a dream in 1987.


CPC 6320 - successfully running

Unlike some DIY expansions from the 80s it's still possible to do it today - all required components can still be found easily. The logic ICs are standard ICs which most "makers" probably have lying around. If not you can find them in any electronics store or on Ebay for cheap. Even if you have to source the 41256 ICs it should be possible to build this for less than 35€. To be fair, for that price you can already get an external 512KB expansion - but if you don't like this external add-ons, want to build it with your own hands and stay true to the 80s era, this expansion might be for you.

CPC 6320 - schematics


Warning / Disclaimer

Although I have taken the utmost care preparing this documentation, I am no electronics engineer and did this only as a hobby project. I do not guarantee that it is error free and I accept no responsibility for damage to anyone’s hardware or other personal equipment or injury inflicted on you or others.

Construction of the 320K version (no PAL programming required)

The required logic can either be built on a slim breadboard or with the help of a PCB that plugs into the PAL socket.

  • 8x 41256 RAM IC, 150ns or faster
  • 8x IC socket 16-pin (optional, but highly recommended)
  • 1x 74HCT02 NOR gate
  • 1x 74HCT32 OR gate
  • 1x 40175 FlipFlop
  • 1x IC socket, 20-pin (super flat, turned)
  • 1x TriPad stripboard or PCB
  • some wire

when using a TriPad stripboard:

  • 2x IC socket 14-pin (optional, any will do it)
  • 1x IC socket 16-pin (optional, any will do it)
  • 3x capacitor 100nF
Tristripe parts (w/o RAM)

when using a PCB:

  • The PCB - PCB Gerber files
  • 2x Pin header 1x10
  • 4x capacitor 100nF
  • optional: resistor 10k, switch

With the PCB you have to solder the ICs (except for the PAL) directly to the PCB as otherwise there is not enough headroom for the keyboard.

CPC6320 PCB parts with RAM and sockets


Preparation: Replace second RAM bank

second ram bank removed, sockets in place
  • desolder all RAM ICs of the second RAM bank (left one when looking from above). If you don't have the right tools to appropriately desolder the RAM ICs it can be easier to cut the legs and remove each leg. But of course, you will destroy the ICs with it.
  • solder IC sockets into holes of the RAM ICs
  • put RAM ICs into sockets
  • connect pin 1 (A8) of each new IC together. Either on the backside of the motherboard or directly at pin 1 of the ICs (*)

(*) according to the schematics pin 1 should be unconnected on the motherboard. As this was different on e.g. a 464 and there are different revisions of the 6128 board it's better to check this on your motherboard. In case pin 1 is connected to GND or VCC, you have to bend up pin 1 so it's not connected to the socket and then connect pin1 of all ICs directly.

A8 directly vs on motherboard backside


Now it's a good time to test if you have done everything right. Connect one of the A8 pins to GND with a wire and start the CPC. Run the diagnostics tool or a 128KB game. If you have done everything right, it should now behave exactly like a computer with 128KB built in.

Option A: TriPad stripboard

  • Take a TriPad stripboard and cut out a part that is 2 stripes height has enough width to carry the 3 ICs plus capacitors.
  • solder the sockets to the stripboard according to the layout/schematics in the picture below
  • solder the wires that go to other ICs on the mainboard to the stripboard
  • now make all connections between the ICs according to the layout/schematics
  • remove the PAL from its socket. Plug in another socket into the socket and solder all wires to their respective pins
  • put the PAL into this socket
  • finally connect the wires for chipA8, CASADR, D3 and D4 to the pins as documented in the diagram. (You can also use other soldering points as documented for the PCB below if they are more convenient.)
TriStripe bottom
built in
TriStripe wiring

Option B: PCB

  • solder the ICs and the capacitors to upper side the PCB
  • if you want to disable the extension with a switch, also solder the resistor. The switch needs to be connected to the "disable" connection pads.
  • if you have no intent to disable the extension, just bridge the "disable" connection pads with a wire. Don't populate the resistor.
  • solder the PAL IC socket and the pin headers to backside of the PCB. The pin headers will later be pushed into the PAL socket on the motherboard. make sure they have quite the right length as if they are too long, there might not be enough headroom above the PCB for the keyboard and if they are too short, the connection might suffer.
  • connect chipA8 to one of the A8 pins of the new RAM chips and CASADR, D3 and D4 to appropriate connection points on the motherboard. The diagrams show some options. If you have mainboard with soldering points for the two different gate array versions, it's the most easiest way to use the soldering points there. Otherwise connections to IC pins are probably the easiest way.
  • Remove the PAL chip from the socket on the motherboard (it's located right to the RAM banks, the 20pin IC in the socket) and insert it into the socket on the backside of the add-on PCB. Make sure you align its direction correctly . (Printed on PCB, Pin must face towards the pins of the IC next to it)
  • Finally insert the PCB into the PAL socket on the motherboard. Make sure it's properly inserted.


PCB wiring option 1
PCB wiring option 3
PCB wiring option 2

important: double check wiring with actual Gate Array pinouts as I could not try all options




PCB top
PCB bottom
finished and plugged in
finished and plugged in









Construction of the 512K version (PAL programming required)

For a 512K version the biggest challenge is, that when we replace also the first bank we must treat the first 64K as base RAM and the other 192K as extended RAM in a way that it is properly recognised by software.

While this can be done with logic ICs it would need to much space to properly fit into a normal CPC6128. Instead this is achieved with two PAL ICs. ATF16V8 ICs are easy to find and relatively cheap but need to be programmed with e.g. an Eprom programmer like the widely available TL866-II.

What you need:

The assembly is pretty much identical to the PCB description above with the following changes:

  • replace both RAM banks with 41256 RAM ICs
  • connect all A8 pins on both banks so that all 16 ICs are fully parallel on all address lines.
  • program two ATF16V8 ICs with the attached JED files and solder them to the PCB
  • There is a connection from the PCB to D5. D5 is e.g. pin 29 on the 40007 socket. For other options check the schematics/Pinouts.

Note: It's also possible to use this PCB for a 320K mod. In that case only replace the second (left) RAM bank and connect the D5 pad to GND (through hole directly next to the D5 pad).

CPC6512 1.jpg
CPC6512 2.jpg
CPC6512 3.jpg

PAL1:

/* *************** INPUT PINS *********************/
PIN   1  = Q0                        ; /*                                 */ 
PIN   2  = RAMDIS                        ; /*                                 */ 
PIN   3  = Q1                        ; /*                                 */ 
PIN   4  = Q2                        ; /*                                 */ 
PIN   5  = Q3                        ; /*                                 */ 
PIN   6  = Q4                        ; /*                                 */ 
PIN   7  = Q5                        ; /*                                 */ 
PIN   8  = A15                        ; /*                                 */ 
PIN   9  = A14                        ; /*                                 */ 
PIN  11  = nCPU                        ; /*                                 */ 
PIN  15  = nCASADR                        ; /*                                 */ 
PIN  16  = nCAS                        ; /*                                 */ 

/* *************** OUTPUT PINS *********************/
PIN  12 = A15OUT                        ; /*                                 */ 
PIN  13 = BANKING                        ; /*                                 */ 
PIN  14 = A8                        ; /*                                 */ 
PIN  17 = nCAS1                        ; /*                                 */ 
PIN  18 = nCAS0                        ; /*                                 */ 
PIN  19 = A14OUT                        ; /*                                 */ 


A14OUT     = !(  !A14
             #   !A15     & !Q0             &  Q2 );

A15OUT     = !(  !A15 & !A14
             #   !A15             & !Q1
             #   !A15     & !Q0             & !Q2 );


nCAS0     = (  nCAS
            #   !nCAS1 
            #   !nCPU & nCAS0 &  RAMDIS  
            #   !nCPU & nCAS0 &  BANKING & !Q5
                );


BANKING = (     !A15  &  A14                 &  Q2
            #      A15  &  A14 & Q0          & !Q2
            #                   !Q0    & Q1  & !Q2);

            

nCAS1     = !(  !nCAS & nCAS0 & !nCPU    & !A15  &  A14                  &  Q2  & !Q5 & !RAMDIS
            #   !nCAS & nCAS0 & !nCPU    &  A15  &  A14    &  Q0         & !Q2  & !Q5 & !RAMDIS
            #   !nCAS & nCAS0 & !nCPU                      & !Q0 &  Q1   & !Q2  & !Q5 & !RAMDIS
            #   !nCAS & nCAS0            & !A15  &  A14                  &  Q2  & !Q5 & !nCAS1
            #   !nCAS & nCAS0            &  A15  &  A14    &  Q0         & !Q2  & !Q5 & !nCAS1
            #   !nCAS & nCAS0                              & !Q0 &  Q1   & !Q2  & !Q5 & !nCAS1 );

    
A8  = (    Q5 & BANKING & !Q3 & !nCASADR & !nCPU 
        #  Q5 & BANKING & !Q4 &  nCASADR & !nCPU
        #  Q5 & BANKING &  Q3 & Q4       & !nCPU
        # !Q5 & BANKING &  Q3 & !nCASADR & !nCPU 
        # !Q5 & BANKING &  Q4 &  nCASADR & !nCPU
        
        );
            

PAL2:

/* *************** INPUT PINS *********************/
PIN   1 = D6D7                        ; /*                                 */ 
PIN   2 = D0                        ; /*                                 */ 
PIN   3 = nRESET                        ; /*                                 */ 
PIN   4 = D1                        ; /*                                 */ 
PIN   5 = D2                        ; /*                                 */ 
PIN   6 = D3                        ; /*                                 */ 
PIN   7 = D4                        ; /*                                 */ 
PIN   8 = D5                        ; /*                                 */ 
PIN   9 = A15                        ; /*                                 */ 
PIN  11 = nIOWR                         ; /*                                 */ 

/* *************** OUTPUT PINS *********************/
PIN  13 = Q5                         ; /*                                 */ 
PIN  14 = Q4                      ; /*                                 */ 
PIN  15 = Q3                      ; /*                                 */ 
PIN  16 = Q2                      ; /*                                 */ 
PIN  17 = Q1                      ; /*                                 */ 
PIN  18 = Q0                      ; /*                                 */ 




Q0     = (   nRESET & D6D7 & !A15 & !nIOWR &  D0
         #   nRESET     & !D6D7     & Q0
         #   nRESET     & A15         & Q0
         #   nRESET     & nIOWR     & Q0 );

Q1     = (   nRESET & D6D7 & !A15 & !nIOWR &  D1
         #   nRESET     & !D6D7     & Q1
         #   nRESET     & A15         & Q1
         #   nRESET     & nIOWR     & Q1 );

Q2     = (   nRESET & D6D7 & !A15 & !nIOWR &  D2
         #   nRESET     & !D6D7     & Q2
         #   nRESET     & A15         & Q2
         #   nRESET     & nIOWR     & Q2 );  

Q3     = (   nRESET & D6D7 & !A15 & !nIOWR &  D3
         #   nRESET     & !D6D7     & Q3
         #   nRESET     & A15         & Q3
         #   nRESET     & nIOWR     & Q3 );

Q4     = (   nRESET & D6D7 & !A15 & !nIOWR &  D4
         #   nRESET     & !D6D7     & Q4
         #   nRESET     & A15         & Q4
         #   nRESET     & nIOWR     & Q4 );

Q5     = (   nRESET & D6D7 & !A15 & !nIOWR &  D5
         #   nRESET     & !D6D7     & Q5
         #   nRESET     & A15         & Q5
         #   nRESET     & nIOWR     & Q5 );

References and links




(eto)