From b8d767366db8800eb3cea028a3c896cebf4ef15c Mon Sep 17 00:00:00 2001 From: angelosa Date: Mon, 11 Sep 2023 03:26:12 +0200 Subject: video/pc_vga_cirrus.cpp: fix MT#08763 --- hash/pc98.xml | 2 +- src/devices/video/pc_vga_cirrus.cpp | 19 +++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/hash/pc98.xml b/hash/pc98.xml index 424ae097f6b..563dedd35bd 100644 --- a/hash/pc98.xml +++ b/hash/pc98.xml @@ -66656,7 +66656,7 @@ doujin?!? <doujin> diff --git a/src/devices/video/pc_vga_cirrus.cpp b/src/devices/video/pc_vga_cirrus.cpp index 089af6066fe..65bae06ea2d 100644 --- a/src/devices/video/pc_vga_cirrus.cpp +++ b/src/devices/video/pc_vga_cirrus.cpp @@ -118,6 +118,7 @@ void cirrus_gd5428_device::ramdac_hidden_mask_w(offs_t offset, u8 data) // TODO: '5428 reads do not lock the Hidden DAC m_hidden_dac_mode = data; m_hidden_dac_phase = 0; + cirrus_define_video_mode(); LOGMASKED(LOG_HDAC, "CL: Hidden DAC write %02x\n", data); return; } @@ -536,6 +537,7 @@ void cirrus_gd5428_device::sequencer_map(address_map &map) gc_locked = (data & 0x17) != 0x12; LOG("Cirrus register extensions %s\n", gc_locked ? "unlocked" : "locked"); m_lock_reg = data & 0x17; + cirrus_define_video_mode(); }) ); map(0x07, 0x07).lw8( @@ -788,12 +790,6 @@ void cirrus_gd5428_device::cirrus_define_video_mode() const XTAL xtal = XTAL(14'318'181); uint8_t clocksel = (vga.miscellaneous_output & 0xc) >> 2; - svga.rgb8_en = 0; - svga.rgb15_en = 0; - svga.rgb16_en = 0; - svga.rgb24_en = 0; - svga.rgb32_en = 0; - if(gc_locked || m_vclk_num[clocksel] == 0 || m_vclk_denom[clocksel] == 0) clock = ((vga.miscellaneous_output & 0xc) ? xtal*2: xtal*1.75).dvalue(); else @@ -804,9 +800,10 @@ void cirrus_gd5428_device::cirrus_define_video_mode() clock = (xtal * numerator / denominator / mul).dvalue(); } + svga.rgb8_en = svga.rgb15_en = svga.rgb16_en = svga.rgb24_en = svga.rgb32_en = 0; + if (!gc_locked) { - svga.rgb8_en = svga.rgb15_en = svga.rgb16_en = svga.rgb24_en = 0; // gambl186 relies on this, don't setup any hidden DAC but only this if (vga.sequencer.data[0x07] & 0x01) svga.rgb8_en = 1; @@ -867,13 +864,7 @@ uint16_t cirrus_gd5428_device::offset() uint16_t off = vga_device::offset(); // TODO: check true enable condition - if (svga.rgb8_en == 1) - off <<= 2; - if (svga.rgb16_en == 1) - off <<= 2; - if (svga.rgb24_en == 1) - off <<= 2; - if (svga.rgb32_en == 1) + if (svga.rgb8_en || svga.rgb15_en || svga.rgb16_en || svga.rgb24_en || svga.rgb32_en) off <<= 2; // popmessage("Offset: %04x %s %s ** -- actual: %04x",vga.crtc.offset,vga.crtc.dw?"DW":"--",vga.crtc.word_mode?"BYTE":"WORD",off); return off; -- cgit v1.2.3