From 9ecb4c2c267dde347ffc56267c7284ad167ef70f Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 27 Nov 2021 20:15:14 +0200 Subject: [PATCH] Do not use direct access when ECS 0.5M+0.5M config and bitplane pointer points to upper 0.5M chip. --- memory.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/memory.cpp b/memory.cpp index b38e1e60..686347fe 100644 --- a/memory.cpp +++ b/memory.cpp @@ -701,13 +701,19 @@ static uae_u32 REGPARAM2 chipmem_dummy_lget (uaecptr addr) return (chipmem_dummy () << 16) | chipmem_dummy (); } +static uae_u32 chipmem_noise(uae_u32 addr) +{ + // not yet implemented + return 0; +} + static uae_u32 REGPARAM2 chipmem_agnus_lget (uaecptr addr) { uae_u32 *m; addr &= chipmem_full_mask; if (addr >= chipmem_full_size - 3) - return 0; + return chipmem_noise(addr); m = (uae_u32 *)(chipmem_bank.baseaddr + addr); return do_get_mem_long (m); } @@ -718,7 +724,7 @@ uae_u32 REGPARAM2 chipmem_agnus_wget (uaecptr addr) addr &= chipmem_full_mask; if (addr >= chipmem_full_size - 1) - return 0; + return chipmem_noise(addr); m = (uae_u16 *)(chipmem_bank.baseaddr + addr); return do_get_mem_word (m); } @@ -727,7 +733,7 @@ static uae_u32 REGPARAM2 chipmem_agnus_bget (uaecptr addr) { addr &= chipmem_full_mask; if (addr >= chipmem_full_size) - return 0; + return chipmem_noise(addr); return chipmem_bank.baseaddr[addr]; } @@ -763,6 +769,10 @@ static void REGPARAM2 chipmem_agnus_bput (uaecptr addr, uae_u32 b) static int REGPARAM2 chipmem_check (uaecptr addr, uae_u32 size) { + // Check if chip ram is in two "banks" (ECS 0.5m+0.5m config) + if (((addr & ~chipmem_bank.mask) & chipmem_full_mask) || (((addr + size) & ~chipmem_bank.mask) & chipmem_full_mask)) { + return 0; + } addr &= chipmem_bank.mask; return (addr + size) <= chipmem_full_size; } -- 2.47.3