VOGONS


First post, by Socket3

User metadata
Rank Oldbie
Rank
Oldbie

Good evening my friends. I'm having some difficulty with a 286 build and I'm hoping to bounce ideas off you.

The problem is my 286 is having trouble reading the end of hard disk drives. The symptom presents as bad blocks when scanning with dos 6.2 scandisk or formatting the HDD with Format.com. At first, I thought it was a failing HDD issue - so I replaced the 620MB Western Digital IDE drive with a 520MB Seagate. The issue persisted. I then tried an 860MB Western - again, bad blocks - but this time they were showing up from the drive's half way mark. If I ran SCANDISK /AUTOFIX /SURFACE and let it run, at one point scandisk would crash with a runtime error (cant remember the code, but it was memory related) and would partially hang the machine. Thinking it was some sort of software limitation, I tried a 400MB Quantum Trailblazer witch I KNOW has NO BAD BLOCKS whatsoever. Just to make sure I tested it on another machine - it tested perfectly clean... but in my 286.... again, bad blocks at the end of the drive.

The attachment test.jpg is no longer available

The configuration is the following:

- Unknown baby AT motherboard with 16MHz headland 286 CPU and 4 30pin simm slots.
- CA93421 ISA multi I/O controller, UMC chipset
- TSENG ET3000 ISA video card
- Sound Blaster 2.0
- Various IDE drives - all scan bad after a certain sector
- 4MB of ram, 4x1MB

The attachment mb.jpg is no longer available
The attachment hdd.jpg is no longer available
The attachment ctrl.jpg is no longer available

Any ideas? So far I've tried 5 different disk drives, they all test OK in other machines but come up with bad blocks on my 286. I've also replaced the I/O card with another, this time using a Winbond chipset... no dice. Next up I'll try removing some of the ram...

Reply 1 of 16, by Grzyb

User metadata
Rank l33t
Rank
l33t

BIOS limitation?
Are you using one of the predefined types, or custom settings?

Kiełbasa smakuje najlepiej, gdy przysmażysz ją laserem!

Reply 2 of 16, by zami555

User metadata
Rank Newbie
Rank
Newbie

Which version of DOS are you using? Please try to switch off all EMM or XMS memory. Try no high memory at all.

Reply 3 of 16, by Socket3

User metadata
Rank Oldbie
Rank
Oldbie
Grzyb wrote on 2025-01-31, 18:41:

BIOS limitation?
Are you using one of the predefined types, or custom settings?

Custom settings according to the drive's label. The BIOS is by AMI and it's dated 30.09.1990. It lets me setup drives up to 1.2GB.

zami555 wrote on 2025-01-31, 19:01:

Which version of DOS are you using? Please try to switch off all EMM or XMS memory. Try no high memory at all.

I'm using 6.22. I don't have any extended / expanded memory enabled, either in BIOS or with memory managers.

I pulled half the ram out, leaving 2MB. No improvement. I then disabled 0 WS from bios - same exact problem.

It seems the machine is having trouble reading past cluster 37,786. In scandisk, everything over cluster 37786 is unreadable.

Reply 5 of 16, by Jo22

User metadata
Rank l33t++
Rank
l33t++
BIOS Int 13 - the 8.5 GB limit At most 1024 cylinders (numbered 0-1023), 256 heads (numbered 0-255), 63 sectors/ […]
Show full quote

BIOS Int 13 - the 8.5 GB limit
At most 1024 cylinders (numbered 0-1023), 256 heads (numbered
0-255), 63 sectors/track (numbered 1-63) for a maximum total
capacity of 8455716864 bytes (8.5 GB). This is a serious
limitation today. It means that DOS cannot use present day
large disks.

Source: https://tldp.org/HOWTO/text/Large-Disk-HOWTO

https://en.wikipedia.org/wiki/Cylinder_1024

MS-DOS 5/6 has a 1024 cylinder limit. In the sense of CHS addressing format.
If translation schemes are used, the actual number of cylinders on use can be higher.

There are older BIOSes, however, who are not limiting large values in the original int13h registers.
They accept entering large values, but MS-DOS without patching isn't prepared for using them (patch for DOS 5).

After all, there's extended int13h for that.
Later DOSes, such as MS-DOS 7.1 can use extended int13h.

