UIDE Universal IDE adapter cards for Z-80 computers

From CPCWiki - THE Amstrad CPC encyclopedia!
Revision as of 11:37, 19 February 2017 by JonB (Talk | contribs)

Jump to: navigation, search
uIDE-8
uIDE-16

About the uIDE project

The uIDE concept is not terribly new (search for GIDE and you will see what I mean, although these adapters are not available any more).

The idea was to produce a low cost IDE adapter, suitable for connecting to Z-80 computers via a shim board that fits between a (socketed) Z-80 and its main board socket. From the shim, a 40 way IDC cable is connected to the uIDE adapter board, then a CF card or DOM plugs into the other end (if there is space inside your Z-80 computer, you may be able to connect the shim and uIDE cards directly together without a cable). uIDE cards are "universal" because their I/O base address is fully configurable via a row of 2 position jumpers on the board.

Once the hardware is installed, drivers need to be written (see below).

uIDE-16 can be configured for use on any Z-80 microcomputer such as the CPC range of computers. It is called "uIDE-16" because it decodes all 16 address bus lines to provide access to the IDE ATA registers as is required by the Amstrad CPC machines.

uIDE-8 is a similar design that just decodes the low 8 bits of the Z-80 adddress bus, and this can be used on the PCW and most other Z80 machines. uIDE-16 has a user-configurable 8-bit mode that allows it to work with 8-bit addressed I/O as well. In this mode, some components (U1 and its socket and smoothing capacitor) may be left off the board. However, uIDE-8 is slightly smaller and cheaper than uIDE-16.

Project status

As of now (Early Feb 2017) uIDE-16 is in the design phase, but the boards have been laid out. Click the images around the page for a closer look. uIDE-8 was prototyped and tested successfully on the PCW 9512. A FID based driver has been written that supports Amstrad CP/M and Locoscript (but it cannot cold boot the machine).

Update 05/07/17: The first batch of 10 uIDE-8 boards has been ordered but I found that there was an error in the order that will make them unusable, so I added the following to my original order:

  • 10 uIDE-8s (corrected)
  • 10 Z80 LHS Shims
  • 10 Z80 RHS Shims
  • 10 PCW Expansion port adapter with composite video
  • 10 PCW Expansion port adapter "lite"

Update 13/02/17: All boards have been re-ordered with expedited shipping, including uIDE-16. Some layouts were altered slightly. I still need to build one uIDE-16 and CPC CP/M Plus drivers for testing. The order comprises of:

  • 10 uIDE-16
  • 10 6128 expansion port to Z80 bus adapters
  • 10 Z80 LHS Shims
  • 10 Z80 RHS Shims
  • 10 PCW Expansion port adapter with composite video
  • 20 uIDE-8
  • 20 PCW Expansion port adapter "lite"

Update 18/02/17: The first three uIDE prototype boards have arrived from OSH Park. They are very, very pretty. I built two of them and they both work. See the forum thread linked to below for details and pictures. Note: The boards I will provide will be red or blue (but mostly blue).

Feature list

  • Compact design, only 4 ICs (uIDE-16) or 2 ICs (uIDE-8) and a smattering of discreet components. Board measures 79x60mm (uIDE-16).
  • Implemented using cheap, readily available parts (7400-series ICs only, plus a single transistor, some capacitors, resistors and LEDs).
  • Can be connected to the PCW expansion port (see below) or internally via a Z80 shim card (note, this requires a socketed Z80).
  • Driver supports Amstrad CP/M Plus only at this time (it is implemented as a FID).
  • A separate driver exists for Lifeboat CP/M 2.2 on the TRS-80 Model II that can be ported on demand to other CP/M 2.2 variants.
  • The CP/M driver runs the IDE device in LBA / 8 bit mode, so DOMs or CF cards are recommended (at least 128MB is recommended).
  • Fully programmable I/O address decoding (via on-board jumpers). Initial I/O range (uIDE-16, for the CPC driver) is FEF0-FEF7 and (uIDE-8, for the PCW driver) is C8-CF, but you can change this to suit your own hardware / driver.
  • Can be used on any other Z80 computer with a socketed processor.
  • Implements a standard bus connector that exactly matches the Z80 pinout. Further expansions are planned, including a Z80 bus board, serial port, parallel port (possibly a clone of the CPS8256), mouse port, dk'tronics sound clone (PCW), etc.

Z80 Shims

Left handed Z80 Shim card
Right handed Z80 Shim card

These small cards are inserted between the Z80 and its socket, and present all 40 pins of the CPU via a 40 way header. This header is the "Z80 Bus" that the uIDE cards connect to.

