• Please review our updated Terms and Rules here

Harddisc crash in very old 486er PC . Replacement / Bios does not automatically set the new HD-Parameter

ttepping

New Member
Joined
Oct 26, 2023
Messages
5
My old Siemens-Nixdorf must have a new hard-disk. I prefer an CF-Adacpter with an 256MB CF-Card. Seems to work on an IDE Adapter at Windows7.
But that Bios on the old PC does not automatically set the parameters for the Harddisc. I have to set : Type / Cyl / Hd / Pre / Lz / Sec / Mbyte
The old HD has 48/1011/15/None/1011/44/325.
Anyone can help me ?
 
For IDE, you can usually use any parameters that multiply up to less than or equal the capacity of the drive (the actual capacity, NOT the label capacity). Just make sure to write the parameters down in case the CMOS loses them. Figuring them out after the fact is a major pain. And if you move the drive between two systems, you need to use the same settings, which can be difficult with a usb<->cf adapter.

For example: 1024Cyl x 7Hd x 64Sec / 2(because sector size = 512) = 229,376
Ide doesn't care about Pre(comp) or Lz(landing zone).
 
Last edited:
Many of my small CF cards use 32 sectors instead of 64. You can get the actual geometry with WHATIDE.COM or some other IDE querying utility. These will read the geometry from the CF card (same as autodetection), so you can put them into the system BIOS. Keep in mind that CF cards on AT-class systems may not work reliably (causing silent data corruption), therefore I recommend using the XTIDE BIOS if possible.

The XTIDE BIOS supports autodetection as well.
 
Last edited:
Do you know, how i can start "Whatide" under my old XP ? In CMD (with admin) it can not find any HD... The CF-Card is there via adapter at f:
Sorry, but i have no older Windows :)
 
You cannot. First, Windows XP does not allow direct access to IDE devices, so such tools will not work. Second, your card reader is not an IDE device, so there is not even any valid geometry to query. If you find a way to get the CF card's geometry, it is most likely fake and will not work in your old system.

Put the CF card into your old machine (do not set it up in the BIOS), boot from a DOS floppy and run WHATIDE.COM from there. Doing so will tell you the actual geometry you need to use on that system.
 
CF cards use translation to LBA, so you can use whatever values you want as long as you stay within the valid size of the card.

Try 1023/8/62

The important thing here: do everything on the 486! That is, enter the values in the BIOS, boot into DOS, do "fdisk /mbr" and then create a partition and format it. If fdisk refuses to accept the CF card, use "diskpart" on Windows and issue a "clean" command on it (then eject - do not format!). It is important to do it that way, as Windows does not use partitions on a CF/SD card. It can, once there is one, but if you format it in Windows, it will not create a partition table.
 
How does the CF card translate a random geometry into LBA correctly?

I highly recommend reading the geometry information from the card (on the old machine!) and using the obtained values in the BIOS setup. I also write the geometry down on the label, because my CF cards report different geometries depending on size and age.
 
How does the CF card translate a random geometry into LBA correctly?
Mind simply google'ing how translation works? There's a fixed formular for this and it's not very complicated. (Real) geometry had lost its meaning in the 386-era already and was only a left-over in the BIOS from ST-512 times. IDE drives used translation almost right from the start to hide their real geometry. LBA-capable drives never cared. They turn CHS values into contiguous logical block numbers.

Also, did you notice that calling a geometry "random" for a CF card is, well, silly anyway? Flash memory has no CHS geometry by design. That's why the values do not matter as long as they don't exceed the size. The card won't care if you ask for 8 heads and 512 cylinders or 4 heads and 1024 cylinders. The translation to LBA will work the same. That's also why many people simply recommend to select a pre-defined hard disk type in the BIOS that matches the size of the CF card most closely (if the BIOS has no user-defined entry).

But to make this clear, should there be a misunderstanding: I'm not saying you can randomly *change* the values. You have to stick to whatever values you use when setting up the partition in fdisk.
 
Last edited:
The fixed formula, according to my understanding, is LBA = (track * num_heads + head) * num_sectors + (sector - 1). It contains two constants (num_heads and num_sectors), which, if set wrong, cause invalid LBA addresses to be computed.

LBA-capable drives almost universally used num_heads = 16 and num_sectors = 63, but this is not true for CF cards.

