I originally thought that the SX might be sending the data too fast for the PC to handle. As my last post mentioned, one full cycle is 12us, but who knows if this is during a disk-write, going into the cache, etc. I took several samples and they were all around 12us but I wanted to be sure that the PC wasn’t dropping data on the floor. The SX, up ’til now, didn’t have support for handling this situation.
I made a couple improvements on the SX side and the PC side. On the SX, I added a 16-byte software FIFO, so if the PC hasn’t ack’d the last byte yet when a new byte is ready, it simply gets thrown into an array, and sent to the PC as soon as it’s ready. It takes 16us(2us * 8 bits) minimum for the SX to get 1 one byte, and so a 16-byte FIFO gives me 256us of delay before this would be a serious issue. This is still 1/4000th of a second, so the PC can’t really dilly-dally, but it gives me some breather space.
On the PC side, instead of getting the byte from the parallel port and writing it directly to disk, I’m shoving it into an array first, and then writing at the end of the transfer. All of this software is of the barely-working variety….
I have yet to see anything intelligible to come from the drive which means my whole solution doesn’t function, yet. There are so many variables which makes this a tough nut to crack. Just the mere fact that the data coming from the drive is MFM encoded, simply looking at the data doesn’t tell you whether or not the raw data is correct. And the goofy MFM encoding that the Amiga uses makes it even tougher. BUT — I’m still holding out that I should be able to see the SYNC words. Of course, the problem there is that the data can be shifted, and not on even byte boundaries, so you have to shift the data up to 8-bit locations in order for that to be readable.
My next step is to run DiskMonTools, an amiga program, which will display the raw MFM from a floppy on screen. I’m hoping I can sort of learn what some common encoded patterns are, and look for them in the output from my program. Things like headers etc have lots of static data, so they are easier to identify.
I’m hoping to see some progress one of these days……