Previous 199869 Revisions Next

r17609 Monday 3rd September, 2012 at 03:58:17 UTC by R. Belmont
PowerPC: Fixed 601-type BAT processing [R. Belmont]
[src/emu/cpu/powerpc]ppccom.c

trunk/src/emu/cpu/powerpc/ppccom.c
r17608r17609
541541         UINT32 lower = ppc->spr[SPROEA_IBAT0U + 2*batnum + 1];
542542         int privbit = ((intention & TRANSLATE_USER_MASK) == 0) ? 3 : 2;
543543
544//          printf("bat %d upper = %08x privbit %d\n", batnum, upper, privbit);
544//            printf("bat %d upper = %08x privbit %d\n", batnum, upper, privbit);
545545
546546         // is this pair valid?
547547         if (lower & 0x40)
548548         {
549            UINT32 mask = (~lower & 0x3f) << 17;
549            UINT32 mask = ((lower & 0x3f) << 17) ^ 0xfffe0000;
550550            UINT32 addrout;
551551            UINT32 key = (upper >> privbit) & 1;
552552
553553            /* check for a hit against this bucket */
554            if ((*address & 0xfffe0000) == (upper & 0xfffe0000))
554            if ((*address & mask) == (upper & mask))
555555            {
556556               /* verify protection; if we fail, return false and indicate a protection violation */
557557               if (!page_access_allowed(transtype, key, upper & 3))
r17608r17609
560560               }
561561
562562               /* otherwise we're good */
563               addrout = (lower & 0xff100000) | (*address & ~0xfffe0000);
564               addrout |= ((*address & mask) | (lower & mask));
563               addrout = (lower & mask) | (*address & ~mask);
565564               *address = addrout; // top 9 bits from top 9 of PBN
566565               return 0x001;
567566            }
r17608r17609
25362535   }
25372536}
25382537
2538

Previous 199869 Revisions Next


© 1997-2024 The MAME Team