Edit: A workaround would be to use XT-IDE Universal BIOS in a ROM socket on a network card.
For a period-correct take on the issue, one of those "E-IDE Enhancer Cards" could be used.
They're from the 90s and meant to upgrade old 286/386/486 PCs for use in the year 2000.
They're 8-Bit cards with an EPROM and some other stuff (a clock chip?).
Using an SCSI controller is also a possibility, maybe.

Last edited by Jo22 on 2025-01-31, 19:54. Edited 1 time in total.

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 6 of 16, by Grzyb

User metadata
Rank l33t
Rank
l33t
Socket3 wrote on 2025-01-31, 19:10:

Custom settings according to the drive's label. The BIOS is by AMI and it's dated 30.09.1990. It lets me setup drives up to 1.2GB.

The fact you can enter the 1.2 GB parameters doesn't mean it will actually work.
The most you can expect from a 1990 BIOS is 528 MB - 1024 cylinders, 16 heads, 63 sectors.

Try to enter parameters that don't exceed the above.
Eg. if the drive is 1656 cyl, 16 heads, 63 sectors - enter 1024 cyl, 16 heads, 63 sectors.

Test the disk with Checkit 3.0 - it displays CHS locations of defects.

Kiełbasa smakuje najlepiej, gdy przysmażysz ją laserem!

Reply 7 of 16, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Indeed. The Setup Utility and the BIOS were two things, actually.
One is the front-end, the other one the actual BIOS.

Numbering can also be 0-1023 cylinders, 0-15 heads and 1-63 sectors though.
It depends on how the setup utility interprets user data and then stores it into CMOS RAM.
It's safer to use 1023 cylinders, maybe. I often use 1020 (ten-twenty) for simplicity..

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 8 of 16, by Grzyb

User metadata
Rank l33t
Rank
l33t

Also, if you've partitioned and formatted the drive under a newer BIOS, with other CHS translation - you need to partition and format it again.

My preferred procedure is:
- first, zero the entire drive - using the BIOS LLF utility, or any other LLF utility, or Linux "cat /dev/zero > /dev/hda"
- FDISK
- FORMAT
- SYS

Kiełbasa smakuje najlepiej, gdy przysmażysz ją laserem!

Reply 9 of 16, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Zeroing also works directly on DOS with Spur 0 Kill (S0Kill).
It's attached here: Re: IDE to Compact Flash as MS-DOS boot drive.

"Spur Null" means Track Zero, by the way.
https://en.wikipedia.org/wiki/Track0

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 10 of 16, by Grzyb

User metadata
Rank l33t
Rank
l33t

I prefer to zero the entire drive, rather than just the track 0.

Kiełbasa smakuje najlepiej, gdy przysmażysz ją laserem!

Reply 11 of 16, by Jo22

User metadata
Rank l33t++
Rank
l33t++
Grzyb wrote on 2025-01-31, 20:12:

I prefer to zero the entire drive, rather than just the track 0.

I see. S0Kill can do both, it offers to change range (custom setting).
But it's in German text, so it's not obvious I suppose. 🙁

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 12 of 16, by Socket3

User metadata
Rank Oldbie
Rank
Oldbie
Jo22 wrote on 2025-01-31, 19:46:
Source: https://tldp.org/HOWTO/text/Large-Disk-HOWTO […]
Show full quote
BIOS Int 13 - the 8.5 GB limit At most 1024 cylinders (numbered 0-1023), 256 heads (numbered 0-255), 63 sectors/ […]
Show full quote

BIOS Int 13 - the 8.5 GB limit
At most 1024 cylinders (numbered 0-1023), 256 heads (numbered
0-255), 63 sectors/track (numbered 1-63) for a maximum total
capacity of 8455716864 bytes (8.5 GB). This is a serious
limitation today. It means that DOS cannot use present day
large disks.

Source: https://tldp.org/HOWTO/text/Large-Disk-HOWTO

https://en.wikipedia.org/wiki/Cylinder_1024

MS-DOS 5/6 has a 1024 cylinder limit. In the sense of CHS addressing format.
If translation schemes are used, the actual number of cylinders on use can be higher.

There are older BIOSes, however, who are not limiting large values in the original int13h registers.
They accept entering large values, but MS-DOS without patching isn't prepared for using them (patch for DOS 5).

After all, there's extended int13h for that.
Later DOSes, such as MS-DOS 7.1 can use extended int13h.

Edit: A workaround would be to use XT-IDE Universal BIOS in a ROM socket on a network card.
For a period-correct take on the issue, one of those "E-IDE Enhancer Cards" could be used.
They're from the 90s and meant to upgrade old 286/386/486 PCs for use in the year 2000.
They're 8-Bit cards with an EPROM and some other stuff (a clock chip?).
Using an SCSI controller is also a possibility, maybe.

