• Please review our updated Terms and Rules here

XT High Density floppy confusion

SpidersWeb

Veteran Member
Joined
Feb 16, 2012
Messages
2,701
Location
New Zealand
I'm doing an XT build with a 286 processor (kind of like a Tandy TL/2 setup).

It came with a HD FDC with a Boot ROM which is able to auto detect 80 or 40 track drives on startup. However it's acting completely bizarre.

MS DOS 3.3 knows Drive A is 80 track, on a few random occasions instead of Track 0 failure it's actually started formatting and made the drive a full 1.2MB. However after it finished, the disk was unusable, throwing sector not found errors.

MS DOS 5 sees it as a 360KB drive. Using DRIVER.SYS to create a 1.2MB logical drive allows MS DOS 5 to try, but it has the same results as MS DOS 3.3 did - either Track 0 bad, or formats and then gives sector not found issues at the end.

Using the same drive with a generic controller (capable of HD), the machine behaves the same way - and will not boot AT ALL from a HD floppy nor read it. But if I use ImgDisk to go straight to hardware - it can read and write the floppy no problemo!

(NB: having the FDC ROM loaded causes ImgDisk to lock the machine - hence the card swap).

It will also refuse to read/write 360KB disks in the 1.2 drive.
The second drive, 360KB, works 100% correctly.

Other random moments:
- with FDC ROM installed, system read and booted from a freshly written MS DOS 5.0 boot disk, ran programs, no problem - but you press CTRL+ALT+DEL and now suddenly the system can not work with the floppy whatsoever despite me not touching the computer at all. It wont boot it, it wont read it.
- on a few occasions I've been able to "DIR A:" with pre-created disks and see the file details, but trying to run a program would lead to errors

Stuff I've done:
- switching, cleaning, testing 1.2 floppy drives
- testing the card in a DTK XT - would not boot 1.2 floppy
- after failing to read disks, I'd take them to yet another system and read them perfectly (no bad sectors, these are new disks)
- reseated all chips on the FDC ROM
- switched A and B around
- tried one single drive or multiple
- used another (non-ROM) controller + ImgDisk to confirm the drive and disk are working correctly
- tried adjusting the switches on the card - but the 8 switches actually appear to just be Enable and the ROM address.
- switched cables
- changed power supply
- unplugged hard drive
- remove hard drive controller
- remove all other cards except graphics

So my questions are:
- what is required for a HD floppy to behave correctly on an XT?
- how can I test / see to know what DOS is being told? Maybe the controller thinks it's 720KB??
- any other tests or possible explanations?

Disk Drives being used are all Panasonic 1.2's - I can't remember what drive originally came in the machine, but someone has scratched "Drive A 1.2MB" in to the case - so it used to work once.

Hopefully there is an easy answer, because I was getting a little frustrated last night.
 
It sounds like the BIOS thinks it is a 720K or 1.44mb drive.

Tools like the Norton Utilities System Info, Checkit, or AMI Diagnostics might tell you what the BIOS/DOS thinks.

Normally these types of cards have four dip switches for selecting 360K/1.2MB/720K/1.44MB for A: and B:. They don't usually autodetect.

Is this a UM8398 based card? If so, you might try one of the other 8-bit FDC BIOSes on http://www.minuszerodegrees.net/rom/rom.htm

The better BIOSes actually display the drive type settings on the screen at boot up.

It also would not surprise me if the UM8398 has gone bad. Those go bad easily.

Could you post a picture of this particular 8-bit FDC card?
 
If the drives and cards work fine in other systems but not that one, I would suspect something is wrong with the XT with 286 design. Maybe the timing is off. Can you supply some more information about the motherboard being used?
 
Doesn't use a UM8398, just a Zilog chip, but I do have a spare I can try (I'll swap that in tomorrow). I get the feeling that for some reason, the controller isn't switching in to "high density" mode and just making a mess of things.
I'll post up results after the chip switch, and I'll try and do a ROM dump as well. Given the age of the card, I think it only supports 360 and 1.2 - 40 track vs 80 track.

A 720K configuration would make sense, but I've got no idea how to configure the card for that - moving the switches generally causes the ROM to not load - so I suspected they were for the ROM address.
Doing "FORMAT A:" in DOS 3.3 - when it works - does format 80 tracks, but in DOS 5 it just tries to do 360KB and fails (even with a perfect 360KB disk in it).

Checkit just shows "2 drives" - I think not having CMOS throws it off.

Pictures attached.

I also fixed my DRIVER.SYS entry, I was specifying the parameters directly rather than using /F:1 - and now it can format the disk showing no bad sectors - but the disk is unusable beyond the FAT / disk label.

IMG_0369.jpgIMG_0370.jpgIMG_0379.jpgIMG_0382.jpgIMG_0383.jpg

Twitter link to auto-detect sequence, this occurs when the ROM is initialised. It steps 40 tracks, then 5, then comes backwards - I guess the idea is if the track 0 sensor triggers too early - it must be a 40 track.
https://twitter.com/BaudBand/status/646254903048798208

If the drives and cards work fine in other systems but not that one, I would suspect something is wrong with the XT with 286 design. Maybe the timing is off. Can you supply some more information about the motherboard being used?

