|
| Read ID of all sectors in current track.
| This routine expects that motor on, drive selection
| and seek is already done.
|
| input: d0.b: 0 0 0 0 0 HD US1 US0 (binary)
| output: d0.l: min # sector (N C H R (2hex))
| d1.l: max # sector (N C H R (2hex))
| destroy:
| d0, d1
|
.text
.even
.globl check_fd_format
check_fd_format:
moveml %d2-%d7/%a1-%a3,%sp@-
tstl %d7
moveml %a7@+,%d2-%d7/%a1-%a3
jne _err_read_id
rts
|
| input: d6.b: 0 0 0 0 0 HD US1 US0 (binary)
| a1: FDC status addr
| a2: FDC data addr
| interrupt must be disabled
| output: d3.l: sector information: N C H R (2hex)
| d7.l: status (nonzero if error)
| Z flag: true if no error, false if error
| destroy:
| d3-d4, d7
|
read_id_sub:
| wait for FDC ready
fdc_wait_ready:
btst #NE7ST_CB_BIT,%a1@
jne fdc_wait_ready
fdc_send_command2:
jbsr fdc_wait_rqm
jmi fdc_send_command2
moveb %d6,%a2@ | X X X X X HD US1 US0 (binary)
| receive data
moveq #2,%d4
jbsr fdc_read_bytes
movel %d3,%d7 | d7: FDC status: X ST0 ST1 ST2 (2hex)
moveq #3,%d4
jbsr fdc_read_bytes | d3: sector info: C H R N (2hex)
rorl #8,%d3 | d3: sector info: N C H R (2hex)
andil #0x00f8ffff,%d7 | check status (must be zero)
rts