diff options
| author | 2026-04-10 00:06:17 +0200 | |
|---|---|---|
| committer | 2026-04-14 19:24:38 +0200 | |
| commit | f2906cca9481cca919972ebab6cde5766ff8c1b3 (patch) | |
| tree | c06827d3d38f98da2d03a9af50d1e75022047ee0 | |
| parent | 7c02a94955856f5c269c441245437380534c4efe (diff) | |
video/pc_vga_sis.cpp: hookup fast page address
| -rw-r--r-- | src/devices/video/pc_vga_sis.cpp | 32 | ||||
| -rw-r--r-- | src/devices/video/pc_vga_sis.h | 7 |
2 files changed, 27 insertions, 12 deletions
diff --git a/src/devices/video/pc_vga_sis.cpp b/src/devices/video/pc_vga_sis.cpp index 4a62e59fbbb..2fbbfd714fb 100644 --- a/src/devices/video/pc_vga_sis.cpp +++ b/src/devices/video/pc_vga_sis.cpp @@ -39,6 +39,7 @@ TODO (sis630): #define LOG_CRTC (1U << 2) // extended CRTC registers (overlay) #define LOG_PLL (1U << 3) // PLL calculation (verbose, needs dirty flag) #define LOG_LOCKED (1U << 4) // log lock/unlock sequences +#define LOG_DDRAW (1U << 5) // log (verbose) DirectDraw specifics #define VERBOSE (LOG_GENERAL | LOG_CRTC) //#define LOG_OUTPUT_FUNC osd_printf_info @@ -47,6 +48,7 @@ TODO (sis630): #define LOGCRTC(...) LOGMASKED(LOG_CRTC, __VA_ARGS__) #define LOGPLL(...) LOGMASKED(LOG_PLL, __VA_ARGS__) #define LOGLOCKED(...) LOGMASKED(LOG_LOCKED, __VA_ARGS__) +#define LOGDDRAW(...) LOGMASKED(LOG_DDRAW, __VA_ARGS__) #include "logmacro.h" @@ -89,6 +91,8 @@ device_memory_interface::space_config_vector sis6326_vga_device::memory_space_co return r; } +ALLOW_SAVE_TYPE(sis6326_vga_device::FAST_PAGE); + void sis6326_vga_device::device_start() { svga_device::device_start(); @@ -124,6 +128,7 @@ void sis6326_vga_device::device_start() save_item(NAME(m_page_size_select)); save_item(NAME(m_dram_fb_size)); save_item(NAME(m_fast_page_address_latch)); + save_item(NAME(m_fast_page_address)); save_item(NAME(m_ext_sr33)); save_item(NAME(m_ext_sr34)); save_item(NAME(m_ext_sr35)); @@ -198,7 +203,7 @@ void sis6326_vga_device::device_reset() m_vclk_int[0] = m_vclk_int[1] = 0; m_page_size_select = 0; m_dram_fb_size = 0; - m_fast_page_address_latch[0] = m_fast_page_address_latch[1] = m_fast_page_address_latch[2] = 0; + m_fast_page_address_latch.u = m_fast_page_address = 0; // irrelevant really m_crtc_hcounter_latch = m_crtc_vcounter_latch = 0xffff; @@ -283,14 +288,14 @@ void sis6326_vga_device::crtc_map(address_map &map) NAME([this] (offs_t offset) { if (!machine().side_effects_disabled()) { - LOG("CR20: Counter trigger read\n"); + LOGDDRAW("CR20: Counter trigger read\n"); crtc_strobe_latch(); } return 0xff; }), NAME([this] (offs_t offset, u8 data) { (void)data; - LOG("CR20: Counter trigger write\n"); + LOGDDRAW("CR20: Counter trigger write\n"); crtc_strobe_latch(); }) ); @@ -1155,16 +1160,17 @@ void sis6326_vga_device::sequencer_map(address_map &map) // Fast Page Flip Starting Address map(0x30, 0x32).lrw8( - NAME([this] (offs_t offset) { return m_fast_page_address_latch[offset]; }), + NAME([this] (offs_t offset) { return m_fast_page_address_latch.b[offset]; }), NAME([this] (offs_t offset, u8 data) { const bool latch_address = offset == 2; const u8 mask = latch_address ? 0x0f : 0xff; - m_fast_page_address_latch[offset] = data & mask; - LOG("SR%02X: Fast Page Flip Starting Address [%d] %02x\n", offset + 0x30, offset, data); - // TODO: Direct Draw obviously uses this - //if (BIT(m_dram_fb_size, 4) && latch_address) - //{ - //} + m_fast_page_address_latch.b[offset] = data & mask; + LOGDDRAW("SR%02X: Fast Page Flip Starting Address [%d] %02x\n", offset + 0x30, offset, data); + // testable in dxdiag full screen test & any Direct Draw app (except diablo?) + if (BIT(m_dram_fb_size, 4) && latch_address) + { + m_fast_page_address = m_fast_page_address_latch.u; + } }) ); @@ -1517,9 +1523,13 @@ void sis6326_vga_device::mem_w(offs_t offset, uint8_t data) svga_device::mem_w(offset, data); } -// TODO: similar to S3 variant, is there an enable bit? uint32_t sis6326_vga_device::latch_start_addr() { + if (BIT(m_dram_fb_size, 4)) + { + return m_fast_page_address; + } + // TODO: similar to S3 variant, is there an enable bit? return vga.crtc.start_addr_latch << (svga.rgb8_en ? 2 : 0); } diff --git a/src/devices/video/pc_vga_sis.h b/src/devices/video/pc_vga_sis.h index 474f913b2a0..d776458b47e 100644 --- a/src/devices/video/pc_vga_sis.h +++ b/src/devices/video/pc_vga_sis.h @@ -85,7 +85,12 @@ protected: u8 m_turbo_queue_address; u8 m_page_size_select; u8 m_dram_fb_size; - u8 m_fast_page_address_latch[3]; + union FAST_PAGE { + u8 b[4]; + u32 u; + }; + FAST_PAGE m_fast_page_address_latch; + u32 m_fast_page_address; u8 m_ext_sr33; u8 m_ext_sr34; u8 m_ext_sr35; |
