Articol disponibil numai în limba engleză

Here you will find +3 hardware related material, suitable for all +3 versions.

The subjects covered are:

  1. the (128K) sound issue
  2. the IN #FF port issue
  3. adding composite video output
  4. replacing the original 3” drive with a 3.5” 720K DS DD drive

Although I am referring to the +3, the first three items may apply to the +2A as well.

Note: if you have (deep) knowledge in electronics, feel free to apply – or even improve – the solutions I’m offering here. If not, you may read it just for curiosity :)

The (hardware) section describing my self-build +3 is on a separate page. At present, that project is under construction and/or in a continuous process of modifying and upgrading some parts, like the CPU access timing, memory type, video board, PSU, etc. Probably, that’s a never ending project.

(i) The (128K) sound

The first +3 release had a fatal hardware error: the 128K sound output is completely distorted.

Technical explanation:

On +3, the analog output of the AY-3-8012 sound chip was intended to be amplified by a one stage common-emitter transistor. In practice, they forgot to put a resistor to the transistor’s emitter. The result: the transistor works in pure switching mode, so the sound is converted from analog multi-level amplitude to digitized two-level amplitude, same as the old 48K sound system.

Take a look at the +3 sound diagram .

The second +3 release (the so-called +3B) had the sound circuit fixed. Also, the sound on all +2As encountered by me was ok, however, most of them were Spanish version which are supposed to be released later than their UK counterpart.

If someone wishes to fix the sound of an original +3, there is a better solution: stereo sound output, sometimes referred as “ACB Sound”. The layout comes from Amstrad CPC 464+ computers. I have done this on several +3 and the result is excellent.

With reference to my +3 sound diagram : the stereo sound output described below also makes a sound mix between 128K sound and the old 48K sound (beep). I personally prefer to have the 128K sound separated from the 48K beep. If this is also your case, simply omit the two (unnamed) 100K resistors. The 48K sound can be heard on the TV set or may be amplified separately from the cass out connector.

Assuming you own a first release +3, to build the stereo sound, you have to:

  • !! know precisely what you are doing !!
  • remove C38
  • remove R72
  • cut tracks between pin 1 and 4 & 4 and 5 of IC11 (the AY chip) on the back side of the printed circuit board; here is an example
  • build the matrix resistor around pins 1, 4 and 5 of IC11; note that pin 6 (GND) may be used for the ground point for the matrix; here is an example

You then have to find a way to get the sound out from the inside. One of two solutions:

  1. mount two RCA connectors on the back side of the +3; this is somewhat carcass destructive
  2. use the existing RGB PERITEL for stereo sound output; if this is the case, you have to:
    • remove R42
    • remove R43
    • if you are NOT using the +12V for RGB switching of your TV set, then remove R44
    • if you ARE using the +12V for RGB switching of your TV set, then:
      • leave R44 as is
      • cut tracks between pin 1 and pin 5 of RGB PERITEL connector on the back side of the circuit board; connect a wire between the rear termination of R44 and pin 1 of RGB PERITEL connector, like is this example ; pin 1 remains now the +12V switching pin for the RGB system
      • cut tracks between R44 and pin 5 of RGB PERITEL connector on the component side of the circuit board; the place is somewhat narrow; I have not a picture available
    • make all connections to RGB PERITEL as shown in the +3 sound diagram

You can now use a stereo RCA cable (version 1) or a stereo DIN cable (version 2; pin 3=L, pin 5=R, pin 2=GND) to put the sound to any amplifier (usually the AUX input).

Important: the stereo sound output, as described above, has relatively low output level. If your amplifier has not enough sensitivity, try to connect the +3 to the MIC input of the amplifier, if available. A local amplifier may be build inside the +3, however, this is outside the scope of these technical notes.
Even if not at 1000W acoustical power, Ghouls’n’Ghosts pure sound can be now finally enjoyed !
(I personally like very much Software Creations’s sound music :)

