route16: don't do the color OR trick for route16 (see titlescreen reveal)

This commit is contained in:
hap 2024-12-18 14:56:42 +01:00
parent 5fd7703c9f
commit a80767f5c1
3 changed files with 26 additions and 26 deletions

View File

@ -923,7 +923,7 @@ void speakres_state::stratvox(machine_config &config)
m_cpu2->set_addrmap(AS_PROGRAM, &speakres_state::stratvox_cpu2_map);
/* video hardware */
m_screen->set_screen_update(FUNC(speakres_state::screen_update_jongpute));
m_screen->set_screen_update(FUNC(speakres_state::screen_update_stratvox));
/* sound hardware */
subdevice<ay8910_device>("ay8910")->port_a_write_callback().set(FUNC(speakres_state::stratvox_sn76477_w)); // SN76477 commands (SN76477 not populated on Route 16 PCB)
@ -974,7 +974,7 @@ void route16_state::jongpute(machine_config &config)
MCFG_MACHINE_START_OVERRIDE(route16_state, jongpute)
/* video hardware */
m_screen->set_screen_update(FUNC(route16_state::screen_update_jongpute));
m_screen->set_screen_update(FUNC(route16_state::screen_update_stratvox));
PALETTE(config.replace(), m_palette, palette_device::BGR_3BIT);
}

View File

@ -50,7 +50,7 @@ private:
uint32_t screen_update_route16(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
protected:
uint32_t screen_update_jongpute(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
uint32_t screen_update_stratvox(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
private:
void cpu1_io_map(address_map &map) ATTR_COLD;

View File

@ -47,16 +47,6 @@ void route16_state::out1_w(uint8_t data)
*
*************************************/
/*
* Game observation shows that Route 16 can blank each
* bitmap by setting bit 1 of the palette register.
* Since the schematics are missing the relevant pages, I
* cannot confirm how this works, but I am 99% sure the bit 1
* would be connected to A7 of the color PROM. Since the
* color PROMs contain 0 in the upper half, this would produce
* a black output.
*/
uint32_t route16_state::screen_update_route16(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
uint8_t *color_prom1 = &memregion("proms")->base()[0x000];
@ -72,23 +62,31 @@ uint32_t route16_state::screen_update_route16(screen_device &screen, bitmap_rgb3
for (int i = 0; i < 4; i++)
{
// Game observation shows that Route 16 can blank each bitmap by setting bit 1 of the
// palette register. Since the schematics are missing the relevant pages, I cannot confirm
// how this works, but I am 99% sure the bit 1 would be connected to A7 of the color PROM.
// Since the color PROMs contain 0 in the upper half, this would produce a black output.
uint8_t color1 = color_prom1[((m_palette_1 << 6) & 0x80) |
(m_palette_1 << 2) |
((data1 >> 3) & 0x02) |
((data1 >> 0) & 0x01)];
/* bit 7 of the 2nd color is the OR of the 1st color bits 0 and 1 - this is a guess */
uint8_t color2 = color_prom2[((m_palette_2 << 6) & 0x80) | (((color1 << 6) & 0x80) | ((color1 << 7) & 0x80)) |
uint8_t color2 = color_prom2[((m_palette_2 << 6) & 0x80) |
(m_palette_2 << 2) |
((data2 >> 3) & 0x02) |
((data2 >> 0) & 0x01)];
/* the final color is the OR of the two colors (verified) */
// the final color is the OR of the two colors (verified)
uint8_t final_color = (color1 | color2) & 0x07;
if (m_flipscreen)
bitmap.pix(255 - y, 255 - x) = m_palette->pen_color(final_color);
else
{
y = 255 - y;
x = 255 - x;
}
if (cliprect.contains(x, y))
bitmap.pix(y, x) = m_palette->pen_color(final_color);
x++;
@ -101,11 +99,9 @@ uint32_t route16_state::screen_update_route16(screen_device &screen, bitmap_rgb3
}
/*
* The Stratovox video connections have been verified from the schematics
*/
// The Stratovox video connections have been verified from the schematics
uint32_t route16_state::screen_update_jongpute(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
uint32_t route16_state::screen_update_stratvox(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
uint8_t *color_prom1 = &memregion("proms")->base()[0x000];
uint8_t *color_prom2 = &memregion("proms")->base()[0x100];
@ -124,18 +120,22 @@ uint32_t route16_state::screen_update_jongpute(screen_device &screen, bitmap_rgb
((data1 >> 3) & 0x02) |
((data1 >> 0) & 0x01)];
/* bit 7 of the 2nd color is the OR of the 1st color bits 0 and 1 (verified) */
// bit 7 of the 2nd color is the OR of the 1st color bits 0 and 1 (verified)
uint8_t color2 = color_prom2[(((data1 << 3) & 0x80) | ((data1 << 7) & 0x80)) |
(m_palette_2 << 2) |
((data2 >> 3) & 0x02) |
((data2 >> 0) & 0x01)];
/* the final color is the OR of the two colors */
// the final color is the OR of the two colors
uint8_t final_color = (color1 | color2) & 0x07;
if (m_flipscreen)
bitmap.pix(255 - y, 255 - x) = m_palette->pen_color(final_color);
else
{
y = 255 - y;
x = 255 - x;
}
if (cliprect.contains(x, y))
bitmap.pix(y, x) = m_palette->pen_color(final_color);
x++;