Page sanity checks are now done in mem_invalidate_range(), should fix a few NCR 810-related segmentation faults;
Machines with 808x CPU's now have the pages array assigned for a 2 MB memory space, needed for the Toshiba T1200 which can take up to 2 MB of RAM.
This commit is contained in:
12
src/mem.c
12
src/mem.c
@@ -12,7 +12,7 @@
|
|||||||
* the DYNAMIC_TABLES=1 enables this. Will eventually go
|
* the DYNAMIC_TABLES=1 enables this. Will eventually go
|
||||||
* away, either way...
|
* away, either way...
|
||||||
*
|
*
|
||||||
* Version: @(#)mem.c 1.0.15 2018/10/06
|
* Version: @(#)mem.c 1.0.16 2018/10/15
|
||||||
*
|
*
|
||||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -1305,13 +1305,18 @@ mem_write_nulll(uint32_t addr, uint32_t val, void *p)
|
|||||||
|
|
||||||
void
|
void
|
||||||
mem_invalidate_range(uint32_t start_addr, uint32_t end_addr)
|
mem_invalidate_range(uint32_t start_addr, uint32_t end_addr)
|
||||||
|
{
|
||||||
uint32_t cur_addr;
|
uint32_t cur_addr;
|
||||||
start_addr &= ~PAGE_MASK_MASK;
|
start_addr &= ~PAGE_MASK_MASK;
|
||||||
end_addr = (end_addr + PAGE_MASK_MASK) & ~PAGE_MASK_MASK;
|
end_addr = (end_addr + PAGE_MASK_MASK) & ~PAGE_MASK_MASK;
|
||||||
|
|
||||||
for (; start_addr <= end_addr; start_addr += (1 << PAGE_MASK_SHIFT)) {
|
for (; start_addr <= end_addr; start_addr += (1 << PAGE_MASK_SHIFT)) {
|
||||||
uint64_t mask = (uint64_t)1 << ((start_addr >> PAGE_MASK_SHIFT) & PAGE_MASK_MASK);
|
uint64_t mask = (uint64_t)1 << ((start_addr >> PAGE_MASK_SHIFT) & PAGE_MASK_MASK);
|
||||||
|
|
||||||
|
/* Do nothing if the pages array is empty or DMA reads/writes to/from PCI device memory addresses
|
||||||
|
may crash the emulator. */
|
||||||
|
cur_addr = (start_addr >> 12);
|
||||||
|
if (cur_addr < pages_sz)
|
||||||
pages[cur_addr].dirty_mask[(start_addr >> PAGE_MASK_INDEX_SHIFT) & PAGE_MASK_INDEX_MASK] |= mask;
|
pages[cur_addr].dirty_mask[(start_addr >> PAGE_MASK_INDEX_SHIFT) & PAGE_MASK_INDEX_MASK] |= mask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1718,7 +1723,8 @@ mem_reset(void)
|
|||||||
m = 4096;
|
m = 4096;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* 8088/86; maximum address space is 1MB. */
|
/* 8088/86; maximum address space is 1MB. */
|
||||||
|
/* m = 256; */
|
||||||
m = 512; /* This is to accomodate the T1200 which can take up to 2 MB of RAM. */
|
m = 512; /* This is to accomodate the T1200 which can take up to 2 MB of RAM. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user