Compact IDE Controller PCB

A compact IDE controller PCB for coco's.


Update:
12/11/2018: PCB is here!
Dec/20/2018: Identifying a NitrOS-9 device descriptor.
Jan/25/2019: TQFP and case
Feb/2/2019: More Info
Feb/14/2019: Bad news and Good news.
Feb/25/2019: Driver Update.


A preliminary PCB layout, not in fiberglass yet.
Measurements in mm.

This PCB could does support the NitrOS-9 EOU alpha-3 drivers.

Items:
GCC jumper selects Glenside addressing or inverted addressing.
A4, A5, A6 jumpers re-address this PCB into most usable I/O spaces.
CS1 jumper for those who want it. (removed)
Drive activity LED header..
Power LED.
Lattice JTAG-8 header.
Yes, it's an "OLD-SCHOOL" CPLD.

























Showing the ground plane.

Actually the labels A0, A1, A2 should be A4, A5, A6.
No jumpers needed to match a GCC PCB, for $FF70.

























Here was the original, now MIA. Sitting on top of a CoCo-3 keyboard.
It did control two hard drives. Green activity LED on a cable. Same jumpers.
A coco3 could support at least four of these, giving 8 hard-drives.
One at $FF10, $FF30, $FF60, $FF70, and maybe one at $FF50. <David Ladd>






















Just to make sure that the CPLD code works, this prototype was wired up.

The green PCB is just to hold the CPLD socket.
A slice of old IBM junk card for the gold fingers.
An IDE header for the IDE cabling.

Bottom View.



























And happily all works as designed, first time out.
Now to make the JLC-PCB's, above.

Top View.
























Address Jumpers:
Jumper on the;
top 2 pins for a 1
bottom 2 pins for a 0.

A6 A5 A4 coco3-$address
0 0 0 FF0X     not useable
0 0 1 FF1X
0 1 0 FF2X     not useable
0 1 1 FF3X
1 0 0 FF4X     not useable
1 0 1 FF5X <-- matches GCC
1 1 0 FF6X
1 1 1 FF7X <-- matches GCC

GCC Jumper:
1 = GCC addressing, top pins, normal.
0 = Inverted, bottom pins.

Activity LED:
Installed on this PCB or on a PC-type cable.
Shows activity for either hard-drive, 0/1.


New PCB:
2-wire cable has the disk activity LED.

So far it works on these addresses:
$FF1X
$FF3X
$FF5X
$FF6X
$FF7X























Dec/20/2018

After many attempts to use RBSuper.dr with llide.dr to use two IDE drives on a single controller, things changed. I even tried partitioning a single drive with similar results, no go.

---

I resurrected an IDE driver that I wrote back in 1999, 20 years old by now. This was used to talk to that 20GB IDE drive. Unfortunately it uses only 24bits for LBA addressing.

dmode /I0
 nam=I0 mgr=RBF ddr=IDE
 hpn=07 hpa=FF70 drv=00 stp=00 typ=80 dns=00 cyl=1FFF sid=40
 vfy=01 sct=0020 t0s=0020 ilv=01 sas=20 wpc=00 ofs=0000 rwc=0000

I found out with this set of parameters for a single drive (20GB for instance) the largest "cyl=" that could be used is currently $1FFF for FORMAT'ing. When $2000 was used, FORMAT gave $0 sectors.

If someone wants to update this information, holler back!



The driver uses 24 bits for LBA but actually the lsb(0) is used to determine which half of the 512 byte sector is being used. So therefore it's really only 23 bits for sector counting. In NitrOS-9 the LSN ( the LBA or C/H/S ) comes to this driver in registers B and X.  It would be nice to be able to use 8 more bits but I'm not sure how NitrOS-9 would pass that to this driver.


This is the results of the FORMAT command:

FORMAT /I0

      NitrOS-9 RBF Disk Formatter
------------  Format Data  ------------

Disk capacity: 16,775,168 sectors
(4,294,443,008 bytes)
Sectors/track: 32
Track zero sect/trk: 32
Number of surfaces: 64
Total physical cylinders: 8,191
Cluster size: 32
Minimum sect allocation: 32

Formatting device: /i0
This is a HARD disk - are you sure? y
Physical Verify desired? n

