From e563435853c9eb271cdbbdcee9fb17ca4121f309 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 29 Oct 2021 17:49:32 +0300 Subject: [PATCH] 4M+ Z2 RAM + enabled PCMCIA prevented memory safety barrier. --- gayle.cpp | 3 +++ include/memory.h | 2 ++ od-win32/mman.cpp | 8 ++++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gayle.cpp b/gayle.cpp index 6e24e551..4eff721c 100644 --- 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(); diff --git a/include/memory.h b/include/memory.h index 6aa98f25..2b16f907 100644 --- a/include/memory.h +++ b/include/memory.h @@ -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; diff --git a/od-win32/mman.cpp b/od-win32/mman.cpp index c4c3645c..7c2ed2e9 100644 --- a/od-win32/mman.cpp +++ b/od-win32/mman.cpp @@ -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; -- 2.47.3