diff options
Diffstat (limited to 'src/devices/sound/mos7360.cpp')
| -rw-r--r-- | src/devices/sound/mos7360.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/src/devices/sound/mos7360.cpp b/src/devices/sound/mos7360.cpp index ae0054c451a..decc41af452 100644 --- a/src/devices/sound/mos7360.cpp +++ b/src/devices/sound/mos7360.cpp @@ -956,6 +956,7 @@ void mos7360_device::write(offs_t offset, uint8_t data, int &cs0, int &cs1) m_y_end = m_y_begin + 192; } m_chargenaddr = CHARGENADDR; + set_clocks(); } break; case 0xff07: @@ -975,6 +976,7 @@ void mos7360_device::write(offs_t offset, uint8_t data, int &cs0, int &cs1) } DBG_LOG(3, "port_w", ("%s %s\n", data & 0x40 ? "ntsc" : "pal", data & 0x20 ? "hori freeze" : "")); m_chargenaddr = CHARGENADDR; + set_clocks(); } break; case 0xff08: @@ -1036,10 +1038,6 @@ void mos7360_device::write(offs_t offset, uint8_t data, int &cs0, int &cs1) m_reg[offset & 0x1f] = data; m_chargenaddr = CHARGENADDR; DBG_LOG(3, "port_w", ("chargen %.4x %s %d\n", CHARGENADDR, data & 2 ? "" : "doubleclock", data & 1)); - if (BIT(data, 1)) - m_cpu->set_clock(clock()); - else - m_cpu->set_clock(clock() * 2); } break; case 0xff14: @@ -1187,3 +1185,12 @@ int mos7360_device::cs1_r(offs_t offset) return 1; } + +void mos7360_device::set_clocks() +{ + bool ntsc = BIT(m_reg[0x07], 6); + set_clock_scale(1.0 / ((5 - ntsc) * 4)); + + bool doubleclock = !BIT(m_reg[0x06], 4); + m_cpu->set_clock(clock() << doubleclock); +} |