Note: over the time, I read some comments regarding the two 33pF ceramic capacitors I have put on my stereo audio outputs, in that they were considered way too low and, therefore, completely useless; well, not quite: they are used (just) to bypass high frequency energy to ground that might be radiated by the circuit paths, in order to prevent VHF interference on external TV or other similar sensitive devices. For this same reason these should be soldered very close the connector choosed for audio output (rather than near to the AY circuit).

(ii) The IN #FF port

At the time the +3 (and +2A) came out, some games simply refused to play.

One of the reason for this was the “missing” IN #FF port (255 decimal). In fact, a true IN #FF port does not exists on neither Spectrum model.
How is that ?

Technical explanation:
(well, sort of)

I suppose you know how the vacuum tube of any (old, by now) TV works: the electron beam make left-right and up-down movements very fast, giving to the human eye the impression there is a still image.

Make border 0 or any other value different than the paper colour; you will see the Spectrum's TV display area like a “window”. Let's start with the electron beam from the top left corner of the screen. What is there ? The border - no image. Thus, at this moment, the video RAM is useless to be read, since no video-information is required. During this moment, the processor can make all (video) RAM access at full speed, no wait states. The video display mechanism does nothing, it is in a sort of “stand-by” state (it only generates H sync signals for the TV). The beam scans, scans and after 1/5 (approx.) from the top, it reaches the "window" zone; at this moment, the video RAM starts to be read by the video system display. When the beam reach the last 32 pixel of the first line (and the first pixel-line has been just displayed), the computer's video system pass again in "stand by" state until the next pixel-line. And so, line by line. When the bottom of the "window" has been reached, the video system pass definitively in "stand by" state, waiting the electron beam of the TV to reach again the top of the "window" - but this will only happens again after scanning the last 1/5 of the bottom TV screen and the other 1/5 of the top of the next TV field.

If the processor has some business with the video RAM, it comes in conflict with the video display mechanism in the "window" moments. The conflict is solved by means of WAIT states on the processor side. Because of this, a time execution loop of a program that runs in the video RAM cannot be exactly predicted, except when synchronized with the Spectrum's interrupt mode (and even so very difficult).

