The hardware requires a special sequence in order to start DMA to the disk. This sequence
prevents accidental writes to the disk. In short, the DMAEN bit in the DSKLEN register
must be tuned on twice in order to actually enable the disk DMA hardware. Here is the
sequence you should follow:
1. Enable disk DMA in the DMACON register (See Chapter 7 for more information)
2. Set DSKLEN to $4000, thereby forcing the DMA for the disk to be turned off.
3. Put the value you want into the DSKLEN register.
4. Write this value again into the DSKLEN register. This actually starts the DMA.
5. After the DMA is complete, set the DSKLEN register back to $4000, to prevent
accidental writes to the disk.
As each data word is transferred, the length value is decremented. After each transfer
occurs, the value of the pointer is incremented. The pointer points to the the next word of
data to written or read. When the length value counts down to 0, the transfer stops.
The recommended method of reading from the disk is to read an entire track into a buffer
and then search for the sector(s) that you want. Using the DSKSYNC register (described
below) will guarantee word alignment of the data. With this process you need to read from
the disk only once for the entire track. In a high speed loader, the step to the next head
can occur while the previous track is processed and check summed. With this method
there are no time-critical sections in reading data, other high-priority subsystems (such as
graphics or audio) are be allowed to run.
If you have too little memory for track buffering (or for some other reason decide not to
read a whole track at once), the disk hardware supports a limited set of sector-searching
facilities. There is a register that may be polled to examine the disk input stream.
There is a hardware bug that causes the last three bits of data sent to the disk to be lost.
Also, the last word in a disk-read DMA operation may not come in (that is, one less word
may be read than you asked for).
- Interface Hardware 241 -