fdc.c (3b35d4542c8537a9269f6372df531ced6c960084) | fdc.c (a9262f551eba44d4d0f9e396d7124c059a93e204) |
---|---|
1/* 2 * QEMU Floppy disk emulator (Intel 82078) 3 * 4 * Copyright (c) 2003, 2007 Jocelyn Mayer 5 * Copyright (c) 2008 Hervé Poussineau 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal --- 1614 unchanged lines hidden (view full) --- 1623 FLOPPY_DPRINTF("copy %d bytes (%d %d %d) %d pos %d %02x " 1624 "(%d-0x%08x 0x%08x)\n", len, dma_len, fdctrl->data_pos, 1625 fdctrl->data_len, GET_CUR_DRV(fdctrl), cur_drv->head, 1626 cur_drv->track, cur_drv->sect, fd_sector(cur_drv), 1627 fd_sector(cur_drv) * FD_SECTOR_LEN); 1628 if (fdctrl->data_dir != FD_DIR_WRITE || 1629 len < FD_SECTOR_LEN || rel_pos != 0) { 1630 /* READ & SCAN commands and realign to a sector for WRITE */ | 1/* 2 * QEMU Floppy disk emulator (Intel 82078) 3 * 4 * Copyright (c) 2003, 2007 Jocelyn Mayer 5 * Copyright (c) 2008 Hervé Poussineau 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal --- 1614 unchanged lines hidden (view full) --- 1623 FLOPPY_DPRINTF("copy %d bytes (%d %d %d) %d pos %d %02x " 1624 "(%d-0x%08x 0x%08x)\n", len, dma_len, fdctrl->data_pos, 1625 fdctrl->data_len, GET_CUR_DRV(fdctrl), cur_drv->head, 1626 cur_drv->track, cur_drv->sect, fd_sector(cur_drv), 1627 fd_sector(cur_drv) * FD_SECTOR_LEN); 1628 if (fdctrl->data_dir != FD_DIR_WRITE || 1629 len < FD_SECTOR_LEN || rel_pos != 0) { 1630 /* READ & SCAN commands and realign to a sector for WRITE */ |
1631 if (blk_pread(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo, 1632 BDRV_SECTOR_SIZE, 0) < 0) { | 1631 if (blk_pread(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE, 1632 fdctrl->fifo, 0) < 0) { |
1633 FLOPPY_DPRINTF("Floppy: error getting sector %d\n", 1634 fd_sector(cur_drv)); 1635 /* Sure, image size is too small... */ 1636 memset(fdctrl->fifo, 0, FD_SECTOR_LEN); 1637 } 1638 } 1639 switch (fdctrl->data_dir) { 1640 case FD_DIR_READ: --- 10 unchanged lines hidden (view full) --- 1651 fdctrl_stop_transfer(fdctrl, 1652 FD_SR0_ABNTERM | FD_SR0_SEEK, FD_SR1_NW, 1653 0x00); 1654 goto transfer_error; 1655 } 1656 1657 k->read_memory(fdctrl->dma, nchan, fdctrl->fifo + rel_pos, 1658 fdctrl->data_pos, len); | 1633 FLOPPY_DPRINTF("Floppy: error getting sector %d\n", 1634 fd_sector(cur_drv)); 1635 /* Sure, image size is too small... */ 1636 memset(fdctrl->fifo, 0, FD_SECTOR_LEN); 1637 } 1638 } 1639 switch (fdctrl->data_dir) { 1640 case FD_DIR_READ: --- 10 unchanged lines hidden (view full) --- 1651 fdctrl_stop_transfer(fdctrl, 1652 FD_SR0_ABNTERM | FD_SR0_SEEK, FD_SR1_NW, 1653 0x00); 1654 goto transfer_error; 1655 } 1656 1657 k->read_memory(fdctrl->dma, nchan, fdctrl->fifo + rel_pos, 1658 fdctrl->data_pos, len); |
1659 if (blk_pwrite(cur_drv->blk, fd_offset(cur_drv), 1660 fdctrl->fifo, BDRV_SECTOR_SIZE, 0) < 0) { | 1659 if (blk_pwrite(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE, 1660 fdctrl->fifo, 0) < 0) { |
1661 FLOPPY_DPRINTF("error writing sector %d\n", 1662 fd_sector(cur_drv)); 1663 fdctrl_stop_transfer(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK, 0x00, 0x00); 1664 goto transfer_error; 1665 } 1666 break; 1667 case FD_DIR_VERIFY: 1668 /* VERIFY commands */ --- 66 unchanged lines hidden (view full) --- 1735 assert(fdctrl->msr & FD_MSR_NONDMA); 1736 if (pos == 0) { 1737 if (fdctrl->data_pos != 0) 1738 if (!fdctrl_seek_to_next_sect(fdctrl, cur_drv)) { 1739 FLOPPY_DPRINTF("error seeking to next sector %d\n", 1740 fd_sector(cur_drv)); 1741 return 0; 1742 } | 1661 FLOPPY_DPRINTF("error writing sector %d\n", 1662 fd_sector(cur_drv)); 1663 fdctrl_stop_transfer(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK, 0x00, 0x00); 1664 goto transfer_error; 1665 } 1666 break; 1667 case FD_DIR_VERIFY: 1668 /* VERIFY commands */ --- 66 unchanged lines hidden (view full) --- 1735 assert(fdctrl->msr & FD_MSR_NONDMA); 1736 if (pos == 0) { 1737 if (fdctrl->data_pos != 0) 1738 if (!fdctrl_seek_to_next_sect(fdctrl, cur_drv)) { 1739 FLOPPY_DPRINTF("error seeking to next sector %d\n", 1740 fd_sector(cur_drv)); 1741 return 0; 1742 } |
1743 if (blk_pread(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo, 1744 BDRV_SECTOR_SIZE, 0) | 1743 if (blk_pread(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE, 1744 fdctrl->fifo, 0) |
1745 < 0) { 1746 FLOPPY_DPRINTF("error getting sector %d\n", 1747 fd_sector(cur_drv)); 1748 /* Sure, image size is too small... */ 1749 memset(fdctrl->fifo, 0, FD_SECTOR_LEN); 1750 } 1751 } 1752 --- 62 unchanged lines hidden (view full) --- 1815 case 1: 1816 fdctrl->status0 |= FD_SR0_SEEK; 1817 break; 1818 default: 1819 break; 1820 } 1821 memset(fdctrl->fifo, 0, FD_SECTOR_LEN); 1822 if (cur_drv->blk == NULL || | 1745 < 0) { 1746 FLOPPY_DPRINTF("error getting sector %d\n", 1747 fd_sector(cur_drv)); 1748 /* Sure, image size is too small... */ 1749 memset(fdctrl->fifo, 0, FD_SECTOR_LEN); 1750 } 1751 } 1752 --- 62 unchanged lines hidden (view full) --- 1815 case 1: 1816 fdctrl->status0 |= FD_SR0_SEEK; 1817 break; 1818 default: 1819 break; 1820 } 1821 memset(fdctrl->fifo, 0, FD_SECTOR_LEN); 1822 if (cur_drv->blk == NULL || |
1823 blk_pwrite(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo, 1824 BDRV_SECTOR_SIZE, 0) < 0) { | 1823 blk_pwrite(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE, 1824 fdctrl->fifo, 0) < 0) { |
1825 FLOPPY_DPRINTF("error formatting sector %d\n", fd_sector(cur_drv)); 1826 fdctrl_stop_transfer(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK, 0x00, 0x00); 1827 } else { 1828 if (cur_drv->sect == cur_drv->last_sect) { 1829 fdctrl->data_state &= ~FD_STATE_FORMAT; 1830 /* Last sector done */ 1831 fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00); 1832 } else { --- 406 unchanged lines hidden (view full) --- 2239 /* For DMA requests, RQM should be cleared during execution phase, so 2240 * we would have errored out above. */ 2241 assert(fdctrl->msr & FD_MSR_NONDMA); 2242 2243 /* FIFO data write */ 2244 if (pos == FD_SECTOR_LEN - 1 || 2245 fdctrl->data_pos == fdctrl->data_len) { 2246 cur_drv = get_cur_drv(fdctrl); | 1825 FLOPPY_DPRINTF("error formatting sector %d\n", fd_sector(cur_drv)); 1826 fdctrl_stop_transfer(fdctrl, FD_SR0_ABNTERM | FD_SR0_SEEK, 0x00, 0x00); 1827 } else { 1828 if (cur_drv->sect == cur_drv->last_sect) { 1829 fdctrl->data_state &= ~FD_STATE_FORMAT; 1830 /* Last sector done */ 1831 fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00); 1832 } else { --- 406 unchanged lines hidden (view full) --- 2239 /* For DMA requests, RQM should be cleared during execution phase, so 2240 * we would have errored out above. */ 2241 assert(fdctrl->msr & FD_MSR_NONDMA); 2242 2243 /* FIFO data write */ 2244 if (pos == FD_SECTOR_LEN - 1 || 2245 fdctrl->data_pos == fdctrl->data_len) { 2246 cur_drv = get_cur_drv(fdctrl); |
2247 if (blk_pwrite(cur_drv->blk, fd_offset(cur_drv), fdctrl->fifo, 2248 BDRV_SECTOR_SIZE, 0) < 0) { | 2247 if (blk_pwrite(cur_drv->blk, fd_offset(cur_drv), BDRV_SECTOR_SIZE, 2248 fdctrl->fifo, 0) < 0) { |
2249 FLOPPY_DPRINTF("error writing sector %d\n", 2250 fd_sector(cur_drv)); 2251 break; 2252 } 2253 if (!fdctrl_seek_to_next_sect(fdctrl, cur_drv)) { 2254 FLOPPY_DPRINTF("error seeking to next sector %d\n", 2255 fd_sector(cur_drv)); 2256 break; --- 137 unchanged lines hidden --- | 2249 FLOPPY_DPRINTF("error writing sector %d\n", 2250 fd_sector(cur_drv)); 2251 break; 2252 } 2253 if (!fdctrl_seek_to_next_sect(fdctrl, cur_drv)) { 2254 FLOPPY_DPRINTF("error seeking to next sector %d\n", 2255 fd_sector(cur_drv)); 2256 break; --- 137 unchanged lines hidden --- |