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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user