Found a few datasheets for recent drives, and they have very strict timing requirements, even when changing the direction of head stepping. It’s no wonder there is strange behaviour when the restrictions are not respected. These restrictions will be added to the dumping software, but it varies from drive to drive, just like we observed using our Amiga dumping/testing tool, CT. The PC command line dumping tool will probably have a system test mode just like CT has.
Time to look for datasheets...
Spent quite some time collecting datasheets... and it seems it’s really pure luck what we read from a disk if these restrictions are not respected, including missing data, unwritten data, random signals, and seek errors. We knew about some of these, but certainly not all. CT does about half of them, but we will support all of them in KryoFlux.
These are the specs for a normal PC drive, but these do vary from model to model, so they should be configurable. All state change commands should be set to wait an exact amount of time in order to behave inline with the specifications. Here is a summary of the more important restrictions:
- track to track seek: 3ms
- head settling: 15ms
- direction change: 4ms for single step. head settling delay 18ms after multiple steps
- interval between steps, if a step sequence completed: 4ms
- spinup: 500ms
- direction select: 1us before and after step
- step: low to high
- head setting after step: 18ms (3ms track to track + 15ms head settling)
- wait after write gate disabled before motor, step, select, side: 1.2ms
- delay after side select operation: 100us
- track0 signal valid after step: 3ms
- seek after motor on: 200ms
- direction to be stable before step: 1us
- step signal min: 2us
- wait drive select line: 0.5us
- density change: 500ms
- read/write only after head settling delay after step
- step disabled with write gate enabled
- read only enabled with write gate disabled and ready
- no index and read signal when not ready or in seek
- ready only with disk inserted and after spinup delay and at least one index detected and head settling complete if stepping
- disk change: eject instantly changes it, insertion re-checked only after step
- write gate enabled only after head settling or side select delay
As you can see the timing requirements vary wildly from microseconds to almost seconds, so it made sense to implement them in the firmware, and made them adjustable by the host side through commands.