video/pc_vga.cpp: fix Read Mode 1 target color for comparison

* fixes at least transparent pen sprite-like in ibm5150:lombrall & ibm5150:intsocch and missing text in ibm5150:pcglobe sets
This commit is contained in:
angelosa 2022-12-03 22:37:44 +01:00
parent 5903b7d269
commit f5fb38acf1

View File

@ -2072,20 +2072,22 @@ uint8_t vga_device::mem_r(offs_t offset)
if (vga.gc.read_mode) if (vga.gc.read_mode)
{ {
uint8_t byte,layer; // In Read Mode 1 latch is checked against this
uint8_t fill_latch; // cfr. lombrall & intsocch where they RMW sprite-like objects
data=0; // and anything outside this formula goes transparent.
const u8 target_color = (vga.gc.color_compare & vga.gc.color_dont_care);
data = 0;
for(byte=0;byte<8;byte++) for(u8 byte = 0; byte < 8; byte++)
{ {
fill_latch = 0; u8 fill_latch = 0;
for(layer=0;layer<4;layer++) for(u8 layer = 0; layer < 4; layer++)
{ {
if(vga.gc.latch[layer] & 1 << byte) if(vga.gc.latch[layer] & 1 << byte)
fill_latch |= 1 << layer; fill_latch |= 1 << layer;
} }
fill_latch &= vga.gc.color_dont_care; fill_latch &= vga.gc.color_dont_care;
if(fill_latch == vga.gc.color_compare) if(fill_latch == target_color)
data |= 1 << byte; data |= 1 << byte;
} }
} }