I'm using dos 6.22 witch works perfectly fine with larger drives as long as you limit any partition to 2GB. In fact I think it can't create partitions larger then 2GB - or 2.1. The largest drive I have dos 6.22 installed one is a 4.3GB seagate running in a socket 5 pentium 133. No issues whatsoever, so DOS isn't a limiting factor - but I believe BIOS might somehow be. Despite letting me input larger drive geometry, it's possible it cannot read my drives properly.

Regarding the link - unfortunatly it doesn't help. It's not a CHS limit issue, since I'm having trouble with a 420MB HDD witch is well within this limit.

I'll give XTIDE a go.

Grzyb wrote on 2025-01-31, 19:50:
The fact you can enter the 1.2 GB parameters doesn't mean it will actually work. The most you can expect from a 1990 BIOS is 528 […]
Show full quote
Socket3 wrote on 2025-01-31, 19:10:

Custom settings according to the drive's label. The BIOS is by AMI and it's dated 30.09.1990. It lets me setup drives up to 1.2GB.

The fact you can enter the 1.2 GB parameters doesn't mean it will actually work.
The most you can expect from a 1990 BIOS is 528 MB - 1024 cylinders, 16 heads, 63 sectors.

Try to enter parameters that don't exceed the above.
Eg. if the drive is 1656 cyl, 16 heads, 63 sectors - enter 1024 cyl, 16 heads, 63 sectors.

Test the disk with Checkit 3.0 - it displays CHS locations of defects.

The 420MB Quantum in the pictures above is well within that limit - it's geometry is 1010 cylinders, 16 heads, 51 sectors.

Reply 13 of 16, by maxtherabbit

User metadata
Rank l33t
Rank
l33t

Try a different IDE card? Maybe it's heating up over time?

Reply 14 of 16, by Jo22

User metadata
Rank l33t++
Rank
l33t++
Socket3 wrote on 2025-01-31, 23:29:

I'm using dos 6.22 witch works perfectly fine with larger drives as long as you limit any partition to 2GB [..]

Me, too. 😀 But that's not the problem I'm talking about. It's more about the int13h registers..
And they have certain maximum values they can hold - depending on the BIOS.

"The LBA is a four byte value, and a linear address. The CHS is a 3 byte value comprising:
10 bit cylinder number
8 bit head number
and 6 bit sector number"

Source: https://www.cs.miami.edu/home/burt/learning/C … partitions.html

Some of the BIOSes do allow for a 12-bit cylinder number and a 6-bit (?) head number, for example. Like that of VPC 2007.
So they can hold up to 4095 cylinders. However, that's non-standard and somewhat 1991!
For this to work, MS-DOS files must be patched (FDISK etc). By default, cylinder 1023 is the "diagnostic" cylinder.
It's been described in the gt1024.zip archive.

By contrast, if you use something like XT-IDE Universal BIOS, then to DOS the numbers of cylinders go down and the numbers of heads go up instead - but never exceed CHS format.
XUB uses an translation scheme, in short. Besides CHS, there are E-CHS/Large and various LBA variants.
This is preferred with modern hard disks who can accept such logical values externally (in 1991, not all HDDs were that smart yet).

However, if your BIOS is very old or just dumb then it will allow the normal int13h registers to hold more than 1024 sectors, 16 heads and 63 sectors. As mentioned before.
- Though the heads aren't that critical, actually. Up to ca. 255 heads are fine. That's what E-CHS/Large uses (~8GB) AFAIK.
8 GB is also the maximum HDD limit of DOS 5/6 - after that strange things can happen.

https://en.wikipedia.org/wiki/Cylinder-head-sector#Heads

Internally, IDE HDDs do translate these schemes into their own format.
And they do so since early 1990 or so, if I'm not mistaken.

Edit:
"The solution was sector translation: the drive "lies" to the controller,
acting as if it has, say, 10 heads and 1024 cylinders when it actually has 5 heads and 2048 cylinders.
As long as the total space is correct, the BIOS can't tell the difference and there is no need for driver software.
A more advanced form of sector translation allows drive manufacturers to put extra sectors on the outer tracks
(which have more room) but still juggles the extra space back into simple terms that the BIOS can understand.

Nearly all drives over about 60Mb use sector translation."

Source: http://redhill.net.au/o/glos2.html#sectrans

