diff options
Diffstat (limited to 'src/devices/machine/mc146818.cpp')
-rw-r--r-- | src/devices/machine/mc146818.cpp | 61 |
1 files changed, 36 insertions, 25 deletions
diff --git a/src/devices/machine/mc146818.cpp b/src/devices/machine/mc146818.cpp index 4cdb4f37b5e..afe912a7d0d 100644 --- a/src/devices/machine/mc146818.cpp +++ b/src/devices/machine/mc146818.cpp @@ -412,31 +412,7 @@ void mc146818_device::update_timer() { int bypass; - switch (m_data[REG_A] & (REG_A_DV2 | REG_A_DV1 | REG_A_DV0)) - { - case 0: - bypass = 0; - break; - - case REG_A_DV0: - bypass = 2; - break; - - case REG_A_DV1: - bypass = 7; - break; - - case REG_A_DV2 | REG_A_DV1: - case REG_A_DV2 | REG_A_DV1 | REG_A_DV0: - bypass = 22; - break; - - default: - // TODO: other combinations of divider bits are used for test purposes only - bypass = 22; - break; - } - + bypass = get_timer_bypass(); attotime update_period = attotime::never; attotime update_interval = attotime::never; @@ -472,6 +448,41 @@ void mc146818_device::update_timer() m_periodic_timer->adjust(periodic_period, 0, periodic_interval); } +//--------------------------------------------------------------- +// get_timer_bypass - get main clock divisor based on A register +//--------------------------------------------------------------- + +int mc146818_device::get_timer_bypass() +{ + int bypass; + + switch (m_data[REG_A] & (REG_A_DV2 | REG_A_DV1 | REG_A_DV0)) + { + case 0: + bypass = 0; + break; + + case REG_A_DV0: + bypass = 2; + break; + + case REG_A_DV1: + bypass = 7; + break; + + case REG_A_DV2 | REG_A_DV1: + case REG_A_DV2 | REG_A_DV1 | REG_A_DV0: + bypass = 22; + break; + + default: + // TODO: other combinations of divider bits are used for test purposes only + bypass = 22; + break; + } + + return bypass; +} //------------------------------------------------- // update_irq - Update irq based on B & C register |