Here you will find +3 hardware related material, suitable for all +3 versions.
The subjects covered are:
the (128K) sound issue
the IN #FF port issue
adding composite video output
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 an contiuous process of modifying and upgrading some parts, like the CPU access timing, memory type, video board, PSU, etc... That’s an neverending project :)
(i) The (128K) sound
The first +3 release had a fatal hardware error: the 128K sound output is completely distorted.
Tech explanation: 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 have 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 (.PDF, 29K).
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 !!!
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:
mount two RCA connectors on the back side of the +3; this is somewhat carcass destructive
use the existing RGB PERITEL for stereo sound output; if this is the case, you have to:
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 relative 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 :)
(ii) The IN #FF port
At the time +3 (and +2A) comes 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 ?
Tech explanation (well, trying a sort of): make border 0 or any other value different than the paper color; you will see the Spectrum's TV display area like a “window”.
I suppose you know how the vacuum tube of any 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.
I will try to explain how the Spectrum (all models) makes the video access.
Let's start with the electron beam from the top left corner. 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 paper 2 / ink 6 / bright 1, 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:
LOOP IN A,(#FF) ; READ THIS PORT
CP A,#FF ; CHECK IF "BORDER" OR "WINDOW"
JP Z,LOOP ; JUMP BACK IF STILL BORDER
..... ; CONTINUE THE PROGRAM
This is a way to make a relationship of the game with the Spectrum display area. It is used like the 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 color 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 for ever - 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 solution), not with 470 ohm resistors. On these computers, an IN instruction to a not-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 (.ZIP, 23K) - the game hangs;
at the same time Arkanoid 1 second release (.ZIP, 27K) 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:
(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
(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 my 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 my 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” !
(iii) Composite video output
The +3 (as well as the +2A) has RGB video output.
Although this being the best solution for video display, not all TV sets have RGB input. Even if the SCART connector is present, the RGB input on the TV side may simply be not present.
All 128K Spectrums (+128/+2/+2A/+3) are using the same PAL coder circuit, TEA2000 (.PDF, 152K), which drives the TV modulator. On the +128 and +2 the coder drives also a (composite) video output. On the +3 and +2A this (composite) video output circuit is missing.
The composite video output diagram (.PDF, 13K) includes the original +128/+2 composite video output circuit. This can be successfully used on any +3 (and +2A).
The same diagram includes a better alternative for the video output, based on the TEA2014A (.PDF, 41K). This circuit is commonly used in many TV sets, for internal TV / external VCR switching.
Note: on this drawing, TEA2014A may well be replaced with TEA2114. In fact, TEA2114 has better electrical performance, but it may also be more expensive. For the purpose of this application, there is no 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. This picture shows the video BNC connector mounted on the rear of my original +3 (a view of the solder part of the same BNC connector can be seen in this picture).
(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 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. You may already know this picture, showing the +3 with a 3.5” drive in it (there was a long delay in finishing this chapter ...).
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)
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 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 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, 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 vailable in Hisoft’s 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; at present, you still have to e-mail me directly in order to get (freely) the compiled DKIT720K utility
hexagonal nickel plated brass spacer, with M3 tapped hole and M3 threated stud
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.
There are four spacers needed, as seen in this annexed picture; two of them must have 15mm lenght, the others two 20mm 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 picture may give an idea about how a real drive is mounted.
First thing, already mentioned: although the power supply connector is mechanically the same model 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 this one and the final result is shown here. An alternate crimping solution is shown here; 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:
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 dificult 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 dificult 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)
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 is not bad at all !
Table 1: 26-way to 34-way floppy disk drive connection correspondence
cable socket pins:
n/DRIVE SELECT 0
n/DRIVE SELECT 1
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 )
N.C. or LOW CURRENT
N.C. or DENSITY SELECT
n/DRIVE SELECT 3
n/DRIVE SELECT 0
n/MOTOR ON DRIVE 0
n/DRIVE SELECT 1
n/DRIVE SELECT 1
n/DRIVE SELECT 2
n/DRIVE SELECT 0
n/MOTOR ON DRIVE 1
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 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.
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.
Samsung (unknown model, unfortunately I can no longer find the physical drive ...)
has 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.