]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
4M+ Z2 RAM + enabled PCMCIA prevented memory safety barrier.
authorToni Wilen <twilen@winuae.net>
Fri, 29 Oct 2021 14:49:32 +0000 (17:49 +0300)
committerToni Wilen <twilen@winuae.net>
Fri, 29 Oct 2021 14:49:32 +0000 (17:49 +0300)
gayle.cpp
include/memory.h
od-win32/mman.cpp

index 6e24e5518393e62119abdeaf8f5c9f4de05422c2..4eff721c461ab18a76e13ddf9325aa65e3ba704e 100644 (file)
--- a/gayle.cpp
+++ b/gayle.cpp
@@ -1939,6 +1939,7 @@ bool gayle_init_board_io_pcmcia(struct autoconfig_info *aci)
        aci->start = PCMCIA_ATTRIBUTE_START;
        aci->size = PCMCIA_ATTRIBUTE_SIZE;
        aci->zorro = 0;
+       aci->indirect = true;
        aci->parent_address_space = true;
        device_add_reset(gayle_reset);
        if (aci->doinit)
@@ -1951,6 +1952,7 @@ bool gayle_init_board_common_pcmcia(struct autoconfig_info *aci)
        aci->start = PCMCIA_COMMON_START;
        aci->size = PCMCIA_COMMON_SIZE;
        aci->zorro = 0;
+       aci->indirect = true;
        aci->parent_address_space = true;
        device_add_reset(gayle_reset);
        if (aci->doinit)
@@ -1963,6 +1965,7 @@ bool gayle_init_pcmcia(struct autoconfig_info *aci)
        aci->start = PCMCIA_COMMON_START;
        aci->size = 0xa80000 - aci->start;
        aci->zorro = 0;
+       aci->indirect = true;
        device_add_reset(gayle_reset);
        if (aci->doinit)
                gayle_init();
index 6aa98f257885b4124dec26665bb43f7b0add424f..2b16f90701761ac7a35728242a3f7f9a64b7c868 100644 (file)
@@ -170,6 +170,8 @@ struct autoconfig_info
        uae_u32 start;
        uae_u32 size;
        int zorro;
+       // never direct maps RAM
+       bool indirect;
        const TCHAR *label;
        addrbank *addrbank;
        uaecptr write_bank_address;
index c4c3645c045b6861a36fbd9cc01e1699eaa65fdc..7c2ed2e9d45755a4f1dffb8895aa912885db50e6 100644 (file)
@@ -726,8 +726,12 @@ bool uae_mman_info(addrbank *ab, struct uae_mman_data *md)
        if (!_tcscmp(ab->label, _T("*"))) {
                start = ab->start;
                got = true;
-               if (expansion_get_autoconfig_by_address(&currprefs, ab->start, 0) && !expansion_get_autoconfig_by_address(&currprefs, ab->start + size, 0))
-                       barrier = true;
+               if (expansion_get_autoconfig_by_address(&currprefs, ab->start, 0)) {
+                       struct autoconfig_info *aci = expansion_get_autoconfig_by_address(&currprefs, ab->start + size, 0);
+                       if (!aci || aci->indirect) {
+                               barrier = true;
+                       }
+               }
        } else if (!_tcscmp(ab->label, _T("*B"))) {
                start = ab->start;
                got = true;