From e5a0695790131883119d8c4e263d83379e90aab6 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Mon, 17 Mar 2025 18:39:21 +0200 Subject: [PATCH] Fix Mediator 1200TX second PCI window. --- pci.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/pci.cpp b/pci.cpp index 8ba12671..1ff2d832 100644 --- a/pci.cpp +++ b/pci.cpp @@ -1233,6 +1233,13 @@ static void REGPARAM2 pci_bridge_bput(uaecptr addr, uae_u32 b) } } +static void mediator_set_window_offset_window(struct pci_bridge *pcib, int window) +{ + pcib->memory_start_offset[window] = ((pcib->window[0] & 0xe000) | (pcib->window[window] & 0x1fff)) << 16; + pcib->memory_start_offset[window] -= window * 0x00400000; + pcib->memory_start_offset[window] -= pcib->baseaddress; + pcib->memory_start_offset[window] = 0 - pcib->memory_start_offset[window]; +} static void mediator_set_window_offset(struct pci_bridge *pcib, uae_u16 v) { @@ -1246,21 +1253,15 @@ static void mediator_set_window_offset(struct pci_bridge *pcib, uae_u16 v) if (pcib->multiwindow) { // TX has 2x4M banks if (v & 0x0010) { + // Second bank limit: 3 top bits come from window 0. pcib->window[1] = v & 0xffc0; - pcib->memory_start_offset[1] = pcib->window[1] << 16; - pcib->memory_start_offset[1] -= 0x00400000; - pcib->memory_start_offset[1] -= pcib->baseaddress; - pcib->memory_start_offset[1] = 0 - pcib->memory_start_offset[1]; } - } else { - v &= ~0x0010; } if (!(v& 0x0010)) { pcib->window[0] = v & 0xffc0; - pcib->memory_start_offset[0] = pcib->window[0] << 16; - pcib->memory_start_offset[0] -= pcib->baseaddress; - pcib->memory_start_offset[0] = 0 - pcib->memory_start_offset[0]; } + mediator_set_window_offset_window(pcib, 0); + mediator_set_window_offset_window(pcib, 1); } } -- 2.47.3