On older models (up to +2) the data bus between the video RAM - on one side - and the non-video upper system RAM together with the processor - on the other side - were separated by 8 × 470 ohm resistors, one for each data line. This value is low enough to be transparent when the processor makes video RAM requests (for example, when the processor writes something at address #4200) and high enough if both memory banks are at the same time - but independently - accessed - the video RAM by the display system and the upper system RAM by the processor (for example, when the video system performs an attribute display for address #5802 and at the same time the processor writes something at address #9A00 (or any address greater than #8000)).

All input ports are circuits with three-state outputs. These outputs, connected to the data bus, are normally in high impedance state; they are only enabled to low impedance when the properly I/O address match the port address. For example, the IN #FE port (the keyboard reading) is enabled only when the #FE address is decoded at the same time with the nIORQ active (logical 0) and nRD active (logical 0).

What happens if the port does not exist ? For example an IN #F1 instruction ?

On +3 (and +2A) there's no physical circuit to be enabled - the processor reads nothing. But as all 8 data lines are pulled-up to +5 V with 8 × 10 Kohm resistors, the value read will be #FF (all data in logical 1).

On the other hand, on the old (+)48, +128 and +2 Spectrums, the processor may read something ! This something is the video display system. If the processor performs an IN #75 instruction and by coincidence at the same time the video system just displays an attribute with BRIGHT 1 / PAPER 2 / INK 6, then the IN #75 instruction will read the value #56 (86 decimal) ! This occurs because the 470 ohm resistors are the smallest impedance at that time on the data bus and the processor reads in fact the video data bus. The port reading can give a pixel value, an attribute value, or nothing (#FF) if the beam of the TV screen is at that moment somewhere in the border. This is completely random.

Some games are performing this reading. The port chosen by programmers is the IN #FF (255 decimal), but can be any other IN port that does not exist physically. There is a loop that works something like this:


This is a way to make a relationship of the game with the Spectrum display area. It is used like a second interrupt signal. The IN port will read #FF every time when the electron beam of the TV is in border area (since in this moment the video display system is in "stand-by" state) and will be different than #FF if in the "window" area. The loop assumes there is something visible on screen and the colour is of particular value. If, for example, all pixels are #FF and all attributes are #FF (FLASH 1 / BRIGHT 1 / PAPER 7 / INK 7 - difficult to believe, but possible) then this loop remains closed; or if someone remove the 470 ohm resistors, then again, this loop remain closed forever - you must reset the computer.

This last situation is present on the +3 (and +2A) computers. Here, the data separation between video RAM and the upper system RAM is done with transceivers (a better hardware solution), not with 470 ohm resistors. On these computers, an IN instruction to a non-present port will always read the #FF value, since the transceivers are normally in high impedance state (they are only enabled on specific memory address request).

As a result, (very) few games have problems. I am aware of this ones:

  • Arkanoid 1 first release - the game hangs; at the same time Arkanoid 1 second release works well anyway, because it uses a different video synchronization method and does not use the IN #FF port at all; the second release is easy to recognize: just after the game has finished loading, you are asking about whether or not you are using a Kempston joystick (this second release has also a minor bug, but that’s another story :)
  • Note: both the above Arkanoid files are from the World Of Spectrum archive .
  • Duet - the game hangs
  • F.I.R.E. - the game hangs
  • Renegade 1 128K - the game detects what Spectrum model it is, by switching the ROMs; if the +3 (or +2A) is detected, during the game the sound music is suppressed, only the sound effects remains active;
    if you have the IN #FF port installed, you may want to have the full sound working version of this game; this is a special version, available on my games page only

To make any +3 compatible with all software that uses the IN #FF port, there are two solutions:

  1. (best) decode the IN #FF port and make a real read from the video data bus, by means of three-state buffers - like 74LS125 or 74HCT125 - between the D7 of the video RAM and D7 of the auxiliary (full-speed) RAM
  2. (compromise; good enough) connect one 470 ohm resistor between  D7 of the video RAM and D7 of the auxiliary (full-speed) RAM

For the first solution, you will need a few HCT-TTL (best) or LS-TTL (good enough) circuits. Maybe one day I will find some time to draw the schematic diagram for this.

For the second solution, connect a 470 ohm / 0.125 W or 0.25 W resistor between pins 17 of the IC 6 and pin 17 of the IC 4. That’s all !

I guess the second solution is easier to implement, even by a beginner in electronics :)

In this example (or in this other example ) the resistor is mounted on the back side of the main circuit board. The resistor shown is 470 ohm / 0.125 W.

Important: don’t forget to isolate any open connection !
In the above first example, the only reason the connection of the wire with the resistor is not isolated is for the clarity of the connection shown.
In the above second example there is no need for isolation, because the resistor terminals are kept firmly at secure distance with silicone sealant.

In either case (the true or pseudo solution), I recommend that only D7 be involved. That means, an IN #FF value could only be #FF or #7F. It assumes the IN #FF request comes during a normal screen, with the FLASH attribute reset (i.e. no FLASH). I find simply absurd the assumption one will try to play Duet with the entire screen FLASH attribute set ! (in which case, the game will hang, like in the absence of the IN #FF port).

This simplified version for the IN #FF port (the second solution) has been implemented and tested by me on a few +3s and many +2As. Not any complain so far, only happy “customers” !

Note: I read one report saying that – after installing the 470 ohm resistor as described above – the +2A computer (in that case) had become unstable. This reminds me of another case – not related to the #FF port issue, but that could have the same origin – where a +2A (Spanish version if I remember well) was barely usable when playing games (it worked well only while in +2A Basic mode). In my case the gate array timing was imperfect in relation to the rest of the hardware components that happened to be on that board and introduced some unwanted spikes during RAM bank switching; the solution proved to be quite easy to apply: I just put two 220pF capacitors on processor’s A14 and A15 address lines (one between each address and GND). The owner was a heavy player and never got into any problem again :) (and yes, I then applied to it the #FF patch as well – the D7 / 470 ohm resistor solution)

(iii) Composite video output

The +3 (as well as the +2A) has RGB video output.

