0

I formatted several 5.25" diskettes with 360k and 1.2M on the Windows XP PC using 1.2M (HD) drive. I am using the same drive to read data from 360k diskette back using custom driver. The controller returns "address mark not found". Here's what I send to controller:

46 00 00 00 01 02 01 2A FF

and here's what I get in response

40 01 00 00 00 01 02

The FDC speed set is 250 kb/s (CR1=1, CR0=0). The same custom driver works properly with 3.5" drives' 1.44M and 720k formats, and with 5.25" drive's 1.2M format, only 360k is having problems.

I have problems finding information on how to support older 360k formats on newer drives. My assumption was that I just *2 track number, at least it must yield correct reading of data. But here driver is unable to read even sector 1 at head 0 track 0 (boot sector) to identify the geometry.

I suspect there must be something else, but I can not figure out what it might be.

(Not sure if EE is correct place to put this question to; however stackoverflow [programming] seems to be less proper, serverfault is also non-fit. Question is too low level and must be related to how electronics/architecture works).

  • This might be a better question for Superuser. – The Photon Apr 24 at 20:37
  • 4
    Or retro computing. – pjc50 Apr 24 at 20:41
  • 2
    I agree, this would be waaaaaay better off in retrocomputing.SE – Marcus Müller Apr 24 at 20:46
3

Writing a 360k floppy with a 1.2M drive is never going to be reliable. And that includes formatting it.

Because a 1.2M drive is intended to write disks with a narrower track width, the head is smaller. If you're reading an old 360K disk, that's not a problem. Place the head anywhere within the wider track, and it will read the data.

But when you write a track - including formatting the disk - you are only writing over part of the track. The remainder could have anything on it - including the old data on the disk. So when you read it back again, you get some mix of the old and new data.

| improve this answer | |
  • I formatted diskette with the same drive, not the old 360kb drive. This makes difference. Same drive must read data it wrote before. – Anonymous Apr 24 at 21:40
1

Problem solved by reading this information. 1.2M drive rotates 360 RPM, and requires 300 kb/s transfer speed, not 250 kb/s, to be up to speed with the data (300/250 equals to 360/300). For older 360k driver 250 kb/s speed must be selected. That's why there were always 5.25" 1.2M and 5.25" 360k drives in the computer setup, not just 5.25" drive type.

Now drive can read track 0, but not other tracks.

| improve this answer | |
  • 1
    Is it double-stepping on the other tracks? ie. if you try to read track 39, do the heads go to the innermost track? – Bruce Abbott Apr 24 at 21:48
  • Yes, it does. For LBA 0x2cf (9*2*40-1) it goes to the innermost position. – Anonymous Apr 24 at 21:54
  • The error given by the controller is "wrong cylinder" (bit 4 of ST2). Ah shit, it is programming mistake. I multiply cylinder number by 2, and supply cylinder 79 to controller rather than 39. *2 must be used for positioning only! – Anonymous Apr 24 at 22:00
  • Ok, it works now, system boots to DOS as expected. – Anonymous Apr 24 at 22:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.