From d9cfdd5f02b8a99762d47befd52b4c8b402e7e01 Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 16 Aug 2023 01:57:17 +0200 Subject: video/s3virge.cpp: add DPSDxax ROP, fix regression with Win98SE 256 colors --- src/devices/video/s3virge.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/devices/video/s3virge.cpp b/src/devices/video/s3virge.cpp index 4e369e53fc2..16f75c859c7 100644 --- a/src/devices/video/s3virge.cpp +++ b/src/devices/video/s3virge.cpp @@ -255,7 +255,7 @@ void s3virge_vga_device::crtc_map(address_map &map) }), NAME([this] (offs_t offset, u8 data) { s3.cr53 = data; - //m_linear_config_changed_cb(s3virge.linear_address_enable); + m_linear_config_changed_cb(s3virge.linear_address_enable); }) ); map(0x58, 0x58).lrw8( @@ -585,6 +585,10 @@ void s3virge_vga_device::poly3d_step() } +// ROP names are in Reverse Polish +// Upper cases denotes an entity (Dst, Src, Pat) +// Lower cases the type of instruction (xor, not, and, or) +// leftmost lowercase applies to rightmost uppercase first. uint32_t s3virge_vga_device::GetROP(uint8_t rop, uint32_t src, uint32_t dst, uint32_t pat) { uint32_t ret = 0; @@ -621,6 +625,9 @@ uint32_t s3virge_vga_device::GetROP(uint8_t rop, uint32_t src, uint32_t dst, uin case 0xbb: // DSno ret = (dst | (~src)); break; + case 0xca: // DPSDxax (moneynet install screen, no effective change?) + ret = ((src ^ dst) & pat) ^ dst; + break; case 0xcc: ret = src; break; -- cgit v1.2.3