Choose the one that fits best inside your machine. A CPC6128 needs the left hand shim, although space is very tight under the keyboard (the processor sits directly behind the expansion port) and it's not known yet whether it will fit properly. PCW machines have more space, so either shim should fit.

Important: Check your machine has a socketed Z80 before ordering a shim (you should open it up anyway to decide which shim gives the best mounting solution). If the Z80 does not have a socket and you are not willing to desolder the Z80 and fit a socket to the machine, then a shim is not the solution for you.





Machine-specific expansion port adapters

Use one of these cards if you prefer to connect your uIDE card to the machine's expansion port rather than via its Z80 socket.

PCW 8256/8512/9512

PCW Bus adapter with composite video output
PCW Bus adapter "lite" (no composite video)

These cards allow connection of a uIDE card to the 50 way expansion port on the back of the machine. They are designed to support the PCW edge connector type port, but the European Centronics type port might be accommodated if a suitable connector exists (50 way Centronics, 2.54 header pitch). In addition they provide access to the PCW's 5v and 12v power supply, as well as other signals from the card edge connector. One variant has a small composite video circuit so that you can connect an external monitor to the PCW.








CPC 6128

CPC 6128 Bus adapter

The CPC 6128 bus adapter is a card which plugs directly into the 6128's expansion port with the front face of the board facing away from the CPC. The image shows an early render from OSH Park. Per the other adapter cards, uIDE plugs into it via a 40 way IDC cable. Direct connection is likely to be challenging because the expansion port is so close to the underside of the computer.




BOMs

For self assemblers, I drew up a parts list broken down by board with Farnell order numbers. I recommend you shop round for these parts, after seeing what they look like on Farnell. Also, you have options where there are alternatives shown. In particular, with the edge and IDC connectors, consider how you wish to mount and connect the boards and select the connector appropriately. The exapansion interfaces are designed to have an edge connector soldered to the back of the board, so that it sits over the slot with the components facing away from you (if you are sitting in front of the computer), but if you choose to use a 50 way IDC connector (with cable to expansion port) then you can mount it on the component side of the board.

File:All board BOM.csv

Putting it all together

Here is a table summarising your options for connecting a uIDE device to your computer.

UIDE connection options.JPG















Choose one option from each column. Some guidance notes:

  • Expansion adapters connect to the rear edge connector of your PCW or 6128. Choose one if you don't want to fit the uIDE internally or your Z80 is not socketed.
  • Z80 shims are for general purpose use and will fit any Z80 machine with a socketed processor. Choose LHS or RHS dependant on the space and orientation of the CPU in your machine.
  • Direct connection (between the host adapter and uIDE device) means soldering the Z80 bus header pins on each board directly together. Note, some combinations may prevent this, or may require odd orientation of the two cards.
  • The IDE device can plug directly into the uIDE board. Angled IDC connectors are recommended when building the board.
  • A DOM is recommended as it is the only device I have tested the uIDE prototype with. Unfortunately, I can't guarantee that specific Compact Flash cards will be compatible but if you let me know what works and what doesn't we can build a compatibility list on this page.

Testing the IDE device

In the driver distribution there is a program called XTEST.COM. XTEST is a program that tests and returns information about connected IDE devices.

To use, issue the command XTEST, followed by any combination of the following options:

-t[m|s] perform IDE diagnostic on m (master) or s (slave) -s[m|s] summary info on m (master) or s (slave) -i[m|s] interrogate m (master) or s (slave), full report -q quiet mode, only prints confirmation and error messages -h prints the help message and exits without formatting

If you do not enter any options, XTEST prints the help message and exits.

Interpreting results

The diagnostic result shows the values of the Status and Error registers in hexadecimal, following an IDE Diagnostic command (90h). The Error register is only valid if bit zero of the Status register is set. Refer to the IDE spec, Section 9.7 ("Execute drive diagnostic") for details.

The Summary information returns the text fields from the IDE Identify Drive command (ECh). They are the Model Number ("CtrlModl"), Serial Number ("CtrlSer") and Firmware Revision ("CtrlRev") fields from Table 10 in the IDE spec (Identify Drive, Section 9.9).

If XTEST reports the drive is not found or times out, or you do not get a sensible looking result in the text fields, it is likely that your uIDE is connected incorrectly, there was an error in assembly or configuration, or you are using an IDE device that is not compatible. The IDE device should return meaningful values. For example, the 128Mb PQi DOMs return "PQI IDE DiskOnModule" in the CtrlModel field (space paddded).

