trunk/src/emu/cpu/nec/v25.h
| r31194 | r31195 | |
| 41 | 41 | // device-level overrides |
| 42 | 42 | virtual void device_start(); |
| 43 | 43 | virtual void device_reset(); |
| 44 | virtual void device_post_load() { notify_clock_changed(); } |
| 44 | 45 | |
| 45 | 46 | // device_execute_interface overrides |
| 47 | virtual UINT64 execute_clocks_to_cycles(UINT64 clocks) const { return clocks / m_PCK; } |
| 48 | virtual UINT64 execute_cycles_to_clocks(UINT64 cycles) const { return cycles * m_PCK; } |
| 46 | 49 | virtual UINT32 execute_min_cycles() const { return 1; } |
| 47 | 50 | virtual UINT32 execute_max_cycles() const { return 80; } |
| 48 | 51 | virtual UINT32 execute_input_lines() const { return 1; } |
trunk/src/emu/cpu/nec/v25sfr.c
| r31194 | r31195 | |
| 192 | 192 | { |
| 193 | 193 | if(d & 0x80) |
| 194 | 194 | { |
| 195 | | tmp = m_TM0 * ((d & 0x40) ? 128 : 12 ); |
| 196 | | time = attotime::from_hz(clock()) * tmp; |
| 195 | tmp = m_PCK * m_TM0 * ((d & 0x40) ? 128 : 12 ); |
| 196 | time = attotime::from_hz(unscaled_clock()) * tmp; |
| 197 | 197 | m_timers[0]->adjust(time, INTTU0); |
| 198 | 198 | } |
| 199 | 199 | else |
| r31194 | r31195 | |
| 201 | 201 | |
| 202 | 202 | if(d & 0x20) |
| 203 | 203 | { |
| 204 | | tmp = m_MD0 * ((d & 0x10) ? 128 : 12 ); |
| 205 | | time = attotime::from_hz(clock()) * tmp; |
| 204 | tmp = m_PCK * m_MD0 * ((d & 0x10) ? 128 : 12 ); |
| 205 | time = attotime::from_hz(unscaled_clock()) * tmp; |
| 206 | 206 | m_timers[1]->adjust(time, INTTU1); |
| 207 | 207 | } |
| 208 | 208 | else |
| r31194 | r31195 | |
| 212 | 212 | { |
| 213 | 213 | if(d & 0x80) |
| 214 | 214 | { |
| 215 | | tmp = m_MD0 * ((d & 0x40) ? 128 : 6 ); |
| 216 | | time = attotime::from_hz(clock()) * tmp; |
| 215 | tmp = m_PCK * m_MD0 * ((d & 0x40) ? 128 : 6 ); |
| 216 | time = attotime::from_hz(unscaled_clock()) * tmp; |
| 217 | 217 | m_timers[0]->adjust(time, INTTU0, time); |
| 218 | 218 | m_timers[1]->adjust(attotime::never); |
| 219 | 219 | m_TM0 = m_MD0; |
| r31194 | r31195 | |
| 229 | 229 | m_TMC1 = d & 0xC0; |
| 230 | 230 | if(d & 0x80) |
| 231 | 231 | { |
| 232 | | tmp = m_MD1 * ((d & 0x40) ? 128 : 6 ); |
| 233 | | time = attotime::from_hz(clock()) * tmp; |
| 232 | tmp = m_PCK * m_MD1 * ((d & 0x40) ? 128 : 6 ); |
| 233 | time = attotime::from_hz(unscaled_clock()) * tmp; |
| 234 | 234 | m_timers[2]->adjust(time, INTTU2, time); |
| 235 | 235 | m_TM1 = m_MD1; |
| 236 | 236 | } |
| r31194 | r31195 | |
| 261 | 261 | logerror(" Warning: invalid clock divider\n"); |
| 262 | 262 | m_PCK = 8; |
| 263 | 263 | } |
| 264 | | set_clock_scale(1.0 / m_PCK); |
| 265 | 264 | tmp = m_PCK << m_TB; |
| 266 | 265 | time = attotime::from_hz(unscaled_clock()) * tmp; |
| 267 | 266 | m_timers[3]->adjust(time, INTTB, time); |
| 267 | notify_clock_changed(); /* make device_execute_interface pick up the new clocks_to_cycles() */ |
| 268 | 268 | logerror(" Internal RAM %sabled\n", (m_RAMEN ? "en" : "dis")); |
| 269 | 269 | logerror(" Time base set to 2^%d\n", m_TB); |
| 270 | 270 | logerror(" Clock divider set to %d\n", m_PCK); |