Number of good sectors: $FFF800


At least the IDE controller does access both drives /I0 and /I1.

DMODE /I1

 nam=I1 mgr=RBF ddr=IDE
 hpn=07 hpa=FF70 drv=01 stp=00 typ=80 dns=00 cyl=0EE6 sid=40
 vfy=01 sct=0020 t0s=0020 ilv=01 sas=10 wpc=00 ofs=0000 rwc=0000

After FORMAT'ing this gives 7,811,092 sectors, plenty I think.


Jan/25/2019:

The new TQFP PCB fits into a game case.

The only bad news is that the CPLD's that I purchased, don't seem to work. See Feb/2/2019, below.
They program OK but don't function and lock up the CoCo3.
The center PCB hole was enlarged a bit more to clear that center case stud.














































































Feb/2/3019:
OK, so far the tqfp-CPLD does not want to drive two IDE drives, but works OK on one IDE drive.
Another PCB turn could look like this with two 74AC245 bi-directional drivers.
I usually choose 'AC' parts on account of the matching high-drive capabilities of that family.























Feb/14/2019:

Not so good news.

When there are two of these TQFP IDE controllers are installed into a buffered y-cable setup, one of them will not work correctly.  It seems that the TQFP CPLD's cannot drive the coco bus properly.

If buffers were to be installed they would have to be on both sides of the CPLD, IDE and CoCo sides.
Crap :-(

Well, at lease this version does fit into a game case. :-)


Feb/14/2019:

Good News

A partitioning driver for a single IDE drive is being tried.

For now the drive in use was partitioned into 4 partitions each having about 2GB space.
The driver takes the drive# (drv=xx) and uses it to step into the LBA that is appropriate for that descriptor.  It is just manipulating the LBA to find the correct partition.
So far it seems to work and keep the partitions separate.

Descriptors in use are as follows: /H0 /H1 /H2 /H3.
All are the same except for the drv=xx and the descriptor name /Hx which match.

 DMODE /H0
  nam=H0 mgr=RBF ddr=PARTS
  hpn=07 hpa=FF70 drv=00 stp=00 typ=80 cyl=0666 sid=10
  vfy=01 sct=0050 t0s=0050 ilv=01 sas=08 wpc=00 ofs=0000 rwc=0000

 DMODE /H1
  nam=H1 mgr=RBF ddr=PARTS
  hpn=07 hpa=FF70 drv=01 stp=00 typ=80 cyl=0666 sid=10
  vfy=01 sct=0050 t0s=0050 ilv=01 sas=08 wpc=00 ofs=0000 rwc=0000

FREE /H0; gives 2,096,640 sectors (times 512 bytes in each sector).
Seems to be 1,073,479,680 bytes, or thereabouts. Not quite 2GB but it surely is way more than is needed.

 etc. ....

Feb/25/2019:

There is now success in creating a driver that allows partitioning on a single drive.
For instance, a driver was created that allows 24bits of the LBA per partition.
The "stp" argument is merged as the "heads" portion of the LBA2427 register, allowing those 4 lsb's.
This gives the effect of 28bits depending on the size of each drive.

For a drive with 8 partitions, each "stp" would match the "drv" numbers
and would include 8 descriptors, /H0 to /H7, per drive.

DMODE /H0
  nam=H0 mgr=RBF ddr=IDE
  hpn=07 hpa=FF70 drv=00 stp=00 typ=80 cyl=3FFF sid=20
  vfy=01 sct=0020 t0s=0020 ilv=01 sas=04 wpc= ofs= rwc=

DMODE /H1
  nam=H1 mgr=RBF ddr=IDE
  hpn=07 hpa=FF70 drv=01 stp=01 typ=80 cyl=3FFF sid=20
  vfy=01 sct=0020 t0s=0020 ilv=01 sas=04 wpc= ofs= rwc=

etc.


This was done with a 120GB "SATA" drive with an IDE to SATA adapter.




Proposed quad buffed CPLD:
Three 74LS245's and one 74LS541.
This should cure the "one drive" challenge with this CPLD.





























IdeZilla

Comments Welcomed




Comments

Popular posts from this blog

DriveWire4_HD6309E

8MB setup for a Tandy CoCo3

Posting Feb 22 2018