The controller in this example is made by a company called Xebec.
To make a request of the disk controller, you must create a request record. This is simply a structure that contains the details of the request you are making. It looks like the following:
Commands are of the sort that you would expect, including commands to:
The disk unit number specifies the disk that we are talking about (there may be several attached to the same controller). Bytes 2 and 3 together make up the address of the block we are talking about. Byte 4 indicates how many blocks we are talking about (XINU only supports single-block operations).
Once this structure is set up specifying the details of the command you would like to invoke on the disk, you need to tell the disk controller where to find the structure. The disk controller, like the SLU, contains a set of registers that look like the following:
The CSR contains several bits to control the disk device. Among them are:
The DAR points to a memory address that the data is either taken from (in a write) or placed in (in a read).
The CAR is the address of the structure created above (the request record).
To initiate a disk operation, the request record is first constructed with the details of the request (the disk number, the type of request, the disk block to make the request to, etc). Then the device registers are filled in with the DMA address at which to read/write data, and the address of the request record. Finally, the G bit is set to start the request rolling.