void ide_controller_device::continue_write() { /* reset the totals */ buffer_offset = 0; /* clear the buffer ready flag */ status &= ~IDE_STATUS_BUFFER_READY; status |= IDE_STATUS_BUSY; if (command == IDE_COMMAND_WRITE_MULTIPLE_BLOCK) { if (sectors_until_int != 1) { /* ready to write now */ write_sector_done(); } else { /* set a timer to do the write */ timer_set(TIME_PER_SECTOR, TID_WRITE_SECTOR_DONE_CALLBACK); } } else { /* set a timer to do the write */ timer_set(TIME_PER_SECTOR, TID_WRITE_SECTOR_DONE_CALLBACK); } }
static void continue_write(struct ide_state *ide) { /* reset the totals */ ide->buffer_offset = 0; /* clear the buffer ready flag */ ide->status &= ~IDE_STATUS_BUFFER_READY; ide->status |= IDE_STATUS_BUSY; if (ide->command == IDE_COMMAND_WRITE_MULTIPLE_BLOCK) { if (ide->sectors_until_int != 1) { /* ready to write now */ write_sector_done(ide - idestate); } else { /* set a timer to do the write */ timer_set(TIME_PER_SECTOR, ide - idestate, write_sector_done); } } else { /* set a timer to do the write */ timer_set(TIME_PER_SECTOR, ide - idestate, write_sector_done); } }
void ide_controller_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { switch(id) { case TID_DELAYED_INTERRUPT: status &= ~IDE_STATUS_BUSY; set_irq(ASSERT_LINE); break; case TID_DELAYED_INTERRUPT_BUFFER_READY: status &= ~IDE_STATUS_BUSY; status |= IDE_STATUS_BUFFER_READY; set_irq(ASSERT_LINE); break; case TID_RESET_CALLBACK: reset(); break; case TID_SECURITY_ERROR_DONE: /* clear error state */ status &= ~IDE_STATUS_ERROR; status |= IDE_STATUS_DRIVE_READY; break; case TID_READ_SECTOR_DONE_CALLBACK: read_sector_done(); break; case TID_WRITE_SECTOR_DONE_CALLBACK: write_sector_done(); break; } }