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