1541 Job Codes:

  This table contains the addresses and the assigned buffers:

     +-------+---------+----------+---------------+
     |  JOB  |  TRACK  |  SECTOR  |     BUFFER    |
     +-------+---------+----------+---------------+
     |  $00  |   $06   |   $07    |  $0300-$03FF  |
     |  $01  |   $08   |   $09    |  $0400-$04FF  |
     |  $02  |   $0A   |   $0B    |  $0500-$05FF  |
     |  $03  |   $0C   |   $0D    |  $0600-$06FF  |
     |  $04  |   $0E   |   $0F    |  $0700-$07FF  |
     |  $05  |   $10   |   $11    |   - no RAM -  |
     +-------+---------+----------+---------------+

  If a disk controller routine is to be performed in the interrupt, one
  writes the job code and the track and sector numbers of the block to be
  processed (if necessary) in the appropriate memory locations. Now the
  job code can be passed. This job code has a value greater than 127 (the
  7th bit is set). In order to wait until the job is finished, only the
  seventh bit need be tested. If this bit is cleared, the job is completed.
  The disk controller can perform the following jobs:

     +-------+---------+-------------------------------+
     |  JOB  |  NAME   |          DESCRIPTION          |
     +-------+---------+-------------------------------+
     |  $80  | READ    | Read sector                   |
     |  $90  | WRITE   | Write sector (includes $A0)   |
     |  $A0  | VERIFY  | Verify sector                 |
     |  $B0  | SEEK    | Find sector                   |
     |  $C0  | BUMP    | Bump, Find track 1            |
     |  $D0  | JUMP    | Execute program in buffer     |
     |  $E0  | EXECUTE | Execute program, first switch |
     |       |         | drive on and find track       |
     +-------+---------+-------------------------------+

  If the job ends in an error then the memory location with job command
  code is replaced with and error code. Here is a list of the error numbers:

     +------+--------------------------------+----------------------+
     | CODE | MEANING                        | DOS ERROR MESSAGE    |
     +------+--------------------------------+----------------------+
     | $01  | Everything OK                  | 00, OK               |
     | $02  | Header block not found         | 20, READ ERROR       |
     | $03  | SYNC not found                 | 21, READ ERROR       |
     | $04  | Data block not found           | 22, READ ERROR       |
     | $05  | Checksum error in data block   | 23, READ ERROR       |
     | $07  | Verify error                   | 25, WRITE ERROR      |
     | $08  | Disk write protected           | 26, WRITE PROTECT ON |
     | $09  | Checksum error in header block | 27, READ ERROR       |
     | $0B  | Id mismatch                    | 29, DISK ID MISMATCH |
     | $0F  | Disk not inserted              | 74, DRIVE NOT READY  |
     +------+--------------------------------+----------------------+

  Error codes $06 and $0A do not occur on the 1541.