summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/i86/i186.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/i86/i186.h')
-rw-r--r--src/devices/cpu/i86/i186.h51
1 files changed, 38 insertions, 13 deletions
diff --git a/src/devices/cpu/i86/i186.h b/src/devices/cpu/i86/i186.h
index 1ef28afca6e..b3159454138 100644
--- a/src/devices/cpu/i86/i186.h
+++ b/src/devices/cpu/i86/i186.h
@@ -9,6 +9,8 @@
DECLARE_DEVICE_TYPE(I80186, i80186_cpu_device)
DECLARE_DEVICE_TYPE(I80188, i80188_cpu_device)
+DECLARE_DEVICE_TYPE(AM186EM, am186em_device)
+DECLARE_DEVICE_TYPE(AM188EM, am188em_device)
class i80186_cpu_device : public i8086_common_cpu_device
{
@@ -21,18 +23,19 @@ public:
auto tmrout0_handler() { return m_out_tmrout0_func.bind(); }
auto tmrout1_handler() { return m_out_tmrout1_func.bind(); }
auto irmx_irq_cb() { return m_irmx_irq_cb.bind(); }
+ auto irqa_cb() { return m_irqa_cb.bind(); }
template <typename... T> void set_irmx_irq_ack(T &&... args) { m_irmx_irq_ack.set(std::forward<T>(args)...); }
IRQ_CALLBACK_MEMBER(int_callback);
IRQ_CALLBACK_MEMBER(inta_callback);
- DECLARE_WRITE_LINE_MEMBER(drq0_w) { m_dma[0].drq_state = state; }
- DECLARE_WRITE_LINE_MEMBER(drq1_w) { m_dma[1].drq_state = state; }
- DECLARE_WRITE_LINE_MEMBER(tmrin0_w) { external_tmrin(0, state); }
- DECLARE_WRITE_LINE_MEMBER(tmrin1_w) { external_tmrin(1, state); }
- DECLARE_WRITE_LINE_MEMBER(int0_w) { external_int(0, state); }
- DECLARE_WRITE_LINE_MEMBER(int1_w) { external_int(1, state); }
- DECLARE_WRITE_LINE_MEMBER(int2_w) { external_int(2, state); }
- DECLARE_WRITE_LINE_MEMBER(int3_w) { external_int(3, state); }
+ void drq0_w(int state) { m_dma[0].drq_state = state; }
+ void drq1_w(int state) { m_dma[1].drq_state = state; }
+ void tmrin0_w(int state) { external_tmrin(0, state); }
+ void tmrin1_w(int state) { external_tmrin(1, state); }
+ void int0_w(int state) { external_int(0, state); }
+ void int1_w(int state) { external_int(1, state); }
+ void int2_w(int state) { external_int(2, state); }
+ void int3_w(int state) { external_int(3, state); }
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;
@@ -65,7 +68,6 @@ protected:
virtual void execute_run() override;
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 uint32_t execute_input_lines() const noexcept override { return 1; }
virtual uint8_t fetch() override;
uint32_t update_pc() { return m_pc = (m_sregs[CS] << 4) + m_ip; }
@@ -96,6 +98,8 @@ private:
uint16_t internal_port_r(offs_t offset, uint16_t mem_mask = ~0);
void internal_port_w(offs_t offset, uint16_t data);
+ TIMER_CALLBACK_MEMBER(timer_elapsed);
+
struct mem_state
{
uint16_t lower;
@@ -145,10 +149,6 @@ private:
mem_state m_mem;
bool m_last_dma;
- static const device_timer_id TIMER_INT0 = 0;
- static const device_timer_id TIMER_INT1 = 1;
- static const device_timer_id TIMER_INT2 = 2;
-
uint16_t m_reloc;
address_space_config m_program_config;
@@ -160,6 +160,7 @@ private:
devcb_write_line m_out_tmrout0_func;
devcb_write_line m_out_tmrout1_func;
devcb_write_line m_irmx_irq_cb;
+ devcb_write_line m_irqa_cb;
device_irq_acknowledge_delegate m_irmx_irq_ack;
};
@@ -170,4 +171,28 @@ public:
i80188_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
};
+class am186em_device : public i80186_cpu_device
+{
+public:
+ // construction/destruction
+ am186em_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_execute_interface overrides
+ virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return clocks; }
+ virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return cycles; }
+};
+
+class am188em_device : public i80186_cpu_device
+{
+public:
+ // construction/destruction
+ am188em_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ // device_execute_interface overrides
+ virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return clocks; }
+ virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return cycles; }
+};
+
#endif // MAME_CPU_I86_I186_H