diff --git a/src/acpi.c b/src/acpi.c index ccd51ebca..963f26ae6 100644 --- a/src/acpi.c +++ b/src/acpi.c @@ -1025,8 +1025,10 @@ acpi_reg_write_common_regs(UNUSED(int size), uint16_t addr, uint8_t val, void *p nvr_reg_write(0x000f, 0xff, dev->nvr); } - if (sus_typ & SUS_RESET_PCI) + if (sus_typ & SUS_RESET_PCI) { device_reset_all(DEVICE_PCI); + mem_zero(); + } if (sus_typ & SUS_RESET_CPU) cpu_alt_reset = 0; diff --git a/src/include/86box/mem.h b/src/include/86box/mem.h index 81b46b2fa..f8d0f659a 100644 --- a/src/include/86box/mem.h +++ b/src/include/86box/mem.h @@ -459,6 +459,7 @@ extern void mem_a20_recalc(void); extern void mem_init(void); extern void mem_close(void); +extern void mem_zero(void); extern void mem_reset(void); extern void mem_remap_top_ex(int kb, uint32_t start); extern void mem_remap_top_ex_nomid(int kb, uint32_t start); diff --git a/src/mem/mem.c b/src/mem/mem.c index 074b44bda..c4d11300b 100644 --- a/src/mem/mem.c +++ b/src/mem/mem.c @@ -2792,6 +2792,17 @@ mem_init_ram_mapping(mem_mapping_t *mapping, uint32_t base, uint32_t size) mem_add_ram_mapping(mapping, base, size); } +void +mem_zero(void) +{ +#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64)) + if (mem_size > 1048576) + memset(ram2, 0x00, ram2_size + 16); +#endif + + memset(ram, 0x00, ram_size + 16); +} + /* Reset the memory state. */ void mem_reset(void) @@ -2867,8 +2878,10 @@ mem_reset(void) return; } memset(ram, 0x00, ram_size + 16); +#if (!(defined __amd64__ || defined _M_X64 || defined __aarch64__ || defined _M_ARM64)) if (mem_size > 1048576) ram2 = &(ram[1 << 30]); +#endif } /* diff --git a/src/pci.c b/src/pci.c index ab585c456..c2e4ca237 100644 --- a/src/pci.c +++ b/src/pci.c @@ -419,6 +419,8 @@ pci_trc_reset(uint8_t val) mem_a20_recalc(); flushmmucache(); + + mem_zero(); } #ifdef USE_DYNAREC