summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/mc146818.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/mc146818.cpp')
-rw-r--r--src/devices/machine/mc146818.cpp61
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