| Age | Commit message (Collapse) | Author |
|
Turns out my PC leaves the FDC in a reset state after POST, causing the version check to time out. Thus, it is necessary to reset the controller beforehand.
|
|
|
|
|
|
This new function is an export of the filesystem-checking code in BlkDevAddFDC.HC. This was done to allow it to be used by DskChg, allowing filesystem autodetection when disks are swapped.
|
|
FDCChk now turns the motor on and off, and tests for the presence of a disk by performing two seeks and checking the disk change flag.
|
|
FDCReadId was patched to use 64-bit variables, and to remove asterisks from references to the CBlkDev pointer, bd.
|
|
FDCWriteBlks was patched for the same reasons as FDCReadBlks (64-bit variables, motor control, fix typo in head calculation, unlock at end), as well as fixing a bug where only [cnt] bytes were being copied into the DMA buffer instead of [cnt] sectors.
|
|
FDCReadBlks was patched to use 64-bit variables, turn the motor on and off, use the correct variable for the head count, and unlock the block device before returning.
|
|
FDCRBlks and FDCWBlks were patched to use 64-bit variables, and remove unecessary parentheses.
|
|
FDCReadData and FDCWriteData were patched to use 64-bit variables, and to send the read/write commands in the correct format.
|
|
FDCInit was patched to use 64-bit variables, and to turn the motor on when performing the recalibration step.
|
|
FDCSelDrv was patched to preserve the other DOR bits, and not reset the controller when selecting a drive, which caused I/O timeouts.
|
|
FDCMotorTask was patched to use 64-bit variables, preserve DOR contents when setting the motor bits, and properly set the block device's motor state. FDCMotor now properly checks the current motor status before writing to the DOR or spawning the power-off task, and also preserves the DOR bits.
|
|
I have patched FDCReset to actually do its job correctly, switching it over to DOR-twiddling instead of the DSR method. I also allowed it to skip the interrupt checks if it gets a 0x80 byte back at any point.
|
|
FDCReadByte and FDCSendByte have been updated to store the MSR contents into a separate variable for readability. They also now Yield; when polling to prevent the OS from feezing.
|
|
Since KInts.HC is compiled before DskFDC.HC, undefined symbol issues could possibly occur. when attempting to compile the interrupt set-up code because the IRQ handler is not yet compiled. To prevent this, I separated the IRQ handler into another file that is included immediately after the headers. The instructions have been updated to reflect this change.
|
|
I have added the "PURPOSE", "TO USE", and "THEN" tags to make the information sections more easy to read while keeping line length down. These are used by a Python script I wrote to generate an instruction file.
|
|
The IRQ handlers in TempleOS' kernel code have an "IRQ_" prefix. FDCInt has been renamed to IRQ_FDC in keeping with Terry's code style. An unused definition of the same name has also been removed from KFloppyA.HH.
|
|
I added comments to all patch files explaining their function and how to install them. Installation instructions were also added to some of the code files as well.
|
|
The Bt call was modified to test for the corrrect bit of SRA.
|
|
FDCWriteBlks now checks if the disk is write-protected before attempting a write, throwing an exception if it is. I also reworked the retry check for both it and FDCReadBlks.
|
|
I realized that the logic that determined the sector size value sent to the controller would not work properly on larger sector size, so I redid it.
|
|
I have added a function that will check for the presence of valid sector data on either side of a floppy disk. This function is used to check for the presence of a disk in a way that does not rely on the proper handling of the disk change flag.
|
|
I moved the version check into the drive-0-only code; it wouldn't make sense to check the version each time a drive gets initialized.
|
|
I have decided not to use multi-track mode and instead do atomic reads and writes to sector ranges. I have also added a timeout to the motor command when the motor is turned on (approximately 500 milliseconds to accomodate 5ΒΌ" drives). FDCInit now sets the highest-accessible block.
|
|
This is the initial commit for the BlkDev-ified driver. It is not at all
in a working state at this point, and the old files have been left for
reference purposes.
|