fnuecke / Circuity

Other
10 stars 0 forks source link

Add floppy disk drive / floppy controller #4

Open fnuecke opened 8 years ago

fnuecke commented 8 years ago

Implement a floppy controller bus device and add a floppy item.

iamgreaser commented 8 years ago

Request: 360KB single-sided double-density format.

Disk rotates at 300RPM. There are 9 512-byte sectors per track. There are 80 tracks on the disk. It takes 3ms to move to the next or previous track. Actual raw capacity is 6250 bytes per track after MFM encoding.

I'd love to see it do raw MFM just to see what crazy stuff people do with extended formats (400KB is pretty easy to achieve) and copy protections (e.g. setting all the rawbits to 0) and whatnot, but that can wait until later.

For now, cap the data rate at 1152 bytes per MC tick once you have it all working.

fnuecke commented 8 years ago

I'm a bit unclear about where MFM and details would come in; wouldn't that be "behind the curtains" so to speak? It's not like the controller would be reprogrammable by the players?

Or... do you suggest "raw" access with no controller in the way/the controller being optional? That'd be... interesting. And I'd have to do a lot more reading :P

iamgreaser commented 8 years ago

What I mean is that, at some point after things are working, it could be possible to store the disks as raw MFM tracks, possibly written at different speeds, just in case people want to mess around with copy protection schemes. A series of, say, 100 zero-subbits in a row will ultimately result in noise being read somewhere along the line.

Other options of course would be to allow for formatting tracks to have more sectors, or interleave sectors, or offset the tracks just so when the head steps it can read the next sector ASAP.

I'd still go with a proper floppy disk controller interface, rather than forcing people to decode raw MFM. We could literally just emulate the WD1772 to some degree of accuracy. (It's a nice chip to actually use, if the Hatari emulator is to be believed.) Early on we can just enforce 360KB and not implement the "Format Track" command.