]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Autoconfig memory bank validation.
authorToni Wilen <twilen@winuae.net>
Sat, 1 Aug 2015 07:00:45 +0000 (10:00 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 1 Aug 2015 07:00:45 +0000 (10:00 +0300)
cd32_fmv.cpp
pci.cpp

index 6538e7239f7d1967cf8f585867f0dd3127fbb857..8177b35f1f3cc8aa6fd47b0cb3b6c04d1209e5af 100644 (file)
@@ -1551,8 +1551,11 @@ addrbank *cd32_fmv_init (uaecptr start)
        write_log (_T("CD32 FMV mapped @$%x\n"), start);
        if (start != fmv_start) {
                write_log(_T("CD32 FMV invalid base address!\n"));
-               return &fmv_rom_bank;
+               return &expamem_null;
        }
+       if (!validate_banks_z2(&fmv_bank, fmv_start >> 16, expamem_z2_size >> 16))
+               return &expamem_null;
+
        z = read_rom_name(currprefs.cartfile);
        if (!z) {
                int ids[] = { 74, 23, -1 };
@@ -1578,7 +1581,7 @@ addrbank *cd32_fmv_init (uaecptr start)
        }
        if (!fmv_rom_bank.baseaddr) {
                write_log(_T("CD32 FMV without ROM is not supported.\n"));
-               return &fmv_rom_bank;
+               return &expamem_null;
        }
        if (!audioram)
                audioram = xmalloc(uae_u8, 262144);
@@ -1597,7 +1600,6 @@ addrbank *cd32_fmv_init (uaecptr start)
                mpeg_decoder = mpeg2_init();
                mpeg_info = mpeg2_info(mpeg_decoder);
        }
-
        fmv_bank.mask = fmv_board_size - 1;
        map_banks(&fmv_rom_bank, (fmv_start + ROM_BASE) >> 16, fmv_rom_size >> 16, 0);
        map_banks(&fmv_ram_bank, (fmv_start + RAM_BASE) >> 16, fmv_ram_size >> 16, 0);
diff --git a/pci.cpp b/pci.cpp
index 0e3e65a062ce790e612c9c5cb0dec2418af06f10..7a82ed52627b7bd6fd5c71ba9fe0bc73739bebe6 100644 (file)
--- a/pci.cpp
+++ b/pci.cpp
@@ -953,13 +953,15 @@ static void REGPARAM2 pci_bridge_wput(uaecptr addr, uae_u32 b)
                        {
                                case 0x44:
                                if (pcib->type == PCI_BRIDGE_PROMETHEUS) {
-                                       map_banks(&pci_io_bank, (expamem_z3_pointer) >> 16, 0xf0000 >> 16, 0);
-                                       map_banks(&pci_mem_bank, (expamem_z3_pointer + 0x100000) >> 16, (511 * 1024 * 1024) >> 16, 0);
-                                       map_banks(&pci_config_bank, (expamem_z3_pointer + 0xf0000) >> 16, 0x10000 >> 16, 0);
+                                       if (validate_banks_z3(&pci_io_bank, (expamem_z3_pointer) >> 16, expamem_z3_size >> 16)) {
+                                               map_banks_z3(&pci_io_bank, (expamem_z3_pointer) >> 16, 0xf0000 >> 16);
+                                               map_banks_z3(&pci_mem_bank, (expamem_z3_pointer + 0x100000) >> 16, (511 * 1024 * 1024) >> 16);
+                                               map_banks_z3(&pci_config_bank, (expamem_z3_pointer + 0xf0000) >> 16, 0x10000 >> 16);
+                                       }
                                        pcib->baseaddress_offset = pcib->baseaddress;
                                        pcib->io_offset = expamem_z3_pointer;
                                } else if (pcib->type == PCI_BRIDGE_MEDIATOR) {
-                                       map_banks(&pci_mem_bank, expamem_z3_pointer >> 16, expamem_z3_size >> 16, 0);
+                                       map_banks_z3(&pci_mem_bank, expamem_z3_pointer >> 16, expamem_z3_size >> 16);
                                        pcib->baseaddress_offset = 0;
                                }
                                pcib->baseaddress = expamem_z3_pointer;
@@ -1206,9 +1208,11 @@ static void REGPARAM2 pci_bridge_wput_2(uaecptr addr, uae_u32 b)
                        {
                                case 0x44:
                                // Mediator 4000 IO
-                               map_banks(pcib->bank_2, expamem_z3_pointer >> 16, 0x800000 >> 16, 0);
-                               map_banks(&pci_config_bank, (expamem_z3_pointer + 0x800000) >> 16, 0x400000 >> 16, 0);
-                               map_banks(&pci_io_bank, (expamem_z3_pointer + 0xc00000) >> 16, 0x400000 >> 16, 0);
+                               if (validate_banks_z3(&pci_io_bank, expamem_z3_pointer >> 16, expamem_z3_size >> 16)) {
+                                       map_banks(pcib->bank_2, expamem_z3_pointer >> 16, 0x800000 >> 16, 0);
+                                       map_banks(&pci_config_bank, (expamem_z3_pointer + 0x800000) >> 16, 0x400000 >> 16, 0);
+                                       map_banks(&pci_io_bank, (expamem_z3_pointer + 0xc00000) >> 16, 0x400000 >> 16, 0);
+                               }
                                pcib->baseaddress_2 = expamem_z3_pointer;
                                pcib->baseaddress_end_2 = expamem_z3_pointer + expamem_z3_size;
                                pcib->board_size_2 = expamem_z3_size;