diff --git a/Platform/Apple/tools/jace/src/main/java/jace/apple2e/Apple2e.java b/Platform/Apple/tools/jace/src/main/java/jace/apple2e/Apple2e.java index f1572f18..9742193f 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/apple2e/Apple2e.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/apple2e/Apple2e.java @@ -31,7 +31,6 @@ import jace.core.RAM; import jace.core.RAMEvent; import jace.core.RAMListener; import jace.core.Utility; -import jace.state.Stateful; import jace.core.Video; import jace.hardware.CardDiskII; import jace.hardware.CardExt80Col; @@ -40,6 +39,7 @@ import jace.hardware.Joystick; import jace.hardware.NoSlotClock; import jace.hardware.ZipWarpAccelerator; import jace.hardware.massStorage.CardMassStorage; +import jace.state.Stateful; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -163,6 +163,8 @@ public class Apple2e extends Computer { @Override public void warmStart() { boolean restart = pause(); + // This isn't really authentic behavior but sometimes games like memory to have a consistent state when booting. + ((RAM128k)getMemory()).zeroAllRam(); for (SoftSwitches s : SoftSwitches.values()) { if (! (s.getSwitch() instanceof VideoSoftSwitch)) { s.getSwitch().reset(); @@ -202,11 +204,11 @@ public class Apple2e extends Computer { @Override public final void reconfigure() { boolean restart = pause(); - + if (Utility.isHeadlessMode()) { joy1enabled = false; joy2enabled = false; - + } RAM128k currentMemory = (RAM128k) getMemory(); @@ -244,7 +246,7 @@ public class Apple2e extends Computer { } else { motherboard.removeChildDevice(accelerator); } - + if (joy1enabled) { if (joystick1 == null) { joystick1 = new Joystick(0, this); @@ -453,8 +455,8 @@ public class Apple2e extends Computer { private void enableHints() { if (hints.isEmpty()) { hints.add(getMemory().observe(RAMEvent.TYPE.EXECUTE, 0x0FB63, (e)->{ - animationTimer.schedule(drawHints, 1, TimeUnit.SECONDS); - animationSchedule = + animationTimer.schedule(drawHints, 1, TimeUnit.SECONDS); + animationSchedule = animationTimer.scheduleAtFixedRate(doAnimation, 1250, 100, TimeUnit.MILLISECONDS); })); // Latch to the PRODOS SYNTAX CHECK parser @@ -471,7 +473,7 @@ public class Apple2e extends Computer { if (c == 0x0d) break; in += c; } - + System.err.println("Intercepted command: "+in); } }); @@ -489,4 +491,4 @@ public class Apple2e extends Computer { public String getShortName() { return "computer"; } -} \ No newline at end of file +} \ No newline at end of file diff --git a/Platform/Apple/tools/jace/src/main/java/jace/apple2e/RAM128k.java b/Platform/Apple/tools/jace/src/main/java/jace/apple2e/RAM128k.java index 2c66fa68..981b9f29 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/apple2e/RAM128k.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/apple2e/RAM128k.java @@ -129,12 +129,7 @@ abstract public class RAM128k extends RAM { activeRead = new PagedMemory(0x10000, PagedMemory.Type.RAM, computer); activeWrite = new PagedMemory(0x10000, PagedMemory.Type.RAM, computer); blank = new PagedMemory(0x100, PagedMemory.Type.RAM, computer); - - // Format memory with FF FF 00 00 pattern - for (int i = 0; i < 0x0100; i++) { - blank.get(0)[i] = (byte) 0x0FF; - } - initMemoryPattern(mainMemory); + zeroAllRam(); } public final void initMemoryPattern(PagedMemory mem) { @@ -147,6 +142,14 @@ abstract public class RAM128k extends RAM { } } + public final void zeroAllRam() { + // Format memory with FF FF 00 00 pattern + for (int i = 0; i < 0x0100; i++) { + blank.get(0)[i] = (byte) 0x0FF; + } + initMemoryPattern(mainMemory); + } + private final Semaphore configurationSemaphone = new Semaphore(1, true); /**