summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6502
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-10-25 10:19:13 -0400
committer AJR <ajrhacker@users.noreply.github.com>2020-10-25 10:19:13 -0400
commit57baad2dab651c428063bd14cb5adfd3b321ace0 (patch)
tree1e8c3007090d74f756ed641ec02a629108449dce /src/devices/cpu/m6502
parent16a0a0a21c1b39d25cc6945228979794e13443de (diff)
M740 family updates
- Add cycle clock dividers - Remove SO input line (not apparently supported on any Mitsubishi model)
Diffstat (limited to 'src/devices/cpu/m6502')
-rw-r--r--src/devices/cpu/m6502/m3745x.cpp7
-rw-r--r--src/devices/cpu/m6502/m3745x.h10
-rw-r--r--src/devices/cpu/m6502/m5074x.cpp8
-rw-r--r--src/devices/cpu/m6502/m5074x.h14
-rw-r--r--src/devices/cpu/m6502/m740.h3
5 files changed, 15 insertions, 27 deletions
diff --git a/src/devices/cpu/m6502/m3745x.cpp b/src/devices/cpu/m6502/m3745x.cpp
index 218e16853ec..2532e25d8ab 100644
--- a/src/devices/cpu/m6502/m3745x.cpp
+++ b/src/devices/cpu/m6502/m3745x.cpp
@@ -170,10 +170,6 @@ void m3745x_device::execute_set_input(int inputnum, int state)
m_intreq1 &= ~IRQ1_INT3;
}
break;
-
- case M3745X_SET_OVERFLOW: // the base 740 class can handle this
- m740_device::execute_set_input(M740_SET_OVERFLOW, state);
- break;
}
recalc_irqs();
@@ -389,8 +385,7 @@ void m3745x_device::adc_w(offs_t offset, uint8_t data)
// starting a conversion? this takes 50 cycles.
if (!(m_adctrl & ADCTRL_COMPLETE))
{
- double hz = (double)clock() / 50.0;
- m_timers[TIMER_ADC]->adjust(attotime::from_hz(hz));
+ m_timers[TIMER_ADC]->adjust(cycles_to_attotime(50));
}
break;
}
diff --git a/src/devices/cpu/m6502/m3745x.h b/src/devices/cpu/m6502/m3745x.h
index 92d31030236..73e16cb0117 100644
--- a/src/devices/cpu/m6502/m3745x.h
+++ b/src/devices/cpu/m6502/m3745x.h
@@ -33,9 +33,7 @@ public:
{
M3745X_INT1_LINE = INPUT_LINE_IRQ0,
M3745X_INT2_LINE,
- M3745X_INT3_LINE,
-
- M3745X_SET_OVERFLOW = M740_SET_OVERFLOW
+ M3745X_INT3_LINE
};
const address_space_config m_program_config;
@@ -61,9 +59,13 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
- virtual void execute_set_input(int inputnum, int state) override;
virtual space_config_vector memory_space_config() const override;
+ // device_execute_interface overrides
+ virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 4 - 1) / 4; }
+ virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 4); }
+ virtual void execute_set_input(int inputnum, int state) override;
+
void send_port(uint8_t offset, uint8_t data);
uint8_t read_port(uint8_t offset);
diff --git a/src/devices/cpu/m6502/m5074x.cpp b/src/devices/cpu/m6502/m5074x.cpp
index 5d7690b60a3..8fa3ea306bc 100644
--- a/src/devices/cpu/m6502/m5074x.cpp
+++ b/src/devices/cpu/m6502/m5074x.cpp
@@ -174,10 +174,6 @@ void m5074x_device::execute_set_input(int inputnum, int state)
m_intctrl &= ~IRQ_INTREQ;
}
break;
-
- case M5074X_SET_OVERFLOW: // the base 740 class can handle this
- m740_device::execute_set_input(M740_SET_OVERFLOW, state);
- break;
}
recalc_irqs();
@@ -606,10 +602,6 @@ void m50753_device::execute_set_input(int inputnum, int state)
m_intctrl &= ~IRQ_50753_INT2REQ;
}
break;
-
- case M5074X_SET_OVERFLOW: // the base 740 class can handle this
- m740_device::execute_set_input(M740_SET_OVERFLOW, state);
- break;
}
recalc_irqs();
diff --git a/src/devices/cpu/m6502/m5074x.h b/src/devices/cpu/m6502/m5074x.h
index ffb57873b15..605a4f6c651 100644
--- a/src/devices/cpu/m6502/m5074x.h
+++ b/src/devices/cpu/m6502/m5074x.h
@@ -21,9 +21,7 @@ class m5074x_device : public m740_device
enum
{
- M5074X_INT1_LINE = INPUT_LINE_IRQ0,
-
- M5074X_SET_OVERFLOW = M740_SET_OVERFLOW
+ M5074X_INT1_LINE = INPUT_LINE_IRQ0
};
enum
@@ -56,9 +54,13 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
- virtual void execute_set_input(int inputnum, int state) override;
virtual space_config_vector memory_space_config() const override;
+ // device_execute_interface overrides (TODO: /8 in M50740A/41/52/57/58 SLW mode)
+ virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 4 - 1) / 4; }
+ virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 4); }
+ virtual void execute_set_input(int inputnum, int state) override;
+
void send_port(uint8_t offset, uint8_t data);
uint8_t read_port(uint8_t offset);
@@ -110,9 +112,7 @@ public:
enum
{
M50753_INT1_LINE = INPUT_LINE_IRQ0,
- M50753_INT2_LINE = INPUT_LINE_IRQ1,
-
- M5074X_SET_OVERFLOW = M740_SET_OVERFLOW
+ M50753_INT2_LINE = INPUT_LINE_IRQ1
};
template <std::size_t Bit> auto ad_in() { return m_ad_in[Bit].bind(); }
diff --git a/src/devices/cpu/m6502/m740.h b/src/devices/cpu/m6502/m740.h
index fc5371ebb4c..fd263442a22 100644
--- a/src/devices/cpu/m6502/m740.h
+++ b/src/devices/cpu/m6502/m740.h
@@ -33,8 +33,7 @@ public:
M740_INT12_LINE, // (ffe4)
M740_INT13_LINE, // (ffe2)
M740_INT14_LINE, // (ffe0)
- M740_MAX_INT_LINE = M740_INT14_LINE,
- M740_SET_OVERFLOW = m6502_device::V_LINE
+ M740_MAX_INT_LINE = M740_INT14_LINE
};
m740_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);