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.

This commit is contained in:
James Wallace 2012-07-18 19:06:35 +00:00
parent 2f5e49e09a
commit 4ca86a15cd
2 changed files with 26 additions and 14 deletions

View File

@ -177,7 +177,14 @@ void bfm_bd1_t::update_display()
{ {
for (int i =0; i<16; i++) 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]); 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 ) switch ( data & 0x04 )
{ {
case 0x00: // blank all case 0x00: // clear blanking
{ {
memset(m_chars, 0, sizeof(m_chars)); for (int i = 0; i < 15; i++)
memset(m_attrs, 0, sizeof(m_attrs)); {
m_attrs[i] = 0;
}
} }
break; break;
case 0x01: // blank inside window case 0x01: // blank inside window
if ( m_window_size > 0 ) if ( m_window_size > 0 )
{ {
memset(m_chars+m_window_start,0,m_window_size); for (int i = m_window_start; i < m_window_end ; i++)
memset(m_attrs+m_window_start,0,m_window_size); {
m_attrs[i] = AT_BLANK;
}
} }
break; break;
case 0x02: // blank outside window 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++) for (int i = 0; i < m_window_start; i++)
{ {
memset(m_chars+i,0,i); m_attrs[i] = AT_BLANK;
memset(m_attrs+i,0,i);
} }
} }
@ -215,17 +225,18 @@ void bfm_bd1_t::blank(int data)
{ {
for (int i = m_window_end; i < 15- m_window_end ; i++) for (int i = m_window_end; i < 15- m_window_end ; i++)
{ {
memset(m_chars+i,0,i); m_attrs[i] = AT_BLANK;
memset(m_attrs+i,0,i);
} }
} }
} }
break; break;
case 0x03: // blank entire display case 0x03: //blank all
{ {
memset(m_chars, 0, sizeof(m_chars)); for (int i = 0; i < 15; i++)
memset(m_attrs, 0, sizeof(m_attrs)); {
m_attrs[i] = AT_BLANK;
}
} }
break; break;
} }
@ -309,6 +320,7 @@ int bfm_bd1_t::write_char(int data)
break; break;
case 0xB0: // 0xB0 - 0xBF Clear display area case 0xB0: // 0xB0 - 0xBF Clear display area
popmessage("Clearing display area %x",data&0x03);
switch ( data & 0x03 ) switch ( data & 0x03 )
{ {
case 0x00: // clr nothing case 0x00: // clr nothing
@ -383,7 +395,6 @@ int bfm_bd1_t::write_char(int data)
} }
update_display(); update_display();
return 0; return 0;
} }
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////

View File

@ -34,6 +34,7 @@ public:
protected: protected:
static const UINT8 AT_NORMAL = 0x00; static const UINT8 AT_NORMAL = 0x00;
static const UINT8 AT_FLASH = 0x01; 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 static const UINT8 AT_FLASHED = 0x80; // set when character should be blinked off
int m_cursor_pos; int m_cursor_pos;