From: Toni Wilen Date: Mon, 17 Mar 2025 16:39:21 +0000 (+0200) Subject: Fix Mediator 1200TX second PCI window. X-Git-Tag: 6000~143 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=e5a0695790131883119d8c4e263d83379e90aab6;p=francis%2Fwinuae.git Fix Mediator 1200TX second PCI window. --- 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); } }