diff options
Diffstat (limited to 'src/devices/machine/upd765.cpp')
-rw-r--r-- | src/devices/machine/upd765.cpp | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index 0db88c35c6e..b65afca6de1 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -216,7 +216,7 @@ void upd765_family_device::device_start() for(int i=0; i != 4; i++) { char name[2]; - flopi[i].tm = timer_alloc(i); + flopi[i].tm = timer_alloc(FUNC(upd765_family_device::update_floppy), this); flopi[i].id = i; if(select_connected) { name[0] = '0'+i; @@ -257,7 +257,7 @@ void upd765_family_device::device_start() cur_live.fi = nullptr; if(ready_polled) { - poll_timer = timer_alloc(TIMER_DRIVE_READY_POLLING); + poll_timer = timer_alloc(FUNC(upd765_family_device::run_drive_ready_polling), this); poll_timer->adjust(attotime::from_usec(100), 0, attotime::from_usec(1024)); } else poll_timer = nullptr; @@ -767,7 +767,7 @@ void upd765_family_device::live_delay(int state) { cur_live.next_state = state; if(cur_live.tm != machine().time()) - cur_live.fi->tm->adjust(cur_live.tm - machine().time()); + cur_live.fi->tm->adjust(cur_live.tm - machine().time(), cur_live.fi->id); else live_sync(); } @@ -831,7 +831,7 @@ void upd765_family_device::live_run(attotime limit) // infinity looking for data too. limit = machine().time() + attotime::from_msec(1); - cur_live.fi->tm->adjust(attotime::from_msec(1)); + cur_live.fi->tm->adjust(attotime::from_msec(1), cur_live.fi->id); } } @@ -1618,9 +1618,9 @@ void upd765_family_device::seek_start(floppy_info &fi) seek_continue(fi); } -void upd765_family_device::delay_cycles(emu_timer *tm, int cycles) +void upd765_family_device::delay_cycles(floppy_info &fi, int cycles) { - tm->adjust(attotime::from_double(double(cycles)/cur_rate)); + fi.tm->adjust(attotime::from_double(double(cycles)/cur_rate), fi.id); } void upd765_family_device::seek_continue(floppy_info &fi) @@ -1634,7 +1634,7 @@ void upd765_family_device::seek_continue(floppy_info &fi) fi.dev->stp_w(0); } fi.sub_state = SEEK_WAIT_STEP_SIGNAL_TIME; - fi.tm->adjust(attotime::from_nsec(2500)); + fi.tm->adjust(attotime::from_nsec(2500), fi.id); return; case SEEK_WAIT_STEP_SIGNAL_TIME: @@ -1653,7 +1653,7 @@ void upd765_family_device::seek_continue(floppy_info &fi) fi.pcn++; } fi.sub_state = SEEK_WAIT_STEP_TIME; - delay_cycles(fi.tm, 500*(16-(spec >> 12))); + delay_cycles(fi, 500*(16-(spec >> 12))); return; case SEEK_WAIT_STEP_TIME: @@ -1684,7 +1684,7 @@ void upd765_family_device::seek_continue(floppy_info &fi) if(done) { fi.sub_state = SEEK_WAIT_DONE; // recalibrate and seek takes some time, even if we don't move - fi.tm->adjust(attotime::from_nsec((fi.main_state == RECALIBRATE) ? 20000 : 10000)); + fi.tm->adjust(attotime::from_nsec((fi.main_state == RECALIBRATE) ? 20000 : 10000), fi.id); return; } fi.sub_state = SEEK_MOVE; @@ -1796,7 +1796,7 @@ void upd765_family_device::read_data_continue(floppy_info &fi) switch(fi.sub_state) { case HEAD_LOAD: LOGSTATE("HEAD_LOAD\n"); - delay_cycles(fi.tm, 500*(spec & 0x00fe)); + delay_cycles(fi, 500*(spec & 0x00fe)); fi.sub_state = HEAD_LOAD_DONE; break; case HEAD_LOAD_DONE: @@ -1811,7 +1811,7 @@ void upd765_family_device::read_data_continue(floppy_info &fi) fi.dev->stp_w(0); } fi.sub_state = SEEK_WAIT_STEP_SIGNAL_TIME; - fi.tm->adjust(attotime::from_nsec(2500)); + fi.tm->adjust(attotime::from_nsec(2500), fi.id); return; case SEEK_WAIT_STEP_SIGNAL_TIME: @@ -1824,7 +1824,7 @@ void upd765_family_device::read_data_continue(floppy_info &fi) fi.dev->stp_w(1); fi.sub_state = SEEK_WAIT_STEP_TIME; - delay_cycles(fi.tm, 500*(16-(spec >> 12))); + delay_cycles(fi, 500*(16-(spec >> 12))); return; case SEEK_WAIT_STEP_TIME: @@ -2027,7 +2027,7 @@ void upd765_family_device::write_data_continue(floppy_info &fi) switch(fi.sub_state) { case HEAD_LOAD: LOGSTATE("HEAD_LOAD\n"); - delay_cycles(fi.tm, 500*(spec & 0x00fe)); + delay_cycles(fi, 500*(spec & 0x00fe)); fi.sub_state = HEAD_LOAD_DONE; break; case HEAD_LOAD_DONE: @@ -2168,7 +2168,7 @@ void upd765_family_device::read_track_continue(floppy_info &fi) switch(fi.sub_state) { case HEAD_LOAD: LOGSTATE("HEAD_LOAD\n"); - delay_cycles(fi.tm, 500*(spec & 0x00fe)); + delay_cycles(fi, 500*(spec & 0x00fe)); fi.sub_state = HEAD_LOAD_DONE; break; case HEAD_LOAD_DONE: @@ -2183,7 +2183,7 @@ void upd765_family_device::read_track_continue(floppy_info &fi) fi.dev->stp_w(0); } fi.sub_state = SEEK_WAIT_STEP_SIGNAL_TIME; - fi.tm->adjust(attotime::from_nsec(2500)); + fi.tm->adjust(attotime::from_nsec(2500), fi.id); return; case SEEK_WAIT_STEP_SIGNAL_TIME: @@ -2196,7 +2196,7 @@ void upd765_family_device::read_track_continue(floppy_info &fi) fi.dev->stp_w(1); fi.sub_state = SEEK_WAIT_STEP_TIME; - delay_cycles(fi.tm, 500*(16-(spec >> 12))); + delay_cycles(fi, 500*(16-(spec >> 12))); return; case SEEK_WAIT_STEP_TIME: @@ -2357,7 +2357,7 @@ void upd765_family_device::format_track_continue(floppy_info &fi) switch(fi.sub_state) { case HEAD_LOAD: LOGSTATE("HEAD_LOAD\n"); - delay_cycles(fi.tm, 500*(spec & 0x00fe)); + delay_cycles(fi, 500*(spec & 0x00fe)); fi.sub_state = HEAD_LOAD_DONE; break; case HEAD_LOAD_DONE: @@ -2442,7 +2442,7 @@ void upd765_family_device::read_id_continue(floppy_info &fi) switch(fi.sub_state) { case HEAD_LOAD: LOGSTATE("HEAD_LOAD\n"); - delay_cycles(fi.tm, 500*(spec & 0x00fe)); + delay_cycles(fi, 500*(spec & 0x00fe)); fi.sub_state = HEAD_LOAD_DONE; break; case HEAD_LOAD_DONE: @@ -2526,16 +2526,11 @@ std::string upd765_family_device::ttsn() const return machine().time().to_string(); } -void upd765_family_device::device_timer(emu_timer &timer, device_timer_id id, int param) +TIMER_CALLBACK_MEMBER(upd765_family_device::update_floppy) { - if(id == TIMER_DRIVE_READY_POLLING) { - run_drive_ready_polling(); - return; - } - live_sync(); - floppy_info &fi = flopi[id]; + floppy_info &fi = flopi[param]; switch(fi.sub_state) { case SEEK_WAIT_STEP_SIGNAL_TIME: fi.sub_state = SEEK_WAIT_STEP_SIGNAL_TIME_DONE; @@ -2548,7 +2543,7 @@ void upd765_family_device::device_timer(emu_timer &timer, device_timer_id id, in general_continue(fi); } -void upd765_family_device::run_drive_ready_polling() +TIMER_CALLBACK_MEMBER(upd765_family_device::run_drive_ready_polling) { if(main_phase != PHASE_CMD || (fifocfg & FIF_POLL) || command_pos) return; |