Revision cd30b53d
b/hw/fdc.c | ||
---|---|---|
355 | 355 |
enum { |
356 | 356 |
FD_STATE_MULTI = 0x01, /* multi track flag */ |
357 | 357 |
FD_STATE_FORMAT = 0x02, /* format flag */ |
358 |
FD_STATE_SEEK = 0x04, /* seek flag */ |
|
359 | 358 |
}; |
360 | 359 |
|
361 | 360 |
enum { |
... | ... | |
497 | 496 |
}; |
498 | 497 |
|
499 | 498 |
#define FD_MULTI_TRACK(state) ((state) & FD_STATE_MULTI) |
500 |
#define FD_DID_SEEK(state) ((state) & FD_STATE_SEEK) |
|
501 | 499 |
#define FD_FORMAT_CMD(state) ((state) & FD_STATE_FORMAT) |
502 | 500 |
|
503 | 501 |
struct FDCtrl { |
... | ... | |
1422 | 1420 |
fdctrl->data_dir == FD_DIR_SCANL || |
1423 | 1421 |
fdctrl->data_dir == FD_DIR_SCANH) |
1424 | 1422 |
status2 = FD_SR2_SEH; |
1425 |
if (FD_DID_SEEK(fdctrl->data_state)) |
|
1426 |
status0 |= FD_SR0_SEEK; |
|
1427 | 1423 |
fdctrl->data_len -= len; |
1428 | 1424 |
fdctrl_stop_transfer(fdctrl, status0, status1, status2); |
1429 | 1425 |
transfer_error: |
... | ... | |
1517 | 1513 |
fdctrl->fifo[5] = ks; |
1518 | 1514 |
return; |
1519 | 1515 |
case 1: |
1520 |
fdctrl->data_state |= FD_STATE_SEEK;
|
|
1516 |
fdctrl->status0 |= FD_SR0_SEEK;
|
|
1521 | 1517 |
break; |
1522 | 1518 |
default: |
1523 | 1519 |
break; |
... | ... | |
1531 | 1527 |
if (cur_drv->sect == cur_drv->last_sect) { |
1532 | 1528 |
fdctrl->data_state &= ~FD_STATE_FORMAT; |
1533 | 1529 |
/* Last sector done */ |
1534 |
if (FD_DID_SEEK(fdctrl->data_state)) |
|
1535 |
fdctrl_stop_transfer(fdctrl, FD_SR0_SEEK, 0x00, 0x00); |
|
1536 |
else |
|
1537 |
fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00); |
|
1530 |
fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00); |
|
1538 | 1531 |
} else { |
1539 | 1532 |
/* More to do */ |
1540 | 1533 |
fdctrl->data_pos = 0; |
... | ... | |
1661 | 1654 |
fdctrl->data_state |= FD_STATE_MULTI; |
1662 | 1655 |
else |
1663 | 1656 |
fdctrl->data_state &= ~FD_STATE_MULTI; |
1664 |
fdctrl->data_state &= ~FD_STATE_SEEK; |
|
1665 | 1657 |
cur_drv->bps = |
1666 | 1658 |
fdctrl->fifo[2] > 7 ? 16384 : 128 << fdctrl->fifo[2]; |
1667 | 1659 |
#if 0 |
Also available in: Unified diff