Index: hw/fdc.c =================================================================== --- hw/fdc.c (revision 4215) +++ hw/fdc.c (working copy) @@ -460,10 +460,10 @@ uint8_t sra; uint8_t srb; uint8_t dor; + uint8_t tdr; uint8_t dsr; uint8_t msr; uint8_t cur_drv; - uint8_t bootsel; uint8_t status0; uint8_t status1; uint8_t status2; @@ -598,10 +598,10 @@ qemu_put_8s(f, &s->sra); qemu_put_8s(f, &s->srb); qemu_put_8s(f, &s->dor); + qemu_put_8s(f, &s->tdr); qemu_put_8s(f, &s->dsr); qemu_put_8s(f, &s->msr); qemu_put_8s(f, &s->cur_drv); - qemu_put_8s(f, &s->bootsel); qemu_put_8s(f, &s->status0); qemu_put_8s(f, &s->status1); qemu_put_8s(f, &s->status2); @@ -644,10 +644,10 @@ qemu_get_8s(f, &s->sra); qemu_get_8s(f, &s->srb); qemu_get_8s(f, &s->dor); + qemu_get_8s(f, &s->tdr); qemu_get_8s(f, &s->dsr); qemu_get_8s(f, &s->msr); qemu_get_8s(f, &s->cur_drv); - qemu_get_8s(f, &s->bootsel); qemu_get_8s(f, &s->status0); qemu_get_8s(f, &s->status1); qemu_get_8s(f, &s->status2); @@ -747,12 +747,12 @@ static inline fdrive_t *drv0 (fdctrl_t *fdctrl) { - return &fdctrl->drives[fdctrl->bootsel]; + return &fdctrl->drives[(fdctrl->tdr & FD_TDR_BOOTSEL) >> 2]; } static inline fdrive_t *drv1 (fdctrl_t *fdctrl) { - return &fdctrl->drives[1 - fdctrl->bootsel]; + return &fdctrl->drives[1 - ((fdctrl->tdr & FD_TDR_BOOTSEL) >> 2)]; } static fdrive_t *get_cur_drv (fdctrl_t *fdctrl) @@ -833,11 +833,8 @@ /* Tape drive register : 0x03 */ static uint32_t fdctrl_read_tape (fdctrl_t *fdctrl) { - uint32_t retval = 0; + uint32_t retval = fdctrl->tdr; - /* Disk boot selection indicator */ - retval |= fdctrl->bootsel << 2; - /* Tape indicators: never allowed */ FLOPPY_DPRINTF("tape drive register: 0x%02x\n", retval); return retval; @@ -852,7 +849,7 @@ } FLOPPY_DPRINTF("tape drive register set to 0x%02x\n", value); /* Disk boot selection indicator */ - fdctrl->bootsel = (value & FD_TDR_BOOTSEL) >> 2; + fdctrl->tdr = value & FD_TDR_BOOTSEL; /* Tape indicators: never allow */ }