mirror of
https://github.com/holub/mame
synced 2025-05-22 21:58:57 +03:00
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:
parent
2f5e49e09a
commit
4ca86a15cd
@ -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;
|
||||
}
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user