The new 808x-only memory read/write functions now apply the RAM mask to the address so addresses now correctly wrap around 1 MB, fixes #1062;

More 808x bug fixes.
This commit is contained in:
OBattler
2020-11-17 02:20:19 +01:00
parent bf4b5b781f
commit ab8f9d3866
2 changed files with 47 additions and 37 deletions

View File

@@ -549,6 +549,8 @@ addreadlookup(uint32_t virt, uint32_t phys)
uint32_t a;
#endif
return;
if (virt == 0xffffffff) return;
if (readlookup2[virt>>12] != (uintptr_t) LOOKUP_INV) return;
@@ -584,6 +586,8 @@ addwritelookup(uint32_t virt, uint32_t phys)
uint32_t a;
#endif
return;
if (virt == 0xffffffff) return;
if (page_lookup[virt >> 12]) return;
@@ -664,7 +668,9 @@ uint8_t
read_mem_b(uint32_t addr)
{
mem_mapping_t *map;
mem_logical_addr = addr;
addr &= rammask;
map = read_mapping[addr >> MEM_GRANULARITY_BITS];
if (map && map->read_b)
@@ -678,7 +684,9 @@ uint16_t
read_mem_w(uint32_t addr)
{
mem_mapping_t *map;
mem_logical_addr = addr;
addr &= rammask;
if (addr & 1)
return read_mem_b(addr) | (read_mem_b(addr + 1) << 8);
@@ -699,7 +707,9 @@ void
write_mem_b(uint32_t addr, uint8_t val)
{
mem_mapping_t *map;
mem_logical_addr = addr;
addr &= rammask;
map = write_mapping[addr >> MEM_GRANULARITY_BITS];
if (map && map->write_b)
@@ -711,7 +721,9 @@ void
write_mem_w(uint32_t addr, uint16_t val)
{
mem_mapping_t *map;
mem_logical_addr = addr;
addr &= rammask;
if (addr & 1) {
write_mem_b(addr, val);