uint8_t status1, uint8_t status2)
{
FDrive *cur_drv;
-
cur_drv = get_cur_drv(fdctrl);
- fdctrl->status0 = status0 | FD_SR0_SEEK | (cur_drv->head << 2) |
- GET_CUR_DRV(fdctrl);
+
+ fdctrl->status0 &= ~(FD_SR0_DS0 | FD_SR0_DS1 | FD_SR0_HEAD);
+ fdctrl->status0 |= GET_CUR_DRV(fdctrl);
+ if (cur_drv->head) {
+ fdctrl->status0 |= FD_SR0_HEAD;
+ }
+ fdctrl->status0 |= status0;
FLOPPY_DPRINTF("transfer status: %02x %02x %02x (%02x)\n",
status0, status1, status2, fdctrl->status0);
}
st0 = floppy_recv();
- if (st0 != 0x60) {
+ if (st0 != 0x40) {
ret = 1;
}
outb(FLOPPY_BASE + reg_dor, inb(FLOPPY_BASE + reg_dor) & ~0x08);
send_seek(0);
- ret = send_read_no_dma_command(1, 0x24); /* FIXME: should be 0x04 */
+ ret = send_read_no_dma_command(1, 0x04);
g_assert(ret == 0);
}
outb(FLOPPY_BASE + reg_dor, inb(FLOPPY_BASE + reg_dor) & ~0x08);
send_seek(0);
- ret = send_read_no_dma_command(18, 0x24); /* FIXME: should be 0x04 */
+ ret = send_read_no_dma_command(18, 0x04);
g_assert(ret == 0);
}