The full report contains all the fields returned by the IDE Identify Drive command (ECh). Refer to Table 10 in the IDE spec (Identify Drive, Section 9.9). The fields are identified by a word offset, but XTEST uses a specific label for each. To locate the correct description for the XTEST label, refer to this table:

 XTEST label	Word	Comment
 --------------- ------- -----------------------------------------------------
 Config		0	General configuration bit field
 NumCyls	1	Number of cylinders
 res0		2	Reserved
 NumHeads	3	Number of heads
 BytesPerTrk	4	Number of unformatted bytes per track
 BytesPerSec	5	Number of unformatted bytes per sector
 SecsPerTrack	6	Number of sectors per track
 d1		7	Vendor specific
 d2		8	Vendor specific
 d3		9	Vendor specific
 SerNo		10-19	IDE device serial number
 BuffType	20	Buffer type
 BuffSize	21	Buffer size in 512 bye increments (so, 1 = 512 bytes)
 ECCBytes	22	Number of ECC bytes available on r/w long commands
 CtrlRev	23-26	IDE device firmware revision
 CtrlModl	27-46	IDE device model designation string
 SecsPerInt	47	Bits 0-7 gives sector tx max for r/w multiple cmds
 DblWordFlag	48	0001h = can perform double word i/o, else cannot
 Capabilities	49	Bit 9: LBA Supported / Bit 8: DMA supported
 res1		50	Reserved
 PIOtiming	51	Bits 8-15: PIO data transfer cycle timing mode
 DMAtiming	52	Bits 8-15: DMA data transfer cycle timing mode
 res2		53	Reserved
 CurCyls	54	Number of current cylinders
 CurHeads	55	Number of current heads
 CurSPT		56	Number of current sectors (per track)
 SecCapLo	57	Device sector capacity low byte
 SecCapHi	58	Device sector capacity high byte
 SecParams	59	Refer to IDE Spec
 LBASecCapLo	60	Total number of sectors in LBA mode (low byte)
 LBASecCapHi	61	Total number of sectors in LBA mode (high byte)
 swDMATxModes	62	Refer to IDE spec table 10
 mwDMATxModes	63	Refer to IDE spec table 10

SecCap and LBASecCap are 32 bit integers, and are printed in the correct order as hexadecimal in the report. To get the full value, concatenate them and feed the resulting value into a calculator with hex conversion. For example, a PQI 128Mb DOM has SecCapHi of 0003 and SecCapLo of E800h, which gives the value 0003E800. This is 256,000 sectors (in base 10), not quite 128MB.

Using the formatter XFORMAT.COM

XFORMAT is the program used to prepare a master or slave IDE device for use by formatting it.

To use, issue the command XFORMAT followed by any combination of the following options:

-m format the IDE Master device -s format the IDE Slave device -f force format (does not ask for confirmation) -q quiet mode, only prints confirmation and error messages -h prints the help message and exits without formatting

If you do not enter any options, XFORMAT prints the help message and exits.

XFORMAT does not assume a default for -m or -s, because formatting a drive removes all the drive's data, and we don't want this happening accidentally.

When you specify -m or -s, XFORMAT will format the specified devices and for each one, ask for confirmation (unless -f is specified). At this point you must enter y to proceeed (upper or lower case), or any other character to cancel. XFORMAT will then report on each partition (logical drive) as it is being formatted, by way of an ascending counter from 00 to 15.

When you specify -s, XFORMAT will print an error if no slave drive is attached to the LoTech interface.

Formatting assumes a minimum of 128MB available on the IDE device(s) being formatted. Since each partition has 8MB of space, a 128MB IDE device will yield 16 8MB partitions (but note that certain devices, such as the PQI DOM, have just short of 128MB because they round the number of 512 byte sectors down).

Using smaller IDE devices is possible though not recommended as no tests have been carried out.

You can use XFORMAT at any time. If the XDRIVER is loaded, XFORMAT issues a system disk reset (BDOS call 0Dh) to ensure that all disk allocation buffers are cleared down.

Drivers

At present there is a driver for the PCW which is a FID ("Field Installable Driver") file. To install it, simply copy it to your boot disk (USER 0). Not all CP/M Plus versions support FIDs though (notably the earlier ones - see below). I will be porting this driver to the 6128 in due course, but AMSDOS is not supported. I may need assistance with this!

