+fdctrl_t *pc98_fdctrl_init (DriveInfo **fds)
+{
+ ISADevice *dev;
+ fdctrl_t *fdctrl;
+ int i;
+
+ dev = isa_create("pc98-fdc");
+ qdev_prop_set_drive(&dev->qdev, "driveA", fds[0]);
+ qdev_prop_set_drive(&dev->qdev, "driveB", fds[1]);
+ if (qdev_init(&dev->qdev)< 0)
+ return NULL;
+ fdctrl =&(DO_UPCAST(fdctrl_isabus_t, busdev, dev)->state);
+ fdctrl->if_mode = PC98_MODE_FDDEXC | PC98_MODE_PORTEXC;
+ fdctrl->dor |= FD_DOR_DMAEN;
+
+ for (i = 0; i< MAX_FD; i++) {
+ fdrive_t *drv =&fdctrl->drives[i];
+ if (drv->dinfo) {
+ fdctrl_media_changed(drv);
+ }
+ }
+ fdctrl->media_timer = qemu_new_timer(vm_clock,
+ pc98_fdctrl_media_timer, fdctrl);
+ qemu_mod_timer(fdctrl->media_timer,
+ qemu_get_clock(vm_clock) + get_ticks_per_sec() / 10);