The trackdisk device returns error codes whenever an operation is attempted. DiskIO->iotd_Req.io_Length = TRACK_SIZE; DiskIO->iotd_Req.io_Data = (APTR)Writebuffer; DiskIO->iotd_Req.io_Offset = (ULONG)(TRACK_SIZE * tracknum); DiskIO->iotd_Count = change_count; DiskIO->iotd_Req.io_Command = ETD_WRITE; if (DoIO((struct IORequest *)DiskIO)) printf("ETD_WRITE failed. Error: %ld\n",DiskIO-iotd.io_Error); When an error occurs, these error numbers will be returned in the io_Error field of your IOExtTD block. TRACKDISK DEVICE ERROR CODES Error Value Explanation ------------------ ----- ----------------------------- TDERR_NotSpecified 20 Error could not be determined TDERR_NoSecHdr 21 Could not find sector header TDERR_BadSecPreamble 22 Error in sector preamble TDERR_BadSecID 23 Error in sector identifier TDERR_BadHdrSum 24 Header field has bad checksum TDERR_BadSecSum 25 Sector data field has bad checksum TDERR_TooFewSecs 26 Incorrect number of sectors on track TDERR_BadSecHdr 27 Unable to read sector header TDERR_WriteProt 28 Disk is write-protected TDERR_DiskChanged 29 Disk has been changed or is not currently present TDERR_SeekError 30 While verifying seek position, found seek error TDERR_NoMem 31 Not enough memory to do this operation TDERR_BadUnitNum 32 Bad unit number (unit # not attached) TDERR_BadDriveType 33 Bad drive type (not an Amiga 3 1/2 inch disk) TDERR_DriveInUse 34 Drive already in use (only one task exclusive) TDERR_PostReset 35 User hit reset; awaiting doom