The driver's capabilities are:

  • Detection of the uIDE card, unloads if not found.
  • Provides 6 CP/M drives C: D: E: F: G: H:. This is a limitation of the Amstrad CP/M Plus memory map and there may be a workaround (no promises though).
  • Is compatible with the CP/M Plus M: drive.
  • Provides additional drives under Locoscript - I: J: K: L:.
  • Each drive is 8MB in size, and supports 512 directory entries shared between the 16 user areas.
  • A formatter and some IDE test utilities are provided as part of the driver suite (see above). Use the formatter to prepare a CF card or DOM prior to use. Use the test utility to verify that your uIDE is connected properly and the DOM or CFD card is compatible.

The provisional PCW driver suite can be downloaded here: File:Xdriver PCW suite 0.1.zip.

CP/M Plus version requirements

To use the PCW uIDE xdriver, you must have a version of CP/M Plus that supports FID ("field installable driver") files.

  • On the PCW8256 and 8512 the lowest FID supporting version is 1.14. That's "one dot fourteen" so if (like me) you have v1.4, yours is too old.
  • On the PCW9512 you should be OK. I have v2.15.

Refer to http://www.seasip.info/cpm/amsfid.html for more details.

If you find your CP/M Plus version is too old, it should be sufficient to replace the EMS file on your boot disk with a later one. The file containing CP/M is named like "JnnCPM3.EMS" or "JnnCPM3.EMT". The nn indicates the version number so for example "J14CPM3.EMS" is version 1.4. If your boot disk's CPM file has a ".EMS" extension and you want to use a file with ".EMT", just rename it (and visa-versa).

Connecting a CF card to uIDE instead of a DOM

Cf adapter power mod.jpg

Not recommended due to compatibility problems with some types of CF card, but if you really must, you need a cheapo IDE to CF card adapter and you should either connect its 5v input to the uIDE CF_PWR header (being VERY careful about the polarity) or modify the adapter so that IDE Pin 20 is connected to the 5v power socket, as shown on the left. The thin copper wire that goes from the IDE plug to the small component next to the power socket is the mod. You should check with a meter that these are correct for your adapter. Some adapters already have this connection, so try yours before modding it. You should see its power light come on if it is properly connected.




CF Card compatibility list

My intention is to maintain a list here of which CF cards work with uIDE, and which do not. So:

Card make / type Comments
Verbatim 64MB CF card works
Dane-Elec 512MB CF card (C1 512 D-SA) works (this card identifies as a Samsung)
Kingston CF 16GB 266X not compatible, will not identify
STEC 128MB CF SLCF128MM1U not compatible, will not identify

About CP/M USER areas.

This section was written for xdriver v1.9 under CP/M 2.2 and may or may not apply to CP/M Plus.

A CP/M "user area" is a bit like a directory under MS-dos, except it is named by a number and there are only 16 of them on each drive.

To use the different user areas, use the command USER n where n is the user area you want to switch to (0 to 15). It is tricky copying files between user areas. First you need to get PIP.COM to the user area you want to copy to.

The DRI PIP manual says:

[QUOTE]

To copy files into another user area, PIP.COM must be located in that user area. Use the following procedure to make a copy of PIP.COM in another user area (in this example, USER 3).

USER 0 Log in user 0. DDT PIP.COM (note PIP size s) Load PIP to memory. G0 Return to CCP. USER 3 Log in user 3. SAVE s PIP.COM

In this procedure, s is the integral number of memory pages, 256- byte segments, occupied by PIP. The number s can be determined when PIP.COM is loaded under DDT, by referring to the value under the NEXT display. If, for example, the next available address is 1D00, then PIP.COM requires 1C hexadecimal pages, or 1 times 16 + 12 = 28 pages, and the value of s is 28 in the subsequent save. Once PIP is copied in this manner, it can be copied to another disk belonging to the same user number through normal PIP transfers.

[END QUOTE]

You can now change user or drive as many times as you like, and drop a copy of PIP.COM using the same save command, as long as you do not run any transient commands in the meanwhile (this means, "execute a .COM file").

Copying files between user areas.

To copy files to a particular user area, first switch to it with 'USER n' command. Then, use the PIP you SAVEd to the user area to copy files in:

 PIP dr:<filespec>[Gn]

where

  • dr: is the source drive ID (A: - P: ), and
  • n is the source USER area.

Example: To copy KERMIT.COM from Drive A USER 5 to Drive N User 15 (assumes PIP.COM is already present in the target drive / user area):

 A:>N:
 N:>user 15
 N:>pip n:=a:kermit.com[g5]

More fun with CP/M Plus

One of the first things you should do after setting your uIDE up is to copy all the CP/M program files to one of the IDE drives so that they load quicker.

