From a17c492faa142ec8b4664980b63ad49a5ebb6b3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Wed, 16 Sep 2020 11:59:05 +0200 Subject: [PATCH] Clear RAM to zero on reset. --- src/main/java/li/cil/circuity/vm/riscv/R5Board.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/li/cil/circuity/vm/riscv/R5Board.java b/src/main/java/li/cil/circuity/vm/riscv/R5Board.java index dee71253..b3c08c74 100644 --- a/src/main/java/li/cil/circuity/vm/riscv/R5Board.java +++ b/src/main/java/li/cil/circuity/vm/riscv/R5Board.java @@ -5,6 +5,7 @@ import li.cil.circuity.api.vm.device.Steppable; import li.cil.circuity.api.vm.device.memory.MemoryAccessException; import li.cil.circuity.api.vm.device.memory.MemoryMappedDevice; import li.cil.circuity.api.vm.device.memory.PhysicalMemory; +import li.cil.circuity.api.vm.device.memory.Sizes; import li.cil.circuity.api.vm.device.rtc.RealTimeCounter; import li.cil.circuity.api.vm.devicetree.DeviceNames; import li.cil.circuity.api.vm.devicetree.DeviceTree; @@ -144,6 +145,14 @@ public final class R5Board { cpu.reset(true); try { + for (final MemoryMappedDevice device : devices) { + if (device instanceof PhysicalMemory) { + for (int offset = 0; offset < device.getLength(); offset += 4) { + device.store(offset, 0, Sizes.SIZE_32_LOG2); + } + } + } + final FlattenedDeviceTree fdt = buildDeviceTree().flatten(); final byte[] dtb = fdt.toDTB(); for (int i = 0; i < dtb.length; i++) {