home *** CD-ROM | disk | FTP | other *** search
/ Merciful 1 / Merciful - Disc 1.iso / software / a / asm_one / asm-onev1.25a.dms / in.adf / Release3.1 / AutoDocs3.1.lha / doc / trackdisk.doc < prev    next >
Encoding:
Text File  |  1993-08-12  |  23.3 KB  |  671 lines

  1. TABLE OF CONTENTS
  2.  
  3. trackdisk.device/CMD_CLEAR
  4. trackdisk.device/CMD_READ
  5. trackdisk.device/CMD_UPDATE
  6. trackdisk.device/CMD_WRITE
  7. trackdisk.device/TD_ADDCHANGEINT
  8. trackdisk.device/TD_CHANGENUM
  9. trackdisk.device/TD_CHANGESTATE
  10. trackdisk.device/TD_EJECT
  11. trackdisk.device/TD_FORMAT
  12. trackdisk.device/TD_GETDRIVETYPE
  13. trackdisk.device/TD_GETGEOMETRY
  14. trackdisk.device/TD_GETNUMTRACKS
  15. trackdisk.device/TD_MOTOR
  16. trackdisk.device/TD_PROTSTATUS
  17. trackdisk.device/TD_RAWREAD
  18. trackdisk.device/TD_RAWWRITE
  19. trackdisk.device/TD_REMCHANGEINT
  20. trackdisk.device/TD_SEEK
  21. trackdisk.device/CMD_CLEAR                         trackdisk.device/CMD_CLEAR
  22.  
  23.    NAME
  24.     CMD_CLEAR/ETD_CLEAR -- mark the track buffer as containing invalid
  25.                    data.
  26.  
  27.    FUNCTION
  28.     These commands mark the track buffer as invalid, forcing a
  29.     reread of the disk on the next operation. ETD_UPDATE or CMD_UPDATE
  30.     would be used to force data out to the disk before turning the motor
  31.     off. ETD_CLEAR or CMD_CLEAR are usually used after having locked out
  32.     the trackdisk.device via the use of the disk resource, when you
  33.     wish to prevent the track from being updated, or when you wish to
  34.     force the track to be re-read. ETD_CLEAR or CMD_CLEAR will not do an
  35.     update, nor will an update command do a clear.
  36.  
  37.    IO REQUEST INPUT
  38.     io_Device    preset by the call to OpenDevice()
  39.     io_Unit        preset by the call to OpenDevice()
  40.     io_Command    CMD_CLEAR or ETD_CLEAR
  41.     io_Flags    0 or IOF_QUICK
  42.     iotd_Count    (ETD_CLEAR only) maximum allowable change counter
  43.             value.
  44.  
  45.    IO REQUEST RESULT
  46.     io_Error - 0 for success, or an error code as defined in
  47.                <devices/trackdisk.h>
  48.  
  49.    SEE ALSO
  50.     CMD_WRITE, CMD_UPDATE
  51.  
  52. trackdisk.device/CMD_READ                           trackdisk.device/CMD_READ
  53.  
  54.    NAME
  55.     CMD_READ/ETD_READ -- read sectors of data from a disk.
  56.  
  57.    FUNCTION
  58.     These commands transfer data from the track buffer to a supplied
  59.     buffer. If the desired sector is already in the track buffer, no disk
  60.     activity is initiated. If the desired sector is not in the buffer, the
  61.     track containing that sector is automatically read in. If the data in
  62.     the current track buffer has been modified, it is written out to the
  63.     disk before a new track is read. ETD_READ will read the sector label
  64.     area if the iotd_SecLabel is non-NULL.
  65.  
  66.    IO REQUEST INPUT
  67.     io_Device    preset by the call to OpenDevice()
  68.     io_Unit        preset by the call to OpenDevice()
  69.     io_Command    CMD_READ or ETD_READ
  70.     io_Flags    0 or IOF_QUICK
  71.     io_Data        pointer to the buffer where the data should be put
  72.     io_Length    number of bytes to read, must be a multiple of
  73.             TD_SECTOR.
  74.     io_Offset    byte offset from the start of the disk describing
  75.             where to read data from, must be a multiple of
  76.             TD_SECTOR.
  77.     iotd_Count    (ETD_READ only) maximum allowable change counter
  78.             value.
  79.     iotd_SecLabel    (ETD_READ only) NULL or sector label buffer pointer.
  80.             If provided, the buffer must be a multiple of
  81.             TD_LABELSIZE.
  82.  
  83.    IO REQUEST RESULT
  84.     io_Error - 0 for success, or an error code as defined in
  85.                <devices/trackdisk.h>
  86.    NOTES
  87.     Under versions of Kickstart earlier than V36, the io_Data had to
  88.     point to a buffer in chip memory. This restriction is no longer
  89.     present as of Kickstart V36 and beyond.
  90.  
  91.    SEE ALSO
  92.     CMD_WRITE
  93.  
  94. trackdisk.device/CMD_UPDATE                       trackdisk.device/CMD_UPDATE
  95.  
  96.    NAME
  97.     CMD_UPDATE/ETD_UPDATE -- write out the track buffer if it is dirty.
  98.  
  99.    FUNCTION
  100.     The trackdisk device does not write data sectors unless it is
  101.     necessary (you request that a different track be used) or until the
  102.     user requests that an update be performed. This improves system speed
  103.     by caching disk operations. These commands ensure that any
  104.     buffered data is flushed out to the disk. If the track buffer has not
  105.     been changed since the track was read in, these commands do nothing.
  106.     ETD_UPDATE command checks for diskchange.
  107.  
  108.    IO REQUEST INPUT
  109.     io_Device    preset by the call to OpenDevice()
  110.     io_Unit        preset by the call to OpenDevice()
  111.     io_Command    CMD_UPDATE or ETD_UPDATE
  112.     io_Flags    0 or IOF_QUICK
  113.     iotd_Count    (ETD_UPDATE only) maximum allowable change counter
  114.             value.
  115.  
  116.    IO REQUEST RESULT
  117.     io_Error - 0 for success, or an error code as defined in
  118.                <devices/trackdisk.h>
  119.  
  120.    SEE ALSO
  121.     CMD_WRITE
  122.  
  123. trackdisk.device/CMD_WRITE                         trackdisk.device/CMD_WRITE
  124.  
  125.    NAME
  126.     CMD_WRITE/ETD_WRITE -- write sectors of data to a disk.
  127.  
  128.    FUNCTION
  129.     These commands transfer data from a supplied buffer to the track
  130.     buffer. If the track that contains this sector is already in the track
  131.     buffer, no disk activity is initiated. If the desired sector is not in
  132.     the buffer, the track containing that sector is automatically read in.
  133.     If the data in the current track buffer has been modified, it is
  134.     written out to the disk before the new track is read in for
  135.     modification. ETD_WRITE will write the sector label area if
  136.     iotd_SecLabel is non-NULL.
  137.  
  138.    IO REQUEST INPUT
  139.     io_Device    preset by the call to OpenDevice()
  140.     io_Unit        preset by the call to OpenDevice()
  141.     io_Command    CMD_WRITE or ETD_WRITE
  142.     io_Flags    0 or IOF_QUICK
  143.     io_Data        pointer to the buffer where the data should be put
  144.     io_Length    number of bytes to write, must be a multiple of
  145.             TD_SECTOR.
  146.     io_Offset    byte offset from the start of the disk describing
  147.             where to write data to, must be a multiple of
  148.             TD_SECTOR.
  149.     iotd_Count    (ETD_WRITE only) maximum allowable change counter
  150.             value.
  151.     iotd_SecLabel    (ETD_WRITE only) NULL or sector label buffer pointer.
  152.             If provided, the buffer must be a multiple of
  153.             TD_LABELSIZE.
  154.  
  155.    IO REQUEST RESULT
  156.     io_Error - 0 for success, or an error code as defined in
  157.                <devices/trackdisk.h>
  158.  
  159.    NOTES
  160.     Under versions of Kickstart earlier than V36, the io_Data had to
  161.     point to a buffer in chip memory. This restriction is no longer
  162.     present as of Kickstart V36 and beyond.
  163.  
  164.    SEE ALSO
  165.     CMD_READ, TD_FORMAT
  166.  
  167. trackdisk.device/TD_ADDCHANGEINT             trackdisk.device/TD_ADDCHANGEINT
  168.  
  169.    NAME
  170.     TD_ADDCHANGEINT -- add a disk change software interrupt handler.
  171.  
  172.    FUNCTION
  173.     This command lets you add a software interrupt handler to the
  174.     disk device that gets invoked whenever a disk insertion or removal
  175.     occurs.
  176.  
  177.     You must pass in a properly initialized Exec Interrupt structure
  178.     and be prepared to deal with disk insertions/removals
  179.     immediately. From within the interrupt handler, you may only call the
  180.     status commands that can use IOF_QUICK.
  181.  
  182.     To set up the handler, an Interrupt structure must be initialized.
  183.     This structure is supplied as the io_Data to the TD_ADDCHANGEINT
  184.     command. The handler then gets linked into the handler chain and
  185.     gets invoked whenever a disk change happens. You must eventually
  186.     remove the handler before you exit.
  187.  
  188.     This command only returns when the handler is removed. That is,
  189.     the device holds onto the IO request until the TD_REMCHANGEINT command
  190.     is executed with that same IO request. Hence, you must use SendIO()
  191.     with this command.
  192.  
  193.    IO REQUEST INPUT
  194.     io_Device    preset by the call to OpenDevice()
  195.     io_Unit        preset by the call to OpenDevice()
  196.     io_Command    TD_ADDCHANGEINT
  197.     io_Flags    0
  198.     io_Length    sizeof(struct Interrupt)
  199.     io_Data        pointer to Interrupt structure
  200.  
  201.    IO REQUEST RESULT
  202.     io_Error - 0 for success, or an error code as defined in
  203.                <devices/trackdisk.h>
  204.  
  205.    SEE ALSO
  206.     TD_REMCHANGEINT, <devices/trackdisk.h>, <exec/interrupts.h>,
  207.     exec.library/Cause()
  208.  
  209. trackdisk.device/TD_CHANGENUM                   trackdisk.device/TD_CHANGENUM
  210.  
  211.    NAME
  212.     TD_CHANGENUM -- return the current value of the disk-change counter.
  213.  
  214.    FUNCTION
  215.     This command returns the current value of the disk-change counter (as
  216.     used by the enhanced commands). The disk change counter is incremented
  217.     each time a disk is inserted or removed from the trackdisk unit.
  218.  
  219.    IO REQUEST INPUT
  220.     io_Device    preset by the call to OpenDevice()
  221.     io_Unit        preset by the call to OpenDevice()
  222.     io_Command    TD_CHANGENUM
  223.     io_Flags    0 or IOF_QUICK
  224.  
  225.    IO REQUEST RESULT
  226.     io_Error - 0 for success, or an error code as defined in
  227.                <devices/trackdisk.h>
  228.     io_Actual - if io_Error is 0, this contains the current value of the
  229.             disk-change counter.
  230.  
  231. trackdisk.device/TD_CHANGESTATE               trackdisk.device/TD_CHANGESTATE
  232.  
  233.    NAME
  234.     TD_CHANGESTATE -- check if a disk is currently in a drive.
  235.  
  236.    FUNCTION
  237.     This command checks to see if there is currently a disk in a drive.
  238.  
  239.    IO REQUEST INPUT
  240.     io_Device    preset by the call to OpenDevice()
  241.     io_Unit        preset by the call to OpenDevice()
  242.     io_Command    TD_CHANGESTATE
  243.     io_Flags    0 or IOF_QUICK
  244.  
  245.    IO REQUEST RESULT
  246.     io_Error - 0 for success, or an error code as defined in
  247.                <devices/trackdisk.h>
  248.     io_Actual - if io_Error is 0, this tells you whether a disk is in
  249.             the drive. 0 means there is a disk, while anything else
  250.             indicates there is no disk.
  251.  
  252. trackdisk.device/TD_EJECT                           trackdisk.device/TD_EJECT
  253.  
  254.    NAME
  255.        TD_EJECT -- eject (or load) the disk in the drive, if possible.
  256.  
  257.    FUNCTION
  258.     This command causes the drive to attempt to eject the disk in
  259.     it, if any.  Note that the current trackdisk.device does not
  260.     implement this command, but it might in the future, and other
  261.     trackdisk-compatible drivers may implement this command.  Some
  262.     devices may be able to load disks on command also.
  263.  
  264.    IO REQUEST INPUT
  265.     io_Device    preset by the call to OpenDevice()
  266.     io_Unit        preset by the call to OpenDevice()
  267.     io_Command    TD_EJECT
  268.     io_Flags    0 or IOF_QUICK
  269.     io_Length    0 (load, if supported) or 1 (eject)
  270.  
  271.    IO REQUEST RESULT
  272.     io_Error - 0 for success, or an error code as defined in
  273.                <devices/trackdisk.h>
  274.  
  275.    BUGS
  276.     The pre-V40 autodoc didn't mention io_Length.  Because of this, for
  277.     devices that can never support load, a driver might want to eject if
  278.     io_Length is 0.
  279.  
  280. trackdisk.device/TD_FORMAT                         trackdisk.device/TD_FORMAT
  281.  
  282.    NAME
  283.     TD_FORMAT/ETD_FORMAT -- format a track on a disk.
  284.  
  285.    FUNCTION
  286.     These commands are used to write data to a track that either
  287.     has not yet been formatted or has had a hard error on a standard write
  288.     command. TD_FORMAT completely ignores all data currently on a track and
  289.     does not check for disk change before performing the command. The
  290.     io_Data field must point to at least one track worth of data. The
  291.     io_Offset field must be track aligned, and the io_Length field must be
  292.     in units of track length (that is, NUMSEC*TD_SECTOR).
  293.  
  294.     The device will format the requested tracks, filling each sector with
  295.     the contents of the buffer pointed to by io_Data. You
  296.     should do a read pass to verify the data.
  297.  
  298.     If you have a hard write error during a normal write, you may find it
  299.     possible to use the TD_FORMAT command to reformat the track as part of
  300.     your error recovery process. ETD_FORMAT will write the sector label
  301.     area if iotd_SecLabel is non-NULL.
  302.  
  303.    IO REQUEST INPUT
  304.     io_Device    preset by the call to OpenDevice()
  305.     io_Unit        preset by the call to OpenDevice()
  306.     io_Command    TD_FORMAT or ETD_FORMAT
  307.     io_Flags    0 or IOF_QUICK
  308.     io_Data        points to a buffer containing the data to write to the
  309.             track, must be at least as large as io_Length.
  310.     io_Length    number of bytes to format, must be a multiple of
  311.             (TD_SECTORS * NUMSEC).
  312.     io_Offset    byte offset from the start of the disk for the track to
  313.             format, must be a multiple of (TD_SECTORS * NUMSEC).
  314.     iotd_Count    (ETD_FORMAT only) maximum allowable change counter
  315.             value.
  316.     iotd_SecLabel    (ETD_FORMAT only) NULL or sector label buffer pointer.
  317.             If provided, the buffer must be a multiple of
  318.             (TD_LABELSIZE * NUMSEC).
  319.  
  320.    IO REQUEST RESULT
  321.     io_Error - 0 for success, or an error code as defined in
  322.                <devices/trackdisk.h>
  323.  
  324.    NOTES
  325.     Under versions of Kickstart earlier than V36, the io_Data had to
  326.     point to a buffer in chip memory. This restriction is no longer
  327.     present as of Kickstart V36 and beyond.
  328.  
  329.    SEE ALSO
  330.     CMD_WRITE, TD_RAWWRITE
  331.  
  332. trackdisk.device/TD_GETDRIVETYPE             trackdisk.device/TD_GETDRIVETYPE
  333.  
  334.    NAME
  335.     TD_GETDRIVETYPE -- return the type of disk drive for the unit that was
  336.                opened.
  337.  
  338.    FUNCTION
  339.     This command returns the type of the disk drive to the user.
  340.     This number will be a small integer and will come from the set of
  341.     DRIVEXXX constants defined in <devices/trackdisk.h>.
  342.  
  343.     The only way you can actually use this command is if the trackdisk
  344.     device understands the drive type of the hardware that is plugged in.
  345.     This is because the OpenDevice() call will fail if the trackdisk device
  346.     does not understand the drive type. To find raw drive identifiers see
  347.     the disk.resource's DR_GETUNITID entry point.
  348.  
  349.    IO REQUEST INPUT
  350.     io_Device    preset by the call to OpenDevice()
  351.     io_Unit        preset by the call to OpenDevice()
  352.     io_Command    TD_GETDRIVETYPE
  353.     io_Flags    0 or IOF_QUICK
  354.  
  355.    IO REQUEST RESULT
  356.     io_Error - 0 for success, or an error code as defined in
  357.                <devices/trackdisk.h>
  358.     io_Actual - if io_Error is 0 this contains the drive type connected to
  359.             this unit.
  360.  
  361.    SEE ALSO
  362.     TD_GETNUMTRACKS, <devices/trackdisk.h>
  363.  
  364. trackdisk.device/TD_GETGEOMETRY               trackdisk.device/TD_GETGEOMETRY
  365.  
  366.    NAME
  367.        TD_GETGEOMETRY -- return the geometry of the drive.
  368.  
  369.    FUNCTION
  370.     This command returns a full set of information about the
  371.     layout of the drive. The information is returned in the
  372.     DriveGeometry structure pointed to by io_Data.
  373.  
  374.    IO REQUEST INPUT
  375.     io_Device    preset by the call to OpenDevice()
  376.     io_Unit        preset by the call to OpenDevice()
  377.     io_Command    TD_GETGEOMETRY
  378.     io_Flags    0 or IOF_QUICK
  379.     io_Data        Pointer to a DriveGeometry structure
  380.     io_Length    sizeof(struct DriveGeometry)
  381.  
  382.    IO REQUEST RESULT
  383.     io_Error - 0 for success, or an error code as defined in
  384.                <devices/trackdisk.h>
  385.  
  386.    NOTE
  387.     This information may change when a disk in inserted when
  388.     certain hardware is present.
  389.  
  390.    SEE ALSO
  391.     TD_GETDRIVETYPE, TD_GETNUMTRACKS
  392.  
  393. trackdisk.device/TD_GETNUMTRACKS             trackdisk.device/TD_GETNUMTRACKS
  394.  
  395.    NAME
  396.     TD_GETNUMTRACKS -- return the number of tracks for the type of disk
  397.                drive for the unit that was opened.
  398.  
  399.    FUNCTION
  400.     This command returns the number of tracks that are available
  401.     on the disk unit.
  402.  
  403.    IO REQUEST INPUT
  404.     io_Device    preset by the call to OpenDevice()
  405.     io_Unit        preset by the call to OpenDevice()
  406.     io_Command    TD_GETNUMTRACKS
  407.     io_Flags    0 or IOF_QUICK
  408.  
  409.    IO REQUEST RESULT
  410.     io_Error - 0 for success, or an error code as defined in
  411.                <devices/trackdisk.h>
  412.     io_Actual - if io_Error is 0 this contains the drive type connected to
  413.             this unit.
  414.  
  415.    SEE ALSO
  416.     TD_GETDRIVETYPE
  417.  
  418. trackdisk.device/TD_MOTOR                           trackdisk.device/TD_MOTOR
  419.  
  420.    NAME
  421.     TD_MOTOR/ETD_MOTOR -- control the on/off state of a drive motor.
  422.  
  423.    FUNCTION
  424.     This command gives control over the disk motor. The motor may be
  425.     turned on or off. When it is on, the drive light automatically turns
  426.     on as well.
  427.  
  428.     If the motor is just being turned on, the device will delay the
  429.     proper amount of time to allow the drive to come up to speed. Normally,
  430.     turning the drive on is not necessary, the device does this
  431.     automatically if it receives a request when the motor is off. However,
  432.     turning the motor off is the programmer's responsibility.
  433.  
  434.     In addition, the standard instructions to the user are that it is safe
  435.     to remove a disk from a drive if and only if the motor is off (that is,
  436.     if the disk light is off).
  437.  
  438.    IO REQUEST INPUT
  439.     io_Device    preset by the call to OpenDevice()
  440.     io_Unit        preset by the call to OpenDevice()
  441.     io_Command    TD_MOTOR or ETD_MOTOR
  442.     io_Flags    0 or IOF_QUICK
  443.     io_Length    the requested state of the motor, 0 to turn the motor
  444.             off, and 1 to turn the motor on.
  445.     iotd_Count    (ETD_MOTOR only) maximum allowable change counter
  446.             value.
  447.  
  448.    IO REQUEST RESULT
  449.     io_Error - 0 for success, or an error code as defined in
  450.                <devices/trackdisk.h>
  451.     io_Actual - if io_Error is 0 this contains the previous state of the
  452.             drive motor.
  453.  
  454. trackdisk.device/TD_PROTSTATUS                 trackdisk.device/TD_PROTSTATUS
  455.  
  456.    NAME
  457.     TD_PROTSTATUS -- return whether the current disk is write-protected.
  458.  
  459.    FUNCTION
  460.     This command is used to determine whether the current disk is
  461.     write-protected.
  462.  
  463.    IO REQUEST INPUT
  464.     io_Device    preset by the call to OpenDevice()
  465.     io_Unit        preset by the call to OpenDevice()
  466.     io_Command    TD_PROTSTATUS
  467.     io_Flags    0 or IOF_QUICK
  468.  
  469.    IO REQUEST RESULT
  470.     io_Error - 0 for success, or an error code as defined in
  471.                <devices/trackdisk.h>
  472.     io_Actual - if io_Error is 0, this tells you whether the disk in the
  473.             drive is write-protected. 0 means the disk is NOT write-
  474.             protected, while any other value indicates it is.
  475.  
  476. trackdisk.device/TD_RAWREAD                       trackdisk.device/TD_RAWREAD
  477.  
  478.    NAME
  479.     TD_RAWREAD/ETD_RAWREAD -- read raw data from the disk.
  480.  
  481.    FUNCTION
  482.     These commands read a track of raw data from disk and deposits it in
  483.     the provided buffer. The data is taken straight from the disk with
  484.     no processing done on it. It will appear exactly as the bits come out
  485.     off the disk, hopefully in some legal MFM format.
  486.  
  487.     This interface is intended for sophisticated programmers only.
  488.     Commodore-Amiga reserves the right to make enhancements to the disk
  489.     format in the future. We will provide compatibility via the
  490.     CMD_READ and ETD_READ commands, anyone using TD_RAWREAD is
  491.     bypassing this upwards compatibility, and may thus stop working.
  492.  
  493.    IO REQUEST INPUT
  494.     io_Device    preset by the call to OpenDevice()
  495.     io_Unit        preset by the call to OpenDevice()
  496.     io_Command      TD_RAWREAD or ETD_RAWREAD.
  497.     io_Flags    if the IOTDB_INDEXSYNC bit is set then the driver
  498.             will make a best effort attempt to start reading
  499.             from the index mark.  Note that there will be at
  500.             least some delay, and perhaps a great deal of delay
  501.             (for example if interrupts have been disabled).
  502.     io_Length    Length of buffer in bytes, with a maximum of 32768
  503.             bytes.
  504.     io_Data        Pointer to CHIP memory buffer where raw track data is
  505.             to be deposited.
  506.     io_Offset    The number of the track to read in.
  507.     iotd_Count    (ETD_RAWREAD only) maximum allowable change counter
  508.             value.
  509.  
  510.    IO REQUEST RESULT
  511.     io_Error - 0 for success, or an error code as defined in
  512.                <devices/trackdisk.h>
  513.  
  514.    NOTES
  515.     The track buffer provided MUST be in CHIP memory
  516.  
  517.     There is a delay between the index pulse and the start of bits
  518.     coming in from the drive (e.g. dma started). This delay
  519.     is in the range of 135-200 microseconds. This delay breaks
  520.     down as follows: 55 microsecs is software interrupt overhead
  521.     (this is the time from interrupt to the write of the DSKLEN
  522.     register). 66 microsecs is one horizontal line delay (remember
  523.     that disk IO is synchronized with agnus' display fetches).
  524.     The last variable (0-65 microsecs) is an additional scan line
  525.     since DSKLEN is poked anywhere in the horizontal line. This leaves
  526.     15 microsecs unaccounted for...  Sigh.
  527.  
  528.     In short, You will almost never get bits within the first 135
  529.     microseconds of the index pulse, and may not get it until 200
  530.     microseconds. At 4 microsecs/bit, this works out to be between
  531.     4 and 7 bytes of user data of delay.
  532.  
  533.    BUGS
  534.     This command does not work reliably under versions of Kickstart
  535.     earlier than V36, especially on systems with 1 floppy drive.
  536.  
  537.    SEE ALSO
  538.     TD_RAWWRITE
  539.  
  540. trackdisk.device/TD_RAWWRITE                     trackdisk.device/TD_RAWWRITE
  541.  
  542.    NAME
  543.     TD_RAWWRITE/ETD_RAWWRITE -- write raw data to the disk.
  544.  
  545.    FUNCTION
  546.     This command writes a track of raw data from the provided buffer to
  547.     the specified track on disk. The data is copied straight to the disk
  548.     with no processing done on it. It will appear exactly on the disk as
  549.     it is in the memory buffer, hopefully in a legal MFM format.
  550.  
  551.     This interface is intended for sophisticated programmers only.
  552.     Commodore-Amiga reserves the right to make enhancements to the disk
  553.     format in the future. We will provide compatibility via the
  554.     CMD_WRITE and ETD_WRITE commands, anyone using TD_RAWWRITE is
  555.     bypassing this upwards compatibility, and may thus stop working.
  556.  
  557.    IO REQUEST INPUT
  558.     io_Device    preset by the call to OpenDevice()
  559.     io_Unit        preset by the call to OpenDevice()
  560.     io_Command      TD_RAWWRITE or ETD_RAWWRITE.
  561.     io_Flags    if the IOTDB_INDEXSYNC bit is set then the driver
  562.             will make a best effort attempt to start writing
  563.             from the index mark.  Note that there will be at
  564.             least some delay, and perhaps a great deal of delay
  565.             (for example if interrupts have been disabled).
  566.     io_Length    Length of buffer in bytes, with a maximum of 32768
  567.             bytes.
  568.     io_Data        Pointer to CHIP memory buffer where raw track data is
  569.             to be taken.
  570.     io_Offset    The number of the track to write to.
  571.     iotd_Count    (ETD_RAWWRITE only) maximum allowable change counter
  572.             value.
  573.  
  574.    IO REQUEST RESULT
  575.     io_Error - 0 for success, or an error code as defined in
  576.                <devices/trackdisk.h>
  577.  
  578.    NOTES
  579.     The track buffer provided MUST be in CHIP memory
  580.  
  581.     There is a delay between the index pulse and the start of bits
  582.     going out to the driver (e.g. write gate enabled). This delay
  583.     is in the range of 135-200 microseconds. This delay breaks
  584.     down as follows: 55 microsecs is software interrupt overhead
  585.     (this is the time from interrupt to the write of the DSKLEN
  586.     register). 66 microsecs is one horizontal line delay (remember
  587.     that disk IO is synchronized with agnus' display fetches).
  588.     The last variable (0-65 microsecs) is an additional scan line
  589.     since DSKLEN is poked anywhere in the horizontal line. This leaves
  590.     15 microsecs unaccounted for...  Sigh.
  591.  
  592.     In short, You will almost never get bits within the first 135
  593.     microseconds of the index pulse, and may not get it until 200
  594.     microseconds. At 4 microsecs/bit, this works out to be between
  595.     4 and 7 bytes of user data of delay.
  596.  
  597.    BUGS
  598.     This command does not work reliably under versions of Kickstart
  599.     earlier than V36, especially on systems with 1 floppy drive.
  600.  
  601.    SEE ALSO
  602.     TD_RAWREAD
  603.  
  604. trackdisk.device/TD_REMCHANGEINT             trackdisk.device/TD_REMCHANGEINT
  605.  
  606.    NAME
  607.     TD_REMCHANGEINT -- remove a disk change software interrupt handler.
  608.  
  609.    FUNCTION
  610.     This command removes a disk change software interrupt added
  611.     by a previous use of TD_ADDCHANGEINT.
  612.  
  613.    IO REQUEST INPUT
  614.     The same IO request used for TD_ADDCHANGEINT.
  615.  
  616.     io_Device    preset by the call to OpenDevice()
  617.     io_Unit        preset by the call to OpenDevice()
  618.     io_Command    TD_REMCHANGEINT
  619.     io_Flags    0
  620.     io_Length    sizeof(struct Interrupt)
  621.     io_Data        pointer to Interrupt structure
  622.  
  623.    IO REQUEST RESULT
  624.     io_Error - 0 for success, or an error code as defined in
  625.                <devices/trackdisk.h>
  626.  
  627.    BUGS
  628.     This command did not function properly under versions of Kickstart
  629.     earlier than V36. A valid workaround under these older versions of
  630.     Kickstart is:
  631.  
  632.         Forbid();
  633.         Remove(ioRequest);
  634.         Permit();
  635.  
  636.     Do not use this workaround in versions of Kickstart >= V36, use
  637.     TD_REMCHANGEINT instead (for future compatibility with V38+).
  638.  
  639.    SEE ALSO
  640.     TD_ADDCHANGEINT, <devices/trackdisk.h>
  641.  
  642. trackdisk.device/TD_SEEK                             trackdisk.device/TD_SEEK
  643.  
  644.    NAME
  645.     TD_SEEK/ETD_SEEK -- control positioning of the drive heads.
  646.  
  647.    FUNCTION
  648.     These commands are currently provided for internal diagnostics,
  649.     disk repair, and head cleaning only.
  650.  
  651.     TD_SEEK and ETD_SEEK move the drive heads to the track specified. The
  652.     io_Offset field should be set to the (byte) offset to which the seek is
  653.     to occur. TD_SEEK and ETD_SEEK do not verify their position until the
  654.     next read. That is, they only move the heads; they do not actually read
  655.     any data.
  656.  
  657.    IO REQUEST INPUT
  658.     io_Device    preset by the call to OpenDevice()
  659.     io_Unit        preset by the call to OpenDevice()
  660.     io_Command    TD_SEEK or ETD_SEEK
  661.     io_Flags    0 or IOF_QUICK
  662.     io_Offset    byte offset from the start of the disk describing
  663.             where to move the head to.
  664.     iotd_Count    (ETD_SEEK only) maximum allowable change counter
  665.             value.
  666.  
  667.    IO REQUEST RESULT
  668.     io_Error - 0 for success, or an error code as defined in
  669.                <devices/trackdisk.h>
  670.  
  671.