From 4ca86a15cd90824a02cb7c54185690feeabbad6b Mon Sep 17 00:00:00 2001 From: James Wallace Date: Wed, 18 Jul 2012 19:06:35 +0000 Subject: [PATCH] Fixed blanking issues in bfm_bd1.c that caused problems for Scorpion 4 games. More work needs to be done to determine just how the SC4 version differs. --- src/mame/machine/bfm_bd1.c | 39 ++++++++++++++++++++++++-------------- src/mame/machine/bfm_bd1.h | 1 + 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/mame/machine/bfm_bd1.c b/src/mame/machine/bfm_bd1.c index 0263ef7ee97..708110fc611 100644 --- a/src/mame/machine/bfm_bd1.c +++ b/src/mame/machine/bfm_bd1.c @@ -177,7 +177,14 @@ void bfm_bd1_t::update_display() { for (int i =0; i<16; i++) { - m_outputs[i] = set_display(m_chars[i]); + if (m_attrs[i] != AT_BLANK) + { + m_outputs[i] = set_display(m_chars[i]); + } + else + { + m_outputs[i] = 0; + } output_set_indexed_value("vfd", (m_port_val*16) + i, m_outputs[i]); } } @@ -186,17 +193,21 @@ void bfm_bd1_t::blank(int data) { switch ( data & 0x04 ) { - case 0x00: // blank all + case 0x00: // clear blanking { - memset(m_chars, 0, sizeof(m_chars)); - memset(m_attrs, 0, sizeof(m_attrs)); + for (int i = 0; i < 15; i++) + { + m_attrs[i] = 0; + } } break; case 0x01: // blank inside window if ( m_window_size > 0 ) { - memset(m_chars+m_window_start,0,m_window_size); - memset(m_attrs+m_window_start,0,m_window_size); + for (int i = m_window_start; i < m_window_end ; i++) + { + m_attrs[i] = AT_BLANK; + } } break; case 0x02: // blank outside window @@ -206,8 +217,7 @@ void bfm_bd1_t::blank(int data) { for (int i = 0; i < m_window_start; i++) { - memset(m_chars+i,0,i); - memset(m_attrs+i,0,i); + m_attrs[i] = AT_BLANK; } } @@ -215,17 +225,18 @@ void bfm_bd1_t::blank(int data) { for (int i = m_window_end; i < 15- m_window_end ; i++) { - memset(m_chars+i,0,i); - memset(m_attrs+i,0,i); + m_attrs[i] = AT_BLANK; } } } break; - case 0x03: // blank entire display + case 0x03: //blank all { - memset(m_chars, 0, sizeof(m_chars)); - memset(m_attrs, 0, sizeof(m_attrs)); + for (int i = 0; i < 15; i++) + { + m_attrs[i] = AT_BLANK; + } } break; } @@ -309,6 +320,7 @@ int bfm_bd1_t::write_char(int data) break; case 0xB0: // 0xB0 - 0xBF Clear display area + popmessage("Clearing display area %x",data&0x03); switch ( data & 0x03 ) { case 0x00: // clr nothing @@ -383,7 +395,6 @@ int bfm_bd1_t::write_char(int data) } update_display(); - return 0; } /////////////////////////////////////////////////////////////////////////// diff --git a/src/mame/machine/bfm_bd1.h b/src/mame/machine/bfm_bd1.h index 1f6d25f46c3..011edcab7d4 100644 --- a/src/mame/machine/bfm_bd1.h +++ b/src/mame/machine/bfm_bd1.h @@ -34,6 +34,7 @@ public: protected: static const UINT8 AT_NORMAL = 0x00; static const UINT8 AT_FLASH = 0x01; + static const UINT8 AT_BLANK = 0x02; static const UINT8 AT_FLASHED = 0x80; // set when character should be blinked off int m_cursor_pos;