diff --git a/Platform/Apple/tools/jace/src/main/java/jace/LawlessLegends.java b/Platform/Apple/tools/jace/src/main/java/jace/LawlessLegends.java index 39e77d30..edb7bac6 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/LawlessLegends.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/LawlessLegends.java @@ -8,14 +8,12 @@ import java.util.logging.Logger; import jace.apple2e.MOS65C02; import jace.apple2e.RAM128k; import jace.apple2e.VideoNTSC; -import jace.cheat.Cheats.Cheat; import jace.config.Configuration; import jace.core.Computer; import jace.core.RAMEvent; import jace.core.RAMListener; import jace.core.Utility; import jace.hardware.Cards; -import jace.hardware.VideoImpls; import jace.lawless.LawlessComputer; import jace.lawless.LawlessImageTool; import jace.ui.MetacheatUI; @@ -126,6 +124,16 @@ public class LawlessLegends extends Application { return cheatController; } + public void closeMetacheat() { + if (cheatStage != null) { + cheatStage.close(); + } + if (cheatController != null) { + cheatController.detach(); + cheatController = null; + } + } + /** * @param args the command line arguments */ @@ -150,6 +158,7 @@ public class LawlessLegends extends Application { romStarted.set(false); c.coldStart(); try { + // Logger.getLogger(getClass().getName()).log(Level.WARNING, "Watchdog: waiting " + watchdogDelay + "ms for boot to start."); Thread.sleep(watchdogDelay); watchdogDelay = 500; if (!romStarted.get() || !c.isRunning() || c.getCpu().getProgramCounter() == MOS65C02.FASTBOOT || c.getCpu().getProgramCounter() == 0) { @@ -185,16 +194,13 @@ public class LawlessLegends extends Application { c.joy2enabled = false; c.enableStateManager = false; c.ramCard.setValue(RAM128k.RamCards.CardRamworks); - c.videoRenderer.setValue(VideoImpls.Lawless); if (c.PRODUCTION_MODE) { c.card7.setValue(Cards.MassStorage); c.card6.setValue(Cards.DiskIIDrive); c.card5.setValue(Cards.RamFactor); c.card4.setValue(null); c.card2.setValue(null); - c.getMemory().writeWord(0x03f0, 0x0c700, false, false); } - c.cheatEngine.setValue(Cheat.LawlessHacks); Configuration.buildTree(); c.reconfigure(); VideoNTSC.setVideoMode(VideoNTSC.VideoMode.TextFriendly, false); 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 e0e249c1..37b08fc1 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 @@ -83,7 +83,7 @@ public class Apple2e extends Computer { @ConfigurableField(name = "Helpful hints", shortName = "hints") public boolean enableHints = true; @ConfigurableField(name = "Renderer", shortName = "video", description = "Video rendering implementation") - public DeviceSelection videoRenderer = new DeviceSelection<>(VideoImpls.class, VideoImpls.Lawless, false); + public DeviceSelection videoRenderer = new DeviceSelection<>(VideoImpls.class, PRODUCTION_MODE ? VideoImpls.Lawless : VideoImpls.NTSC, false); @ConfigurableField(name = "Aux Ram", shortName = "ram", description = "Aux ram card") public DeviceSelection ramCard = new DeviceSelection<>(RAM128k.RamCards.class, RAM128k.RamCards.CardRamworks, false); @ConfigurableField(name = "Joystick 1 Enabled", shortName = "joy1", description = "If unchecked, then there is no joystick support.", enablesDevice = true) @@ -324,19 +324,15 @@ public class Apple2e extends Computer { activeCheatEngine = null; } } else { - boolean startCheats = true; - if (activeCheatEngine != null) { - if (cheatEngine.getValue().isInstance(activeCheatEngine)) { - startCheats = false; - newDeviceSet.add(activeCheatEngine); - } else { - activeCheatEngine.detach(); - activeCheatEngine.suspend(); - activeCheatEngine = null; - } + if (activeCheatEngine != null && !cheatEngine.getValue().isInstance(activeCheatEngine)) { + activeCheatEngine.detach(); + activeCheatEngine.suspend(); + activeCheatEngine = null; } - if (startCheats && cheatEngine.getValue() != null) { + if (activeCheatEngine == null && cheatEngine.getValue() != null) { activeCheatEngine = cheatEngine.getValue().create(); + } + if (activeCheatEngine != null) { newDeviceSet.add(activeCheatEngine); } } diff --git a/Platform/Apple/tools/jace/src/main/java/jace/cheat/Cheats.java b/Platform/Apple/tools/jace/src/main/java/jace/cheat/Cheats.java index 530148b9..1d95af18 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/cheat/Cheats.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/cheat/Cheats.java @@ -63,7 +63,10 @@ public abstract class Cheats extends Device { @Override public boolean isInstance(Cheats cheat) { - return clazz.isInstance(cheat); + if (cheat == null) { + return false; + } + return clazz == cheat.getClass(); } } diff --git a/Platform/Apple/tools/jace/src/main/java/jace/cheat/MetaCheat.java b/Platform/Apple/tools/jace/src/main/java/jace/cheat/MetaCheat.java index 1b23329e..b103598a 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/cheat/MetaCheat.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/cheat/MetaCheat.java @@ -158,7 +158,7 @@ public class MetaCheat extends Cheats { @Override public void detach() { super.detach(); - ui.detach(); + LawlessLegends.getApplication().closeMetacheat(); } @Override diff --git a/Platform/Apple/tools/jace/src/main/java/jace/core/Utility.java b/Platform/Apple/tools/jace/src/main/java/jace/core/Utility.java index 4ec1d361..c38c38bc 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/core/Utility.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/core/Utility.java @@ -396,9 +396,9 @@ public class Utility { String osName = System.getProperty("os.name").toLowerCase(); if (osName.contains("windows")) { return OS.Windows; - } else if (osName.contains("Linux")) { + } else if (osName.contains("linux")) { return OS.Linux; - } else if (osName.contains("Mac")) { + } else if (osName.contains("mac")) { return OS.Mac; } else { System.out.println("Unknown %s".formatted(osName)); diff --git a/Platform/Apple/tools/jace/src/main/java/jace/lawless/LawlessComputer.java b/Platform/Apple/tools/jace/src/main/java/jace/lawless/LawlessComputer.java index c8561515..fb945c34 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/lawless/LawlessComputer.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/lawless/LawlessComputer.java @@ -38,8 +38,6 @@ public class LawlessComputer extends Apple2e { if (PRODUCTION_MODE) { this.cheatEngine.setValue(Cheats.Cheat.LawlessHacks); } - // this.activeCheatEngine = new LawlessHacks(this); - // this.activeCheatEngine.attach(); blankTextPage1(); reconfigure(); } @@ -161,7 +159,7 @@ public class LawlessComputer extends Apple2e { } public void waitForVBL(int count) throws InterruptedException { - if (getVideo() == null || !getVideo().isRunning()) { + if (getVideo() == null || !getVideo().isRunning() || !getMotherboard().isRunning()) { return; } Semaphore s = new Semaphore(0); diff --git a/Platform/Apple/tools/jace/src/main/java/jace/lawless/LawlessHacks.java b/Platform/Apple/tools/jace/src/main/java/jace/lawless/LawlessHacks.java index 34c666e6..6533cadb 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/lawless/LawlessHacks.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/lawless/LawlessHacks.java @@ -47,9 +47,7 @@ public class LawlessHacks extends Cheats { // Observe graphics changes addCheat("Lawless Text Speedup", RAMEvent.TYPE.EXECUTE, this::fastText, 0x0ee00, 0x0ee00 + 0x0f00); addCheat("Lawless Text Enhancement", RAMEvent.TYPE.WRITE, this::enhanceText, 0x02000, 0x03fff); - addCheat("Lawless Legends Music Commands", RAMEvent.TYPE.WRITE, (e) -> { - playSound(e.getNewValue()); - }, SFX_TRIGGER); + addCheat("Lawless Legends Music Commands", RAMEvent.TYPE.WRITE, (e) -> playSound(e.getNewValue()), SFX_TRIGGER); } @Override @@ -61,6 +59,13 @@ public class LawlessHacks extends Cheats { public void tick() { } + @Override + public void detach() { + super.detach(); + stopMusic(); + Emulator.withComputer((c->c.getMotherboard().cancelSpeedRequest(this))); + } + // Speed up text rendering private void fastText(RAMEvent e) { if (e.isMainMemory() && e.getOldValue() != 0x060) { diff --git a/Platform/Apple/tools/jace/src/main/java/jace/ui/MetacheatUI.java b/Platform/Apple/tools/jace/src/main/java/jace/ui/MetacheatUI.java index fc3413a7..32b6eec7 100644 --- a/Platform/Apple/tools/jace/src/main/java/jace/ui/MetacheatUI.java +++ b/Platform/Apple/tools/jace/src/main/java/jace/ui/MetacheatUI.java @@ -527,8 +527,10 @@ public class MetacheatUI { searchValueField.textProperty().unbind(); searchChangeByField.textProperty().unbind(); memoryWatchTooltip.hide(); - animationTimer.shutdown(); - animationTimer = null; + if (animationTimer != null) { + animationTimer.shutdown(); + animationTimer = null; + } cheatEngine = null; }