The same issue occurs when the controller is moved in to another machine - used a DTK 8088 clone as a tester. I might need to repeat this test as I can't be 100% certain the boot floppy hadn't had track 0 overwritten though.
The board is a Wavemate Bullet 286E - and the system is a Concord 286XT - it's an 8 bit XT but with a 286 CPU and 16 bit RAM. The BIOS is very minimal, and uses the standard 5160 style switches for configuration. From memory it's 8Mhz but I forgot to check when I was just out in the garage. The Concord 286XT came with HD FDC / RTC ISA boards installed when I received it.

On the brightside, RTC works fine and is Y2K compliant :)


Edit: my notes about it being autodetect is just speculation based on the fact I can swap drives, and suddenly A is a perfectly working 360KB drive with no issues, flick back, and it's a perfectly working 360KB B drive - but the 1.2 has the issues in either location. So far changing the switches has either made no change or stopped the card from starting - where would the traces lead if a couple were used for drive types rather than ROM address?

Edit2: oh and in a couple of occasions, the drive has worked correctly for a single boot - only failing after the system was restarted.
 
Last edited:
I have had weird troubles with these FDC with BIOS. For example if a high density disk is inserted when the bios does the seek test right before booting DOS, then it reads high density disks correctly. But if the drive has no disk while booting, then DOS can't read the same disk.
 
I ran out of time to do the ROM dump, but did eliminate a few things and find a new issue.

Following traces on those switches I found:

- inputs are all shared
- output of 1 & 2 are linked (and the card will not operate if these are both off)
- switches 3 and 4 go off to random locations
- switches 5,6,7,8 seem to go off together up the board

Using checkit to verify, the ROM address never changes when adjusting the switches - it's either there or it's not. It sits 8KB below F0000 where the main BIOS is and isn't interested in moving.

So anyway, long story short, using ON ON OFF OFF for 5,6,7,8 resulted in a 1.2MB A Drive (no driver.sys needed) and a 360KB B drive - I can format, read, write, run programs no worries.
But try and boot from the 1.2 - and it's not happening - 360KB disk no, 1.2MB disk no, after failing it then boots from the hard drive instead and suddenly A drive is a broken fake-360KB mess again.
Boot the system without a floppy disk in A drive, and it's working perfectly again.

Boot the system with a 1.2MB disk and that pesky WD hard drive controller - and it boots perfectly off a 1.2.
Put the HDC back in, and it fails.
Pull it out, and it boots.

So that negated the need for my FDC chip swap, and ran me out of time to do a ROM dump.
I'm figuring when the WD ROM takes over floppy boot, it's screwing something up. Bit of a pain because my only other 8 bit MFM cards are either the same card or only support 20MB drives (and I'm using a 71MB Maxtor which I just loaded a bunch of software on).
 
I've had similar problems on an IBM XT with a third-party HD floppy controller.
I found that the floppy POST was screwing up the controller settings, and skipping the POST made things work.
Will make another post with more details. It does require the ability to modify the floppy or PC BIOS though.
 
Blah, this thing drives me nuts.

Tried it with another brand of MFM controller and got the same results. Anyway to save stuffing around, I decided to just make A drive the 360KB and B drive the 1.2MB.

With no switch changes, but the drives switched around, both drives reported as 360KB.
Reversing the switch options for 5,6,7,8 resulted in no card start, so I returned them to the original setting
Tried (at random) flicking SW3 - and suddenly B drive is now 1.2MB according to DOS. Yey!

But there is some limitations:

If thou shall boot from floppy, thou may not access 1.2MB disk.
If thou shall accidentally leave floppy disk in Drive B on boot up, thou may not access 1.2MB disk
If thou shall do a warm reboot like a crazy man, thou may not access 1.2MB disk.

But if you stay inline, you can read, write, and run programs from your fancy high density diskettes. It's rather sensitive.

Anyway someone earlier mentioned a potential timing issue - turns out it is a timing issue, the BIOS code was written by "TIMING SYSTEMS CO"
For anyone who is curious, or bored and knows how to read assembly/hex - you can download the code here. I'm curious to know if it's my card settings, card design, or if this BIOS is just the cheapest thing they could possibly license at the time.
 
Anyway someone earlier mentioned a potential timing issue - turns out it is a timing issue, the BIOS code was written by "TIMING SYSTEMS CO"

Yeah, there's a lot of processor-speed dependent code which I could understand if the BIOS was written specifically for an 8088 machine at 4.77 MHz but there is also code that reads the CMOS which is only available on AT machines. Other odd things are huge blocks of unused code and the above string repeated in several places for no apparent reason. And a few bugs similar to this;
Code:
seg000:07B1 Int0EhHandler:                          ; DATA XREF: seg000:011Ao
seg000:07B1                 sti
seg000:07B2                 push    ds
seg000:07B3                 push    ax
seg000:07B4                 mov     ax, 40h ; '@'
seg000:07B7                 mov     ds, ax
seg000:07B9                 assume ds:nothing
seg000:07B9                 or      byte ptr ds:3Eh, 80h
seg000:07BE                 mov     al, 20h
seg000:07C0                 out     20h, al         ; Interrupt controller, 8259A.
seg000:07C2                 mov     ax, 9101h       ; *BUG*
seg000:07C5                 pop     ax
seg000:07C6                 pop     ds
seg000:07C7                 assume ds:nothing
seg000:07C7                 iret

It's not very efficiently coded either but that can be said about every single option ROM BIOS I've seen from the 80's.
 
Back
Top