davidgiven / fluxengine

PSOC5 floppy disk imaging interface
MIT License
355 stars 68 forks source link

DEC 8" RX01/RX02 Formats #411

Open mike603 opened 2 years ago

mike603 commented 2 years ago

I have a DEC PDP-8/E with a DEC RX01 8" floppy disk system.

For marketing reasons DEC did not build formatting capabilities into these drives.

The RX01 format is Single Sided Single Density (FM), 77 tracks, 26 sectors per track, 128 bytes per sector. This is the IBM 3470 standard with 77 tracks rather than the 73/74 tracks on the IBM 3470 machine.

The RX02 uses the same format but writes the sectors double density while leaving the sector header information in single density.

If you need to know the sector gaps they can be found in the Western Digital FD1771 Floppy Disk controller data sheet.

I am thinking of buying a Shugart 801 compatible drive and using your software to format 8“ disks and possibly read and copy them as well.

Can your software handle this format? Does your software handle adjustable speed on the stepper motor?

Thank you,

Mike Katz
davidgiven commented 2 years ago

That's a stock IBM scheme format which is reasonably well-supported, and it should be possible to implement this by just writing a profile for it. See the src/formats/ibm*.textpb files. Mixed-format discs work fine too (see caveat below). The most difficult part is testing the resulting disks to make sure they actually work, for which you need actual hardware, but you have one so that's not a problem. Reading should work already with the general-purpose IBM reader profile, although you might need some parameters to specify things which can't be autodetected.

Regarding the RX02: while the FluxEngine client supports writing mixed FM/MFM disks, the format decision happens per-track. It'd need some trivial software work to support different formats for the header and data. What on earth was DEC thinking...

Regarding 8" drives: they work fine, with the same adapter that you'd use to connect one to a PC. There are several 8" profiles already.

Regarding adjustable speed: the FluxEngine hardware doesn't know how to change the drive speed, although you ought to be able to read and write the disks anyway. The way it works is that the drive rotates at a fixed speed and the data clock rate is changed instead. Macintosh 800kB disks are handled like this.

mike603 commented 2 years ago

David,

Thank you for your answers.

My question about speed was not about speed of the disk spinning but the speed of the stepper motor.  Different drives step their heads at different speeds.

For example the original Shugart SA400 5.25 inch floppy drive could only step the heads (it was actually a ball bearing following a helical cavity on a dick to move the head) at 40mS per step.  Other drives could step at speeds down to 3mS/step.

Thanks again,

                 Mike

On 1/12/2022 5:22 AM, David Given wrote:

That's a stock IBM scheme format which is reasonably well-supported, and it should be possible to implement this by just writing a profile for it. See the |src/formats/ibm*.textpb| files. Mixed-format discs work fine too (see caveat below). The most difficult part is testing the resulting disks to make sure they actually work, for which you need actual hardware, but you have one so that's not a problem. Reading should work already with the general-purpose IBM reader profile, although you might need some parameters to specify things which can't be autodetected.

Regarding the RX02: while the FluxEngine client supports writing mixed FM/MFM disks, the format decision happens per-track. It'd need some trivial software work to support different formats for the header and data. What on earth was DEC thinking...

Regarding 8" drives: they work fine, with the same adapter that you'd use to connect one to a PC. There are several 8" profiles already.

Regarding adjustable speed: the FluxEngine hardware doesn't know how to change the drive speed, although you ought to be able to read and write the disks anyway. The way it works is that the drive rotates at a fixed speed and the data clock rate is changed instead. Macintosh 800kB disks are handled like this.

— Reply to this email directly, view it on GitHub https://github.com/davidgiven/fluxengine/issues/411#issuecomment-1010937462, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEK77GEF2M2MTUJ6INFQCW3UVVQBBANCNFSM5LVPWVWA. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you authored the thread.Message ID: @.***>

davidgiven commented 2 years ago

Oh, I see! Currently the step interval isn't configurable, but it should be. It's set to 6ms per step.

mike603 commented 2 years ago

David,

I am not much of a python programmer (I am an embedded C programmer) but I may be able to add a command line option to set the stepping speed.

In 1980/1981 I wrote a floppy disk formatter that would format 5.25" and 8" drives for any number of tracks, single or double density, single or double sided.  I think is also had the ability to adjust the sector interleave but I'm not sure.

Do you think your software would work on a Raspberry Pi?  I was thinking of making or adapting an enclosure to contain the drives, power supply, your board and a Raspberry Pi Zero 2W, 3b or 4b.  With a small monitor and blue tooth keyboard I would have a small portable formatting/reading station.  It could also be accessed via SSH for remote access.

Thanks again for your time,

                      Mike                       +1 (773) 414-1044

On 1/12/2022 9:31 AM, David Given wrote:

Oh, I see! Currently the step interval isn't configurable, but it should be. It's set to 6ms per step.

— Reply to this email directly, view it on GitHub https://github.com/davidgiven/fluxengine/issues/411#issuecomment-1011164822, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEK77GFVN5E7KRVGSCAD3CLUVWNFVANCNFSM5LVPWVWA. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you authored the thread.Message ID: @.***>

davidgiven commented 2 years ago

The good news is that the FluxEngine client is all written in C++ --- no Python required! The difficult bit about making the step interval configurable, which isn't really that difficult, is adding the firmware support (currently it's hard coded). This will need adding a message to the USB protocol for configuring it. Ideally all the timing parameters should be configurable. It's all easy, I just haven't done it yet.

If you're using a GreaseWeazle instead of the FluxEngine hardware, then this already is configurable on the hardware, so adding support is just a client change.

davidgiven commented 2 years ago

BTW, yes, the FluxEngine client should work fine on a Raspberry Pi. I tend to run it on my portable laptop, which is a repurposed Asus Chromebook with Debian on it, so I know it works fine on Arm32 and Arm64 hardware.

mike603 commented 2 years ago

David,

I was unable to quickly find a CY8KIT-059 that is in stock before mid March so I was thinking of getting the Greaseweazle.

I don't want to by Greaseweazle F7 Plus for $100, I think it's over priced.  The Greaseweazle V4 is $40 with case and nuts and bolts.

Which do you think would work best for me?

          Mike

On 1/12/2022 11:06 AM, David Given wrote:

The good news is that the FluxEngine client is all written in C++ --- no Python required! The difficult bit about making the step interval configurable, which isn't really that difficult, is adding the firmware support (currently it's hard coded). This will need adding a message to the USB protocol for configuring it. Ideally all the timing parameters should be configurable. It's all easy, I just haven't done it yet.

If you're using a GreaseWeazle instead of the FluxEngine hardware, then this already /is/ configurable on the hardware, so adding support is just a client change.

— Reply to this email directly, view it on GitHub https://github.com/davidgiven/fluxengine/issues/411#issuecomment-1011264821, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEK77GGSQJ64RK7MJZG2D53UVWYKFANCNFSM5LVPWVWA. Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you authored the thread.Message ID: @.***>

davidgiven commented 2 years ago

I really couldn't say --- I don't know much about the Greaseweazle. I have an F7 Lightning, but it was a donation. However, I'm vaguely aware that it's possible to build your own from a Blue Pill microcontroller? But that may not be true any more.

Regarding the cost: I actually started the FluxEngine project because I was too cheap to buy a Kryoflux!