]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Do not use direct access when ECS 0.5M+0.5M config and bitplane pointer points to...
authorToni Wilen <twilen@winuae.net>
Sat, 27 Nov 2021 18:15:14 +0000 (20:15 +0200)
committerToni Wilen <twilen@winuae.net>
Sat, 27 Nov 2021 18:15:14 +0000 (20:15 +0200)
memory.cpp

index b38e1e60c3faa478aba2904c584162d5a3aff898..686347fe8b002ba7f003b1924434bee82cb73c5e 100644 (file)
@@ -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;
 }