To do this (and assuming you want to put these all on the C: drive):-

  • Insert CP/M boot disk into the floppy drive A:
  • Issue the command PIP C:=A:*.*[v]
  • The [v] option will verify each file after it is copied. Since this is likely to be the first thing you do with the uIDE, it's a good idea to use [v] just to double check it's working OK.
  • Now create a file called PROFILE.SUB on the boot disk in A:
  • Add the line C:SETDEF M:,C:,* [ORDER = (SUB,COM)] and save the file
  • What this does is make the CCP (command line processor) look for SUB and COM files on the IDE drive C: before the currently logged disk. So if you are on A: and you issue the command BASIC (to load BASIC), it will be loaded from the IDE drive rapidly, even if there is a copy on A:. In fact, it looks on M: first, and a submit file like BASIC.SUB takes precedence over the real executable BASIC.COM.

Prices

This is a summary of the prices I have posted to the forum so far. I am sorry that the assembled prices are what they are, but it is a time consuming and dreary job, not to mention the effort and cost to acquire the parts. I encourage self build!

Item Price
uIDE-8 bare board £7.50
uIDE-8 assembled £42.50
uIDE-16 bare board £9.00
uIDE-16 assembled £47
Z80 Shim bare board (LHS or RHS) £2.50
Z80 Shim assembled (LHS or RHS) £17.50
PCW expansion port adapter with composite video output £4.00
PCW expansion port adapter with composite video output (assembled) £29.00
PCW expansion port adapter "lite" (without composite video output) £3.00
PCW expansion port adapter "lite" (without composite video output, assembled) £18.00
CPC 6128 expansion port adapter £3.00
CPC 6128 expansion port adapter (assembled) £18.00
128MB DOM suitable for use with uIDE-8 and uIDE-16 £4.00
Z80 bus cable (40 way IDC-IDC ribbon) £5

Payment via PayPal, please, in Sterling (GBP). All prices are plus shipping and PayPal fees (3.5%).

Please note, if you do not have space to connect the adapter board directly to the uIDE device, you will also need a Z80 bus cable. This is a standard 40 way IDC female to female ribbon commonly found in PCs to connect the motherboard to an IDE HDD, so if you have one lying around you don't need my offering. But if you decide to order one, please contact me to discuss the length of the cable. I guess it depends on the machine and where you want to position the uIDE card.

More information

uIDE 16 discussion thread

PCW uIDE discussion thread

PCW uIDE prototype demonstration videos

File:IDE SPEC.PDF - IDE Specification document


Copyright

All designs presented here are copyrighted works.

Copyright (C) Jon Bradbury 2017.

Disclaimer

As I am a hobbyist, not a big business, I need to make a few things clear.

You are free use these designs for personal or commercial purposes, on the following conditions:

  • You do not attempt to take credit for the work I have put into designing and / or building any device offered here.
  • You acknowledge my right to assert copyright and ownership of these designs.
  • You agree to indemnify me and the CPCWiki web site against damage to your computer or other connected hardware or data contained on any attached media.
  • All work is undertaken at your own risk. I am not liable for any hardware damage or data loss, loss of your homework, your dog getting sick, etc.
  • All devices and/or PCBs I offer are supplied as-is and there is no warranty that they are fit for any particular purpose.
  • Your agreement to these conditions is implicit on ordering any of these devices or PCBs from me.

Support

I will support your use of these designs via the appropriate forum by offering help and advice as necessary. Please review the content of this Wiki page before asking for help, though, and contact me via the channels described below.

How to contact me.

I am member "JonB" of the VCF and CPC Wiki Forums. If you need support or have any comments, please start a new thread on the uIDE thread in the VCF CP/M forum here:

http://www.vcfed.org/forum/showthread.php?56162

Or on the relevant CPCWiki forum liked to above. You could also PM me.. :)

Note: Forum registration is required.

Acknowledgements

I would like to thank some collaborators for their work and kind assistance.

  • Grant Searle, who wrote the original formatting program and read / write driver code as well as the DPB for his 9 chip CP/M computer. XDRIVER is a derivative of this work. http://searle.hostei.com/grant/index.html
  • John Elliot, who helped me to understand how the FID file format works, and provided his FID CHECKSUM program which is a required part of the FID development toolchain. http://www.seasip.info
  • CPCWiki member Bryce, who provided a good deal of advice and encouragement.
  • The open source community team responsible for KiCad, which, in its later incarnations, is worth every penny you do not have to spend on it. http://kicad-pcb.org/

Salutation

Cheers!

CPCWiki Forum Member "JonB" (Jon Bradbury) 19/02/2017