Although this solution offers the best quality for video display, not all TV sets have RGB input. Even if a SCART connector is present, the RGB input on the TV side may simply be not present.

All 128K Spectrum versions (+128/+2/+2A/+3) are using the same PAL coder circuit, TEA2000 , which drives the TV modulator. On the +128 and +2 the PAL coder drives also a (composite) video output. On the +3 and +2A this (composite) video output circuit is missing.

This composite video output diagram shows the original +128/+2 composite video output circuit, which can be successfully used on any +3 (and +2A).

However, the same diagram includes a better alternative for the video output, based on the TEA2014A , a circuit commonly used in many TV sets for internal TV / external VCR switching.

Note: on this drawing, the TEA2014A may well be replaced with TEA2114 . In fact, TEA2114 has better electrical performance, but it may be also more expensive. For the purpose of this application, there is no particular reason for using it.

On the original +128/+2, the composite video output is made through pin1 of the RGB PERITEL connector. Although this solution may also be applied to +3 (and +2A), I don’t recommend it. The common standard for video connections are the BNC connectors (used mostly in professional video equipments), or RCA connectors (used mostly in consumer video equipments). This example shows the video BNC connector mounted on the rear of my original +3, while a view of the solder part of the same BNC connector can be seen in this other example .

(iv) Internal 3.5” A: drive on Spectrum +3

Provisions for the B: drive has been provided from the first day the +3 was born. Except for a (minor ?) error, in that the drive’s connector pinout description from the manual is reverse numbered, there is no major problem for connecting an external 3.5” drive.
Yes, the power supply may be a problem, but I have seen a few external 3.5” drives powered from the +3’s original power supply and ... no problem so far.

That was for the B: drive. But how about a 3.5” floppy disk drive as the A: drive ?

I have done this to a few +3s, including my own original. This example shows my original +3 with a 3.5” drive in it (for the moment – year 2016 – that very old, scanned photo paper picture, is the only example I have, will try to get a more modern one soon...).

Before going to change the internal original 180K 3” drive with a 720K 3.5” drive, you should be aware of the following related problems:

  • you agree with the fact that you can no longer use original protected software on Amstrad CF-2 floppy disk(s), or, if you really need it, any software stored on CF-2 floppies must be first copied to 3.5” DSDD floppies; there are a few alternatives:
    • for one-side protected 3” disk, you must copy the entire floppy side to a blank 3.5” floppy
    • for two-sided protected 3” disk, you must copy each entire side to separate blank 3.5” floppies (two 3.5” blank disks required);
      both situations may be solved by using a dedicated copy program that can handle protected disks; however, for the purpose of this technical note, these days a better alternative might be to make a disk image on PC (or use an existing one) and then use that image to create back an “original” content on a 3.5” floppy
    • you can hack the disk boot loader and make all the software +3DOS compatible (i.e. no longer protected); that way the program will load from either logical drive like any “normal” software (I have done this already, a few are listed on the +3 Software page; e‑mail me directly if you are looking for help regarding some particular original protected CF-2 floppy disk – my e‑mail address can be found at the bottom of any of these pages)
  • Although the original Amstrad 3” disk drive may be connected as the external B: drive (with a few modifications) and you can use CF-2 disks with it, protected disks will most likely not load because of the following limitations:
    • they have a boot sector that can be loaded either via +3’s Loader menu, or the +3 Basic LOAD"*" command; the problem is that the +3 can only load a boot sector from the A: drive
    • once a boot sector is loaded into memory, the program execution is passed to that code; the problem is that the boot sector routines are using direct µPD768 floppy disk controller commands (bypassing the +3DOS ROM) and are considering the current drive as drive0 (µPD768 sees the drives as physical devices; physical drive0 is the logical drive A: and physical drive1 is the logical drive B:)
  • Note: 720K DSDD floppy disks may be used as 180K disks with only one side available; this seems to be a stupid idea, but for some, this may be the only chance for copying and running protected software.
  • DKIT720K screenshot
    DKIT720K, a +3DOS based disk utility;
    the "Duplicate" command is not yet implemented
  • The CP/M Plus for +3 can be copied to any other disk format (it is not protected), however, the original CP/M package has no provisions for making a bootable 720K disk. You will need my DKIT720K utility in order to make CP/M bootable disks. Supported sizes for CP/M bootable format are 180K, 720K and 800K.
    Although the source code for this utility is available in HiSoft GEN80 for +3 format, because at the time of this writing the “Duplicate” command is not yet implemented and the “Format” command is not complete (everything is functional except the “Mask bad sectors” option), I am not making available the compiled program. At present you still have to e‑mail me directly in order to get (freely) the compiled DKIT720K utility.
  • !! the power supply connector of the original Amstrad 3” disk drive has the +5V and +12V inverted in respect to any 3.5” disk drive; the red and yellow (orange in some cases) wires from this connector must be reversed on the connector side before connecting to any 3.5” disk drive !!
  • the 26 pin connector must be changed with a 34 connector (see below, electrical considerations paragraph)
  • the +3 Basic FORMAT command cannot format 720K floppy disks, neither A: or B:; the DKIT720K utility (or any equivalent program) will be required

