summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/sm510/sm510.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/sm510/sm510.h')
-rw-r--r--src/devices/cpu/sm510/sm510.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/devices/cpu/sm510/sm510.h b/src/devices/cpu/sm510/sm510.h
index a3c4129329f..cb963e87fa8 100644
--- a/src/devices/cpu/sm510/sm510.h
+++ b/src/devices/cpu/sm510/sm510.h
@@ -36,6 +36,10 @@
#define MCFG_SM510_WRITE_R_CB(_devcb) \
devcb = &sm510_base_device::set_write_r_callback(*device, DEVCB_##_devcb);
+// R port can be set to direct control with a mask option (default false)
+#define MCFG_SM510_R_DIRECT_CONTROL(_direct) \
+ sm510_base_device::set_r_direct_control(*device, _direct);
+
// LCD segment outputs: H1-4 as offset(low), a/b/c 1-16 as data d0-d15
#define MCFG_SM510_WRITE_SEGA_CB(_devcb) \
devcb = &sm510_base_device::set_write_sega_callback(*device, DEVCB_##_devcb);
@@ -81,8 +85,8 @@ a1 48 | | 28 b10
H4 49 | | 27 a11
H3 50 | | 26 b11
H2 51 | | 25 a12
-H1 52 | SM510 | 24 b12
-S1 53 | SM511 | 23 a13
+H1 52 | | 24 b12
+S1 53 | SM510 | 23 a13
S2 54 | | 22 b13
S3 55 | | 21 a14
S4 56 | | 20 b14
@@ -108,6 +112,7 @@ public:
, m_prgwidth(prgwidth)
, m_datawidth(datawidth)
, m_stack_levels(stack_levels)
+ , m_r_direct(false)
, m_lcd_ram_a(*this, "lcd_ram_a"), m_lcd_ram_b(*this, "lcd_ram_b"), m_lcd_ram_c(*this, "lcd_ram_c")
, m_write_sega(*this), m_write_segb(*this), m_write_segc(*this), m_write_segbs(*this)
, m_melody_rom(*this, "melody")
@@ -123,6 +128,7 @@ public:
template <class Object> static devcb_base &set_read_b_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_read_b.set_callback(std::forward<Object>(cb)); }
template <class Object> static devcb_base &set_write_s_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_write_s.set_callback(std::forward<Object>(cb)); }
template <class Object> static devcb_base &set_write_r_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_write_r.set_callback(std::forward<Object>(cb)); }
+ static void set_r_direct_control(device_t &device, bool direct) { downcast<sm510_base_device &>(device).m_r_direct = direct; }
template <class Object> static devcb_base &set_write_sega_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_write_sega.set_callback(std::forward<Object>(cb)); }
template <class Object> static devcb_base &set_write_segb_callback(device_t &device, Object &&cb) { return downcast<sm510_base_device &>(device).m_write_segb.set_callback(std::forward<Object>(cb)); }
@@ -179,6 +185,7 @@ protected:
bool m_skip;
u8 m_w;
u8 m_r, m_r_out;
+ bool m_r_direct;
bool m_k_active;
bool m_halt;
int m_clk_div;