Edit: Drawing attached. MS-DOS 5/6 depends on BIOS foremost, the IDE limits are secondary (mostly affect old IDE HDDs/old firmware).
Please note that there's the 256 cylinder bug that's not in the drawing (remember, for cylinder 256 it counts from 0 to 255. So cylinder 255 might have value 254.).

Edited: Sorry for the bad wording. I'm unable to do it any better right now. 🙁

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 15 of 16, by Socket3

User metadata
Rank Oldbie
Rank
Oldbie
Jo22 wrote on 2025-02-01, 04:40:
Me, too. :) But that's not the problem I'm talking about. It's more about the int13h registers.. And they have certain maximum v […]
Show full quote
Socket3 wrote on 2025-01-31, 23:29:

I'm using dos 6.22 witch works perfectly fine with larger drives as long as you limit any partition to 2GB [..]

Me, too. 😀 But that's not the problem I'm talking about. It's more about the int13h registers..
And they have certain maximum values they can hold - depending on the BIOS.

"The LBA is a four byte value, and a linear address. The CHS is a 3 byte value comprising:
10 bit cylinder number
8 bit head number
and 6 bit sector number"

Source: https://www.cs.miami.edu/home/burt/learning/C … partitions.html

Some of the BIOSes do allow for a 12-bit cylinder number and a 6-bit (?) head number, for example. Like that of VPC 2007.
So they can hold up to 4095 cylinders. However, that's non-standard and somewhat 1991!
For this to work, MS-DOS files must be patched (FDISK etc). By default, cylinder 1023 is the "diagnostic" cylinder.
It's been described in the gt1024.zip archive.

By contrast, if you use something like XT-IDE Universal BIOS, then to DOS the numbers of cylinders go down and the numbers of heads go up instead - but never exceed CHS format.
XUB uses an translation scheme, in short. Besides CHS, there are E-CHS/Large and various LBA variants.
This is preferred with modern hard disks who can accept such logical values externally (in 1991, not all HDDs were that smart yet).

However, if your BIOS is very old or just dumb then it will allow the normal int13h registers to hold more than 1024 sectors, 16 heads and 63 sectors. As mentioned before.
- Though the heads aren't that critical, actually. Up to ca. 255 heads are fine. That's what E-CHS/Large uses (~8GB) AFAIK.
8 GB is also the maximum HDD limit of DOS 5/6 - after that strange things can happen.

https://en.wikipedia.org/wiki/Cylinder-head-sector#Heads

Internally, IDE HDDs do translate these schemes into their own format.
And they do so since early 1990 or so, if I'm not mistaken.

Edit:
"The solution was sector translation: the drive "lies" to the controller,
acting as if it has, say, 10 heads and 1024 cylinders when it actually has 5 heads and 2048 cylinders.
As long as the total space is correct, the BIOS can't tell the difference and there is no need for driver software.
A more advanced form of sector translation allows drive manufacturers to put extra sectors on the outer tracks
(which have more room) but still juggles the extra space back into simple terms that the BIOS can understand.

Nearly all drives over about 60Mb use sector translation."

Source: http://redhill.net.au/o/glos2.html#sectrans

Edit: Drawing attached. MS-DOS 5/6 depends on BIOS foremost, the IDE limits are secondary (mostly affect old IDE HDDs/old firmware).
Please note that there's the 256 cylinder bug that's not in the drawing (remember, for cylinder 256 it counts from 0 to 255. So cylinder 255 might have value 254.).

Edited: Sorry for the bad wording. I'm unable to do it any better right now. 🙁

That's quite clear actually, you did a great job explaining thank you.

Thing is, even using HDDs with geometry that fits into this limitation (1010 cylinders, 16 heads, 51 sectors, 420MB), the machine will still refuse to read over sector 37,750 or so....

maxtherabbit wrote on 2025-02-01, 03:31:

Try a different IDE card? Maybe it's heating up over time?

I tried several - UMC, Winbond, WD, SiS and even Goldstar controllers, they all behave the same.

Reply 16 of 16, by zami555

User metadata
Rank Newbie
Rank
Newbie
Socket3 wrote on 2025-01-31, 18:17:

The configuration is the following:
- Unknown baby AT motherboard with 16MHz headland 286 CPU and 4 30pin simm slots.

Please share the photo of yours board. Maybe we can identify it and with some luck there is available Mr. BIOS fo it, an alternative version of BIOS. This could help to solve the issue.