Mechanical considerations

As you might expect, the (new) 3.5” disk drive has different positions for the mounting holes in respect with the original drive. Fortunately, the modification required is quite easy to be done.

Hexagonal nickel plated brass spacer, with M3 tapped hole and M3 threated stud

There are four spacers needed, as seen in the picture here on the right; two of them must have 15mm in lenght, the others two 20mm in lenght.

Look at the bottom side of the 3.5” drive; there are four M3 tapped holes at standardized distance each other (94mm on the width axis, 70mm on the depth axis) . The spacers will screw up into these holes, the 15mm ones on the left side (direction: center of the +3), the 20mm ones on the right side (direction: +3 border).


Front view floppy disk drive mounting dimensions
Front view of drive positioning and spacers dimensions

The 15mm left-front spacer is fixed into a hole that was previously used by the original 3” drive. The rest three mounting holes must be given with reference to this existing one.
This example may give an idea about how a real drive is mounted.


Electrical considerations

First thing, already mentioned before: although the power supply connector is mechanically the same for both 3” and 3.5” drives, !! the +5V and +12V (the outermost pins) must be reversed before plugging into the 3.5” drive !!

Fortunately, this can be easy done, by hacking the power connector with a help of a needle and reverting the two outermost pins.

The 26 ribbon cable is a more delicate issue. The original 26-way cable mounting socket cannot be directly connected to the 3.5” drive. You must build a new cable with a 34-way cable mounting socket.

The new connector should look like in this example and the final result should result as shown in this example . An alternate crimping solution is shown in this example ; this alternate solution is usually the most reliable, but the limited space may force the first solution shown (it merely depends on the physical floppy model).

For all this to happen, you have two possibilities:

  1. make a short adapter, that consists of one 26-way cable mounting plug, a short 26-way ribbon cable and a 34-way cable mounting socket; see below table 1 for pins correspondence;
    this solution has a few problems:
    • cable mounting plugs are difficult to find; alternatively, you can use a normal 26-pin header connector and solder the ribbon cable to it; however, the ribbon cable is a crimping model and is usually difficult to solder
    • the resulting assembly may be not fully isolated
    • the resulting assembly may be too large for the available space; special care should be taken if the 3.5” drive model used has its motor drive open (not mechanically protected under the drive)
  2. replace the original 26-way cable mounting socket with a 34-way cable mounting socket; see below table 1 for pins correspondence;
    this solution has a major problem:
    • the original 26-way ribbon cable may be too short and, most likely, it must be replaced; the problem lies on the printed circuit board side: you have to unmount the original 26-way PCB-type socket and then re-crimp the new ribbon cable on it

Note: take care, a new 26-way PCB connector may be hard to find; you should pay attention when handling it !
Just in case you broke the PCB connector, there is a solution to replace it: change it with a (boxed) 26-way header; the 26-way ribbon cable must then have a 26-way cable mounting socket on it. It is a bit complicated, but it works and it is not bad at all !