Which is why I recommend reading these values from the CF card itself. It does not matter that CF cards physically have no CHS geometry, but these are the values the manufacturer tells you to use when using CHS addressing, which these old BIOSes use. (This may also have implications for the card's wear levelling algorithm, but that is conjecture on my part.)

I do not like you attitude in assuming that I am stupid. Maybe you could be more explicit?
 
Seems to work. What can use for "LZ" ??
 

Attachments

  • 980 Cylinders.jpeg
    980 Cylinders.jpeg
    2.3 MB · Views: 10
  • CHOS Setup.jpeg
    CHOS Setup.jpeg
    2.2 MB · Views: 10
Seems to work. What can use for "LZ" ??
Doesn't care. You can use 980 if you want. It's a holdover from early MFM drives to tell where to park the heads on power down, typically a spot where they won't do damage if the drive is bumped. Pretty much all drives after around 1985? 40meg? automatically handled head parking. Stands for 'Landing Zone'.
 
Last edited:
How does the CF card translate a random geometry into LBA correctly?

I highly recommend reading the geometry information from the card (on the old machine!) and using the obtained values in the BIOS setup. I also write the geometry down on the label, because my CF cards report different geometries depending on size and age.

I have wondered about this also. My understanding is that going back to the original AT, the Initialize Drive Parameters command was performed on every boot/recalibrate to program the number of sectors per track and the number of heads into the controller (but not the number of cylinders since it isn't necessary), using the values stored in the CMOS. IDE drives were expected to cope with any geometry, not merely the "recommended" one printed on the drive or returned by ATA IDENTIFY, going all the way back to their introduction. So with the move from MFM->IDE the Initialize Drive Parameters silently changed from a "program needed settings into dumb MFM controller" into "set up a translation table in the IDE drive's memory" even though LBA/LARGE/etc. wasn't around yet.
 
That would explain a few things, but not all. If IDE drives were told to use a specific geometry during initialization, and expected to cope with any geometry... why was BIOS auto-detection a thing (it shouldn't work on MFM drives at all)? And if the values don't matter, why did drive manufacturers specify them in detail for many, many years?

The only reason I can think of is that many drives did not actually support any geometry, and required the correct one to be used. I also don't trust CF card manufacturers (or any drive vendor, realistically) to have implemented such flexible translation correctly, even if it should work.

Seems to work. What can use for "LZ" ??
LZ is the "Landing Zone", traditionally the last cylinder of the disk (in your case, 980). I would recommend not using any value larger than your cylinder count, but otherwise it doesn't matter.
 
That would explain a few things, but not all. If IDE drives were told to use a specific geometry during initialization, and expected to cope with any geometry... why was BIOS auto-detection a thing (it shouldn't work on MFM drives at all)? And if the values don't matter, why did drive manufacturers specify them in detail for many, many years?

The only reason I can think of is that many drives did not actually support any geometry, and required the correct one to be used. I also don't trust CF card manufacturers (or any drive vendor, realistically) to have implemented such flexible translation correctly, even if it should work.
os2museum has an interesting story behind the autodetect: https://www.os2museum.com/wp/whence-identify-drive/
Apparently the ATA IDENTIFY command was there for years in IDE drives before anyone thought of implementing a BIOS autodetect feature.
Indeed, it won't work on MFM drives at all, but that os2museum writeup suggests it's been baked into IDE almost back to the very first IDE drive, and was ported over from ESDI (thus 0xEC as the command code, 0xEx meaning ESDI)

Here's an old 1991 Conner (i.e., someone who should understand IDE) manual: https://bitsavers.org/pdf/conner/disk/00501-006_Conner_CP2034_CP2064_Product_Manual_199103.pdf
Take a look at section 13.8 which describes what I talked about above. The context as you read the intro sections of the manual is that the C/H/S values aren't even relevant to mention until page 50. As I remember, these old 30mb/60mb Conner IDE drives didn't have the geometry printed on their case, either. The manual really supports the idea that before type 47, you were to just pick some type in your BIOS with a capacity close to the drive, and the drive would make it work. I'd like to hear from someone doing IT work in those times as whether that (vs. type 47) was actually common. The Conner manual says "the drive operates or emulates any drive type of equal capacity" and then "Conner has established a Universal Translate Mode which enables the user to configure the drive in an AT environment to any cylinder, head, and sector configuration desired. The translate configuration is limited only by the maximum capacity of the drive." Only after that does Conner suggest the defaults are 411/4/38 and 823/4/38 for those two drives. And as these drives are so small it's clear "translation" has nothing to do with the 1024 cylinder limit, LBA, or other such things that came in later.

As you say, it makes sense to just ask the drive what CHS values it likes and use those. I was just trying to point out what I think Timo W. was getting at.
 
As you say, it makes sense to just ask the drive what CHS values it likes and use those. I was just trying to point out what I think Timo W. was getting at.
And I thank you doing a much better job of it. :) Your explanation is very good, and the article is definitely a good read (I had forgotten about it, tend to follow os2museum otherwise).
 
And I thank you doing a much better job of it. :) Your explanation is very good, and the article is definitely a good read (I had forgotten about it, tend to follow os2museum otherwise).
Yeah!
I feel like once type 47 became widespread, IDE drive manufacturers started printing the settings right on the drive and the fact that any geometry would work (because of this initialization at every boot, all you're doing is telling the drive to plug in the right values in the CHS->LBA conversion formula in its firmware) was forgotten. It was a surprise to me too when I first realized how it works.

Long, long ago, I had a Deskpro 386/25. I put my 850MB drive in it. It did not have type 47 nor autodetect. I found some 600MBish type built into the BIOS and used that, but it had more than 1024 cylinders. Everything seemed to work fine until I ran Scandisk, and it marked every sector beyond cylinder 1023 bad (I didn't understand it back then, but do now). But it all makes sense.

BIOSes, like that one, that allowed entry of more than 1024 cylinders, yet did not support LBA or LARGE DOS translation, apparently existed so that the FDPT could be handed intact to Xenix, NetWare, OS/2 or whatever OS that would then take over communications with the hardware directly and without regard to the 1024 cylinder limit, since it's purely a limit in the definition of the Int 13h interface and not a hardware one. Only the bootloader had to be within the first 1024 cylinders. This later recurs if you want to run Linux on one of these old machines. No translation software needed so long as /boot is within the first 1024 cylinders.
 
Yeah!
I feel like once type 47 became widespread, IDE drive manufacturers started printing the settings right on the drive and the fact that any geometry would work (because of this initialization at every boot, all you're doing is telling the drive to plug in the right values in the CHS->LBA conversion formula in its firmware) was forgotten. It was a surprise to me too when I first realized how it works.

Long, long ago, I had a Deskpro 386/25. I put my 850MB drive in it. It did not have type 47 nor autodetect. I found some 600MBish type built into the BIOS and used that, but it had more than 1024 cylinders. Everything seemed to work fine until I ran Scandisk, and it marked every sector beyond cylinder 1023 bad (I didn't understand it back then, but do now). But it all makes sense.

BIOSes, like that one, that allowed entry of more than 1024 cylinders, yet did not support LBA or LARGE DOS translation, apparently existed so that the FDPT could be handed intact to Xenix, NetWare, OS/2 or whatever OS that would then take over communications with the hardware directly and without regard to the 1024 cylinder limit, since it's purely a limit in the definition of the Int 13h interface and not a hardware one. Only the bootloader had to be within the first 1024 cylinders. This later recurs if you want to run Linux on one of these old machines. No translation software needed so long as /boot is within the first 1024 cylinders.
That is how I remember it as well.
 
Works fine! But I needed a Gotek for installing MsDos 6.22 on it, then I was able to copy all files from my old HD to that CF.
Now I have another problem:
When starting Windows (for Workgroups 3.11) , there comes:
"Gruppendateifehler. Die Programmgruppendatei Zubehör.grp kann nicht geöffnet werden"
Someone knows about this ?
 

Attachments

  • Bildschirmfoto 2023-11-28 um 09.34.38.png
    Bildschirmfoto 2023-11-28 um 09.34.38.png
    4.6 MB · Views: 5
When you copied ZUBEHÖR.GRP it got renamed to ZUBEHöR.GRP (lower-case ö instead of upper-case). DOS uses upper-case filenames internally, but the upper-case conversion only works for basic ASCII characters.

Rename the file to have an upper-case Ö.
 
Back
Top