summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/k28.cpp
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2016-02-15 21:24:58 +0100
committer hap <happppp@users.noreply.github.com>2016-02-15 21:25:48 +0100
commitfec7343484e2154bc254951696862c0b749aae52 (patch)
tree809b0f53aad4d723888b397df2c59d9907a0204a /src/mame/drivers/k28.cpp
parent3f04c5f93295cd113181f28673ecb22575b4ce2d (diff)
New Working machine added
-------------------- Coleco Electronic Quarterback [hap, Sean Riddle]
Diffstat (limited to 'src/mame/drivers/k28.cpp')
-rw-r--r--src/mame/drivers/k28.cpp27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/mame/drivers/k28.cpp b/src/mame/drivers/k28.cpp
index 71c6b2389f4..0dddfd432c8 100644
--- a/src/mame/drivers/k28.cpp
+++ b/src/mame/drivers/k28.cpp
@@ -63,8 +63,8 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update();
void set_display_size(int maxx, int maxy);
+ void set_display_segmask(UINT32 digits, UINT32 mask);
void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety);
- void display_matrix_seg(int maxx, int maxy, UINT32 setx, UINT32 sety, UINT16 segmask);
bool m_power_on;
UINT8 m_inp_mux;
@@ -101,7 +101,7 @@ void k28_state::machine_start()
memset(m_display_state, 0, sizeof(m_display_state));
memset(m_display_cache, ~0, sizeof(m_display_cache));
memset(m_display_decay, 0, sizeof(m_display_decay));
- memset(m_display_segmask, ~0, sizeof(m_display_segmask)); // !
+ memset(m_display_segmask, 0, sizeof(m_display_segmask));
m_power_on = false;
m_inp_mux = 0;
@@ -237,6 +237,17 @@ void k28_state::set_display_size(int maxx, int maxy)
m_display_maxy = maxy;
}
+void k28_state::set_display_segmask(UINT32 digits, UINT32 mask)
+{
+ // set a segment mask per selected digit, but leave unselected ones alone
+ for (int i = 0; i < 0x20; i++)
+ {
+ if (digits & 1)
+ m_display_segmask[i] = mask;
+ digits >>= 1;
+ }
+}
+
void k28_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety)
{
set_display_size(maxx, maxy);
@@ -249,15 +260,6 @@ void k28_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety)
display_update();
}
-void k28_state::display_matrix_seg(int maxx, int maxy, UINT32 setx, UINT32 sety, UINT16 segmask)
-{
- // expects m_display_segmask to be not-0
- for (int y = 0; y < maxy; y++)
- m_display_segmask[y] &= segmask;
-
- display_matrix(maxx, maxy, setx, sety);
-}
-
/***************************************************************************
@@ -356,7 +358,8 @@ WRITE8_MEMBER(k28_state::mcu_prog_w)
// output 16-24: digit select
UINT16 digit_sel = (UINT16)(m_vfd_shiftreg >> 10) & 0x1ff;
- display_matrix_seg(16, 9, seg_data, digit_sel, 0x3fff);
+ set_display_segmask(0x1ff, 0x3fff);
+ display_matrix(16, 9, seg_data, digit_sel);
// output 25: power-off request on falling edge
if (~m_vfd_shiftreg & m_vfd_shiftreg_out & 0x200)