diff options
Diffstat (limited to 'src/devices/machine/am2901b.h')
-rw-r--r-- | src/devices/machine/am2901b.h | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/src/devices/machine/am2901b.h b/src/devices/machine/am2901b.h new file mode 100644 index 00000000000..5e1979258d8 --- /dev/null +++ b/src/devices/machine/am2901b.h @@ -0,0 +1,105 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/*************************************************************************** + + am2901b.h + AMD Am2901B / Am2901C + Four-Bit Bipolar Microprocessor Slice + +***************************************************************************/ + +#ifndef MAME_MACHINE_AM2901B_H +#define MAME_MACHINE_AM2901B_H + +#pragma once + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> am2901b_device + +class am2901b_device : public device_t +{ +public: + // construction/destruction + am2901b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + + auto y() { return m_y.bind(); } + auto g() { return m_g.bind(); } + auto p() { return m_p.bind(); } + auto q0() { return m_q0.bind(); } + auto q3() { return m_q3.bind(); } + auto ram0() { return m_ram0.bind(); } + auto ram3() { return m_ram3.bind(); } + auto ovr() { return m_ovr.bind(); } + auto f0() { return m_f0.bind(); } + auto f3() { return m_f3.bind(); } + + void a_w(uint8_t data); + void b_w(uint8_t data); + void d_w(uint8_t data); + void i_w(uint16_t data); + + void q0_w(int state); + void q3_w(int state); + void ram0_w(int state); + void ram3_w(int state); + void ci_w(int state); + void cp_w(int state); + +private: + // device-level overrides + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + + void execute(); + void disassemble(); + + uint8_t m_a[16]; + uint8_t m_d; + uint8_t m_q; + uint16_t m_i; + + uint8_t m_a_addr; + uint8_t m_b_addr; + + uint8_t m_a_latch; + uint8_t m_b_latch; + + bool m_q0_in; + bool m_q3_in; + bool m_ram0_in; + bool m_ram3_in; + bool m_ci; + bool m_cp; + + uint8_t m_y_out; + bool m_g_out; + bool m_p_out; + bool m_q0_out; + bool m_q3_out; + bool m_ram0_out; + bool m_ram3_out; + bool m_ovr_out; + bool m_f0_out; + bool m_f3_out; + bool m_co_out; + + devcb_write8 m_y; + devcb_write_line m_g; + devcb_write_line m_p; + devcb_write_line m_q0; + devcb_write_line m_q3; + devcb_write_line m_ram0; + devcb_write_line m_ram3; + devcb_write_line m_ovr; + devcb_write_line m_f0; + devcb_write_line m_f3; + devcb_write_line m_co; +}; + +// device type definition +DECLARE_DEVICE_TYPE(AM2901B, am2901b_device) + +#endif // MAME_MACHINE_AM2901B_H |