Table 1: 26-way to 34-way floppy disk drive connection correspondence

ribbon pins:
cable socket pins:
1 7 GND
2 8 n/INDEX
3 9 GND
5 11 GND
7 15 GND
8 16 n/MOTOR ON
9 17 GND
11 19 GND
12 20 n/STEP
13 21 GND
14 22 n/WRITE DATA
15 23 GND
16 24 n/WRITE GATE
17 25 GND
18 26 n/TRACK 0
19 27 GND
21 29 GND
22 30 n/READ DATA
23 31 GND
25 33 GND
26 34 n/READY

Floppy drive considerations

Modern floppy disk drives are, in general, not compatible with the +3. For a drive to work with the +3, it has to be also compatible with the old PC-XT computers.

PC-XT computers allowed 4 floppy disk drives. The XT drive connector has 4 “disk select” signals and 1 “motor on” command signal which is common for all drives. When the motor signal becomes active, the motors from all present drives are turned on, regardless of whether a particular drive will be used or not.

On the other hand, the PC-AT computers only allows 2 floppy disk drives. The AT drive connector has separate “disk select” and “motor on” command signals for each of the two drives. The “ready” signal has been replaced by “disk change” signal.

See below table 2 for XT/AT drive connector function differences. Please note that the +3 uses pins 10, 12, 16 and 34 of the drive, functionally similar to the PC-XT connector.

Table 2: PC-XT/PC-AT  floppy disk drive connector function differences (only the relevant pins shown; all other pins have the same function on both)

cable pin: PC-XT function: PC-AT function:

For +3 floppy disk drive implementation, either internal (A:) or external (B:), you have to find an XT-only drive, or a drive that has XT<->AT switching capabilities. Most likely, there are no 3.5” XT-only drives, but chances are, you can find a (new) one that has XT<->AT switching capabilities.

The switching between the two categories is made by means of jumpers, DIP switches, or 0 ohm SMD bridges.

Below is an example of a few drives that are +3 compatible. For all drives in this example, the drive select should be DS0 for drive A: (the internal one) or DS1 for drive B: (the external one).

Chinon FZ-354 or FZ-357
has a jumper block
- jumper for motor driving, two positions, can be MD or MM
- jumper for the ready signal, two positions, can be RDY or DC
- jumper for drive select, four positions, can be DS0, or DS1, or DS2, or DS3
For +3 use, the jumpers have to be set to MM and RDY.

Panasonic JU-257-203P
has DIP switches
- switch for motor driving, two positions, labelled MO or MS
- switch for the ready signal, two positions, labelled RY or DC
- switch for drive select, four positions, labelled DS0, or DS1, or DS2, or DS3
For +3 use, the switches have to be set to MO and RY.

Panasonic  JU-257A-606P
Samsung (not sure about exact model, presumably SFD-321B)
have 0ohm SMD resistors that have to be (re)soldered
- 0ohm SMD resistor for motor driving, two positions, can be MO or MS
- 0ohm SMD resistor for the ready signal, two positions, can be RY or DC
- 0ohm SMD resistor for drive select, two positions, can be DS0 or DS1
For +3 use, the 0ohm SMD resistors have to be set to MO and RY.

If a floppy disk drive connected to a +3 has the “ready” selection left on DC, the result is that the drive will not work at all. If the floppy disk is not inserted, the computer waits forever for the floppy to say something.
Floppy disk drives that are usual in today’s PCs have no more the “ready” and “motor” jumpers, more likely not even the “disk select” jumpers, they are PC-AT locked and DS1 locked. These drives cannot be used on +3 at all.

Note: a search on the internet for Amiga or Amstrad CPC6128 drive replacement might offer a compromise solution for using modern (PC-AT) floppy disk drives, that may be applied also on +3. The solution involves forcing the nREADY signal to GND, thus fooling the system with regard to the real drive ready status; the drawback is that some +3DOS drive commands might give impredictible results in case the drive is actually not ready for an otherwise mandatory ready requirement (for example when trying to write some data on disk).


Sus de tot