Ported some IDE and ATAPI-related improvements from PCem;

Fixed the ATI 18800 emulation;
More tweaks to reduce RAM usage.
This commit is contained in:
OBattler
2018-03-15 22:57:24 +01:00
parent 47d2ff142d
commit 3b62e83315
16 changed files with 269 additions and 198 deletions

View File

@@ -1317,6 +1317,42 @@ void mem_a20_init(void)
}
}
void mem_destroy_pages(void)
{
if (pages) {
free(pages);
pages = NULL;
}
}
void mem_resize_pages(void)
{
int total_size, c;
mem_destroy_pages();
if (AT) {
if (cpu_16bitbus)
total_size = 4096;
else
total_size = 1048576;
} else
total_size = 256;
pclog("%i pages\n", total_size);
pages = malloc(total_size * sizeof(page_t));
memset(pages, 0, total_size * sizeof(page_t));
for (c = 0; c < total_size; c++)
{
pages[c].mem = &ram[c << 12];
pages[c].write_b = mem_write_ramb_page;
pages[c].write_w = mem_write_ramw_page;
pages[c].write_l = mem_write_raml_page;
}
}
void mem_init(void)
{
@@ -1338,22 +1374,13 @@ void mem_init(void)
writelookup2 = malloc(1024 * 1024 * sizeof(uintptr_t));
rom = NULL;
biosmask = 0xffff;
pages = malloc((1 << 20) * sizeof(page_t));
page_lookup = malloc((1 << 20) * sizeof(page_t *));
memset(pages, 0, (1 << 20) * sizeof(page_t));
memset(page_lookup, 0, (1 << 20) * sizeof(page_t *));
memset(ram_mapped_addr, 0, 64 * sizeof(uint32_t));
for (c = 0; c < (1 << 20); c++)
{
pages[c].mem = &ram[c << 12];
pages[c].write_b = mem_write_ramb_page;
pages[c].write_w = mem_write_ramw_page;
pages[c].write_l = mem_write_raml_page;
}
page_lookup = malloc((1 << 20) * sizeof(page_t *));
memset(page_lookup, 0, (1 << 20) * sizeof(page_t *));
mem_resize_pages();
memset(isram, 0, sizeof(isram));
for (c = 0; c < (mem_size / 64); c++)
@@ -1524,15 +1551,6 @@ void mem_resize()
memset(ram, 0, (mem_size + 384) * 1024);
}
memset(pages, 0, (1 << 20) * sizeof(page_t));
for (c = 0; c < (1 << 20); c++)
{
pages[c].mem = &ram[c << 12];
pages[c].write_b = mem_write_ramb_page;
pages[c].write_w = mem_write_ramw_page;
pages[c].write_l = mem_write_raml_page;
}
memset(isram, 0, sizeof(isram));
for (c = 0; c < (mem_size / 64); c++)
{
@@ -1541,6 +1559,8 @@ void mem_resize()
isram[c] = 0;
}
mem_resize_pages();
memset(_mem_read_b, 0, sizeof(_mem_read_b));
memset(_mem_read_w, 0, sizeof(_mem_read_w));
memset(_mem_read_l, 0, sizeof(_mem_read_l));
@@ -1587,6 +1607,9 @@ void mem_resize()
void mem_reset_page_blocks()
{
int c;
if (!pages)
return;
for (c = 0; c < ((mem_size * 1024) >> 12); c++)
{