From a80767f5c1236709d28df7a961a8618e4543b45a Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 18 Dec 2024 14:56:42 +0100 Subject: [PATCH] route16: don't do the color OR trick for route16 (see titlescreen reveal) --- src/mame/sunelectronics/route16.cpp | 4 +-- src/mame/sunelectronics/route16.h | 2 +- src/mame/sunelectronics/route16_v.cpp | 46 +++++++++++++-------------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/mame/sunelectronics/route16.cpp b/src/mame/sunelectronics/route16.cpp index e2a59ff8c9f..b567df08eb1 100644 --- a/src/mame/sunelectronics/route16.cpp +++ b/src/mame/sunelectronics/route16.cpp @@ -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")->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); } diff --git a/src/mame/sunelectronics/route16.h b/src/mame/sunelectronics/route16.h index 25542bdac4f..56ddfc5e89d 100644 --- a/src/mame/sunelectronics/route16.h +++ b/src/mame/sunelectronics/route16.h @@ -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; diff --git a/src/mame/sunelectronics/route16_v.cpp b/src/mame/sunelectronics/route16_v.cpp index d58f2b0a6ad..9ceb5cb0865 100644 --- a/src/mame/sunelectronics/route16_v.cpp +++ b/src/mame/sunelectronics/route16_v.cpp @@ -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++;