From 910f2cbe6db450448001be5fb756c853f47166a6 Mon Sep 17 00:00:00 2001 From: dimiro1 Date: Mon, 17 Aug 2026 23:11:44 +0200 Subject: [PATCH 1/3] Move the palette tables out of the window and into the core `NESPalette` is a table of ARGB integers and `Palettes` reads files; neither has ever imported Swing, and both were only under `ui` because the window was the first thing to want them. The headless mode has wanted them for as long as it has existed, which is why CLAUDE.md carried a carve-out saying so. They move to `mynes.palette`, which is where the next commit needs them: with the core in a module of its own, a front end reaching down for a palette is fine and the core reaching up for one is a cycle. `PaletteDialog` stays behind in `mynes.ui` next to `GameUIFrame`, its only caller, rather than leaving a one-class package where the tables used to be. The carve-out goes with them. Nothing outside `mynes.ui` imports it now. Co-Authored-By: Claude Opus 5 (1M context) --- CLAUDE.md | 5 +++-- src/main/java/com/github/dimiro1/mynes/PPU.java | 2 +- .../java/com/github/dimiro1/mynes/headless/Headless.java | 2 +- .../java/com/github/dimiro1/mynes/headless/Options.java | 4 ++-- .../github/dimiro1/mynes/{ui => }/palette/NESPalette.java | 2 +- .../com/github/dimiro1/mynes/{ui => }/palette/Palettes.java | 6 ++++-- src/main/java/com/github/dimiro1/mynes/ui/Config.java | 4 ++-- src/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java | 1 - .../dimiro1/mynes/ui/{palette => }/PaletteDialog.java | 5 ++++- .../java/com/github/dimiro1/mynes/ui/ScreenComponent.java | 4 ++-- .../github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java | 2 +- .../java/com/github/dimiro1/mynes/video/FrameRenderer.java | 2 +- .../com/github/dimiro1/mynes/headless/InputPathTests.java | 2 +- .../com/github/dimiro1/mynes/headless/OptionsTests.java | 2 +- .../java/com/github/dimiro1/mynes/headless/ReplTests.java | 2 +- .../dimiro1/mynes/{ui => }/palette/NESPaletteTests.java | 2 +- .../dimiro1/mynes/{ui => }/palette/PalettesTests.java | 2 +- src/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java | 4 ++-- .../com/github/dimiro1/mynes/ui/ScreenComponentTests.java | 2 +- .../com/github/dimiro1/mynes/video/FrameRendererTests.java | 2 +- 20 files changed, 31 insertions(+), 26 deletions(-) rename src/main/java/com/github/dimiro1/mynes/{ui => }/palette/NESPalette.java (99%) rename src/main/java/com/github/dimiro1/mynes/{ui => }/palette/Palettes.java (95%) rename src/main/java/com/github/dimiro1/mynes/ui/{palette => }/PaletteDialog.java (97%) rename src/test/java/com/github/dimiro1/mynes/{ui => }/palette/NESPaletteTests.java (99%) rename src/test/java/com/github/dimiro1/mynes/{ui => }/palette/PalettesTests.java (98%) diff --git a/CLAUDE.md b/CLAUDE.md index e38626b..ab46f1a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -193,14 +193,15 @@ mynes/mappers/ mappers 0 to 4 mynes/state/ save states and battery .sav files mynes/debug/ the disassembler and the breakpoints, shared by the window and the REPL mynes/video/ colour indices to pixels: the overscan crop and the frame renderer +mynes/palette/ the measured RGB tables, and the loader that reads them out of /palettes mynes/headless/ the command line mode -mynes/ui/ the Swing window, the palettes, the key bindings, the CHR viewer, the debugger +mynes/ui/ the Swing window, the key bindings, the CHR viewer, the debugger ``` The core knows nothing about the front end. `Cart.load` takes a `byte[]`, `NES` has no UI dependency, `nes.tick()` is the only clock, and the PPU emits colour *indices* -- never RGB, because which RGB is a question about televisions. Keep it that way: nothing in `mynes` or `mynes/headless` -should reach into `mynes/ui`, save for the palette tables. +should reach into `mynes/ui`. `peek` means "read without side effects", and it is load-bearing. `VRAM.read` tells the mapper what address is on the bus, and MMC3 counts those to drive its scanline interrupt -- so a debugger that diff --git a/src/main/java/com/github/dimiro1/mynes/PPU.java b/src/main/java/com/github/dimiro1/mynes/PPU.java index 9c71b8b..a623cab 100644 --- a/src/main/java/com/github/dimiro1/mynes/PPU.java +++ b/src/main/java/com/github/dimiro1/mynes/PPU.java @@ -1458,7 +1458,7 @@ private int backgroundPixel(final int x) { * Both belong here rather than in the front end, because the hardware really does force the * index down and really does put those three bits on the wire. What the resulting signal looks * like on a television is somebody else's problem -- see - * {@code com.github.dimiro1.mynes.ui.palette.NESPalette}. + * {@code com.github.dimiro1.mynes.palette.NESPalette}. * * @return {@code emphasis << 6 | entry}, 0 to 511. */ diff --git a/src/main/java/com/github/dimiro1/mynes/headless/Headless.java b/src/main/java/com/github/dimiro1/mynes/headless/Headless.java index 5e5989e..e851d3e 100644 --- a/src/main/java/com/github/dimiro1/mynes/headless/Headless.java +++ b/src/main/java/com/github/dimiro1/mynes/headless/Headless.java @@ -4,7 +4,7 @@ import com.github.dimiro1.mynes.NES; import com.github.dimiro1.mynes.state.BatteryRAM; import com.github.dimiro1.mynes.state.SaveStateException; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.Palettes; import java.io.BufferedReader; import java.io.IOException; diff --git a/src/main/java/com/github/dimiro1/mynes/headless/Options.java b/src/main/java/com/github/dimiro1/mynes/headless/Options.java index 4cf6848..b32092f 100644 --- a/src/main/java/com/github/dimiro1/mynes/headless/Options.java +++ b/src/main/java/com/github/dimiro1/mynes/headless/Options.java @@ -2,8 +2,8 @@ import com.github.dimiro1.mynes.Cart; import com.github.dimiro1.mynes.Region; -import com.github.dimiro1.mynes.ui.palette.NESPalette; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.NESPalette; +import com.github.dimiro1.mynes.palette.Palettes; import com.github.dimiro1.mynes.video.FrameRenderer; import java.io.IOException; diff --git a/src/main/java/com/github/dimiro1/mynes/ui/palette/NESPalette.java b/src/main/java/com/github/dimiro1/mynes/palette/NESPalette.java similarity index 99% rename from src/main/java/com/github/dimiro1/mynes/ui/palette/NESPalette.java rename to src/main/java/com/github/dimiro1/mynes/palette/NESPalette.java index 10ec043..5dee357 100644 --- a/src/main/java/com/github/dimiro1/mynes/ui/palette/NESPalette.java +++ b/src/main/java/com/github/dimiro1/mynes/palette/NESPalette.java @@ -1,4 +1,4 @@ -package com.github.dimiro1.mynes.ui.palette; +package com.github.dimiro1.mynes.palette; /** * One measurement of the colours a 2C02 produces, in a shape the front end can draw with. diff --git a/src/main/java/com/github/dimiro1/mynes/ui/palette/Palettes.java b/src/main/java/com/github/dimiro1/mynes/palette/Palettes.java similarity index 95% rename from src/main/java/com/github/dimiro1/mynes/ui/palette/Palettes.java rename to src/main/java/com/github/dimiro1/mynes/palette/Palettes.java index bb8877b..ae8bd89 100644 --- a/src/main/java/com/github/dimiro1/mynes/ui/palette/Palettes.java +++ b/src/main/java/com/github/dimiro1/mynes/palette/Palettes.java @@ -1,4 +1,4 @@ -package com.github.dimiro1.mynes.ui.palette; +package com.github.dimiro1.mynes.palette; import com.github.dimiro1.mynes.Region; @@ -17,7 +17,9 @@ * goes for a missing resource. */ public final class Palettes { - private static final Logger logger = System.getLogger("UI"); + // "PALETTE" rather than "UI": both front ends load these, and the window is no longer the only + // thing that can be reading a palette file when one of them turns out to be unreadable. + private static final Logger logger = System.getLogger("PALETTE"); /** * The NESdev set, and the one MyNES has always drawn with. diff --git a/src/main/java/com/github/dimiro1/mynes/ui/Config.java b/src/main/java/com/github/dimiro1/mynes/ui/Config.java index 7796f69..a0da16a 100644 --- a/src/main/java/com/github/dimiro1/mynes/ui/Config.java +++ b/src/main/java/com/github/dimiro1/mynes/ui/Config.java @@ -2,8 +2,8 @@ import com.github.dimiro1.mynes.Region; import com.github.dimiro1.mynes.ui.input.KeyBindings; -import com.github.dimiro1.mynes.ui.palette.NESPalette; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.NESPalette; +import com.github.dimiro1.mynes.palette.Palettes; import java.io.IOException; import java.lang.System.Logger; diff --git a/src/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java b/src/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java index b800016..28c015b 100644 --- a/src/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java +++ b/src/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java @@ -12,7 +12,6 @@ import com.github.dimiro1.mynes.ui.debugger.DebuggerFrame; import com.github.dimiro1.mynes.ui.input.ControllerSettingsDialog; import com.github.dimiro1.mynes.ui.input.KeyboardInput; -import com.github.dimiro1.mynes.ui.palette.PaletteDialog; import javax.imageio.ImageIO; import javax.swing.*; diff --git a/src/main/java/com/github/dimiro1/mynes/ui/palette/PaletteDialog.java b/src/main/java/com/github/dimiro1/mynes/ui/PaletteDialog.java similarity index 97% rename from src/main/java/com/github/dimiro1/mynes/ui/palette/PaletteDialog.java rename to src/main/java/com/github/dimiro1/mynes/ui/PaletteDialog.java index 9575f7d..4452ff5 100644 --- a/src/main/java/com/github/dimiro1/mynes/ui/palette/PaletteDialog.java +++ b/src/main/java/com/github/dimiro1/mynes/ui/PaletteDialog.java @@ -1,4 +1,7 @@ -package com.github.dimiro1.mynes.ui.palette; +package com.github.dimiro1.mynes.ui; + +import com.github.dimiro1.mynes.palette.NESPalette; +import com.github.dimiro1.mynes.palette.Palettes; import net.miginfocom.swing.MigLayout; diff --git a/src/main/java/com/github/dimiro1/mynes/ui/ScreenComponent.java b/src/main/java/com/github/dimiro1/mynes/ui/ScreenComponent.java index c79b7d0..0241422 100644 --- a/src/main/java/com/github/dimiro1/mynes/ui/ScreenComponent.java +++ b/src/main/java/com/github/dimiro1/mynes/ui/ScreenComponent.java @@ -1,8 +1,8 @@ package com.github.dimiro1.mynes.ui; import com.github.dimiro1.mynes.PPU; -import com.github.dimiro1.mynes.ui.palette.NESPalette; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.NESPalette; +import com.github.dimiro1.mynes.palette.Palettes; import com.github.dimiro1.mynes.video.FrameRenderer; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java b/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java index 2b13fe7..d0fc7c7 100644 --- a/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java +++ b/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java @@ -2,7 +2,7 @@ import com.github.dimiro1.mynes.Cart; import com.github.dimiro1.mynes.PPU; -import com.github.dimiro1.mynes.ui.palette.NESPalette; +import com.github.dimiro1.mynes.palette.NESPalette; import net.miginfocom.swing.MigLayout; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/github/dimiro1/mynes/video/FrameRenderer.java b/src/main/java/com/github/dimiro1/mynes/video/FrameRenderer.java index cfb8d89..bde92c0 100644 --- a/src/main/java/com/github/dimiro1/mynes/video/FrameRenderer.java +++ b/src/main/java/com/github/dimiro1/mynes/video/FrameRenderer.java @@ -15,7 +15,7 @@ * and not a common superclass. *

* The palette arrives as a plain {@code int[512]} rather than as a - * {@link com.github.dimiro1.mynes.ui.palette.NESPalette}, so that drawing a picture does not oblige + * {@link com.github.dimiro1.mynes.palette.NESPalette}, so that drawing a picture does not oblige * a caller to know what a palette is made of, and so that this package depends on nothing but the * PPU and {@code java.awt.image}. */ diff --git a/src/test/java/com/github/dimiro1/mynes/headless/InputPathTests.java b/src/test/java/com/github/dimiro1/mynes/headless/InputPathTests.java index 9a26979..a348e3c 100644 --- a/src/test/java/com/github/dimiro1/mynes/headless/InputPathTests.java +++ b/src/test/java/com/github/dimiro1/mynes/headless/InputPathTests.java @@ -3,7 +3,7 @@ import com.github.dimiro1.mynes.Cart; import com.github.dimiro1.mynes.Controller; import com.github.dimiro1.mynes.NES; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.Palettes; import org.junit.jupiter.api.Test; import java.io.IOException; diff --git a/src/test/java/com/github/dimiro1/mynes/headless/OptionsTests.java b/src/test/java/com/github/dimiro1/mynes/headless/OptionsTests.java index 3616d26..91cf7f3 100644 --- a/src/test/java/com/github/dimiro1/mynes/headless/OptionsTests.java +++ b/src/test/java/com/github/dimiro1/mynes/headless/OptionsTests.java @@ -1,7 +1,7 @@ package com.github.dimiro1.mynes.headless; import com.github.dimiro1.mynes.Region; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.Palettes; import org.junit.jupiter.api.Test; import java.nio.file.Path; diff --git a/src/test/java/com/github/dimiro1/mynes/headless/ReplTests.java b/src/test/java/com/github/dimiro1/mynes/headless/ReplTests.java index d94108c..08e3032 100644 --- a/src/test/java/com/github/dimiro1/mynes/headless/ReplTests.java +++ b/src/test/java/com/github/dimiro1/mynes/headless/ReplTests.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.github.dimiro1.mynes.Cart; import com.github.dimiro1.mynes.NES; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.Palettes; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; diff --git a/src/test/java/com/github/dimiro1/mynes/ui/palette/NESPaletteTests.java b/src/test/java/com/github/dimiro1/mynes/palette/NESPaletteTests.java similarity index 99% rename from src/test/java/com/github/dimiro1/mynes/ui/palette/NESPaletteTests.java rename to src/test/java/com/github/dimiro1/mynes/palette/NESPaletteTests.java index 8571f00..600ab78 100644 --- a/src/test/java/com/github/dimiro1/mynes/ui/palette/NESPaletteTests.java +++ b/src/test/java/com/github/dimiro1/mynes/palette/NESPaletteTests.java @@ -1,4 +1,4 @@ -package com.github.dimiro1.mynes.ui.palette; +package com.github.dimiro1.mynes.palette; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; diff --git a/src/test/java/com/github/dimiro1/mynes/ui/palette/PalettesTests.java b/src/test/java/com/github/dimiro1/mynes/palette/PalettesTests.java similarity index 98% rename from src/test/java/com/github/dimiro1/mynes/ui/palette/PalettesTests.java rename to src/test/java/com/github/dimiro1/mynes/palette/PalettesTests.java index a432353..d505862 100644 --- a/src/test/java/com/github/dimiro1/mynes/ui/palette/PalettesTests.java +++ b/src/test/java/com/github/dimiro1/mynes/palette/PalettesTests.java @@ -1,4 +1,4 @@ -package com.github.dimiro1.mynes.ui.palette; +package com.github.dimiro1.mynes.palette; import com.github.dimiro1.mynes.Region; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java b/src/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java index 6175d9b..7061801 100644 --- a/src/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java +++ b/src/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java @@ -3,8 +3,8 @@ import com.github.dimiro1.mynes.Region; import com.github.dimiro1.mynes.ui.input.KeyBindings; import com.github.dimiro1.mynes.ui.input.KeyBindings.Button; -import com.github.dimiro1.mynes.ui.palette.NESPalette; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.NESPalette; +import com.github.dimiro1.mynes.palette.Palettes; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/dimiro1/mynes/ui/ScreenComponentTests.java b/src/test/java/com/github/dimiro1/mynes/ui/ScreenComponentTests.java index a8fc7ee..9695e85 100644 --- a/src/test/java/com/github/dimiro1/mynes/ui/ScreenComponentTests.java +++ b/src/test/java/com/github/dimiro1/mynes/ui/ScreenComponentTests.java @@ -1,7 +1,7 @@ package com.github.dimiro1.mynes.ui; import com.github.dimiro1.mynes.PPU; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.Palettes; import com.github.dimiro1.mynes.video.FrameRenderer; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/github/dimiro1/mynes/video/FrameRendererTests.java b/src/test/java/com/github/dimiro1/mynes/video/FrameRendererTests.java index 7e852df..4540f52 100644 --- a/src/test/java/com/github/dimiro1/mynes/video/FrameRendererTests.java +++ b/src/test/java/com/github/dimiro1/mynes/video/FrameRendererTests.java @@ -1,7 +1,7 @@ package com.github.dimiro1.mynes.video; import com.github.dimiro1.mynes.PPU; -import com.github.dimiro1.mynes.ui.palette.Palettes; +import com.github.dimiro1.mynes.palette.Palettes; import org.junit.jupiter.api.Test; import java.util.Arrays; From 2e0f2d7a7191e6e64247009ec634f4526d5c089a Mon Sep 17 00:00:00 2001 From: dimiro1 Date: Mon, 17 Aug 2026 23:24:52 +0200 Subject: [PATCH 2/3] Split the emulator into core, headless and desktop modules The boundary was a convention: CLAUDE.md asked that nothing in the console or the command line reach into the window, and only a reader enforced it. It is three Maven modules now, so a chip that wants a JFrame does not compile. mynes-core the console and the picture it makes; nothing at compile scope mynes-headless the command line; core mynes-desktop the window and Main; core, headless, FlatLaf, MigLayout Desktop depends on headless rather than the reverse because Main is the one way into either mode, which is also why the fat jar and the release zip are built there. They move with it: `mynes-desktop/target/mynes.jar`, and the same for the zip, which every document and both workflows now name. Two paths had to move rather than merely be renamed. The Harte fixtures go to mynes-core/testdata, because HarteCaseLoader resolves them relative to wherever Surefire runs and that is the module now -- and getting it wrong is silent, a quiet fall back to the committed 500-case subset. And two cartridges are copied into the headless module, which needs a path on disk to hand to --rom rather than a resource on the class path. Nothing about the emulation changed. Against the jar built before the split, the same 400 frames of nestest give an identical save state, identical RAM, OAM, palette, nametable, PRG-RAM and CHR dumps, an identical PNG and an identical WAV, on the same CPU cycle. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/release.yml | 6 +- .github/workflows/test.yml | 5 +- CLAUDE.md | 78 +++-- README.md | 31 +- THIRD-PARTY.md | 3 +- mynes-core/pom.xml | 28 ++ .../java/com/github/dimiro1/mynes/APU.java | 0 .../java/com/github/dimiro1/mynes/BUS.java | 0 .../com/github/dimiro1/mynes/ByteUtils.java | 0 .../java/com/github/dimiro1/mynes/CPU.java | 0 .../java/com/github/dimiro1/mynes/CPUBus.java | 0 .../dimiro1/mynes/CPUEventListener.java | 0 .../java/com/github/dimiro1/mynes/Cart.java | 0 .../com/github/dimiro1/mynes/Controller.java | 0 .../mynes/InvalidNesFileException.java | 0 .../java/com/github/dimiro1/mynes/MMU.java | 0 .../dimiro1/mynes/MemoryWriteListener.java | 0 .../java/com/github/dimiro1/mynes/NES.java | 0 .../java/com/github/dimiro1/mynes/PPU.java | 0 .../java/com/github/dimiro1/mynes/PPUBus.java | 0 .../java/com/github/dimiro1/mynes/Region.java | 0 .../dimiro1/mynes/StandardController.java | 0 .../mynes/UnsupportedMapperException.java | 0 .../java/com/github/dimiro1/mynes/VRAM.java | 0 .../github/dimiro1/mynes/debug/Debugger.java | 0 .../dimiro1/mynes/debug/Disassembler.java | 0 .../dimiro1/mynes/mappers/IRQHandler.java | 0 .../github/dimiro1/mynes/mappers/Mapper.java | 0 .../github/dimiro1/mynes/mappers/Mapper0.java | 0 .../github/dimiro1/mynes/mappers/Mapper1.java | 0 .../dimiro1/mynes/mappers/Mapper10.java | 0 .../dimiro1/mynes/mappers/Mapper11.java | 0 .../github/dimiro1/mynes/mappers/Mapper2.java | 0 .../github/dimiro1/mynes/mappers/Mapper3.java | 0 .../github/dimiro1/mynes/mappers/Mapper4.java | 0 .../dimiro1/mynes/mappers/Mapper66.java | 0 .../github/dimiro1/mynes/mappers/Mapper7.java | 0 .../dimiro1/mynes/mappers/Mapper71.java | 0 .../github/dimiro1/mynes/mappers/Mapper9.java | 0 .../dimiro1/mynes/mappers/Mirroring.java | 0 .../dimiro1/mynes/palette/NESPalette.java | 0 .../dimiro1/mynes/palette/Palettes.java | 0 .../dimiro1/mynes/state/BatteryRAM.java | 0 .../github/dimiro1/mynes/state/SaveState.java | 0 .../mynes/state/SaveStateException.java | 0 .../github/dimiro1/mynes/state/StateIO.java | 0 .../dimiro1/mynes/state/package-info.java | 0 .../dimiro1/mynes/video/FrameAnalysis.java | 0 .../dimiro1/mynes/video/FrameRenderer.java | 0 .../dimiro1/mynes/video/package-info.java | 0 .../src}/main/resources/palettes/2c07.pal | Bin .../src}/main/resources/palettes/PROVENANCE | 0 .../resources/palettes/composite-direct.pal | Bin .../main/resources/palettes/digital-prime.pal | Bin .../src}/main/resources/palettes/magnum.pal | Bin .../main/resources/palettes/nes-classic.pal | Bin .../src}/main/resources/palettes/pc-10.pal | Bin .../main/resources/palettes/pvm-style-d93.pal | Bin .../main/resources/palettes/smooth-v2.pal | Bin .../src}/main/resources/palettes/smooth.pal | Bin .../src}/main/resources/palettes/sony-cxa.pal | Bin .../src}/main/resources/palettes/wavebeam.pal | Bin .../github/dimiro1/mynes/APUChannelTests.java | 0 .../com/github/dimiro1/mynes/APUDMCTests.java | 0 .../dimiro1/mynes/APUFrameCounterTests.java | 0 .../dimiro1/mynes/APULengthTableTests.java | 0 .../github/dimiro1/mynes/APUMixerTests.java | 0 .../com/github/dimiro1/mynes/BUSIRQTests.java | 0 .../github/dimiro1/mynes/ByteUtilsTests.java | 0 .../com/github/dimiro1/mynes/MMUTests.java | 0 .../com/github/dimiro1/mynes/RegionTests.java | 0 .../mynes/StandardControllerTests.java | 0 .../mynes/accuracycoin/AccuracyCoinTests.java | 0 .../dimiro1/mynes/blargg/APUBlarggTests.java | 0 .../dimiro1/mynes/blargg/BlarggRunner.java | 0 .../dimiro1/mynes/blargg/BlarggTests.java | 0 .../dimiro1/mynes/blargg/MMC3BlarggTests.java | 0 .../dimiro1/mynes/blargg/PPUBlarggTests.java | 0 .../github/dimiro1/mynes/cart/CartTests.java | 0 .../dimiro1/mynes/cpu/CPUInterruptTests.java | 0 .../dimiro1/mynes/cpu/HarteCPUTests.java | 0 .../github/dimiro1/mynes/cpu/HarteCase.java | 0 .../dimiro1/mynes/cpu/HarteCaseLoader.java | 0 .../dimiro1/mynes/cpu/HarteCaseRunner.java | 0 .../dimiro1/mynes/cpu/RecordingBus.java | 0 .../dimiro1/mynes/debug/DebuggerTests.java | 0 .../mynes/debug/DisassemblerTests.java | 0 .../dimiro1/mynes/mappers/Mapper10Tests.java | 0 .../dimiro1/mynes/mappers/Mapper11Tests.java | 0 .../dimiro1/mynes/mappers/Mapper1Tests.java | 0 .../dimiro1/mynes/mappers/Mapper2Tests.java | 0 .../mynes/mappers/Mapper4ScanlineTests.java | 0 .../dimiro1/mynes/mappers/Mapper4Tests.java | 0 .../dimiro1/mynes/mappers/Mapper66Tests.java | 0 .../dimiro1/mynes/mappers/Mapper71Tests.java | 0 .../dimiro1/mynes/mappers/Mapper7Tests.java | 0 .../dimiro1/mynes/mappers/Mapper9Tests.java | 0 .../mynes/mappers/MapperCartridgeTests.java | 0 .../mynes/mappers/MapperSaveStateTests.java | 0 .../dimiro1/mynes/mappers/StampedROM.java | 0 .../dimiro1/mynes/nestests/NesTestTests.java | 0 .../mynes/nestests/NestestCPUListener.java | 0 .../nestests/NestestLogParseException.java | 0 .../mynes/nestests/NestestLogParser.java | 0 .../mynes/palette/NESPaletteTests.java | 0 .../dimiro1/mynes/palette/PalettesTests.java | 0 .../mynes/ppu/NESIntegrationTests.java | 0 .../dimiro1/mynes/ppu/PPUAddressBusTests.java | 0 .../dimiro1/mynes/ppu/PPUBackgroundTests.java | 0 .../github/dimiro1/mynes/ppu/PPUFixture.java | 0 .../dimiro1/mynes/ppu/PPUMemoryTests.java | 0 .../github/dimiro1/mynes/ppu/PPUNMITests.java | 0 .../dimiro1/mynes/ppu/PPUOAMDecayTests.java | 0 .../dimiro1/mynes/ppu/PPUOpenBusTests.java | 0 .../dimiro1/mynes/ppu/PPUPowerUpTests.java | 0 .../dimiro1/mynes/ppu/PPURegisterTests.java | 0 .../dimiro1/mynes/ppu/PPUSpriteTests.java | 0 .../dimiro1/mynes/ppu/PPUTimingTests.java | 0 .../dimiro1/mynes/ppu/RecordingPPUBus.java | 0 .../github/dimiro1/mynes/ppu/StubMapper.java | 0 .../dimiro1/mynes/state/BatteryRAMTests.java | 0 .../state/SaveStateCompletenessTests.java | 0 .../mynes/state/SaveStateDivergenceTests.java | 0 .../mynes/state/SaveStateFormatTests.java | 0 .../dimiro1/mynes/state/StateIOTests.java | 0 .../mynes/video/FrameAnalysisTests.java | 0 .../mynes/video/FrameRendererTests.java | 0 .../resources/accuracycoin/AccuracyCoin.nes | Bin .../src}/test/resources/accuracycoin/LICENSE | 0 .../test/resources/apu-reset/4015_cleared.nes | Bin .../test/resources/apu-reset/4017_timing.nes | Bin .../test/resources/apu-reset/4017_written.nes | Bin .../resources/apu-reset/irq_flag_cleared.nes | Bin .../resources/apu-reset/len_ctrs_enabled.nes | Bin .../src}/test/resources/apu-reset/readme.txt | 0 .../resources/apu-reset/works_immediately.nes | Bin .../test/resources/apu-test/1-len_ctr.nes | Bin .../test/resources/apu-test/2-len_table.nes | Bin .../test/resources/apu-test/3-irq_flag.nes | Bin .../src}/test/resources/apu-test/4-jitter.nes | Bin .../test/resources/apu-test/5-len_timing.nes | Bin .../resources/apu-test/6-irq_flag_timing.nes | Bin .../test/resources/apu-test/7-dmc_basics.nes | Bin .../test/resources/apu-test/8-dmc_rates.nes | Bin .../src}/test/resources/apu-test/readme.txt | 0 .../resources/cpu-reset/ram_after_reset.nes | Bin .../src}/test/resources/cpu-reset/readme.txt | 0 .../test/resources/cpu-reset/registers.nes | Bin .../test/resources/harte/nes6502/00.json.gz | Bin .../test/resources/harte/nes6502/01.json.gz | Bin .../test/resources/harte/nes6502/02.json.gz | Bin .../test/resources/harte/nes6502/03.json.gz | Bin .../test/resources/harte/nes6502/04.json.gz | Bin .../test/resources/harte/nes6502/05.json.gz | Bin .../test/resources/harte/nes6502/06.json.gz | Bin .../test/resources/harte/nes6502/07.json.gz | Bin .../test/resources/harte/nes6502/08.json.gz | Bin .../test/resources/harte/nes6502/09.json.gz | Bin .../test/resources/harte/nes6502/0a.json.gz | Bin .../test/resources/harte/nes6502/0b.json.gz | Bin .../test/resources/harte/nes6502/0c.json.gz | Bin .../test/resources/harte/nes6502/0d.json.gz | Bin .../test/resources/harte/nes6502/0e.json.gz | Bin .../test/resources/harte/nes6502/0f.json.gz | Bin .../test/resources/harte/nes6502/10.json.gz | Bin .../test/resources/harte/nes6502/11.json.gz | Bin .../test/resources/harte/nes6502/12.json.gz | Bin .../test/resources/harte/nes6502/13.json.gz | Bin .../test/resources/harte/nes6502/14.json.gz | Bin .../test/resources/harte/nes6502/15.json.gz | Bin .../test/resources/harte/nes6502/16.json.gz | Bin .../test/resources/harte/nes6502/17.json.gz | Bin .../test/resources/harte/nes6502/18.json.gz | Bin .../test/resources/harte/nes6502/19.json.gz | Bin .../test/resources/harte/nes6502/1a.json.gz | Bin .../test/resources/harte/nes6502/1b.json.gz | Bin .../test/resources/harte/nes6502/1c.json.gz | Bin .../test/resources/harte/nes6502/1d.json.gz | Bin .../test/resources/harte/nes6502/1e.json.gz | Bin .../test/resources/harte/nes6502/1f.json.gz | Bin .../test/resources/harte/nes6502/20.json.gz | Bin .../test/resources/harte/nes6502/21.json.gz | Bin .../test/resources/harte/nes6502/22.json.gz | Bin .../test/resources/harte/nes6502/23.json.gz | Bin .../test/resources/harte/nes6502/24.json.gz | Bin .../test/resources/harte/nes6502/25.json.gz | Bin .../test/resources/harte/nes6502/26.json.gz | Bin .../test/resources/harte/nes6502/27.json.gz | Bin .../test/resources/harte/nes6502/28.json.gz | Bin .../test/resources/harte/nes6502/29.json.gz | Bin .../test/resources/harte/nes6502/2a.json.gz | Bin .../test/resources/harte/nes6502/2b.json.gz | Bin .../test/resources/harte/nes6502/2c.json.gz | Bin .../test/resources/harte/nes6502/2d.json.gz | Bin .../test/resources/harte/nes6502/2e.json.gz | Bin .../test/resources/harte/nes6502/2f.json.gz | Bin .../test/resources/harte/nes6502/30.json.gz | Bin .../test/resources/harte/nes6502/31.json.gz | Bin .../test/resources/harte/nes6502/32.json.gz | Bin .../test/resources/harte/nes6502/33.json.gz | Bin .../test/resources/harte/nes6502/34.json.gz | Bin .../test/resources/harte/nes6502/35.json.gz | Bin .../test/resources/harte/nes6502/36.json.gz | Bin .../test/resources/harte/nes6502/37.json.gz | Bin .../test/resources/harte/nes6502/38.json.gz | Bin .../test/resources/harte/nes6502/39.json.gz | Bin .../test/resources/harte/nes6502/3a.json.gz | Bin .../test/resources/harte/nes6502/3b.json.gz | Bin .../test/resources/harte/nes6502/3c.json.gz | Bin .../test/resources/harte/nes6502/3d.json.gz | Bin .../test/resources/harte/nes6502/3e.json.gz | Bin .../test/resources/harte/nes6502/3f.json.gz | Bin .../test/resources/harte/nes6502/40.json.gz | Bin .../test/resources/harte/nes6502/41.json.gz | Bin .../test/resources/harte/nes6502/42.json.gz | Bin .../test/resources/harte/nes6502/43.json.gz | Bin .../test/resources/harte/nes6502/44.json.gz | Bin .../test/resources/harte/nes6502/45.json.gz | Bin .../test/resources/harte/nes6502/46.json.gz | Bin .../test/resources/harte/nes6502/47.json.gz | Bin .../test/resources/harte/nes6502/48.json.gz | Bin .../test/resources/harte/nes6502/49.json.gz | Bin .../test/resources/harte/nes6502/4a.json.gz | Bin .../test/resources/harte/nes6502/4b.json.gz | Bin .../test/resources/harte/nes6502/4c.json.gz | Bin .../test/resources/harte/nes6502/4d.json.gz | Bin .../test/resources/harte/nes6502/4e.json.gz | Bin .../test/resources/harte/nes6502/4f.json.gz | Bin .../test/resources/harte/nes6502/50.json.gz | Bin .../test/resources/harte/nes6502/51.json.gz | Bin .../test/resources/harte/nes6502/52.json.gz | Bin .../test/resources/harte/nes6502/53.json.gz | Bin .../test/resources/harte/nes6502/54.json.gz | Bin .../test/resources/harte/nes6502/55.json.gz | Bin .../test/resources/harte/nes6502/56.json.gz | Bin .../test/resources/harte/nes6502/57.json.gz | Bin .../test/resources/harte/nes6502/58.json.gz | Bin .../test/resources/harte/nes6502/59.json.gz | Bin .../test/resources/harte/nes6502/5a.json.gz | Bin .../test/resources/harte/nes6502/5b.json.gz | Bin .../test/resources/harte/nes6502/5c.json.gz | Bin .../test/resources/harte/nes6502/5d.json.gz | Bin .../test/resources/harte/nes6502/5e.json.gz | Bin .../test/resources/harte/nes6502/5f.json.gz | Bin .../test/resources/harte/nes6502/60.json.gz | Bin .../test/resources/harte/nes6502/61.json.gz | Bin .../test/resources/harte/nes6502/62.json.gz | Bin .../test/resources/harte/nes6502/63.json.gz | Bin .../test/resources/harte/nes6502/64.json.gz | Bin .../test/resources/harte/nes6502/65.json.gz | Bin .../test/resources/harte/nes6502/66.json.gz | Bin .../test/resources/harte/nes6502/67.json.gz | Bin .../test/resources/harte/nes6502/68.json.gz | Bin .../test/resources/harte/nes6502/69.json.gz | Bin .../test/resources/harte/nes6502/6a.json.gz | Bin .../test/resources/harte/nes6502/6b.json.gz | Bin .../test/resources/harte/nes6502/6c.json.gz | Bin .../test/resources/harte/nes6502/6d.json.gz | Bin .../test/resources/harte/nes6502/6e.json.gz | Bin .../test/resources/harte/nes6502/6f.json.gz | Bin .../test/resources/harte/nes6502/70.json.gz | Bin .../test/resources/harte/nes6502/71.json.gz | Bin .../test/resources/harte/nes6502/72.json.gz | Bin .../test/resources/harte/nes6502/73.json.gz | Bin .../test/resources/harte/nes6502/74.json.gz | Bin .../test/resources/harte/nes6502/75.json.gz | Bin .../test/resources/harte/nes6502/76.json.gz | Bin .../test/resources/harte/nes6502/77.json.gz | Bin .../test/resources/harte/nes6502/78.json.gz | Bin .../test/resources/harte/nes6502/79.json.gz | Bin .../test/resources/harte/nes6502/7a.json.gz | Bin .../test/resources/harte/nes6502/7b.json.gz | Bin .../test/resources/harte/nes6502/7c.json.gz | Bin .../test/resources/harte/nes6502/7d.json.gz | Bin .../test/resources/harte/nes6502/7e.json.gz | Bin .../test/resources/harte/nes6502/7f.json.gz | Bin .../test/resources/harte/nes6502/80.json.gz | Bin .../test/resources/harte/nes6502/81.json.gz | Bin .../test/resources/harte/nes6502/82.json.gz | Bin .../test/resources/harte/nes6502/83.json.gz | Bin .../test/resources/harte/nes6502/84.json.gz | Bin .../test/resources/harte/nes6502/85.json.gz | Bin .../test/resources/harte/nes6502/86.json.gz | Bin .../test/resources/harte/nes6502/87.json.gz | Bin .../test/resources/harte/nes6502/88.json.gz | Bin .../test/resources/harte/nes6502/89.json.gz | Bin .../test/resources/harte/nes6502/8a.json.gz | Bin .../test/resources/harte/nes6502/8b.json.gz | Bin .../test/resources/harte/nes6502/8c.json.gz | Bin .../test/resources/harte/nes6502/8d.json.gz | Bin .../test/resources/harte/nes6502/8e.json.gz | Bin .../test/resources/harte/nes6502/8f.json.gz | Bin .../test/resources/harte/nes6502/90.json.gz | Bin .../test/resources/harte/nes6502/91.json.gz | Bin .../test/resources/harte/nes6502/92.json.gz | Bin .../test/resources/harte/nes6502/93.json.gz | Bin .../test/resources/harte/nes6502/94.json.gz | Bin .../test/resources/harte/nes6502/95.json.gz | Bin .../test/resources/harte/nes6502/96.json.gz | Bin .../test/resources/harte/nes6502/97.json.gz | Bin .../test/resources/harte/nes6502/98.json.gz | Bin .../test/resources/harte/nes6502/99.json.gz | Bin .../test/resources/harte/nes6502/9a.json.gz | Bin .../test/resources/harte/nes6502/9b.json.gz | Bin .../test/resources/harte/nes6502/9c.json.gz | Bin .../test/resources/harte/nes6502/9d.json.gz | Bin .../test/resources/harte/nes6502/9e.json.gz | Bin .../test/resources/harte/nes6502/9f.json.gz | Bin .../test/resources/harte/nes6502/PROVENANCE | 0 .../test/resources/harte/nes6502/a0.json.gz | Bin .../test/resources/harte/nes6502/a1.json.gz | Bin .../test/resources/harte/nes6502/a2.json.gz | Bin .../test/resources/harte/nes6502/a3.json.gz | Bin .../test/resources/harte/nes6502/a4.json.gz | Bin .../test/resources/harte/nes6502/a5.json.gz | Bin .../test/resources/harte/nes6502/a6.json.gz | Bin .../test/resources/harte/nes6502/a7.json.gz | Bin .../test/resources/harte/nes6502/a8.json.gz | Bin .../test/resources/harte/nes6502/a9.json.gz | Bin .../test/resources/harte/nes6502/aa.json.gz | Bin .../test/resources/harte/nes6502/ab.json.gz | Bin .../test/resources/harte/nes6502/ac.json.gz | Bin .../test/resources/harte/nes6502/ad.json.gz | Bin .../test/resources/harte/nes6502/ae.json.gz | Bin .../test/resources/harte/nes6502/af.json.gz | Bin .../test/resources/harte/nes6502/b0.json.gz | Bin .../test/resources/harte/nes6502/b1.json.gz | Bin .../test/resources/harte/nes6502/b2.json.gz | Bin .../test/resources/harte/nes6502/b3.json.gz | Bin .../test/resources/harte/nes6502/b4.json.gz | Bin .../test/resources/harte/nes6502/b5.json.gz | Bin .../test/resources/harte/nes6502/b6.json.gz | Bin .../test/resources/harte/nes6502/b7.json.gz | Bin .../test/resources/harte/nes6502/b8.json.gz | Bin .../test/resources/harte/nes6502/b9.json.gz | Bin .../test/resources/harte/nes6502/ba.json.gz | Bin .../test/resources/harte/nes6502/bb.json.gz | Bin .../test/resources/harte/nes6502/bc.json.gz | Bin .../test/resources/harte/nes6502/bd.json.gz | Bin .../test/resources/harte/nes6502/be.json.gz | Bin .../test/resources/harte/nes6502/bf.json.gz | Bin .../test/resources/harte/nes6502/c0.json.gz | Bin .../test/resources/harte/nes6502/c1.json.gz | Bin .../test/resources/harte/nes6502/c2.json.gz | Bin .../test/resources/harte/nes6502/c3.json.gz | Bin .../test/resources/harte/nes6502/c4.json.gz | Bin .../test/resources/harte/nes6502/c5.json.gz | Bin .../test/resources/harte/nes6502/c6.json.gz | Bin .../test/resources/harte/nes6502/c7.json.gz | Bin .../test/resources/harte/nes6502/c8.json.gz | Bin .../test/resources/harte/nes6502/c9.json.gz | Bin .../test/resources/harte/nes6502/ca.json.gz | Bin .../test/resources/harte/nes6502/cb.json.gz | Bin .../test/resources/harte/nes6502/cc.json.gz | Bin .../test/resources/harte/nes6502/cd.json.gz | Bin .../test/resources/harte/nes6502/ce.json.gz | Bin .../test/resources/harte/nes6502/cf.json.gz | Bin .../test/resources/harte/nes6502/d0.json.gz | Bin .../test/resources/harte/nes6502/d1.json.gz | Bin .../test/resources/harte/nes6502/d2.json.gz | Bin .../test/resources/harte/nes6502/d3.json.gz | Bin .../test/resources/harte/nes6502/d4.json.gz | Bin .../test/resources/harte/nes6502/d5.json.gz | Bin .../test/resources/harte/nes6502/d6.json.gz | Bin .../test/resources/harte/nes6502/d7.json.gz | Bin .../test/resources/harte/nes6502/d8.json.gz | Bin .../test/resources/harte/nes6502/d9.json.gz | Bin .../test/resources/harte/nes6502/da.json.gz | Bin .../test/resources/harte/nes6502/db.json.gz | Bin .../test/resources/harte/nes6502/dc.json.gz | Bin .../test/resources/harte/nes6502/dd.json.gz | Bin .../test/resources/harte/nes6502/de.json.gz | Bin .../test/resources/harte/nes6502/df.json.gz | Bin .../test/resources/harte/nes6502/e0.json.gz | Bin .../test/resources/harte/nes6502/e1.json.gz | Bin .../test/resources/harte/nes6502/e2.json.gz | Bin .../test/resources/harte/nes6502/e3.json.gz | Bin .../test/resources/harte/nes6502/e4.json.gz | Bin .../test/resources/harte/nes6502/e5.json.gz | Bin .../test/resources/harte/nes6502/e6.json.gz | Bin .../test/resources/harte/nes6502/e7.json.gz | Bin .../test/resources/harte/nes6502/e8.json.gz | Bin .../test/resources/harte/nes6502/e9.json.gz | Bin .../test/resources/harte/nes6502/ea.json.gz | Bin .../test/resources/harte/nes6502/eb.json.gz | Bin .../test/resources/harte/nes6502/ec.json.gz | Bin .../test/resources/harte/nes6502/ed.json.gz | Bin .../test/resources/harte/nes6502/ee.json.gz | Bin .../test/resources/harte/nes6502/ef.json.gz | Bin .../test/resources/harte/nes6502/f0.json.gz | Bin .../test/resources/harte/nes6502/f1.json.gz | Bin .../test/resources/harte/nes6502/f2.json.gz | Bin .../test/resources/harte/nes6502/f3.json.gz | Bin .../test/resources/harte/nes6502/f4.json.gz | Bin .../test/resources/harte/nes6502/f5.json.gz | Bin .../test/resources/harte/nes6502/f6.json.gz | Bin .../test/resources/harte/nes6502/f7.json.gz | Bin .../test/resources/harte/nes6502/f8.json.gz | Bin .../test/resources/harte/nes6502/f9.json.gz | Bin .../test/resources/harte/nes6502/fa.json.gz | Bin .../test/resources/harte/nes6502/fb.json.gz | Bin .../test/resources/harte/nes6502/fc.json.gz | Bin .../test/resources/harte/nes6502/fd.json.gz | Bin .../test/resources/harte/nes6502/fe.json.gz | Bin .../test/resources/harte/nes6502/ff.json.gz | Bin .../resources/instr-misc/01-abs_x_wrap.nes | Bin .../resources/instr-misc/02-branch_wrap.nes | Bin .../resources/instr-misc/03-dummy_reads.nes | Bin .../instr-misc/04-dummy_reads_apu.nes | Bin .../src}/test/resources/instr-misc/readme.txt | 0 .../resources/instr-test-v5/01-basics.nes | Bin .../resources/instr-test-v5/02-implied.nes | Bin .../resources/instr-test-v5/03-immediate.nes | Bin .../resources/instr-test-v5/04-zero_page.nes | Bin .../test/resources/instr-test-v5/05-zp_xy.nes | Bin .../resources/instr-test-v5/06-absolute.nes | Bin .../resources/instr-test-v5/07-abs_xy.nes | Bin .../test/resources/instr-test-v5/08-ind_x.nes | Bin .../test/resources/instr-test-v5/09-ind_y.nes | Bin .../resources/instr-test-v5/10-branches.nes | Bin .../test/resources/instr-test-v5/11-stack.nes | Bin .../resources/instr-test-v5/12-jmp_jsr.nes | Bin .../test/resources/instr-test-v5/13-rts.nes | Bin .../test/resources/instr-test-v5/14-rti.nes | Bin .../test/resources/instr-test-v5/15-brk.nes | Bin .../resources/instr-test-v5/16-special.nes | Bin .../resources/instr-test-v5/official_only.nes | Bin .../resources/instr-timing/instr-timing.nes | Bin .../test/resources/instr-timing/readme.txt | 0 .../test/resources/mmc3-test-2/1-clocking.nes | Bin .../test/resources/mmc3-test-2/2-details.nes | Bin .../resources/mmc3-test-2/3-A12_clocking.nes | Bin .../mmc3-test-2/4-scanline_timing.nes | Bin .../test/resources/mmc3-test-2/5-MMC3.nes | Bin .../test/resources/mmc3-test-2/6-MMC3_alt.nes | Bin .../test/resources/mmc3-test-2/readme.txt | 0 .../src}/test/resources/nestest/nestest.log | 0 .../src}/test/resources/nestest/nestest.nes | Bin .../src}/test/resources/nestest/nestest.txt | 0 .../src}/test/resources/oam/oam_read.nes | Bin .../test/resources/oam/oam_read.readme.txt | 0 .../src}/test/resources/oam/oam_stress.nes | Bin .../test/resources/oam/oam_stress.readme.txt | 0 .../resources/ppu-open-bus/ppu_open_bus.nes | Bin .../test/resources/ppu-open-bus/readme.txt | 0 .../test/resources/ppu-read-buffer/readme.txt | 0 .../ppu-read-buffer/test_ppu_read_buffer.nes | Bin .../resources/ppu-sprite-hit/01-basics.nes | Bin .../resources/ppu-sprite-hit/02-alignment.nes | Bin .../resources/ppu-sprite-hit/03-corners.nes | Bin .../test/resources/ppu-sprite-hit/04-flip.nes | Bin .../resources/ppu-sprite-hit/05-left_clip.nes | Bin .../ppu-sprite-hit/06-right_edge.nes | Bin .../ppu-sprite-hit/07-screen_bottom.nes | Bin .../ppu-sprite-hit/08-double_height.nes | Bin .../ppu-sprite-hit/09-timing_basics.nes | Bin .../ppu-sprite-hit/10-timing_order.nes | Bin .../ppu-sprite-hit/11-edge_timing.nes | Bin .../test/resources/ppu-sprite-hit/readme.txt | 0 .../ppu-sprite-overflow/01-basics.nes | Bin .../ppu-sprite-overflow/02-details.nes | Bin .../ppu-sprite-overflow/03-timing.nes | Bin .../ppu-sprite-overflow/04-obscure.nes | Bin .../ppu-sprite-overflow/05-emulator.nes | Bin .../resources/ppu-sprite-overflow/readme.txt | 0 .../resources/ppu-tests-2005/palette_ram.nes | Bin .../test/resources/ppu-tests-2005/readme.txt | 0 .../resources/ppu-tests-2005/sprite_ram.nes | Bin .../ppu-tests-2005/vbl_clear_time.nes | Bin .../resources/ppu-tests-2005/vram_access.nes | Bin .../resources/ppu-vbl-nmi/01-vbl_basics.nes | Bin .../resources/ppu-vbl-nmi/02-vbl_set_time.nes | Bin .../ppu-vbl-nmi/03-vbl_clear_time.nes | Bin .../resources/ppu-vbl-nmi/04-nmi_control.nes | Bin .../resources/ppu-vbl-nmi/05-nmi_timing.nes | Bin .../resources/ppu-vbl-nmi/06-suppression.nes | Bin .../ppu-vbl-nmi/07-nmi_on_timing.nes | Bin .../ppu-vbl-nmi/08-nmi_off_timing.nes | Bin .../ppu-vbl-nmi/09-even_odd_frames.nes | Bin .../ppu-vbl-nmi/10-even_odd_timing.nes | Bin .../test/resources/ppu-vbl-nmi/readme.txt | 0 mynes-desktop/pom.xml | 204 +++++++++++++ {src => mynes-desktop/src}/assembly/dist.xml | 7 +- {src => mynes-desktop/src}/dist/mynes | 0 {src => mynes-desktop/src}/dist/mynes.bat | 0 .../github/dimiro1/mynes/ui/AudioOutput.java | 0 .../com/github/dimiro1/mynes/ui/Config.java | 0 .../dimiro1/mynes/ui/EmulationSpeed.java | 0 .../dimiro1/mynes/ui/EmulatorRunner.java | 0 .../github/dimiro1/mynes/ui/GameUIFrame.java | 0 .../com/github/dimiro1/mynes/ui/Main.java | 0 .../dimiro1/mynes/ui/PaletteDialog.java | 0 .../dimiro1/mynes/ui/RegionSetting.java | 0 .../dimiro1/mynes/ui/ScreenComponent.java | 0 .../github/dimiro1/mynes/ui/ScreenScale.java | 0 .../github/dimiro1/mynes/ui/Screenshots.java | 0 .../mynes/ui/chrviewer/CHRViewerFrame.java | 0 .../mynes/ui/chrviewer/TileComponent.java | 0 .../mynes/ui/chrviewer/TilesViewerPanel.java | 0 .../mynes/ui/debugger/DebuggerFrame.java | 0 .../mynes/ui/debugger/DisassemblyPanel.java | 0 .../mynes/ui/debugger/MachineSnapshot.java | 0 .../mynes/ui/debugger/MemoryPanel.java | 0 .../mynes/ui/debugger/PointsPanel.java | 0 .../mynes/ui/debugger/RegistersPanel.java | 0 .../ui/input/ControllerSettingsDialog.java | 0 .../dimiro1/mynes/ui/input/KeyBindings.java | 0 .../dimiro1/mynes/ui/input/KeyboardInput.java | 0 .../github/dimiro1/mynes/ui/ConfigTests.java | 0 .../dimiro1/mynes/ui/EmulationSpeedTests.java | 0 .../dimiro1/mynes/ui/EmulatorRunnerTests.java | 0 .../mynes/ui/ScreenComponentTests.java | 0 .../dimiro1/mynes/ui/ScreenScaleTests.java | 0 .../dimiro1/mynes/ui/ScreenshotsTests.java | 0 .../mynes/ui/debugger/DebuggerFrameTests.java | 0 .../ui/debugger/MachineSnapshotTests.java | 0 .../mynes/ui/input/KeyBindingsTests.java | 0 mynes-headless/pom.xml | 34 +++ .../dimiro1/mynes/headless/Headless.java | 0 .../dimiro1/mynes/headless/InputSchedule.java | 0 .../github/dimiro1/mynes/headless/Json.java | 0 .../dimiro1/mynes/headless/Options.java | 0 .../github/dimiro1/mynes/headless/Repl.java | 0 .../github/dimiro1/mynes/headless/Report.java | 0 .../dimiro1/mynes/headless/Session.java | 14 +- .../mynes/headless/UsageException.java | 0 .../dimiro1/mynes/headless/WavWriter.java | 4 +- .../dimiro1/mynes/headless/package-info.java | 12 +- .../mynes/headless/HeadlessRunTests.java | 0 .../mynes/headless/InputPathTests.java | 0 .../mynes/headless/InputScheduleTests.java | 0 .../dimiro1/mynes/headless/OptionsTests.java | 0 .../dimiro1/mynes/headless/ReplTests.java | 0 .../mynes/headless/WavWriterTests.java | 0 mynes-headless/src/test/resources/PROVENANCE | 15 + .../test/resources/mmc3-test-2/1-clocking.nes | Bin 0 -> 40976 bytes .../src/test/resources/nestest/nestest.nes | Bin 0 -> 24592 bytes pom.xml | 268 ++++++------------ scripts/download-6502-tests.sh | 22 +- scripts/download-palettes.sh | 4 +- scripts/sample-6502-tests.sh | 13 +- scripts/smoke-distribution.sh | 8 +- 542 files changed, 502 insertions(+), 254 deletions(-) create mode 100644 mynes-core/pom.xml rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/APU.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/BUS.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/ByteUtils.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/CPU.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/CPUBus.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/CPUEventListener.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/Cart.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/Controller.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/InvalidNesFileException.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/MMU.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/MemoryWriteListener.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/NES.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/PPU.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/PPUBus.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/Region.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/StandardController.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/UnsupportedMapperException.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/VRAM.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/debug/Debugger.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/debug/Disassembler.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/IRQHandler.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper0.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper1.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper10.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper11.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper2.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper3.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper4.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper66.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper7.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper71.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mapper9.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/mappers/Mirroring.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/palette/NESPalette.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/palette/Palettes.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/state/BatteryRAM.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/state/SaveState.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/state/SaveStateException.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/state/StateIO.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/state/package-info.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/video/FrameAnalysis.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/video/FrameRenderer.java (100%) rename {src => mynes-core/src}/main/java/com/github/dimiro1/mynes/video/package-info.java (100%) rename {src => mynes-core/src}/main/resources/palettes/2c07.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/PROVENANCE (100%) rename {src => mynes-core/src}/main/resources/palettes/composite-direct.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/digital-prime.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/magnum.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/nes-classic.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/pc-10.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/pvm-style-d93.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/smooth-v2.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/smooth.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/sony-cxa.pal (100%) rename {src => mynes-core/src}/main/resources/palettes/wavebeam.pal (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/APUChannelTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/APUDMCTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/APUFrameCounterTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/APULengthTableTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/APUMixerTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/BUSIRQTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ByteUtilsTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/MMUTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/RegionTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/StandardControllerTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/accuracycoin/AccuracyCoinTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/blargg/APUBlarggTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/blargg/BlarggRunner.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/blargg/BlarggTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/blargg/MMC3BlarggTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/blargg/PPUBlarggTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/cart/CartTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/cpu/CPUInterruptTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/cpu/HarteCPUTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/cpu/HarteCase.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/cpu/HarteCaseLoader.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/cpu/HarteCaseRunner.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/cpu/RecordingBus.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/debug/DebuggerTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/debug/DisassemblerTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper10Tests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper11Tests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper1Tests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper2Tests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper4ScanlineTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper4Tests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper66Tests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper71Tests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper7Tests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/Mapper9Tests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/MapperCartridgeTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/MapperSaveStateTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/mappers/StampedROM.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/nestests/NesTestTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/nestests/NestestCPUListener.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/nestests/NestestLogParseException.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/nestests/NestestLogParser.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/palette/NESPaletteTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/palette/PalettesTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/NESIntegrationTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUAddressBusTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUBackgroundTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUFixture.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUMemoryTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUNMITests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUOAMDecayTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUOpenBusTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUPowerUpTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPURegisterTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUSpriteTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/PPUTimingTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/RecordingPPUBus.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/ppu/StubMapper.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/state/BatteryRAMTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/state/SaveStateCompletenessTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/state/SaveStateDivergenceTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/state/SaveStateFormatTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/state/StateIOTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/video/FrameAnalysisTests.java (100%) rename {src => mynes-core/src}/test/java/com/github/dimiro1/mynes/video/FrameRendererTests.java (100%) rename {src => mynes-core/src}/test/resources/accuracycoin/AccuracyCoin.nes (100%) rename {src => mynes-core/src}/test/resources/accuracycoin/LICENSE (100%) rename {src => mynes-core/src}/test/resources/apu-reset/4015_cleared.nes (100%) rename {src => mynes-core/src}/test/resources/apu-reset/4017_timing.nes (100%) rename {src => mynes-core/src}/test/resources/apu-reset/4017_written.nes (100%) rename {src => mynes-core/src}/test/resources/apu-reset/irq_flag_cleared.nes (100%) rename {src => mynes-core/src}/test/resources/apu-reset/len_ctrs_enabled.nes (100%) rename {src => mynes-core/src}/test/resources/apu-reset/readme.txt (100%) rename {src => mynes-core/src}/test/resources/apu-reset/works_immediately.nes (100%) rename {src => mynes-core/src}/test/resources/apu-test/1-len_ctr.nes (100%) rename {src => mynes-core/src}/test/resources/apu-test/2-len_table.nes (100%) rename {src => mynes-core/src}/test/resources/apu-test/3-irq_flag.nes (100%) rename {src => mynes-core/src}/test/resources/apu-test/4-jitter.nes (100%) rename {src => mynes-core/src}/test/resources/apu-test/5-len_timing.nes (100%) rename {src => mynes-core/src}/test/resources/apu-test/6-irq_flag_timing.nes (100%) rename {src => mynes-core/src}/test/resources/apu-test/7-dmc_basics.nes (100%) rename {src => mynes-core/src}/test/resources/apu-test/8-dmc_rates.nes (100%) rename {src => mynes-core/src}/test/resources/apu-test/readme.txt (100%) rename {src => mynes-core/src}/test/resources/cpu-reset/ram_after_reset.nes (100%) rename {src => mynes-core/src}/test/resources/cpu-reset/readme.txt (100%) rename {src => mynes-core/src}/test/resources/cpu-reset/registers.nes (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/00.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/01.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/02.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/03.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/04.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/05.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/06.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/07.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/08.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/09.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/0a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/0b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/0c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/0d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/0e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/0f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/10.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/11.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/12.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/13.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/14.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/15.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/16.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/17.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/18.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/19.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/1a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/1b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/1c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/1d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/1e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/1f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/20.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/21.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/22.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/23.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/24.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/25.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/26.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/27.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/28.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/29.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/2a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/2b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/2c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/2d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/2e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/2f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/30.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/31.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/32.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/33.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/34.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/35.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/36.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/37.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/38.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/39.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/3a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/3b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/3c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/3d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/3e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/3f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/40.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/41.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/42.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/43.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/44.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/45.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/46.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/47.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/48.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/49.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/4a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/4b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/4c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/4d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/4e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/4f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/50.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/51.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/52.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/53.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/54.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/55.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/56.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/57.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/58.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/59.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/5a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/5b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/5c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/5d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/5e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/5f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/60.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/61.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/62.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/63.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/64.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/65.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/66.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/67.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/68.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/69.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/6a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/6b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/6c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/6d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/6e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/6f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/70.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/71.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/72.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/73.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/74.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/75.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/76.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/77.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/78.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/79.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/7a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/7b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/7c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/7d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/7e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/7f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/80.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/81.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/82.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/83.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/84.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/85.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/86.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/87.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/88.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/89.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/8a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/8b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/8c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/8d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/8e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/8f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/90.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/91.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/92.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/93.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/94.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/95.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/96.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/97.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/98.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/99.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/9a.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/9b.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/9c.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/9d.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/9e.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/9f.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/PROVENANCE (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a0.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a1.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a2.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a3.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a4.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a5.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a6.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a7.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a8.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/a9.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/aa.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ab.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ac.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ad.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ae.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/af.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b0.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b1.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b2.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b3.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b4.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b5.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b6.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b7.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b8.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/b9.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ba.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/bb.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/bc.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/bd.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/be.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/bf.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c0.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c1.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c2.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c3.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c4.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c5.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c6.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c7.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c8.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/c9.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ca.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/cb.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/cc.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/cd.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ce.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/cf.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d0.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d1.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d2.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d3.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d4.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d5.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d6.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d7.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d8.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/d9.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/da.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/db.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/dc.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/dd.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/de.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/df.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e0.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e1.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e2.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e3.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e4.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e5.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e6.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e7.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e8.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/e9.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ea.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/eb.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ec.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ed.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ee.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ef.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f0.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f1.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f2.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f3.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f4.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f5.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f6.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f7.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f8.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/f9.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/fa.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/fb.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/fc.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/fd.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/fe.json.gz (100%) rename {src => mynes-core/src}/test/resources/harte/nes6502/ff.json.gz (100%) rename {src => mynes-core/src}/test/resources/instr-misc/01-abs_x_wrap.nes (100%) rename {src => mynes-core/src}/test/resources/instr-misc/02-branch_wrap.nes (100%) rename {src => mynes-core/src}/test/resources/instr-misc/03-dummy_reads.nes (100%) rename {src => mynes-core/src}/test/resources/instr-misc/04-dummy_reads_apu.nes (100%) rename {src => mynes-core/src}/test/resources/instr-misc/readme.txt (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/01-basics.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/02-implied.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/03-immediate.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/04-zero_page.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/05-zp_xy.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/06-absolute.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/07-abs_xy.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/08-ind_x.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/09-ind_y.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/10-branches.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/11-stack.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/12-jmp_jsr.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/13-rts.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/14-rti.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/15-brk.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/16-special.nes (100%) rename {src => mynes-core/src}/test/resources/instr-test-v5/official_only.nes (100%) rename {src => mynes-core/src}/test/resources/instr-timing/instr-timing.nes (100%) rename {src => mynes-core/src}/test/resources/instr-timing/readme.txt (100%) rename {src => mynes-core/src}/test/resources/mmc3-test-2/1-clocking.nes (100%) rename {src => mynes-core/src}/test/resources/mmc3-test-2/2-details.nes (100%) rename {src => mynes-core/src}/test/resources/mmc3-test-2/3-A12_clocking.nes (100%) rename {src => mynes-core/src}/test/resources/mmc3-test-2/4-scanline_timing.nes (100%) rename {src => mynes-core/src}/test/resources/mmc3-test-2/5-MMC3.nes (100%) rename {src => mynes-core/src}/test/resources/mmc3-test-2/6-MMC3_alt.nes (100%) rename {src => mynes-core/src}/test/resources/mmc3-test-2/readme.txt (100%) rename {src => mynes-core/src}/test/resources/nestest/nestest.log (100%) rename {src => mynes-core/src}/test/resources/nestest/nestest.nes (100%) rename {src => mynes-core/src}/test/resources/nestest/nestest.txt (100%) rename {src => mynes-core/src}/test/resources/oam/oam_read.nes (100%) rename {src => mynes-core/src}/test/resources/oam/oam_read.readme.txt (100%) rename {src => mynes-core/src}/test/resources/oam/oam_stress.nes (100%) rename {src => mynes-core/src}/test/resources/oam/oam_stress.readme.txt (100%) rename {src => mynes-core/src}/test/resources/ppu-open-bus/ppu_open_bus.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-open-bus/readme.txt (100%) rename {src => mynes-core/src}/test/resources/ppu-read-buffer/readme.txt (100%) rename {src => mynes-core/src}/test/resources/ppu-read-buffer/test_ppu_read_buffer.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/01-basics.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/02-alignment.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/03-corners.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/04-flip.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/05-left_clip.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/06-right_edge.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/07-screen_bottom.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/08-double_height.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/09-timing_basics.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/10-timing_order.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/11-edge_timing.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-hit/readme.txt (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-overflow/01-basics.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-overflow/02-details.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-overflow/03-timing.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-overflow/04-obscure.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-overflow/05-emulator.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-sprite-overflow/readme.txt (100%) rename {src => mynes-core/src}/test/resources/ppu-tests-2005/palette_ram.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-tests-2005/readme.txt (100%) rename {src => mynes-core/src}/test/resources/ppu-tests-2005/sprite_ram.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-tests-2005/vbl_clear_time.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-tests-2005/vram_access.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/01-vbl_basics.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/02-vbl_set_time.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/03-vbl_clear_time.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/04-nmi_control.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/05-nmi_timing.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/06-suppression.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/07-nmi_on_timing.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/08-nmi_off_timing.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/09-even_odd_frames.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/10-even_odd_timing.nes (100%) rename {src => mynes-core/src}/test/resources/ppu-vbl-nmi/readme.txt (100%) create mode 100644 mynes-desktop/pom.xml rename {src => mynes-desktop/src}/assembly/dist.xml (91%) rename {src => mynes-desktop/src}/dist/mynes (100%) rename {src => mynes-desktop/src}/dist/mynes.bat (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/AudioOutput.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/Config.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/EmulationSpeed.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/EmulatorRunner.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/Main.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/PaletteDialog.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/RegionSetting.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/ScreenComponent.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/ScreenScale.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/Screenshots.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/chrviewer/TileComponent.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/chrviewer/TilesViewerPanel.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrame.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/debugger/DisassemblyPanel.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshot.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/debugger/MemoryPanel.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/debugger/PointsPanel.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/debugger/RegistersPanel.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/input/ControllerSettingsDialog.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/input/KeyBindings.java (100%) rename {src => mynes-desktop/src}/main/java/com/github/dimiro1/mynes/ui/input/KeyboardInput.java (100%) rename {src => mynes-desktop/src}/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java (100%) rename {src => mynes-desktop/src}/test/java/com/github/dimiro1/mynes/ui/EmulationSpeedTests.java (100%) rename {src => mynes-desktop/src}/test/java/com/github/dimiro1/mynes/ui/EmulatorRunnerTests.java (100%) rename {src => mynes-desktop/src}/test/java/com/github/dimiro1/mynes/ui/ScreenComponentTests.java (100%) rename {src => mynes-desktop/src}/test/java/com/github/dimiro1/mynes/ui/ScreenScaleTests.java (100%) rename {src => mynes-desktop/src}/test/java/com/github/dimiro1/mynes/ui/ScreenshotsTests.java (100%) rename {src => mynes-desktop/src}/test/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrameTests.java (100%) rename {src => mynes-desktop/src}/test/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshotTests.java (100%) rename {src => mynes-desktop/src}/test/java/com/github/dimiro1/mynes/ui/input/KeyBindingsTests.java (100%) create mode 100644 mynes-headless/pom.xml rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/Headless.java (100%) rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/InputSchedule.java (100%) rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/Json.java (100%) rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/Options.java (100%) rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/Repl.java (100%) rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/Report.java (100%) rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/Session.java (96%) rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/UsageException.java (100%) rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/WavWriter.java (97%) rename {src => mynes-headless/src}/main/java/com/github/dimiro1/mynes/headless/package-info.java (71%) rename {src => mynes-headless/src}/test/java/com/github/dimiro1/mynes/headless/HeadlessRunTests.java (100%) rename {src => mynes-headless/src}/test/java/com/github/dimiro1/mynes/headless/InputPathTests.java (100%) rename {src => mynes-headless/src}/test/java/com/github/dimiro1/mynes/headless/InputScheduleTests.java (100%) rename {src => mynes-headless/src}/test/java/com/github/dimiro1/mynes/headless/OptionsTests.java (100%) rename {src => mynes-headless/src}/test/java/com/github/dimiro1/mynes/headless/ReplTests.java (100%) rename {src => mynes-headless/src}/test/java/com/github/dimiro1/mynes/headless/WavWriterTests.java (100%) create mode 100644 mynes-headless/src/test/resources/PROVENANCE create mode 100644 mynes-headless/src/test/resources/mmc3-test-2/1-clocking.nes create mode 100644 mynes-headless/src/test/resources/nestest/nestest.nes diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3e1bfbb..0d17d57 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -47,7 +47,7 @@ jobs: # Named without a path so that `sha256sum -c SHA256SUMS` works next to the downloaded zip. - name: Checksum - working-directory: target + working-directory: mynes-desktop/target run: | sha256sum mynes-*.zip > SHA256SUMS cat SHA256SUMS @@ -61,5 +61,5 @@ jobs: run: | gh release create "$GITHUB_REF_NAME" \ --generate-notes \ - target/mynes-*.zip \ - target/SHA256SUMS + mynes-desktop/target/mynes-*.zip \ + mynes-desktop/target/SHA256SUMS diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 812aff2..94e8f76 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,10 +18,13 @@ jobs: # ~1.4GB of Tom Harte fixtures. The committed subset covers every opcode without # this, so a cache miss that fails to download is not fatal to the test run. + # + # Inside the module because HarteCaseLoader resolves the path relative to wherever + # Surefire runs, which is the module rather than the checkout. - name: Cache 6502 test data uses: actions/cache@v6 with: - path: testdata/nes6502 + path: mynes-core/testdata/nes6502 key: nes6502-${{ hashFiles('scripts/download-6502-tests.sh') }} - name: Download 6502 test data diff --git a/CLAUDE.md b/CLAUDE.md index ab46f1a..479d128 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,7 @@ # Working on MyNES -A NES emulator in Java 25, built with Maven. `mvn -B test` runs everything. +A NES emulator in Java 25, built with Maven. Three modules -- `mynes-core`, `mynes-headless`, +`mynes-desktop` -- and `mvn -B test` at the root still runs everything. ## Seeing what the emulator does @@ -12,16 +13,22 @@ Build the jar once, then run it as often as you like: ```sh mvn -B package -DskipTests -JAR=target/mynes.jar +JAR=mynes-desktop/target/mynes.jar java -jar $JAR --headless --rom ROM.nes --frames 900 \ --input 60/40x3:start --screenshot 300,last --audio --dump ram ``` +The jar is under `mynes-desktop/` because that is the module with a main class in it, but it is +still one file and still the whole emulator: the fat jar flattens all three modules and their +dependencies into it. + `java -jar $JAR --headless --help` lists every option. Maven can run it too -- -`mvn -q compile exec:exec@headless -Dmynes.args="--rom ROM.nes --frames 300"` -- but it costs a -couple of seconds a run against the jar's third of one, so build the jar for anything iterative. -`mvn -q compile exec:exec` opens the window, which a cloud workspace has nowhere to put. +`mvn -q -pl mynes-desktop -am compile exec:exec@headless -Dmynes.args="--rom ROM.nes --frames 300"` +-- but it costs a couple of seconds a run against the jar's third of one, so build the jar for +anything iterative. `mvn -q -pl mynes-desktop -am compile exec:exec` opens the window, which a cloud +workspace has nowhere to put. **The `-pl` is not optional**: without it Maven tries the goal in all +three modules and the two with no main class fail first. ### What you get, and where @@ -151,10 +158,10 @@ so `run.state.startedFromPowerOn` in the report is part of what to check before ## What gets released -`mvn package` also writes `target/mynes-.zip` -- the jar, a launcher for each kind of shell, -and the licences. `scripts/smoke-distribution.sh` unpacks it and runs a cartridge out of it, and both -workflows call that, so a distribution somebody has broken fails on the pull request that broke it -rather than at the moment a tag is pushed. +`mvn package` also writes `mynes-desktop/target/mynes-.zip` -- the jar, a launcher for each +kind of shell, and the licences. `scripts/smoke-distribution.sh` unpacks it and runs a cartridge out +of it, and both workflows call that, so a distribution somebody has broken fails on the pull request +that broke it rather than at the moment a tag is pushed. Two things in there are counted rather than derived, and have to move when what they count does. The smoke test expects **12 palettes** -- `Palettes.NESDEV` plus the eleven under `/palettes` -- because a @@ -163,7 +170,15 @@ build would notice one going missing. And `THIRD-PARTY.md` names the two librari carries, which is the file to write in if a third ever earns its place. Releasing is a tag and nothing else. `.github/workflows/release.yml` refuses one whose name disagrees -with the pom, so the version in `pom.xml` moves first and `git tag v` follows it. +with the pom, so the version moves first and `git tag v` follows it. There are four poms to +move it in now, which is a job for the tool rather than for four edits: + +```sh +mvn -B versions:set -DnewVersion=0.3.0 -DprocessAllModules -DgenerateBackupPoms=false +``` + +The workflow's check reads the root pom, and `help:evaluate` is an aggregator goal, so it still +answers with one version rather than three. ## House style @@ -187,21 +202,40 @@ The code has a strong voice. Match it rather than the language's defaults. ## Layout +Three Maven modules, and the arrows between them only point one way. + ``` -mynes/ the console: CPU, PPU, APU, BUS, MMU, VRAM, Cart, Region, controllers -mynes/mappers/ mappers 0 to 4 -mynes/state/ save states and battery .sav files -mynes/debug/ the disassembler and the breakpoints, shared by the window and the REPL -mynes/video/ colour indices to pixels: the overscan crop and the frame renderer -mynes/palette/ the measured RGB tables, and the loader that reads them out of /palettes -mynes/headless/ the command line mode -mynes/ui/ the Swing window, the key bindings, the CHR viewer, the debugger +mynes-core/ depends on nothing + mynes/ the console: CPU, PPU, APU, BUS, MMU, VRAM, Cart, Region, controllers + mynes/mappers/ mappers 0 to 4 + mynes/state/ save states and battery .sav files + mynes/debug/ the disassembler and the breakpoints, shared by the window and the REPL + mynes/video/ colour indices to pixels: the overscan crop and the frame renderer + mynes/palette/ the measured RGB tables, and the loader that reads them out of /palettes + +mynes-headless/ depends on core + mynes/headless/ the command line mode + +mynes-desktop/ depends on core and headless; FlatLaf and MigLayout live here + mynes/ui/ the Swing window, Main, the key bindings, the CHR viewer, the debugger +``` + +The core knows nothing about the front end, and now it *cannot*: `Cart.load` takes a `byte[]`, `NES` +has no UI dependency, `nes.tick()` is the only clock, and the PPU emits colour *indices* -- never +RGB, because which RGB is a question about televisions. What used to be a rule about imports is a +rule about the class path. A chip that wants a window, or a REPL that wants a `JDialog`, does not +compile. + +Which makes one check worth running when the dependencies change: + +```sh +mvn dependency:tree -pl mynes-core # nothing but the two test artifacts +mvn dependency:tree -pl mynes-headless # no FlatLaf, no MigLayout ``` -The core knows nothing about the front end. `Cart.load` takes a `byte[]`, `NES` has no UI -dependency, `nes.tick()` is the only clock, and the PPU emits colour *indices* -- never RGB, because -which RGB is a question about televisions. Keep it that way: nothing in `mynes` or `mynes/headless` -should reach into `mynes/ui`. +The palettes are in the core rather than beside the window because both front ends draw with them +and neither owns them. `NESPalette` is 512 packed integers and `Palettes` reads files; the one piece +of Swing in that story, `PaletteDialog`, stayed behind in `mynes/ui/`. `peek` means "read without side effects", and it is load-bearing. `VRAM.read` tells the mapper what address is on the bus, and MMC3 counts those to drive its scanline interrupt -- so a debugger that diff --git a/README.md b/README.md index 3102f7a..8c51c60 100644 --- a/README.md +++ b/README.md @@ -34,18 +34,22 @@ You need Java 25 and Maven. Nothing else. ```sh git clone https://github.com/dimiro1/mynes.git cd mynes -mvn -q compile exec:exec +mvn -q -pl mynes-desktop -am compile exec:exec ``` That opens the window. Or build a jar once and run that: ```sh mvn -B package -DskipTests -java -jar target/mynes.jar +java -jar mynes-desktop/target/mynes.jar ``` -The same `mvn package` also writes the release zip into `target/`, so what the releases page carries -is never anything a build here has not already made. +One jar, whichever way: it is three Maven modules -- `mynes-core` for the console, `mynes-headless` +for the command line, `mynes-desktop` for the window -- flattened into one file with its +dependencies. The core depends on nothing at all, which is the point of it being separate. + +The same `mvn package` also writes the release zip into `mynes-desktop/target/`, so what the releases +page carries is never anything a build here has not already made. ## Controls @@ -224,7 +228,7 @@ on a machine with no display, or for a coding agent that cannot look at a window ```sh mvn -B package -DskipTests -java -jar target/mynes.jar --headless \ +java -jar mynes-desktop/target/mynes.jar --headless \ --rom smb.nes --frames 900 --input 60/40x3:start --screenshot 300,last --audio ``` @@ -233,7 +237,8 @@ and a WAV into `target/headless`. Maven can run it too, and is shorter to type i once: ```sh -mvn -q compile exec:exec@headless -Dmynes.args="--rom smb.nes --frames 900 --screenshot last" +mvn -q -pl mynes-desktop -am compile exec:exec@headless \ + -Dmynes.args="--rom smb.nes --frames 900 --screenshot last" ``` The jar is worth building for anything you run more than a few times: Maven takes a couple of @@ -285,7 +290,7 @@ the exact per-cycle bus traffic. nestest passes as well. For the full 10,000 cases per opcode, fetch the upstream set once: ```sh -./scripts/download-6502-tests.sh # ~1.4GB into the gitignored testdata/ +./scripts/download-6502-tests.sh # ~1.4GB into the gitignored mynes-core/testdata/ mvn test # picks the full set up automatically ``` @@ -296,8 +301,8 @@ mvn test -Dgroups=bus-trace mvn test -DexcludedGroups=bus-trace ``` -**The PPU** runs blargg's test ROMs, vendored under `src/test/resources` together with the readme -that came with each suite: `ppu-vbl-nmi` (VBlank and NMI timing to a single PPU clock), +**The PPU** runs blargg's test ROMs, vendored under `mynes-core/src/test/resources` together with +the readme that came with each suite: `ppu-vbl-nmi` (VBlank and NMI timing to a single PPU clock), `ppu-sprite-hit`, `ppu-sprite-overflow`, `oam` (`oam_read` and `oam_stress`), `ppu-open-bus`, `ppu-read-buffer` and `ppu-tests-2005` (palette RAM, VRAM access, sprite RAM, VBlank clear time). @@ -324,10 +329,10 @@ contradicts `5-MMC3` by design. No real chip passes both. **The whole console at once** runs 100thCoin's [AccuracyCoin](https://github.com/100thCoin/AccuracyCoin), one NROM cartridge carrying 141 scored -tests and vendored under `src/test/resources` like the rest. With the cursor on a page header, Start -runs every one of them and draws the table below: a column per page of the menu and a tile per test, -red with an error code on it where one failed, and a pale number where the ROM accepts more than one -answer and that is which one came back. 134 pass. +tests and vendored under `mynes-core/src/test/resources` like the rest. With the cursor on a page +header, Start runs every one of them and draws the table below: a column per page of the menu and a +tile per test, red with an error code on it where one failed, and a pale number where the ROM accepts +more than one answer and that is which one came back. 134 pass. ![AccuracyCoin's results table](shots/accuracycoin.png) diff --git a/THIRD-PARTY.md b/THIRD-PARTY.md index 50f5f59..b8296f1 100644 --- a/THIRD-PARTY.md +++ b/THIRD-PARTY.md @@ -35,4 +35,5 @@ writes its own reports rather than borrowing it. The palettes bundled under `/palettes` in the jar are data rather than software, and are neither FlatLaf's nor MigLayout's. Their sources, terms and credits are in the `PROVENANCE` file beside them, -which is inside `mynes.jar` and also in the repository at `src/main/resources/palettes/PROVENANCE`. +which is inside `mynes.jar` and also in the repository at +`mynes-core/src/main/resources/palettes/PROVENANCE`. diff --git a/mynes-core/pom.xml b/mynes-core/pom.xml new file mode 100644 index 0000000..545c743 --- /dev/null +++ b/mynes-core/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + + com.github.dimiro1 + mynes + 0.2.0 + + + mynes-core + jar + + mynes-core + The console: CPU, PPU, APU, the mappers, save states, and the picture it makes. + + + + + com.fasterxml.jackson.core + jackson-databind + test + + + diff --git a/src/main/java/com/github/dimiro1/mynes/APU.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/APU.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/APU.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/APU.java diff --git a/src/main/java/com/github/dimiro1/mynes/BUS.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/BUS.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/BUS.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/BUS.java diff --git a/src/main/java/com/github/dimiro1/mynes/ByteUtils.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/ByteUtils.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ByteUtils.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/ByteUtils.java diff --git a/src/main/java/com/github/dimiro1/mynes/CPU.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/CPU.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/CPU.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/CPU.java diff --git a/src/main/java/com/github/dimiro1/mynes/CPUBus.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/CPUBus.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/CPUBus.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/CPUBus.java diff --git a/src/main/java/com/github/dimiro1/mynes/CPUEventListener.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/CPUEventListener.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/CPUEventListener.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/CPUEventListener.java diff --git a/src/main/java/com/github/dimiro1/mynes/Cart.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/Cart.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/Cart.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/Cart.java diff --git a/src/main/java/com/github/dimiro1/mynes/Controller.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/Controller.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/Controller.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/Controller.java diff --git a/src/main/java/com/github/dimiro1/mynes/InvalidNesFileException.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/InvalidNesFileException.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/InvalidNesFileException.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/InvalidNesFileException.java diff --git a/src/main/java/com/github/dimiro1/mynes/MMU.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/MMU.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/MMU.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/MMU.java diff --git a/src/main/java/com/github/dimiro1/mynes/MemoryWriteListener.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/MemoryWriteListener.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/MemoryWriteListener.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/MemoryWriteListener.java diff --git a/src/main/java/com/github/dimiro1/mynes/NES.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/NES.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/NES.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/NES.java diff --git a/src/main/java/com/github/dimiro1/mynes/PPU.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/PPU.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/PPU.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/PPU.java diff --git a/src/main/java/com/github/dimiro1/mynes/PPUBus.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/PPUBus.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/PPUBus.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/PPUBus.java diff --git a/src/main/java/com/github/dimiro1/mynes/Region.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/Region.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/Region.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/Region.java diff --git a/src/main/java/com/github/dimiro1/mynes/StandardController.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/StandardController.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/StandardController.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/StandardController.java diff --git a/src/main/java/com/github/dimiro1/mynes/UnsupportedMapperException.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/UnsupportedMapperException.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/UnsupportedMapperException.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/UnsupportedMapperException.java diff --git a/src/main/java/com/github/dimiro1/mynes/VRAM.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/VRAM.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/VRAM.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/VRAM.java diff --git a/src/main/java/com/github/dimiro1/mynes/debug/Debugger.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/debug/Debugger.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/debug/Debugger.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/debug/Debugger.java diff --git a/src/main/java/com/github/dimiro1/mynes/debug/Disassembler.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/debug/Disassembler.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/debug/Disassembler.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/debug/Disassembler.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/IRQHandler.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/IRQHandler.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/IRQHandler.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/IRQHandler.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper0.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper0.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper0.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper0.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper1.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper1.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper1.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper1.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper10.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper10.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper10.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper10.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper11.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper11.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper11.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper11.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper2.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper2.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper2.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper2.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper3.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper3.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper3.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper3.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper4.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper4.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper4.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper4.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper66.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper66.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper66.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper66.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper7.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper7.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper7.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper7.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper71.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper71.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper71.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper71.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mapper9.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper9.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mapper9.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mapper9.java diff --git a/src/main/java/com/github/dimiro1/mynes/mappers/Mirroring.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mirroring.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/mappers/Mirroring.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/mappers/Mirroring.java diff --git a/src/main/java/com/github/dimiro1/mynes/palette/NESPalette.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/palette/NESPalette.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/palette/NESPalette.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/palette/NESPalette.java diff --git a/src/main/java/com/github/dimiro1/mynes/palette/Palettes.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/palette/Palettes.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/palette/Palettes.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/palette/Palettes.java diff --git a/src/main/java/com/github/dimiro1/mynes/state/BatteryRAM.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/state/BatteryRAM.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/state/BatteryRAM.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/state/BatteryRAM.java diff --git a/src/main/java/com/github/dimiro1/mynes/state/SaveState.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/state/SaveState.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/state/SaveState.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/state/SaveState.java diff --git a/src/main/java/com/github/dimiro1/mynes/state/SaveStateException.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/state/SaveStateException.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/state/SaveStateException.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/state/SaveStateException.java diff --git a/src/main/java/com/github/dimiro1/mynes/state/StateIO.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/state/StateIO.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/state/StateIO.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/state/StateIO.java diff --git a/src/main/java/com/github/dimiro1/mynes/state/package-info.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/state/package-info.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/state/package-info.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/state/package-info.java diff --git a/src/main/java/com/github/dimiro1/mynes/video/FrameAnalysis.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/video/FrameAnalysis.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/video/FrameAnalysis.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/video/FrameAnalysis.java diff --git a/src/main/java/com/github/dimiro1/mynes/video/FrameRenderer.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/video/FrameRenderer.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/video/FrameRenderer.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/video/FrameRenderer.java diff --git a/src/main/java/com/github/dimiro1/mynes/video/package-info.java b/mynes-core/src/main/java/com/github/dimiro1/mynes/video/package-info.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/video/package-info.java rename to mynes-core/src/main/java/com/github/dimiro1/mynes/video/package-info.java diff --git a/src/main/resources/palettes/2c07.pal b/mynes-core/src/main/resources/palettes/2c07.pal similarity index 100% rename from src/main/resources/palettes/2c07.pal rename to mynes-core/src/main/resources/palettes/2c07.pal diff --git a/src/main/resources/palettes/PROVENANCE b/mynes-core/src/main/resources/palettes/PROVENANCE similarity index 100% rename from src/main/resources/palettes/PROVENANCE rename to mynes-core/src/main/resources/palettes/PROVENANCE diff --git a/src/main/resources/palettes/composite-direct.pal b/mynes-core/src/main/resources/palettes/composite-direct.pal similarity index 100% rename from src/main/resources/palettes/composite-direct.pal rename to mynes-core/src/main/resources/palettes/composite-direct.pal diff --git a/src/main/resources/palettes/digital-prime.pal b/mynes-core/src/main/resources/palettes/digital-prime.pal similarity index 100% rename from src/main/resources/palettes/digital-prime.pal rename to mynes-core/src/main/resources/palettes/digital-prime.pal diff --git a/src/main/resources/palettes/magnum.pal b/mynes-core/src/main/resources/palettes/magnum.pal similarity index 100% rename from src/main/resources/palettes/magnum.pal rename to mynes-core/src/main/resources/palettes/magnum.pal diff --git a/src/main/resources/palettes/nes-classic.pal b/mynes-core/src/main/resources/palettes/nes-classic.pal similarity index 100% rename from src/main/resources/palettes/nes-classic.pal rename to mynes-core/src/main/resources/palettes/nes-classic.pal diff --git a/src/main/resources/palettes/pc-10.pal b/mynes-core/src/main/resources/palettes/pc-10.pal similarity index 100% rename from src/main/resources/palettes/pc-10.pal rename to mynes-core/src/main/resources/palettes/pc-10.pal diff --git a/src/main/resources/palettes/pvm-style-d93.pal b/mynes-core/src/main/resources/palettes/pvm-style-d93.pal similarity index 100% rename from src/main/resources/palettes/pvm-style-d93.pal rename to mynes-core/src/main/resources/palettes/pvm-style-d93.pal diff --git a/src/main/resources/palettes/smooth-v2.pal b/mynes-core/src/main/resources/palettes/smooth-v2.pal similarity index 100% rename from src/main/resources/palettes/smooth-v2.pal rename to mynes-core/src/main/resources/palettes/smooth-v2.pal diff --git a/src/main/resources/palettes/smooth.pal b/mynes-core/src/main/resources/palettes/smooth.pal similarity index 100% rename from src/main/resources/palettes/smooth.pal rename to mynes-core/src/main/resources/palettes/smooth.pal diff --git a/src/main/resources/palettes/sony-cxa.pal b/mynes-core/src/main/resources/palettes/sony-cxa.pal similarity index 100% rename from src/main/resources/palettes/sony-cxa.pal rename to mynes-core/src/main/resources/palettes/sony-cxa.pal diff --git a/src/main/resources/palettes/wavebeam.pal b/mynes-core/src/main/resources/palettes/wavebeam.pal similarity index 100% rename from src/main/resources/palettes/wavebeam.pal rename to mynes-core/src/main/resources/palettes/wavebeam.pal diff --git a/src/test/java/com/github/dimiro1/mynes/APUChannelTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/APUChannelTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/APUChannelTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/APUChannelTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/APUDMCTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/APUDMCTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/APUDMCTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/APUDMCTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/APUFrameCounterTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/APUFrameCounterTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/APUFrameCounterTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/APUFrameCounterTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/APULengthTableTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/APULengthTableTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/APULengthTableTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/APULengthTableTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/APUMixerTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/APUMixerTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/APUMixerTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/APUMixerTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/BUSIRQTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/BUSIRQTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/BUSIRQTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/BUSIRQTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ByteUtilsTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ByteUtilsTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ByteUtilsTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ByteUtilsTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/MMUTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/MMUTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/MMUTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/MMUTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/RegionTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/RegionTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/RegionTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/RegionTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/StandardControllerTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/StandardControllerTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/StandardControllerTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/StandardControllerTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/accuracycoin/AccuracyCoinTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/accuracycoin/AccuracyCoinTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/accuracycoin/AccuracyCoinTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/accuracycoin/AccuracyCoinTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/blargg/APUBlarggTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/APUBlarggTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/blargg/APUBlarggTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/APUBlarggTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/blargg/BlarggRunner.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/BlarggRunner.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/blargg/BlarggRunner.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/BlarggRunner.java diff --git a/src/test/java/com/github/dimiro1/mynes/blargg/BlarggTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/BlarggTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/blargg/BlarggTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/BlarggTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/blargg/MMC3BlarggTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/MMC3BlarggTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/blargg/MMC3BlarggTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/MMC3BlarggTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/blargg/PPUBlarggTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/PPUBlarggTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/blargg/PPUBlarggTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/blargg/PPUBlarggTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/cart/CartTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/cart/CartTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/cart/CartTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/cart/CartTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/cpu/CPUInterruptTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/CPUInterruptTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/cpu/CPUInterruptTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/CPUInterruptTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/cpu/HarteCPUTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/HarteCPUTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/cpu/HarteCPUTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/HarteCPUTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/cpu/HarteCase.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/HarteCase.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/cpu/HarteCase.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/HarteCase.java diff --git a/src/test/java/com/github/dimiro1/mynes/cpu/HarteCaseLoader.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/HarteCaseLoader.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/cpu/HarteCaseLoader.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/HarteCaseLoader.java diff --git a/src/test/java/com/github/dimiro1/mynes/cpu/HarteCaseRunner.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/HarteCaseRunner.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/cpu/HarteCaseRunner.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/HarteCaseRunner.java diff --git a/src/test/java/com/github/dimiro1/mynes/cpu/RecordingBus.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/RecordingBus.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/cpu/RecordingBus.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/cpu/RecordingBus.java diff --git a/src/test/java/com/github/dimiro1/mynes/debug/DebuggerTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/debug/DebuggerTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/debug/DebuggerTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/debug/DebuggerTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/debug/DisassemblerTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/debug/DisassemblerTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/debug/DisassemblerTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/debug/DisassemblerTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper10Tests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper10Tests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper10Tests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper10Tests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper11Tests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper11Tests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper11Tests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper11Tests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper1Tests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper1Tests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper1Tests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper1Tests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper2Tests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper2Tests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper2Tests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper2Tests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper4ScanlineTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper4ScanlineTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper4ScanlineTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper4ScanlineTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper4Tests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper4Tests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper4Tests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper4Tests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper66Tests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper66Tests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper66Tests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper66Tests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper71Tests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper71Tests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper71Tests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper71Tests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper7Tests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper7Tests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper7Tests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper7Tests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/Mapper9Tests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper9Tests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/Mapper9Tests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/Mapper9Tests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/MapperCartridgeTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/MapperCartridgeTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/MapperCartridgeTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/MapperCartridgeTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/MapperSaveStateTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/MapperSaveStateTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/MapperSaveStateTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/MapperSaveStateTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/mappers/StampedROM.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/StampedROM.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/mappers/StampedROM.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/mappers/StampedROM.java diff --git a/src/test/java/com/github/dimiro1/mynes/nestests/NesTestTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/nestests/NesTestTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/nestests/NesTestTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/nestests/NesTestTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/nestests/NestestCPUListener.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/nestests/NestestCPUListener.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/nestests/NestestCPUListener.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/nestests/NestestCPUListener.java diff --git a/src/test/java/com/github/dimiro1/mynes/nestests/NestestLogParseException.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/nestests/NestestLogParseException.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/nestests/NestestLogParseException.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/nestests/NestestLogParseException.java diff --git a/src/test/java/com/github/dimiro1/mynes/nestests/NestestLogParser.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/nestests/NestestLogParser.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/nestests/NestestLogParser.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/nestests/NestestLogParser.java diff --git a/src/test/java/com/github/dimiro1/mynes/palette/NESPaletteTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/palette/NESPaletteTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/palette/NESPaletteTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/palette/NESPaletteTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/palette/PalettesTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/palette/PalettesTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/palette/PalettesTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/palette/PalettesTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/NESIntegrationTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/NESIntegrationTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/NESIntegrationTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/NESIntegrationTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUAddressBusTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUAddressBusTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUAddressBusTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUAddressBusTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUBackgroundTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUBackgroundTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUBackgroundTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUBackgroundTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUFixture.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUFixture.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUFixture.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUFixture.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUMemoryTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUMemoryTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUMemoryTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUMemoryTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUNMITests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUNMITests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUNMITests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUNMITests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUOAMDecayTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUOAMDecayTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUOAMDecayTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUOAMDecayTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUOpenBusTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUOpenBusTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUOpenBusTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUOpenBusTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUPowerUpTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUPowerUpTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUPowerUpTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUPowerUpTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPURegisterTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPURegisterTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPURegisterTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPURegisterTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUSpriteTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUSpriteTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUSpriteTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUSpriteTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/PPUTimingTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUTimingTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/PPUTimingTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/PPUTimingTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/RecordingPPUBus.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/RecordingPPUBus.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/RecordingPPUBus.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/RecordingPPUBus.java diff --git a/src/test/java/com/github/dimiro1/mynes/ppu/StubMapper.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/StubMapper.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ppu/StubMapper.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/ppu/StubMapper.java diff --git a/src/test/java/com/github/dimiro1/mynes/state/BatteryRAMTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/state/BatteryRAMTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/state/BatteryRAMTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/state/BatteryRAMTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/state/SaveStateCompletenessTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/state/SaveStateCompletenessTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/state/SaveStateCompletenessTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/state/SaveStateCompletenessTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/state/SaveStateDivergenceTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/state/SaveStateDivergenceTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/state/SaveStateDivergenceTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/state/SaveStateDivergenceTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/state/SaveStateFormatTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/state/SaveStateFormatTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/state/SaveStateFormatTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/state/SaveStateFormatTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/state/StateIOTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/state/StateIOTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/state/StateIOTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/state/StateIOTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/video/FrameAnalysisTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/video/FrameAnalysisTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/video/FrameAnalysisTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/video/FrameAnalysisTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/video/FrameRendererTests.java b/mynes-core/src/test/java/com/github/dimiro1/mynes/video/FrameRendererTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/video/FrameRendererTests.java rename to mynes-core/src/test/java/com/github/dimiro1/mynes/video/FrameRendererTests.java diff --git a/src/test/resources/accuracycoin/AccuracyCoin.nes b/mynes-core/src/test/resources/accuracycoin/AccuracyCoin.nes similarity index 100% rename from src/test/resources/accuracycoin/AccuracyCoin.nes rename to mynes-core/src/test/resources/accuracycoin/AccuracyCoin.nes diff --git a/src/test/resources/accuracycoin/LICENSE b/mynes-core/src/test/resources/accuracycoin/LICENSE similarity index 100% rename from src/test/resources/accuracycoin/LICENSE rename to mynes-core/src/test/resources/accuracycoin/LICENSE diff --git a/src/test/resources/apu-reset/4015_cleared.nes b/mynes-core/src/test/resources/apu-reset/4015_cleared.nes similarity index 100% rename from src/test/resources/apu-reset/4015_cleared.nes rename to mynes-core/src/test/resources/apu-reset/4015_cleared.nes diff --git a/src/test/resources/apu-reset/4017_timing.nes b/mynes-core/src/test/resources/apu-reset/4017_timing.nes similarity index 100% rename from src/test/resources/apu-reset/4017_timing.nes rename to mynes-core/src/test/resources/apu-reset/4017_timing.nes diff --git a/src/test/resources/apu-reset/4017_written.nes b/mynes-core/src/test/resources/apu-reset/4017_written.nes similarity index 100% rename from src/test/resources/apu-reset/4017_written.nes rename to mynes-core/src/test/resources/apu-reset/4017_written.nes diff --git a/src/test/resources/apu-reset/irq_flag_cleared.nes b/mynes-core/src/test/resources/apu-reset/irq_flag_cleared.nes similarity index 100% rename from src/test/resources/apu-reset/irq_flag_cleared.nes rename to mynes-core/src/test/resources/apu-reset/irq_flag_cleared.nes diff --git a/src/test/resources/apu-reset/len_ctrs_enabled.nes b/mynes-core/src/test/resources/apu-reset/len_ctrs_enabled.nes similarity index 100% rename from src/test/resources/apu-reset/len_ctrs_enabled.nes rename to mynes-core/src/test/resources/apu-reset/len_ctrs_enabled.nes diff --git a/src/test/resources/apu-reset/readme.txt b/mynes-core/src/test/resources/apu-reset/readme.txt similarity index 100% rename from src/test/resources/apu-reset/readme.txt rename to mynes-core/src/test/resources/apu-reset/readme.txt diff --git a/src/test/resources/apu-reset/works_immediately.nes b/mynes-core/src/test/resources/apu-reset/works_immediately.nes similarity index 100% rename from src/test/resources/apu-reset/works_immediately.nes rename to mynes-core/src/test/resources/apu-reset/works_immediately.nes diff --git a/src/test/resources/apu-test/1-len_ctr.nes b/mynes-core/src/test/resources/apu-test/1-len_ctr.nes similarity index 100% rename from src/test/resources/apu-test/1-len_ctr.nes rename to mynes-core/src/test/resources/apu-test/1-len_ctr.nes diff --git a/src/test/resources/apu-test/2-len_table.nes b/mynes-core/src/test/resources/apu-test/2-len_table.nes similarity index 100% rename from src/test/resources/apu-test/2-len_table.nes rename to mynes-core/src/test/resources/apu-test/2-len_table.nes diff --git a/src/test/resources/apu-test/3-irq_flag.nes b/mynes-core/src/test/resources/apu-test/3-irq_flag.nes similarity index 100% rename from src/test/resources/apu-test/3-irq_flag.nes rename to mynes-core/src/test/resources/apu-test/3-irq_flag.nes diff --git a/src/test/resources/apu-test/4-jitter.nes b/mynes-core/src/test/resources/apu-test/4-jitter.nes similarity index 100% rename from src/test/resources/apu-test/4-jitter.nes rename to mynes-core/src/test/resources/apu-test/4-jitter.nes diff --git a/src/test/resources/apu-test/5-len_timing.nes b/mynes-core/src/test/resources/apu-test/5-len_timing.nes similarity index 100% rename from src/test/resources/apu-test/5-len_timing.nes rename to mynes-core/src/test/resources/apu-test/5-len_timing.nes diff --git a/src/test/resources/apu-test/6-irq_flag_timing.nes b/mynes-core/src/test/resources/apu-test/6-irq_flag_timing.nes similarity index 100% rename from src/test/resources/apu-test/6-irq_flag_timing.nes rename to mynes-core/src/test/resources/apu-test/6-irq_flag_timing.nes diff --git a/src/test/resources/apu-test/7-dmc_basics.nes b/mynes-core/src/test/resources/apu-test/7-dmc_basics.nes similarity index 100% rename from src/test/resources/apu-test/7-dmc_basics.nes rename to mynes-core/src/test/resources/apu-test/7-dmc_basics.nes diff --git a/src/test/resources/apu-test/8-dmc_rates.nes b/mynes-core/src/test/resources/apu-test/8-dmc_rates.nes similarity index 100% rename from src/test/resources/apu-test/8-dmc_rates.nes rename to mynes-core/src/test/resources/apu-test/8-dmc_rates.nes diff --git a/src/test/resources/apu-test/readme.txt b/mynes-core/src/test/resources/apu-test/readme.txt similarity index 100% rename from src/test/resources/apu-test/readme.txt rename to mynes-core/src/test/resources/apu-test/readme.txt diff --git a/src/test/resources/cpu-reset/ram_after_reset.nes b/mynes-core/src/test/resources/cpu-reset/ram_after_reset.nes similarity index 100% rename from src/test/resources/cpu-reset/ram_after_reset.nes rename to mynes-core/src/test/resources/cpu-reset/ram_after_reset.nes diff --git a/src/test/resources/cpu-reset/readme.txt b/mynes-core/src/test/resources/cpu-reset/readme.txt similarity index 100% rename from src/test/resources/cpu-reset/readme.txt rename to mynes-core/src/test/resources/cpu-reset/readme.txt diff --git a/src/test/resources/cpu-reset/registers.nes b/mynes-core/src/test/resources/cpu-reset/registers.nes similarity index 100% rename from src/test/resources/cpu-reset/registers.nes rename to mynes-core/src/test/resources/cpu-reset/registers.nes diff --git a/src/test/resources/harte/nes6502/00.json.gz b/mynes-core/src/test/resources/harte/nes6502/00.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/00.json.gz rename to mynes-core/src/test/resources/harte/nes6502/00.json.gz diff --git a/src/test/resources/harte/nes6502/01.json.gz b/mynes-core/src/test/resources/harte/nes6502/01.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/01.json.gz rename to mynes-core/src/test/resources/harte/nes6502/01.json.gz diff --git a/src/test/resources/harte/nes6502/02.json.gz b/mynes-core/src/test/resources/harte/nes6502/02.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/02.json.gz rename to mynes-core/src/test/resources/harte/nes6502/02.json.gz diff --git a/src/test/resources/harte/nes6502/03.json.gz b/mynes-core/src/test/resources/harte/nes6502/03.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/03.json.gz rename to mynes-core/src/test/resources/harte/nes6502/03.json.gz diff --git a/src/test/resources/harte/nes6502/04.json.gz b/mynes-core/src/test/resources/harte/nes6502/04.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/04.json.gz rename to mynes-core/src/test/resources/harte/nes6502/04.json.gz diff --git a/src/test/resources/harte/nes6502/05.json.gz b/mynes-core/src/test/resources/harte/nes6502/05.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/05.json.gz rename to mynes-core/src/test/resources/harte/nes6502/05.json.gz diff --git a/src/test/resources/harte/nes6502/06.json.gz b/mynes-core/src/test/resources/harte/nes6502/06.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/06.json.gz rename to mynes-core/src/test/resources/harte/nes6502/06.json.gz diff --git a/src/test/resources/harte/nes6502/07.json.gz b/mynes-core/src/test/resources/harte/nes6502/07.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/07.json.gz rename to mynes-core/src/test/resources/harte/nes6502/07.json.gz diff --git a/src/test/resources/harte/nes6502/08.json.gz b/mynes-core/src/test/resources/harte/nes6502/08.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/08.json.gz rename to mynes-core/src/test/resources/harte/nes6502/08.json.gz diff --git a/src/test/resources/harte/nes6502/09.json.gz b/mynes-core/src/test/resources/harte/nes6502/09.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/09.json.gz rename to mynes-core/src/test/resources/harte/nes6502/09.json.gz diff --git a/src/test/resources/harte/nes6502/0a.json.gz b/mynes-core/src/test/resources/harte/nes6502/0a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/0a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/0a.json.gz diff --git a/src/test/resources/harte/nes6502/0b.json.gz b/mynes-core/src/test/resources/harte/nes6502/0b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/0b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/0b.json.gz diff --git a/src/test/resources/harte/nes6502/0c.json.gz b/mynes-core/src/test/resources/harte/nes6502/0c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/0c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/0c.json.gz diff --git a/src/test/resources/harte/nes6502/0d.json.gz b/mynes-core/src/test/resources/harte/nes6502/0d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/0d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/0d.json.gz diff --git a/src/test/resources/harte/nes6502/0e.json.gz b/mynes-core/src/test/resources/harte/nes6502/0e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/0e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/0e.json.gz diff --git a/src/test/resources/harte/nes6502/0f.json.gz b/mynes-core/src/test/resources/harte/nes6502/0f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/0f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/0f.json.gz diff --git a/src/test/resources/harte/nes6502/10.json.gz b/mynes-core/src/test/resources/harte/nes6502/10.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/10.json.gz rename to mynes-core/src/test/resources/harte/nes6502/10.json.gz diff --git a/src/test/resources/harte/nes6502/11.json.gz b/mynes-core/src/test/resources/harte/nes6502/11.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/11.json.gz rename to mynes-core/src/test/resources/harte/nes6502/11.json.gz diff --git a/src/test/resources/harte/nes6502/12.json.gz b/mynes-core/src/test/resources/harte/nes6502/12.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/12.json.gz rename to mynes-core/src/test/resources/harte/nes6502/12.json.gz diff --git a/src/test/resources/harte/nes6502/13.json.gz b/mynes-core/src/test/resources/harte/nes6502/13.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/13.json.gz rename to mynes-core/src/test/resources/harte/nes6502/13.json.gz diff --git a/src/test/resources/harte/nes6502/14.json.gz b/mynes-core/src/test/resources/harte/nes6502/14.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/14.json.gz rename to mynes-core/src/test/resources/harte/nes6502/14.json.gz diff --git a/src/test/resources/harte/nes6502/15.json.gz b/mynes-core/src/test/resources/harte/nes6502/15.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/15.json.gz rename to mynes-core/src/test/resources/harte/nes6502/15.json.gz diff --git a/src/test/resources/harte/nes6502/16.json.gz b/mynes-core/src/test/resources/harte/nes6502/16.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/16.json.gz rename to mynes-core/src/test/resources/harte/nes6502/16.json.gz diff --git a/src/test/resources/harte/nes6502/17.json.gz b/mynes-core/src/test/resources/harte/nes6502/17.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/17.json.gz rename to mynes-core/src/test/resources/harte/nes6502/17.json.gz diff --git a/src/test/resources/harte/nes6502/18.json.gz b/mynes-core/src/test/resources/harte/nes6502/18.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/18.json.gz rename to mynes-core/src/test/resources/harte/nes6502/18.json.gz diff --git a/src/test/resources/harte/nes6502/19.json.gz b/mynes-core/src/test/resources/harte/nes6502/19.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/19.json.gz rename to mynes-core/src/test/resources/harte/nes6502/19.json.gz diff --git a/src/test/resources/harte/nes6502/1a.json.gz b/mynes-core/src/test/resources/harte/nes6502/1a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/1a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/1a.json.gz diff --git a/src/test/resources/harte/nes6502/1b.json.gz b/mynes-core/src/test/resources/harte/nes6502/1b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/1b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/1b.json.gz diff --git a/src/test/resources/harte/nes6502/1c.json.gz b/mynes-core/src/test/resources/harte/nes6502/1c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/1c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/1c.json.gz diff --git a/src/test/resources/harte/nes6502/1d.json.gz b/mynes-core/src/test/resources/harte/nes6502/1d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/1d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/1d.json.gz diff --git a/src/test/resources/harte/nes6502/1e.json.gz b/mynes-core/src/test/resources/harte/nes6502/1e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/1e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/1e.json.gz diff --git a/src/test/resources/harte/nes6502/1f.json.gz b/mynes-core/src/test/resources/harte/nes6502/1f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/1f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/1f.json.gz diff --git a/src/test/resources/harte/nes6502/20.json.gz b/mynes-core/src/test/resources/harte/nes6502/20.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/20.json.gz rename to mynes-core/src/test/resources/harte/nes6502/20.json.gz diff --git a/src/test/resources/harte/nes6502/21.json.gz b/mynes-core/src/test/resources/harte/nes6502/21.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/21.json.gz rename to mynes-core/src/test/resources/harte/nes6502/21.json.gz diff --git a/src/test/resources/harte/nes6502/22.json.gz b/mynes-core/src/test/resources/harte/nes6502/22.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/22.json.gz rename to mynes-core/src/test/resources/harte/nes6502/22.json.gz diff --git a/src/test/resources/harte/nes6502/23.json.gz b/mynes-core/src/test/resources/harte/nes6502/23.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/23.json.gz rename to mynes-core/src/test/resources/harte/nes6502/23.json.gz diff --git a/src/test/resources/harte/nes6502/24.json.gz b/mynes-core/src/test/resources/harte/nes6502/24.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/24.json.gz rename to mynes-core/src/test/resources/harte/nes6502/24.json.gz diff --git a/src/test/resources/harte/nes6502/25.json.gz b/mynes-core/src/test/resources/harte/nes6502/25.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/25.json.gz rename to mynes-core/src/test/resources/harte/nes6502/25.json.gz diff --git a/src/test/resources/harte/nes6502/26.json.gz b/mynes-core/src/test/resources/harte/nes6502/26.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/26.json.gz rename to mynes-core/src/test/resources/harte/nes6502/26.json.gz diff --git a/src/test/resources/harte/nes6502/27.json.gz b/mynes-core/src/test/resources/harte/nes6502/27.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/27.json.gz rename to mynes-core/src/test/resources/harte/nes6502/27.json.gz diff --git a/src/test/resources/harte/nes6502/28.json.gz b/mynes-core/src/test/resources/harte/nes6502/28.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/28.json.gz rename to mynes-core/src/test/resources/harte/nes6502/28.json.gz diff --git a/src/test/resources/harte/nes6502/29.json.gz b/mynes-core/src/test/resources/harte/nes6502/29.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/29.json.gz rename to mynes-core/src/test/resources/harte/nes6502/29.json.gz diff --git a/src/test/resources/harte/nes6502/2a.json.gz b/mynes-core/src/test/resources/harte/nes6502/2a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/2a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/2a.json.gz diff --git a/src/test/resources/harte/nes6502/2b.json.gz b/mynes-core/src/test/resources/harte/nes6502/2b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/2b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/2b.json.gz diff --git a/src/test/resources/harte/nes6502/2c.json.gz b/mynes-core/src/test/resources/harte/nes6502/2c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/2c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/2c.json.gz diff --git a/src/test/resources/harte/nes6502/2d.json.gz b/mynes-core/src/test/resources/harte/nes6502/2d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/2d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/2d.json.gz diff --git a/src/test/resources/harte/nes6502/2e.json.gz b/mynes-core/src/test/resources/harte/nes6502/2e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/2e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/2e.json.gz diff --git a/src/test/resources/harte/nes6502/2f.json.gz b/mynes-core/src/test/resources/harte/nes6502/2f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/2f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/2f.json.gz diff --git a/src/test/resources/harte/nes6502/30.json.gz b/mynes-core/src/test/resources/harte/nes6502/30.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/30.json.gz rename to mynes-core/src/test/resources/harte/nes6502/30.json.gz diff --git a/src/test/resources/harte/nes6502/31.json.gz b/mynes-core/src/test/resources/harte/nes6502/31.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/31.json.gz rename to mynes-core/src/test/resources/harte/nes6502/31.json.gz diff --git a/src/test/resources/harte/nes6502/32.json.gz b/mynes-core/src/test/resources/harte/nes6502/32.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/32.json.gz rename to mynes-core/src/test/resources/harte/nes6502/32.json.gz diff --git a/src/test/resources/harte/nes6502/33.json.gz b/mynes-core/src/test/resources/harte/nes6502/33.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/33.json.gz rename to mynes-core/src/test/resources/harte/nes6502/33.json.gz diff --git a/src/test/resources/harte/nes6502/34.json.gz b/mynes-core/src/test/resources/harte/nes6502/34.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/34.json.gz rename to mynes-core/src/test/resources/harte/nes6502/34.json.gz diff --git a/src/test/resources/harte/nes6502/35.json.gz b/mynes-core/src/test/resources/harte/nes6502/35.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/35.json.gz rename to mynes-core/src/test/resources/harte/nes6502/35.json.gz diff --git a/src/test/resources/harte/nes6502/36.json.gz b/mynes-core/src/test/resources/harte/nes6502/36.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/36.json.gz rename to mynes-core/src/test/resources/harte/nes6502/36.json.gz diff --git a/src/test/resources/harte/nes6502/37.json.gz b/mynes-core/src/test/resources/harte/nes6502/37.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/37.json.gz rename to mynes-core/src/test/resources/harte/nes6502/37.json.gz diff --git a/src/test/resources/harte/nes6502/38.json.gz b/mynes-core/src/test/resources/harte/nes6502/38.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/38.json.gz rename to mynes-core/src/test/resources/harte/nes6502/38.json.gz diff --git a/src/test/resources/harte/nes6502/39.json.gz b/mynes-core/src/test/resources/harte/nes6502/39.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/39.json.gz rename to mynes-core/src/test/resources/harte/nes6502/39.json.gz diff --git a/src/test/resources/harte/nes6502/3a.json.gz b/mynes-core/src/test/resources/harte/nes6502/3a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/3a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/3a.json.gz diff --git a/src/test/resources/harte/nes6502/3b.json.gz b/mynes-core/src/test/resources/harte/nes6502/3b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/3b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/3b.json.gz diff --git a/src/test/resources/harte/nes6502/3c.json.gz b/mynes-core/src/test/resources/harte/nes6502/3c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/3c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/3c.json.gz diff --git a/src/test/resources/harte/nes6502/3d.json.gz b/mynes-core/src/test/resources/harte/nes6502/3d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/3d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/3d.json.gz diff --git a/src/test/resources/harte/nes6502/3e.json.gz b/mynes-core/src/test/resources/harte/nes6502/3e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/3e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/3e.json.gz diff --git a/src/test/resources/harte/nes6502/3f.json.gz b/mynes-core/src/test/resources/harte/nes6502/3f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/3f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/3f.json.gz diff --git a/src/test/resources/harte/nes6502/40.json.gz b/mynes-core/src/test/resources/harte/nes6502/40.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/40.json.gz rename to mynes-core/src/test/resources/harte/nes6502/40.json.gz diff --git a/src/test/resources/harte/nes6502/41.json.gz b/mynes-core/src/test/resources/harte/nes6502/41.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/41.json.gz rename to mynes-core/src/test/resources/harte/nes6502/41.json.gz diff --git a/src/test/resources/harte/nes6502/42.json.gz b/mynes-core/src/test/resources/harte/nes6502/42.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/42.json.gz rename to mynes-core/src/test/resources/harte/nes6502/42.json.gz diff --git a/src/test/resources/harte/nes6502/43.json.gz b/mynes-core/src/test/resources/harte/nes6502/43.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/43.json.gz rename to mynes-core/src/test/resources/harte/nes6502/43.json.gz diff --git a/src/test/resources/harte/nes6502/44.json.gz b/mynes-core/src/test/resources/harte/nes6502/44.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/44.json.gz rename to mynes-core/src/test/resources/harte/nes6502/44.json.gz diff --git a/src/test/resources/harte/nes6502/45.json.gz b/mynes-core/src/test/resources/harte/nes6502/45.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/45.json.gz rename to mynes-core/src/test/resources/harte/nes6502/45.json.gz diff --git a/src/test/resources/harte/nes6502/46.json.gz b/mynes-core/src/test/resources/harte/nes6502/46.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/46.json.gz rename to mynes-core/src/test/resources/harte/nes6502/46.json.gz diff --git a/src/test/resources/harte/nes6502/47.json.gz b/mynes-core/src/test/resources/harte/nes6502/47.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/47.json.gz rename to mynes-core/src/test/resources/harte/nes6502/47.json.gz diff --git a/src/test/resources/harte/nes6502/48.json.gz b/mynes-core/src/test/resources/harte/nes6502/48.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/48.json.gz rename to mynes-core/src/test/resources/harte/nes6502/48.json.gz diff --git a/src/test/resources/harte/nes6502/49.json.gz b/mynes-core/src/test/resources/harte/nes6502/49.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/49.json.gz rename to mynes-core/src/test/resources/harte/nes6502/49.json.gz diff --git a/src/test/resources/harte/nes6502/4a.json.gz b/mynes-core/src/test/resources/harte/nes6502/4a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/4a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/4a.json.gz diff --git a/src/test/resources/harte/nes6502/4b.json.gz b/mynes-core/src/test/resources/harte/nes6502/4b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/4b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/4b.json.gz diff --git a/src/test/resources/harte/nes6502/4c.json.gz b/mynes-core/src/test/resources/harte/nes6502/4c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/4c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/4c.json.gz diff --git a/src/test/resources/harte/nes6502/4d.json.gz b/mynes-core/src/test/resources/harte/nes6502/4d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/4d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/4d.json.gz diff --git a/src/test/resources/harte/nes6502/4e.json.gz b/mynes-core/src/test/resources/harte/nes6502/4e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/4e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/4e.json.gz diff --git a/src/test/resources/harte/nes6502/4f.json.gz b/mynes-core/src/test/resources/harte/nes6502/4f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/4f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/4f.json.gz diff --git a/src/test/resources/harte/nes6502/50.json.gz b/mynes-core/src/test/resources/harte/nes6502/50.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/50.json.gz rename to mynes-core/src/test/resources/harte/nes6502/50.json.gz diff --git a/src/test/resources/harte/nes6502/51.json.gz b/mynes-core/src/test/resources/harte/nes6502/51.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/51.json.gz rename to mynes-core/src/test/resources/harte/nes6502/51.json.gz diff --git a/src/test/resources/harte/nes6502/52.json.gz b/mynes-core/src/test/resources/harte/nes6502/52.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/52.json.gz rename to mynes-core/src/test/resources/harte/nes6502/52.json.gz diff --git a/src/test/resources/harte/nes6502/53.json.gz b/mynes-core/src/test/resources/harte/nes6502/53.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/53.json.gz rename to mynes-core/src/test/resources/harte/nes6502/53.json.gz diff --git a/src/test/resources/harte/nes6502/54.json.gz b/mynes-core/src/test/resources/harte/nes6502/54.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/54.json.gz rename to mynes-core/src/test/resources/harte/nes6502/54.json.gz diff --git a/src/test/resources/harte/nes6502/55.json.gz b/mynes-core/src/test/resources/harte/nes6502/55.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/55.json.gz rename to mynes-core/src/test/resources/harte/nes6502/55.json.gz diff --git a/src/test/resources/harte/nes6502/56.json.gz b/mynes-core/src/test/resources/harte/nes6502/56.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/56.json.gz rename to mynes-core/src/test/resources/harte/nes6502/56.json.gz diff --git a/src/test/resources/harte/nes6502/57.json.gz b/mynes-core/src/test/resources/harte/nes6502/57.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/57.json.gz rename to mynes-core/src/test/resources/harte/nes6502/57.json.gz diff --git a/src/test/resources/harte/nes6502/58.json.gz b/mynes-core/src/test/resources/harte/nes6502/58.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/58.json.gz rename to mynes-core/src/test/resources/harte/nes6502/58.json.gz diff --git a/src/test/resources/harte/nes6502/59.json.gz b/mynes-core/src/test/resources/harte/nes6502/59.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/59.json.gz rename to mynes-core/src/test/resources/harte/nes6502/59.json.gz diff --git a/src/test/resources/harte/nes6502/5a.json.gz b/mynes-core/src/test/resources/harte/nes6502/5a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/5a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/5a.json.gz diff --git a/src/test/resources/harte/nes6502/5b.json.gz b/mynes-core/src/test/resources/harte/nes6502/5b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/5b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/5b.json.gz diff --git a/src/test/resources/harte/nes6502/5c.json.gz b/mynes-core/src/test/resources/harte/nes6502/5c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/5c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/5c.json.gz diff --git a/src/test/resources/harte/nes6502/5d.json.gz b/mynes-core/src/test/resources/harte/nes6502/5d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/5d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/5d.json.gz diff --git a/src/test/resources/harte/nes6502/5e.json.gz b/mynes-core/src/test/resources/harte/nes6502/5e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/5e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/5e.json.gz diff --git a/src/test/resources/harte/nes6502/5f.json.gz b/mynes-core/src/test/resources/harte/nes6502/5f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/5f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/5f.json.gz diff --git a/src/test/resources/harte/nes6502/60.json.gz b/mynes-core/src/test/resources/harte/nes6502/60.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/60.json.gz rename to mynes-core/src/test/resources/harte/nes6502/60.json.gz diff --git a/src/test/resources/harte/nes6502/61.json.gz b/mynes-core/src/test/resources/harte/nes6502/61.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/61.json.gz rename to mynes-core/src/test/resources/harte/nes6502/61.json.gz diff --git a/src/test/resources/harte/nes6502/62.json.gz b/mynes-core/src/test/resources/harte/nes6502/62.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/62.json.gz rename to mynes-core/src/test/resources/harte/nes6502/62.json.gz diff --git a/src/test/resources/harte/nes6502/63.json.gz b/mynes-core/src/test/resources/harte/nes6502/63.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/63.json.gz rename to mynes-core/src/test/resources/harte/nes6502/63.json.gz diff --git a/src/test/resources/harte/nes6502/64.json.gz b/mynes-core/src/test/resources/harte/nes6502/64.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/64.json.gz rename to mynes-core/src/test/resources/harte/nes6502/64.json.gz diff --git a/src/test/resources/harte/nes6502/65.json.gz b/mynes-core/src/test/resources/harte/nes6502/65.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/65.json.gz rename to mynes-core/src/test/resources/harte/nes6502/65.json.gz diff --git a/src/test/resources/harte/nes6502/66.json.gz b/mynes-core/src/test/resources/harte/nes6502/66.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/66.json.gz rename to mynes-core/src/test/resources/harte/nes6502/66.json.gz diff --git a/src/test/resources/harte/nes6502/67.json.gz b/mynes-core/src/test/resources/harte/nes6502/67.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/67.json.gz rename to mynes-core/src/test/resources/harte/nes6502/67.json.gz diff --git a/src/test/resources/harte/nes6502/68.json.gz b/mynes-core/src/test/resources/harte/nes6502/68.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/68.json.gz rename to mynes-core/src/test/resources/harte/nes6502/68.json.gz diff --git a/src/test/resources/harte/nes6502/69.json.gz b/mynes-core/src/test/resources/harte/nes6502/69.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/69.json.gz rename to mynes-core/src/test/resources/harte/nes6502/69.json.gz diff --git a/src/test/resources/harte/nes6502/6a.json.gz b/mynes-core/src/test/resources/harte/nes6502/6a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/6a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/6a.json.gz diff --git a/src/test/resources/harte/nes6502/6b.json.gz b/mynes-core/src/test/resources/harte/nes6502/6b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/6b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/6b.json.gz diff --git a/src/test/resources/harte/nes6502/6c.json.gz b/mynes-core/src/test/resources/harte/nes6502/6c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/6c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/6c.json.gz diff --git a/src/test/resources/harte/nes6502/6d.json.gz b/mynes-core/src/test/resources/harte/nes6502/6d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/6d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/6d.json.gz diff --git a/src/test/resources/harte/nes6502/6e.json.gz b/mynes-core/src/test/resources/harte/nes6502/6e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/6e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/6e.json.gz diff --git a/src/test/resources/harte/nes6502/6f.json.gz b/mynes-core/src/test/resources/harte/nes6502/6f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/6f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/6f.json.gz diff --git a/src/test/resources/harte/nes6502/70.json.gz b/mynes-core/src/test/resources/harte/nes6502/70.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/70.json.gz rename to mynes-core/src/test/resources/harte/nes6502/70.json.gz diff --git a/src/test/resources/harte/nes6502/71.json.gz b/mynes-core/src/test/resources/harte/nes6502/71.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/71.json.gz rename to mynes-core/src/test/resources/harte/nes6502/71.json.gz diff --git a/src/test/resources/harte/nes6502/72.json.gz b/mynes-core/src/test/resources/harte/nes6502/72.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/72.json.gz rename to mynes-core/src/test/resources/harte/nes6502/72.json.gz diff --git a/src/test/resources/harte/nes6502/73.json.gz b/mynes-core/src/test/resources/harte/nes6502/73.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/73.json.gz rename to mynes-core/src/test/resources/harte/nes6502/73.json.gz diff --git a/src/test/resources/harte/nes6502/74.json.gz b/mynes-core/src/test/resources/harte/nes6502/74.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/74.json.gz rename to mynes-core/src/test/resources/harte/nes6502/74.json.gz diff --git a/src/test/resources/harte/nes6502/75.json.gz b/mynes-core/src/test/resources/harte/nes6502/75.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/75.json.gz rename to mynes-core/src/test/resources/harte/nes6502/75.json.gz diff --git a/src/test/resources/harte/nes6502/76.json.gz b/mynes-core/src/test/resources/harte/nes6502/76.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/76.json.gz rename to mynes-core/src/test/resources/harte/nes6502/76.json.gz diff --git a/src/test/resources/harte/nes6502/77.json.gz b/mynes-core/src/test/resources/harte/nes6502/77.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/77.json.gz rename to mynes-core/src/test/resources/harte/nes6502/77.json.gz diff --git a/src/test/resources/harte/nes6502/78.json.gz b/mynes-core/src/test/resources/harte/nes6502/78.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/78.json.gz rename to mynes-core/src/test/resources/harte/nes6502/78.json.gz diff --git a/src/test/resources/harte/nes6502/79.json.gz b/mynes-core/src/test/resources/harte/nes6502/79.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/79.json.gz rename to mynes-core/src/test/resources/harte/nes6502/79.json.gz diff --git a/src/test/resources/harte/nes6502/7a.json.gz b/mynes-core/src/test/resources/harte/nes6502/7a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/7a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/7a.json.gz diff --git a/src/test/resources/harte/nes6502/7b.json.gz b/mynes-core/src/test/resources/harte/nes6502/7b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/7b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/7b.json.gz diff --git a/src/test/resources/harte/nes6502/7c.json.gz b/mynes-core/src/test/resources/harte/nes6502/7c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/7c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/7c.json.gz diff --git a/src/test/resources/harte/nes6502/7d.json.gz b/mynes-core/src/test/resources/harte/nes6502/7d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/7d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/7d.json.gz diff --git a/src/test/resources/harte/nes6502/7e.json.gz b/mynes-core/src/test/resources/harte/nes6502/7e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/7e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/7e.json.gz diff --git a/src/test/resources/harte/nes6502/7f.json.gz b/mynes-core/src/test/resources/harte/nes6502/7f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/7f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/7f.json.gz diff --git a/src/test/resources/harte/nes6502/80.json.gz b/mynes-core/src/test/resources/harte/nes6502/80.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/80.json.gz rename to mynes-core/src/test/resources/harte/nes6502/80.json.gz diff --git a/src/test/resources/harte/nes6502/81.json.gz b/mynes-core/src/test/resources/harte/nes6502/81.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/81.json.gz rename to mynes-core/src/test/resources/harte/nes6502/81.json.gz diff --git a/src/test/resources/harte/nes6502/82.json.gz b/mynes-core/src/test/resources/harte/nes6502/82.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/82.json.gz rename to mynes-core/src/test/resources/harte/nes6502/82.json.gz diff --git a/src/test/resources/harte/nes6502/83.json.gz b/mynes-core/src/test/resources/harte/nes6502/83.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/83.json.gz rename to mynes-core/src/test/resources/harte/nes6502/83.json.gz diff --git a/src/test/resources/harte/nes6502/84.json.gz b/mynes-core/src/test/resources/harte/nes6502/84.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/84.json.gz rename to mynes-core/src/test/resources/harte/nes6502/84.json.gz diff --git a/src/test/resources/harte/nes6502/85.json.gz b/mynes-core/src/test/resources/harte/nes6502/85.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/85.json.gz rename to mynes-core/src/test/resources/harte/nes6502/85.json.gz diff --git a/src/test/resources/harte/nes6502/86.json.gz b/mynes-core/src/test/resources/harte/nes6502/86.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/86.json.gz rename to mynes-core/src/test/resources/harte/nes6502/86.json.gz diff --git a/src/test/resources/harte/nes6502/87.json.gz b/mynes-core/src/test/resources/harte/nes6502/87.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/87.json.gz rename to mynes-core/src/test/resources/harte/nes6502/87.json.gz diff --git a/src/test/resources/harte/nes6502/88.json.gz b/mynes-core/src/test/resources/harte/nes6502/88.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/88.json.gz rename to mynes-core/src/test/resources/harte/nes6502/88.json.gz diff --git a/src/test/resources/harte/nes6502/89.json.gz b/mynes-core/src/test/resources/harte/nes6502/89.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/89.json.gz rename to mynes-core/src/test/resources/harte/nes6502/89.json.gz diff --git a/src/test/resources/harte/nes6502/8a.json.gz b/mynes-core/src/test/resources/harte/nes6502/8a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/8a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/8a.json.gz diff --git a/src/test/resources/harte/nes6502/8b.json.gz b/mynes-core/src/test/resources/harte/nes6502/8b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/8b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/8b.json.gz diff --git a/src/test/resources/harte/nes6502/8c.json.gz b/mynes-core/src/test/resources/harte/nes6502/8c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/8c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/8c.json.gz diff --git a/src/test/resources/harte/nes6502/8d.json.gz b/mynes-core/src/test/resources/harte/nes6502/8d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/8d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/8d.json.gz diff --git a/src/test/resources/harte/nes6502/8e.json.gz b/mynes-core/src/test/resources/harte/nes6502/8e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/8e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/8e.json.gz diff --git a/src/test/resources/harte/nes6502/8f.json.gz b/mynes-core/src/test/resources/harte/nes6502/8f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/8f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/8f.json.gz diff --git a/src/test/resources/harte/nes6502/90.json.gz b/mynes-core/src/test/resources/harte/nes6502/90.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/90.json.gz rename to mynes-core/src/test/resources/harte/nes6502/90.json.gz diff --git a/src/test/resources/harte/nes6502/91.json.gz b/mynes-core/src/test/resources/harte/nes6502/91.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/91.json.gz rename to mynes-core/src/test/resources/harte/nes6502/91.json.gz diff --git a/src/test/resources/harte/nes6502/92.json.gz b/mynes-core/src/test/resources/harte/nes6502/92.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/92.json.gz rename to mynes-core/src/test/resources/harte/nes6502/92.json.gz diff --git a/src/test/resources/harte/nes6502/93.json.gz b/mynes-core/src/test/resources/harte/nes6502/93.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/93.json.gz rename to mynes-core/src/test/resources/harte/nes6502/93.json.gz diff --git a/src/test/resources/harte/nes6502/94.json.gz b/mynes-core/src/test/resources/harte/nes6502/94.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/94.json.gz rename to mynes-core/src/test/resources/harte/nes6502/94.json.gz diff --git a/src/test/resources/harte/nes6502/95.json.gz b/mynes-core/src/test/resources/harte/nes6502/95.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/95.json.gz rename to mynes-core/src/test/resources/harte/nes6502/95.json.gz diff --git a/src/test/resources/harte/nes6502/96.json.gz b/mynes-core/src/test/resources/harte/nes6502/96.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/96.json.gz rename to mynes-core/src/test/resources/harte/nes6502/96.json.gz diff --git a/src/test/resources/harte/nes6502/97.json.gz b/mynes-core/src/test/resources/harte/nes6502/97.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/97.json.gz rename to mynes-core/src/test/resources/harte/nes6502/97.json.gz diff --git a/src/test/resources/harte/nes6502/98.json.gz b/mynes-core/src/test/resources/harte/nes6502/98.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/98.json.gz rename to mynes-core/src/test/resources/harte/nes6502/98.json.gz diff --git a/src/test/resources/harte/nes6502/99.json.gz b/mynes-core/src/test/resources/harte/nes6502/99.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/99.json.gz rename to mynes-core/src/test/resources/harte/nes6502/99.json.gz diff --git a/src/test/resources/harte/nes6502/9a.json.gz b/mynes-core/src/test/resources/harte/nes6502/9a.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/9a.json.gz rename to mynes-core/src/test/resources/harte/nes6502/9a.json.gz diff --git a/src/test/resources/harte/nes6502/9b.json.gz b/mynes-core/src/test/resources/harte/nes6502/9b.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/9b.json.gz rename to mynes-core/src/test/resources/harte/nes6502/9b.json.gz diff --git a/src/test/resources/harte/nes6502/9c.json.gz b/mynes-core/src/test/resources/harte/nes6502/9c.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/9c.json.gz rename to mynes-core/src/test/resources/harte/nes6502/9c.json.gz diff --git a/src/test/resources/harte/nes6502/9d.json.gz b/mynes-core/src/test/resources/harte/nes6502/9d.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/9d.json.gz rename to mynes-core/src/test/resources/harte/nes6502/9d.json.gz diff --git a/src/test/resources/harte/nes6502/9e.json.gz b/mynes-core/src/test/resources/harte/nes6502/9e.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/9e.json.gz rename to mynes-core/src/test/resources/harte/nes6502/9e.json.gz diff --git a/src/test/resources/harte/nes6502/9f.json.gz b/mynes-core/src/test/resources/harte/nes6502/9f.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/9f.json.gz rename to mynes-core/src/test/resources/harte/nes6502/9f.json.gz diff --git a/src/test/resources/harte/nes6502/PROVENANCE b/mynes-core/src/test/resources/harte/nes6502/PROVENANCE similarity index 100% rename from src/test/resources/harte/nes6502/PROVENANCE rename to mynes-core/src/test/resources/harte/nes6502/PROVENANCE diff --git a/src/test/resources/harte/nes6502/a0.json.gz b/mynes-core/src/test/resources/harte/nes6502/a0.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a0.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a0.json.gz diff --git a/src/test/resources/harte/nes6502/a1.json.gz b/mynes-core/src/test/resources/harte/nes6502/a1.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a1.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a1.json.gz diff --git a/src/test/resources/harte/nes6502/a2.json.gz b/mynes-core/src/test/resources/harte/nes6502/a2.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a2.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a2.json.gz diff --git a/src/test/resources/harte/nes6502/a3.json.gz b/mynes-core/src/test/resources/harte/nes6502/a3.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a3.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a3.json.gz diff --git a/src/test/resources/harte/nes6502/a4.json.gz b/mynes-core/src/test/resources/harte/nes6502/a4.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a4.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a4.json.gz diff --git a/src/test/resources/harte/nes6502/a5.json.gz b/mynes-core/src/test/resources/harte/nes6502/a5.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a5.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a5.json.gz diff --git a/src/test/resources/harte/nes6502/a6.json.gz b/mynes-core/src/test/resources/harte/nes6502/a6.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a6.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a6.json.gz diff --git a/src/test/resources/harte/nes6502/a7.json.gz b/mynes-core/src/test/resources/harte/nes6502/a7.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a7.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a7.json.gz diff --git a/src/test/resources/harte/nes6502/a8.json.gz b/mynes-core/src/test/resources/harte/nes6502/a8.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a8.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a8.json.gz diff --git a/src/test/resources/harte/nes6502/a9.json.gz b/mynes-core/src/test/resources/harte/nes6502/a9.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/a9.json.gz rename to mynes-core/src/test/resources/harte/nes6502/a9.json.gz diff --git a/src/test/resources/harte/nes6502/aa.json.gz b/mynes-core/src/test/resources/harte/nes6502/aa.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/aa.json.gz rename to mynes-core/src/test/resources/harte/nes6502/aa.json.gz diff --git a/src/test/resources/harte/nes6502/ab.json.gz b/mynes-core/src/test/resources/harte/nes6502/ab.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ab.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ab.json.gz diff --git a/src/test/resources/harte/nes6502/ac.json.gz b/mynes-core/src/test/resources/harte/nes6502/ac.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ac.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ac.json.gz diff --git a/src/test/resources/harte/nes6502/ad.json.gz b/mynes-core/src/test/resources/harte/nes6502/ad.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ad.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ad.json.gz diff --git a/src/test/resources/harte/nes6502/ae.json.gz b/mynes-core/src/test/resources/harte/nes6502/ae.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ae.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ae.json.gz diff --git a/src/test/resources/harte/nes6502/af.json.gz b/mynes-core/src/test/resources/harte/nes6502/af.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/af.json.gz rename to mynes-core/src/test/resources/harte/nes6502/af.json.gz diff --git a/src/test/resources/harte/nes6502/b0.json.gz b/mynes-core/src/test/resources/harte/nes6502/b0.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b0.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b0.json.gz diff --git a/src/test/resources/harte/nes6502/b1.json.gz b/mynes-core/src/test/resources/harte/nes6502/b1.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b1.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b1.json.gz diff --git a/src/test/resources/harte/nes6502/b2.json.gz b/mynes-core/src/test/resources/harte/nes6502/b2.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b2.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b2.json.gz diff --git a/src/test/resources/harte/nes6502/b3.json.gz b/mynes-core/src/test/resources/harte/nes6502/b3.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b3.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b3.json.gz diff --git a/src/test/resources/harte/nes6502/b4.json.gz b/mynes-core/src/test/resources/harte/nes6502/b4.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b4.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b4.json.gz diff --git a/src/test/resources/harte/nes6502/b5.json.gz b/mynes-core/src/test/resources/harte/nes6502/b5.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b5.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b5.json.gz diff --git a/src/test/resources/harte/nes6502/b6.json.gz b/mynes-core/src/test/resources/harte/nes6502/b6.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b6.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b6.json.gz diff --git a/src/test/resources/harte/nes6502/b7.json.gz b/mynes-core/src/test/resources/harte/nes6502/b7.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b7.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b7.json.gz diff --git a/src/test/resources/harte/nes6502/b8.json.gz b/mynes-core/src/test/resources/harte/nes6502/b8.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b8.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b8.json.gz diff --git a/src/test/resources/harte/nes6502/b9.json.gz b/mynes-core/src/test/resources/harte/nes6502/b9.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/b9.json.gz rename to mynes-core/src/test/resources/harte/nes6502/b9.json.gz diff --git a/src/test/resources/harte/nes6502/ba.json.gz b/mynes-core/src/test/resources/harte/nes6502/ba.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ba.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ba.json.gz diff --git a/src/test/resources/harte/nes6502/bb.json.gz b/mynes-core/src/test/resources/harte/nes6502/bb.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/bb.json.gz rename to mynes-core/src/test/resources/harte/nes6502/bb.json.gz diff --git a/src/test/resources/harte/nes6502/bc.json.gz b/mynes-core/src/test/resources/harte/nes6502/bc.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/bc.json.gz rename to mynes-core/src/test/resources/harte/nes6502/bc.json.gz diff --git a/src/test/resources/harte/nes6502/bd.json.gz b/mynes-core/src/test/resources/harte/nes6502/bd.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/bd.json.gz rename to mynes-core/src/test/resources/harte/nes6502/bd.json.gz diff --git a/src/test/resources/harte/nes6502/be.json.gz b/mynes-core/src/test/resources/harte/nes6502/be.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/be.json.gz rename to mynes-core/src/test/resources/harte/nes6502/be.json.gz diff --git a/src/test/resources/harte/nes6502/bf.json.gz b/mynes-core/src/test/resources/harte/nes6502/bf.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/bf.json.gz rename to mynes-core/src/test/resources/harte/nes6502/bf.json.gz diff --git a/src/test/resources/harte/nes6502/c0.json.gz b/mynes-core/src/test/resources/harte/nes6502/c0.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c0.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c0.json.gz diff --git a/src/test/resources/harte/nes6502/c1.json.gz b/mynes-core/src/test/resources/harte/nes6502/c1.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c1.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c1.json.gz diff --git a/src/test/resources/harte/nes6502/c2.json.gz b/mynes-core/src/test/resources/harte/nes6502/c2.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c2.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c2.json.gz diff --git a/src/test/resources/harte/nes6502/c3.json.gz b/mynes-core/src/test/resources/harte/nes6502/c3.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c3.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c3.json.gz diff --git a/src/test/resources/harte/nes6502/c4.json.gz b/mynes-core/src/test/resources/harte/nes6502/c4.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c4.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c4.json.gz diff --git a/src/test/resources/harte/nes6502/c5.json.gz b/mynes-core/src/test/resources/harte/nes6502/c5.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c5.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c5.json.gz diff --git a/src/test/resources/harte/nes6502/c6.json.gz b/mynes-core/src/test/resources/harte/nes6502/c6.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c6.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c6.json.gz diff --git a/src/test/resources/harte/nes6502/c7.json.gz b/mynes-core/src/test/resources/harte/nes6502/c7.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c7.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c7.json.gz diff --git a/src/test/resources/harte/nes6502/c8.json.gz b/mynes-core/src/test/resources/harte/nes6502/c8.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c8.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c8.json.gz diff --git a/src/test/resources/harte/nes6502/c9.json.gz b/mynes-core/src/test/resources/harte/nes6502/c9.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/c9.json.gz rename to mynes-core/src/test/resources/harte/nes6502/c9.json.gz diff --git a/src/test/resources/harte/nes6502/ca.json.gz b/mynes-core/src/test/resources/harte/nes6502/ca.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ca.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ca.json.gz diff --git a/src/test/resources/harte/nes6502/cb.json.gz b/mynes-core/src/test/resources/harte/nes6502/cb.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/cb.json.gz rename to mynes-core/src/test/resources/harte/nes6502/cb.json.gz diff --git a/src/test/resources/harte/nes6502/cc.json.gz b/mynes-core/src/test/resources/harte/nes6502/cc.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/cc.json.gz rename to mynes-core/src/test/resources/harte/nes6502/cc.json.gz diff --git a/src/test/resources/harte/nes6502/cd.json.gz b/mynes-core/src/test/resources/harte/nes6502/cd.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/cd.json.gz rename to mynes-core/src/test/resources/harte/nes6502/cd.json.gz diff --git a/src/test/resources/harte/nes6502/ce.json.gz b/mynes-core/src/test/resources/harte/nes6502/ce.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ce.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ce.json.gz diff --git a/src/test/resources/harte/nes6502/cf.json.gz b/mynes-core/src/test/resources/harte/nes6502/cf.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/cf.json.gz rename to mynes-core/src/test/resources/harte/nes6502/cf.json.gz diff --git a/src/test/resources/harte/nes6502/d0.json.gz b/mynes-core/src/test/resources/harte/nes6502/d0.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d0.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d0.json.gz diff --git a/src/test/resources/harte/nes6502/d1.json.gz b/mynes-core/src/test/resources/harte/nes6502/d1.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d1.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d1.json.gz diff --git a/src/test/resources/harte/nes6502/d2.json.gz b/mynes-core/src/test/resources/harte/nes6502/d2.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d2.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d2.json.gz diff --git a/src/test/resources/harte/nes6502/d3.json.gz b/mynes-core/src/test/resources/harte/nes6502/d3.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d3.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d3.json.gz diff --git a/src/test/resources/harte/nes6502/d4.json.gz b/mynes-core/src/test/resources/harte/nes6502/d4.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d4.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d4.json.gz diff --git a/src/test/resources/harte/nes6502/d5.json.gz b/mynes-core/src/test/resources/harte/nes6502/d5.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d5.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d5.json.gz diff --git a/src/test/resources/harte/nes6502/d6.json.gz b/mynes-core/src/test/resources/harte/nes6502/d6.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d6.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d6.json.gz diff --git a/src/test/resources/harte/nes6502/d7.json.gz b/mynes-core/src/test/resources/harte/nes6502/d7.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d7.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d7.json.gz diff --git a/src/test/resources/harte/nes6502/d8.json.gz b/mynes-core/src/test/resources/harte/nes6502/d8.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d8.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d8.json.gz diff --git a/src/test/resources/harte/nes6502/d9.json.gz b/mynes-core/src/test/resources/harte/nes6502/d9.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/d9.json.gz rename to mynes-core/src/test/resources/harte/nes6502/d9.json.gz diff --git a/src/test/resources/harte/nes6502/da.json.gz b/mynes-core/src/test/resources/harte/nes6502/da.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/da.json.gz rename to mynes-core/src/test/resources/harte/nes6502/da.json.gz diff --git a/src/test/resources/harte/nes6502/db.json.gz b/mynes-core/src/test/resources/harte/nes6502/db.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/db.json.gz rename to mynes-core/src/test/resources/harte/nes6502/db.json.gz diff --git a/src/test/resources/harte/nes6502/dc.json.gz b/mynes-core/src/test/resources/harte/nes6502/dc.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/dc.json.gz rename to mynes-core/src/test/resources/harte/nes6502/dc.json.gz diff --git a/src/test/resources/harte/nes6502/dd.json.gz b/mynes-core/src/test/resources/harte/nes6502/dd.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/dd.json.gz rename to mynes-core/src/test/resources/harte/nes6502/dd.json.gz diff --git a/src/test/resources/harte/nes6502/de.json.gz b/mynes-core/src/test/resources/harte/nes6502/de.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/de.json.gz rename to mynes-core/src/test/resources/harte/nes6502/de.json.gz diff --git a/src/test/resources/harte/nes6502/df.json.gz b/mynes-core/src/test/resources/harte/nes6502/df.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/df.json.gz rename to mynes-core/src/test/resources/harte/nes6502/df.json.gz diff --git a/src/test/resources/harte/nes6502/e0.json.gz b/mynes-core/src/test/resources/harte/nes6502/e0.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e0.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e0.json.gz diff --git a/src/test/resources/harte/nes6502/e1.json.gz b/mynes-core/src/test/resources/harte/nes6502/e1.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e1.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e1.json.gz diff --git a/src/test/resources/harte/nes6502/e2.json.gz b/mynes-core/src/test/resources/harte/nes6502/e2.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e2.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e2.json.gz diff --git a/src/test/resources/harte/nes6502/e3.json.gz b/mynes-core/src/test/resources/harte/nes6502/e3.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e3.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e3.json.gz diff --git a/src/test/resources/harte/nes6502/e4.json.gz b/mynes-core/src/test/resources/harte/nes6502/e4.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e4.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e4.json.gz diff --git a/src/test/resources/harte/nes6502/e5.json.gz b/mynes-core/src/test/resources/harte/nes6502/e5.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e5.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e5.json.gz diff --git a/src/test/resources/harte/nes6502/e6.json.gz b/mynes-core/src/test/resources/harte/nes6502/e6.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e6.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e6.json.gz diff --git a/src/test/resources/harte/nes6502/e7.json.gz b/mynes-core/src/test/resources/harte/nes6502/e7.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e7.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e7.json.gz diff --git a/src/test/resources/harte/nes6502/e8.json.gz b/mynes-core/src/test/resources/harte/nes6502/e8.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e8.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e8.json.gz diff --git a/src/test/resources/harte/nes6502/e9.json.gz b/mynes-core/src/test/resources/harte/nes6502/e9.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/e9.json.gz rename to mynes-core/src/test/resources/harte/nes6502/e9.json.gz diff --git a/src/test/resources/harte/nes6502/ea.json.gz b/mynes-core/src/test/resources/harte/nes6502/ea.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ea.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ea.json.gz diff --git a/src/test/resources/harte/nes6502/eb.json.gz b/mynes-core/src/test/resources/harte/nes6502/eb.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/eb.json.gz rename to mynes-core/src/test/resources/harte/nes6502/eb.json.gz diff --git a/src/test/resources/harte/nes6502/ec.json.gz b/mynes-core/src/test/resources/harte/nes6502/ec.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ec.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ec.json.gz diff --git a/src/test/resources/harte/nes6502/ed.json.gz b/mynes-core/src/test/resources/harte/nes6502/ed.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ed.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ed.json.gz diff --git a/src/test/resources/harte/nes6502/ee.json.gz b/mynes-core/src/test/resources/harte/nes6502/ee.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ee.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ee.json.gz diff --git a/src/test/resources/harte/nes6502/ef.json.gz b/mynes-core/src/test/resources/harte/nes6502/ef.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ef.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ef.json.gz diff --git a/src/test/resources/harte/nes6502/f0.json.gz b/mynes-core/src/test/resources/harte/nes6502/f0.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f0.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f0.json.gz diff --git a/src/test/resources/harte/nes6502/f1.json.gz b/mynes-core/src/test/resources/harte/nes6502/f1.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f1.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f1.json.gz diff --git a/src/test/resources/harte/nes6502/f2.json.gz b/mynes-core/src/test/resources/harte/nes6502/f2.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f2.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f2.json.gz diff --git a/src/test/resources/harte/nes6502/f3.json.gz b/mynes-core/src/test/resources/harte/nes6502/f3.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f3.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f3.json.gz diff --git a/src/test/resources/harte/nes6502/f4.json.gz b/mynes-core/src/test/resources/harte/nes6502/f4.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f4.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f4.json.gz diff --git a/src/test/resources/harte/nes6502/f5.json.gz b/mynes-core/src/test/resources/harte/nes6502/f5.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f5.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f5.json.gz diff --git a/src/test/resources/harte/nes6502/f6.json.gz b/mynes-core/src/test/resources/harte/nes6502/f6.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f6.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f6.json.gz diff --git a/src/test/resources/harte/nes6502/f7.json.gz b/mynes-core/src/test/resources/harte/nes6502/f7.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f7.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f7.json.gz diff --git a/src/test/resources/harte/nes6502/f8.json.gz b/mynes-core/src/test/resources/harte/nes6502/f8.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f8.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f8.json.gz diff --git a/src/test/resources/harte/nes6502/f9.json.gz b/mynes-core/src/test/resources/harte/nes6502/f9.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/f9.json.gz rename to mynes-core/src/test/resources/harte/nes6502/f9.json.gz diff --git a/src/test/resources/harte/nes6502/fa.json.gz b/mynes-core/src/test/resources/harte/nes6502/fa.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/fa.json.gz rename to mynes-core/src/test/resources/harte/nes6502/fa.json.gz diff --git a/src/test/resources/harte/nes6502/fb.json.gz b/mynes-core/src/test/resources/harte/nes6502/fb.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/fb.json.gz rename to mynes-core/src/test/resources/harte/nes6502/fb.json.gz diff --git a/src/test/resources/harte/nes6502/fc.json.gz b/mynes-core/src/test/resources/harte/nes6502/fc.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/fc.json.gz rename to mynes-core/src/test/resources/harte/nes6502/fc.json.gz diff --git a/src/test/resources/harte/nes6502/fd.json.gz b/mynes-core/src/test/resources/harte/nes6502/fd.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/fd.json.gz rename to mynes-core/src/test/resources/harte/nes6502/fd.json.gz diff --git a/src/test/resources/harte/nes6502/fe.json.gz b/mynes-core/src/test/resources/harte/nes6502/fe.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/fe.json.gz rename to mynes-core/src/test/resources/harte/nes6502/fe.json.gz diff --git a/src/test/resources/harte/nes6502/ff.json.gz b/mynes-core/src/test/resources/harte/nes6502/ff.json.gz similarity index 100% rename from src/test/resources/harte/nes6502/ff.json.gz rename to mynes-core/src/test/resources/harte/nes6502/ff.json.gz diff --git a/src/test/resources/instr-misc/01-abs_x_wrap.nes b/mynes-core/src/test/resources/instr-misc/01-abs_x_wrap.nes similarity index 100% rename from src/test/resources/instr-misc/01-abs_x_wrap.nes rename to mynes-core/src/test/resources/instr-misc/01-abs_x_wrap.nes diff --git a/src/test/resources/instr-misc/02-branch_wrap.nes b/mynes-core/src/test/resources/instr-misc/02-branch_wrap.nes similarity index 100% rename from src/test/resources/instr-misc/02-branch_wrap.nes rename to mynes-core/src/test/resources/instr-misc/02-branch_wrap.nes diff --git a/src/test/resources/instr-misc/03-dummy_reads.nes b/mynes-core/src/test/resources/instr-misc/03-dummy_reads.nes similarity index 100% rename from src/test/resources/instr-misc/03-dummy_reads.nes rename to mynes-core/src/test/resources/instr-misc/03-dummy_reads.nes diff --git a/src/test/resources/instr-misc/04-dummy_reads_apu.nes b/mynes-core/src/test/resources/instr-misc/04-dummy_reads_apu.nes similarity index 100% rename from src/test/resources/instr-misc/04-dummy_reads_apu.nes rename to mynes-core/src/test/resources/instr-misc/04-dummy_reads_apu.nes diff --git a/src/test/resources/instr-misc/readme.txt b/mynes-core/src/test/resources/instr-misc/readme.txt similarity index 100% rename from src/test/resources/instr-misc/readme.txt rename to mynes-core/src/test/resources/instr-misc/readme.txt diff --git a/src/test/resources/instr-test-v5/01-basics.nes b/mynes-core/src/test/resources/instr-test-v5/01-basics.nes similarity index 100% rename from src/test/resources/instr-test-v5/01-basics.nes rename to mynes-core/src/test/resources/instr-test-v5/01-basics.nes diff --git a/src/test/resources/instr-test-v5/02-implied.nes b/mynes-core/src/test/resources/instr-test-v5/02-implied.nes similarity index 100% rename from src/test/resources/instr-test-v5/02-implied.nes rename to mynes-core/src/test/resources/instr-test-v5/02-implied.nes diff --git a/src/test/resources/instr-test-v5/03-immediate.nes b/mynes-core/src/test/resources/instr-test-v5/03-immediate.nes similarity index 100% rename from src/test/resources/instr-test-v5/03-immediate.nes rename to mynes-core/src/test/resources/instr-test-v5/03-immediate.nes diff --git a/src/test/resources/instr-test-v5/04-zero_page.nes b/mynes-core/src/test/resources/instr-test-v5/04-zero_page.nes similarity index 100% rename from src/test/resources/instr-test-v5/04-zero_page.nes rename to mynes-core/src/test/resources/instr-test-v5/04-zero_page.nes diff --git a/src/test/resources/instr-test-v5/05-zp_xy.nes b/mynes-core/src/test/resources/instr-test-v5/05-zp_xy.nes similarity index 100% rename from src/test/resources/instr-test-v5/05-zp_xy.nes rename to mynes-core/src/test/resources/instr-test-v5/05-zp_xy.nes diff --git a/src/test/resources/instr-test-v5/06-absolute.nes b/mynes-core/src/test/resources/instr-test-v5/06-absolute.nes similarity index 100% rename from src/test/resources/instr-test-v5/06-absolute.nes rename to mynes-core/src/test/resources/instr-test-v5/06-absolute.nes diff --git a/src/test/resources/instr-test-v5/07-abs_xy.nes b/mynes-core/src/test/resources/instr-test-v5/07-abs_xy.nes similarity index 100% rename from src/test/resources/instr-test-v5/07-abs_xy.nes rename to mynes-core/src/test/resources/instr-test-v5/07-abs_xy.nes diff --git a/src/test/resources/instr-test-v5/08-ind_x.nes b/mynes-core/src/test/resources/instr-test-v5/08-ind_x.nes similarity index 100% rename from src/test/resources/instr-test-v5/08-ind_x.nes rename to mynes-core/src/test/resources/instr-test-v5/08-ind_x.nes diff --git a/src/test/resources/instr-test-v5/09-ind_y.nes b/mynes-core/src/test/resources/instr-test-v5/09-ind_y.nes similarity index 100% rename from src/test/resources/instr-test-v5/09-ind_y.nes rename to mynes-core/src/test/resources/instr-test-v5/09-ind_y.nes diff --git a/src/test/resources/instr-test-v5/10-branches.nes b/mynes-core/src/test/resources/instr-test-v5/10-branches.nes similarity index 100% rename from src/test/resources/instr-test-v5/10-branches.nes rename to mynes-core/src/test/resources/instr-test-v5/10-branches.nes diff --git a/src/test/resources/instr-test-v5/11-stack.nes b/mynes-core/src/test/resources/instr-test-v5/11-stack.nes similarity index 100% rename from src/test/resources/instr-test-v5/11-stack.nes rename to mynes-core/src/test/resources/instr-test-v5/11-stack.nes diff --git a/src/test/resources/instr-test-v5/12-jmp_jsr.nes b/mynes-core/src/test/resources/instr-test-v5/12-jmp_jsr.nes similarity index 100% rename from src/test/resources/instr-test-v5/12-jmp_jsr.nes rename to mynes-core/src/test/resources/instr-test-v5/12-jmp_jsr.nes diff --git a/src/test/resources/instr-test-v5/13-rts.nes b/mynes-core/src/test/resources/instr-test-v5/13-rts.nes similarity index 100% rename from src/test/resources/instr-test-v5/13-rts.nes rename to mynes-core/src/test/resources/instr-test-v5/13-rts.nes diff --git a/src/test/resources/instr-test-v5/14-rti.nes b/mynes-core/src/test/resources/instr-test-v5/14-rti.nes similarity index 100% rename from src/test/resources/instr-test-v5/14-rti.nes rename to mynes-core/src/test/resources/instr-test-v5/14-rti.nes diff --git a/src/test/resources/instr-test-v5/15-brk.nes b/mynes-core/src/test/resources/instr-test-v5/15-brk.nes similarity index 100% rename from src/test/resources/instr-test-v5/15-brk.nes rename to mynes-core/src/test/resources/instr-test-v5/15-brk.nes diff --git a/src/test/resources/instr-test-v5/16-special.nes b/mynes-core/src/test/resources/instr-test-v5/16-special.nes similarity index 100% rename from src/test/resources/instr-test-v5/16-special.nes rename to mynes-core/src/test/resources/instr-test-v5/16-special.nes diff --git a/src/test/resources/instr-test-v5/official_only.nes b/mynes-core/src/test/resources/instr-test-v5/official_only.nes similarity index 100% rename from src/test/resources/instr-test-v5/official_only.nes rename to mynes-core/src/test/resources/instr-test-v5/official_only.nes diff --git a/src/test/resources/instr-timing/instr-timing.nes b/mynes-core/src/test/resources/instr-timing/instr-timing.nes similarity index 100% rename from src/test/resources/instr-timing/instr-timing.nes rename to mynes-core/src/test/resources/instr-timing/instr-timing.nes diff --git a/src/test/resources/instr-timing/readme.txt b/mynes-core/src/test/resources/instr-timing/readme.txt similarity index 100% rename from src/test/resources/instr-timing/readme.txt rename to mynes-core/src/test/resources/instr-timing/readme.txt diff --git a/src/test/resources/mmc3-test-2/1-clocking.nes b/mynes-core/src/test/resources/mmc3-test-2/1-clocking.nes similarity index 100% rename from src/test/resources/mmc3-test-2/1-clocking.nes rename to mynes-core/src/test/resources/mmc3-test-2/1-clocking.nes diff --git a/src/test/resources/mmc3-test-2/2-details.nes b/mynes-core/src/test/resources/mmc3-test-2/2-details.nes similarity index 100% rename from src/test/resources/mmc3-test-2/2-details.nes rename to mynes-core/src/test/resources/mmc3-test-2/2-details.nes diff --git a/src/test/resources/mmc3-test-2/3-A12_clocking.nes b/mynes-core/src/test/resources/mmc3-test-2/3-A12_clocking.nes similarity index 100% rename from src/test/resources/mmc3-test-2/3-A12_clocking.nes rename to mynes-core/src/test/resources/mmc3-test-2/3-A12_clocking.nes diff --git a/src/test/resources/mmc3-test-2/4-scanline_timing.nes b/mynes-core/src/test/resources/mmc3-test-2/4-scanline_timing.nes similarity index 100% rename from src/test/resources/mmc3-test-2/4-scanline_timing.nes rename to mynes-core/src/test/resources/mmc3-test-2/4-scanline_timing.nes diff --git a/src/test/resources/mmc3-test-2/5-MMC3.nes b/mynes-core/src/test/resources/mmc3-test-2/5-MMC3.nes similarity index 100% rename from src/test/resources/mmc3-test-2/5-MMC3.nes rename to mynes-core/src/test/resources/mmc3-test-2/5-MMC3.nes diff --git a/src/test/resources/mmc3-test-2/6-MMC3_alt.nes b/mynes-core/src/test/resources/mmc3-test-2/6-MMC3_alt.nes similarity index 100% rename from src/test/resources/mmc3-test-2/6-MMC3_alt.nes rename to mynes-core/src/test/resources/mmc3-test-2/6-MMC3_alt.nes diff --git a/src/test/resources/mmc3-test-2/readme.txt b/mynes-core/src/test/resources/mmc3-test-2/readme.txt similarity index 100% rename from src/test/resources/mmc3-test-2/readme.txt rename to mynes-core/src/test/resources/mmc3-test-2/readme.txt diff --git a/src/test/resources/nestest/nestest.log b/mynes-core/src/test/resources/nestest/nestest.log similarity index 100% rename from src/test/resources/nestest/nestest.log rename to mynes-core/src/test/resources/nestest/nestest.log diff --git a/src/test/resources/nestest/nestest.nes b/mynes-core/src/test/resources/nestest/nestest.nes similarity index 100% rename from src/test/resources/nestest/nestest.nes rename to mynes-core/src/test/resources/nestest/nestest.nes diff --git a/src/test/resources/nestest/nestest.txt b/mynes-core/src/test/resources/nestest/nestest.txt similarity index 100% rename from src/test/resources/nestest/nestest.txt rename to mynes-core/src/test/resources/nestest/nestest.txt diff --git a/src/test/resources/oam/oam_read.nes b/mynes-core/src/test/resources/oam/oam_read.nes similarity index 100% rename from src/test/resources/oam/oam_read.nes rename to mynes-core/src/test/resources/oam/oam_read.nes diff --git a/src/test/resources/oam/oam_read.readme.txt b/mynes-core/src/test/resources/oam/oam_read.readme.txt similarity index 100% rename from src/test/resources/oam/oam_read.readme.txt rename to mynes-core/src/test/resources/oam/oam_read.readme.txt diff --git a/src/test/resources/oam/oam_stress.nes b/mynes-core/src/test/resources/oam/oam_stress.nes similarity index 100% rename from src/test/resources/oam/oam_stress.nes rename to mynes-core/src/test/resources/oam/oam_stress.nes diff --git a/src/test/resources/oam/oam_stress.readme.txt b/mynes-core/src/test/resources/oam/oam_stress.readme.txt similarity index 100% rename from src/test/resources/oam/oam_stress.readme.txt rename to mynes-core/src/test/resources/oam/oam_stress.readme.txt diff --git a/src/test/resources/ppu-open-bus/ppu_open_bus.nes b/mynes-core/src/test/resources/ppu-open-bus/ppu_open_bus.nes similarity index 100% rename from src/test/resources/ppu-open-bus/ppu_open_bus.nes rename to mynes-core/src/test/resources/ppu-open-bus/ppu_open_bus.nes diff --git a/src/test/resources/ppu-open-bus/readme.txt b/mynes-core/src/test/resources/ppu-open-bus/readme.txt similarity index 100% rename from src/test/resources/ppu-open-bus/readme.txt rename to mynes-core/src/test/resources/ppu-open-bus/readme.txt diff --git a/src/test/resources/ppu-read-buffer/readme.txt b/mynes-core/src/test/resources/ppu-read-buffer/readme.txt similarity index 100% rename from src/test/resources/ppu-read-buffer/readme.txt rename to mynes-core/src/test/resources/ppu-read-buffer/readme.txt diff --git a/src/test/resources/ppu-read-buffer/test_ppu_read_buffer.nes b/mynes-core/src/test/resources/ppu-read-buffer/test_ppu_read_buffer.nes similarity index 100% rename from src/test/resources/ppu-read-buffer/test_ppu_read_buffer.nes rename to mynes-core/src/test/resources/ppu-read-buffer/test_ppu_read_buffer.nes diff --git a/src/test/resources/ppu-sprite-hit/01-basics.nes b/mynes-core/src/test/resources/ppu-sprite-hit/01-basics.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/01-basics.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/01-basics.nes diff --git a/src/test/resources/ppu-sprite-hit/02-alignment.nes b/mynes-core/src/test/resources/ppu-sprite-hit/02-alignment.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/02-alignment.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/02-alignment.nes diff --git a/src/test/resources/ppu-sprite-hit/03-corners.nes b/mynes-core/src/test/resources/ppu-sprite-hit/03-corners.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/03-corners.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/03-corners.nes diff --git a/src/test/resources/ppu-sprite-hit/04-flip.nes b/mynes-core/src/test/resources/ppu-sprite-hit/04-flip.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/04-flip.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/04-flip.nes diff --git a/src/test/resources/ppu-sprite-hit/05-left_clip.nes b/mynes-core/src/test/resources/ppu-sprite-hit/05-left_clip.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/05-left_clip.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/05-left_clip.nes diff --git a/src/test/resources/ppu-sprite-hit/06-right_edge.nes b/mynes-core/src/test/resources/ppu-sprite-hit/06-right_edge.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/06-right_edge.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/06-right_edge.nes diff --git a/src/test/resources/ppu-sprite-hit/07-screen_bottom.nes b/mynes-core/src/test/resources/ppu-sprite-hit/07-screen_bottom.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/07-screen_bottom.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/07-screen_bottom.nes diff --git a/src/test/resources/ppu-sprite-hit/08-double_height.nes b/mynes-core/src/test/resources/ppu-sprite-hit/08-double_height.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/08-double_height.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/08-double_height.nes diff --git a/src/test/resources/ppu-sprite-hit/09-timing_basics.nes b/mynes-core/src/test/resources/ppu-sprite-hit/09-timing_basics.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/09-timing_basics.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/09-timing_basics.nes diff --git a/src/test/resources/ppu-sprite-hit/10-timing_order.nes b/mynes-core/src/test/resources/ppu-sprite-hit/10-timing_order.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/10-timing_order.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/10-timing_order.nes diff --git a/src/test/resources/ppu-sprite-hit/11-edge_timing.nes b/mynes-core/src/test/resources/ppu-sprite-hit/11-edge_timing.nes similarity index 100% rename from src/test/resources/ppu-sprite-hit/11-edge_timing.nes rename to mynes-core/src/test/resources/ppu-sprite-hit/11-edge_timing.nes diff --git a/src/test/resources/ppu-sprite-hit/readme.txt b/mynes-core/src/test/resources/ppu-sprite-hit/readme.txt similarity index 100% rename from src/test/resources/ppu-sprite-hit/readme.txt rename to mynes-core/src/test/resources/ppu-sprite-hit/readme.txt diff --git a/src/test/resources/ppu-sprite-overflow/01-basics.nes b/mynes-core/src/test/resources/ppu-sprite-overflow/01-basics.nes similarity index 100% rename from src/test/resources/ppu-sprite-overflow/01-basics.nes rename to mynes-core/src/test/resources/ppu-sprite-overflow/01-basics.nes diff --git a/src/test/resources/ppu-sprite-overflow/02-details.nes b/mynes-core/src/test/resources/ppu-sprite-overflow/02-details.nes similarity index 100% rename from src/test/resources/ppu-sprite-overflow/02-details.nes rename to mynes-core/src/test/resources/ppu-sprite-overflow/02-details.nes diff --git a/src/test/resources/ppu-sprite-overflow/03-timing.nes b/mynes-core/src/test/resources/ppu-sprite-overflow/03-timing.nes similarity index 100% rename from src/test/resources/ppu-sprite-overflow/03-timing.nes rename to mynes-core/src/test/resources/ppu-sprite-overflow/03-timing.nes diff --git a/src/test/resources/ppu-sprite-overflow/04-obscure.nes b/mynes-core/src/test/resources/ppu-sprite-overflow/04-obscure.nes similarity index 100% rename from src/test/resources/ppu-sprite-overflow/04-obscure.nes rename to mynes-core/src/test/resources/ppu-sprite-overflow/04-obscure.nes diff --git a/src/test/resources/ppu-sprite-overflow/05-emulator.nes b/mynes-core/src/test/resources/ppu-sprite-overflow/05-emulator.nes similarity index 100% rename from src/test/resources/ppu-sprite-overflow/05-emulator.nes rename to mynes-core/src/test/resources/ppu-sprite-overflow/05-emulator.nes diff --git a/src/test/resources/ppu-sprite-overflow/readme.txt b/mynes-core/src/test/resources/ppu-sprite-overflow/readme.txt similarity index 100% rename from src/test/resources/ppu-sprite-overflow/readme.txt rename to mynes-core/src/test/resources/ppu-sprite-overflow/readme.txt diff --git a/src/test/resources/ppu-tests-2005/palette_ram.nes b/mynes-core/src/test/resources/ppu-tests-2005/palette_ram.nes similarity index 100% rename from src/test/resources/ppu-tests-2005/palette_ram.nes rename to mynes-core/src/test/resources/ppu-tests-2005/palette_ram.nes diff --git a/src/test/resources/ppu-tests-2005/readme.txt b/mynes-core/src/test/resources/ppu-tests-2005/readme.txt similarity index 100% rename from src/test/resources/ppu-tests-2005/readme.txt rename to mynes-core/src/test/resources/ppu-tests-2005/readme.txt diff --git a/src/test/resources/ppu-tests-2005/sprite_ram.nes b/mynes-core/src/test/resources/ppu-tests-2005/sprite_ram.nes similarity index 100% rename from src/test/resources/ppu-tests-2005/sprite_ram.nes rename to mynes-core/src/test/resources/ppu-tests-2005/sprite_ram.nes diff --git a/src/test/resources/ppu-tests-2005/vbl_clear_time.nes b/mynes-core/src/test/resources/ppu-tests-2005/vbl_clear_time.nes similarity index 100% rename from src/test/resources/ppu-tests-2005/vbl_clear_time.nes rename to mynes-core/src/test/resources/ppu-tests-2005/vbl_clear_time.nes diff --git a/src/test/resources/ppu-tests-2005/vram_access.nes b/mynes-core/src/test/resources/ppu-tests-2005/vram_access.nes similarity index 100% rename from src/test/resources/ppu-tests-2005/vram_access.nes rename to mynes-core/src/test/resources/ppu-tests-2005/vram_access.nes diff --git a/src/test/resources/ppu-vbl-nmi/01-vbl_basics.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/01-vbl_basics.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/01-vbl_basics.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/01-vbl_basics.nes diff --git a/src/test/resources/ppu-vbl-nmi/02-vbl_set_time.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/02-vbl_set_time.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/02-vbl_set_time.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/02-vbl_set_time.nes diff --git a/src/test/resources/ppu-vbl-nmi/03-vbl_clear_time.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/03-vbl_clear_time.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/03-vbl_clear_time.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/03-vbl_clear_time.nes diff --git a/src/test/resources/ppu-vbl-nmi/04-nmi_control.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/04-nmi_control.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/04-nmi_control.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/04-nmi_control.nes diff --git a/src/test/resources/ppu-vbl-nmi/05-nmi_timing.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/05-nmi_timing.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/05-nmi_timing.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/05-nmi_timing.nes diff --git a/src/test/resources/ppu-vbl-nmi/06-suppression.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/06-suppression.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/06-suppression.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/06-suppression.nes diff --git a/src/test/resources/ppu-vbl-nmi/07-nmi_on_timing.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/07-nmi_on_timing.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/07-nmi_on_timing.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/07-nmi_on_timing.nes diff --git a/src/test/resources/ppu-vbl-nmi/08-nmi_off_timing.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/08-nmi_off_timing.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/08-nmi_off_timing.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/08-nmi_off_timing.nes diff --git a/src/test/resources/ppu-vbl-nmi/09-even_odd_frames.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/09-even_odd_frames.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/09-even_odd_frames.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/09-even_odd_frames.nes diff --git a/src/test/resources/ppu-vbl-nmi/10-even_odd_timing.nes b/mynes-core/src/test/resources/ppu-vbl-nmi/10-even_odd_timing.nes similarity index 100% rename from src/test/resources/ppu-vbl-nmi/10-even_odd_timing.nes rename to mynes-core/src/test/resources/ppu-vbl-nmi/10-even_odd_timing.nes diff --git a/src/test/resources/ppu-vbl-nmi/readme.txt b/mynes-core/src/test/resources/ppu-vbl-nmi/readme.txt similarity index 100% rename from src/test/resources/ppu-vbl-nmi/readme.txt rename to mynes-core/src/test/resources/ppu-vbl-nmi/readme.txt diff --git a/mynes-desktop/pom.xml b/mynes-desktop/pom.xml new file mode 100644 index 0000000..7597604 --- /dev/null +++ b/mynes-desktop/pom.xml @@ -0,0 +1,204 @@ + + + 4.0.0 + + + com.github.dimiro1 + mynes + 0.2.0 + + + mynes-desktop + jar + + mynes-desktop + The Swing window, and the Main that is the one way into either mode. + + + com.github.dimiro1.mynes.ui.Main + + + + + + + + com.github.dimiro1 + mynes-core + ${project.version} + + + + + com.github.dimiro1 + mynes-headless + ${project.version} + + + + com.formdev + flatlaf + + + com.miglayout + miglayout-swing + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${main.class} + + + + + + + + org.codehaus.mojo + exec-maven-plugin + + java + + + --enable-native-access=ALL-UNNAMED + -classpath + + ${main.class} + + + + + headless + + + -classpath %classpath ${main.class} --headless ${mynes.args} + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + false + false + + + + make-assembly + package + + single + + + + jar-with-dependencies + + + + mynes + + + + ${main.class} + + + + + ALL-UNNAMED + + + + + + + + make-distribution + package + + single + + + + src/assembly/dist.xml + + + + mynes-${project.version} + + + + + + + diff --git a/src/assembly/dist.xml b/mynes-desktop/src/assembly/dist.xml similarity index 91% rename from src/assembly/dist.xml rename to mynes-desktop/src/assembly/dist.xml index d6e58d1..42e107e 100644 --- a/src/assembly/dist.xml +++ b/mynes-desktop/src/assembly/dist.xml @@ -55,9 +55,12 @@ dos - + - ${project.basedir} + ${project.parent.basedir} / README.md diff --git a/src/dist/mynes b/mynes-desktop/src/dist/mynes similarity index 100% rename from src/dist/mynes rename to mynes-desktop/src/dist/mynes diff --git a/src/dist/mynes.bat b/mynes-desktop/src/dist/mynes.bat similarity index 100% rename from src/dist/mynes.bat rename to mynes-desktop/src/dist/mynes.bat diff --git a/src/main/java/com/github/dimiro1/mynes/ui/AudioOutput.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/AudioOutput.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/AudioOutput.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/AudioOutput.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/Config.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/Config.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/Config.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/Config.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/EmulationSpeed.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/EmulationSpeed.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/EmulationSpeed.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/EmulationSpeed.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/EmulatorRunner.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/EmulatorRunner.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/EmulatorRunner.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/EmulatorRunner.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/GameUIFrame.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/Main.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/Main.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/Main.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/Main.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/PaletteDialog.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/PaletteDialog.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/PaletteDialog.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/PaletteDialog.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/RegionSetting.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/RegionSetting.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/RegionSetting.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/RegionSetting.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/ScreenComponent.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/ScreenComponent.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/ScreenComponent.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/ScreenComponent.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/ScreenScale.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/ScreenScale.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/ScreenScale.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/ScreenScale.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/Screenshots.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/Screenshots.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/Screenshots.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/Screenshots.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/CHRViewerFrame.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/TileComponent.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/TileComponent.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/chrviewer/TileComponent.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/TileComponent.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/TilesViewerPanel.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/TilesViewerPanel.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/chrviewer/TilesViewerPanel.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/chrviewer/TilesViewerPanel.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrame.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrame.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrame.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrame.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/debugger/DisassemblyPanel.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/DisassemblyPanel.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/debugger/DisassemblyPanel.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/DisassemblyPanel.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshot.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshot.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshot.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshot.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/debugger/MemoryPanel.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/MemoryPanel.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/debugger/MemoryPanel.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/MemoryPanel.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/debugger/PointsPanel.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/PointsPanel.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/debugger/PointsPanel.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/PointsPanel.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/debugger/RegistersPanel.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/RegistersPanel.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/debugger/RegistersPanel.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/debugger/RegistersPanel.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/input/ControllerSettingsDialog.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/input/ControllerSettingsDialog.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/input/ControllerSettingsDialog.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/input/ControllerSettingsDialog.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/input/KeyBindings.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/input/KeyBindings.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/input/KeyBindings.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/input/KeyBindings.java diff --git a/src/main/java/com/github/dimiro1/mynes/ui/input/KeyboardInput.java b/mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/input/KeyboardInput.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/ui/input/KeyboardInput.java rename to mynes-desktop/src/main/java/com/github/dimiro1/mynes/ui/input/KeyboardInput.java diff --git a/src/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java b/mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java rename to mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/ConfigTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ui/EmulationSpeedTests.java b/mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/EmulationSpeedTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ui/EmulationSpeedTests.java rename to mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/EmulationSpeedTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ui/EmulatorRunnerTests.java b/mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/EmulatorRunnerTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ui/EmulatorRunnerTests.java rename to mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/EmulatorRunnerTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ui/ScreenComponentTests.java b/mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/ScreenComponentTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ui/ScreenComponentTests.java rename to mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/ScreenComponentTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ui/ScreenScaleTests.java b/mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/ScreenScaleTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ui/ScreenScaleTests.java rename to mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/ScreenScaleTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ui/ScreenshotsTests.java b/mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/ScreenshotsTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ui/ScreenshotsTests.java rename to mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/ScreenshotsTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrameTests.java b/mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrameTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrameTests.java rename to mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/debugger/DebuggerFrameTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshotTests.java b/mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshotTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshotTests.java rename to mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/debugger/MachineSnapshotTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/ui/input/KeyBindingsTests.java b/mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/input/KeyBindingsTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/ui/input/KeyBindingsTests.java rename to mynes-desktop/src/test/java/com/github/dimiro1/mynes/ui/input/KeyBindingsTests.java diff --git a/mynes-headless/pom.xml b/mynes-headless/pom.xml new file mode 100644 index 0000000..624f14b --- /dev/null +++ b/mynes-headless/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + + + com.github.dimiro1 + mynes + 0.2.0 + + + mynes-headless + jar + + mynes-headless + Running a cartridge with nobody watching: the command line, the REPL, the report. + + + + com.github.dimiro1 + mynes-core + ${project.version} + + + + + com.fasterxml.jackson.core + jackson-databind + test + + + diff --git a/src/main/java/com/github/dimiro1/mynes/headless/Headless.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Headless.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/headless/Headless.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Headless.java diff --git a/src/main/java/com/github/dimiro1/mynes/headless/InputSchedule.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/InputSchedule.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/headless/InputSchedule.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/InputSchedule.java diff --git a/src/main/java/com/github/dimiro1/mynes/headless/Json.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Json.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/headless/Json.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Json.java diff --git a/src/main/java/com/github/dimiro1/mynes/headless/Options.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Options.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/headless/Options.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Options.java diff --git a/src/main/java/com/github/dimiro1/mynes/headless/Repl.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Repl.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/headless/Repl.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Repl.java diff --git a/src/main/java/com/github/dimiro1/mynes/headless/Report.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Report.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/headless/Report.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Report.java diff --git a/src/main/java/com/github/dimiro1/mynes/headless/Session.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Session.java similarity index 96% rename from src/main/java/com/github/dimiro1/mynes/headless/Session.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Session.java index 8f386d4..3b5b913 100644 --- a/src/main/java/com/github/dimiro1/mynes/headless/Session.java +++ b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/Session.java @@ -19,12 +19,14 @@ * interactive mode takes commands against it, but neither of them knows how to clock a NES or what * a frame hash is, and this does not know which of the two is driving. *

- * The frame loop is deliberately the same shape as the one in - * {@link com.github.dimiro1.mynes.ui.EmulatorRunner}, down to using the PPU's frame counter as the - * only frame-complete signal. What is missing from it is the whole point: no pacing, because there - * is no display to keep in step with; no {@link com.github.dimiro1.mynes.ui.AudioOutput}, because - * opening a sound card would make the run depend on the computer it ran on; and no - * {@link com.github.dimiro1.mynes.ui.ScreenComponent}, because nobody is watching. + * The frame loop is deliberately the same shape as the one in the window's {@code EmulatorRunner}, + * down to using the PPU's frame counter as the only frame-complete signal. What is missing from it + * is the whole point: no pacing, because there is no display to keep in step with; no + * {@code AudioOutput}, because opening a sound card would make the run depend on the computer it + * ran on; and no {@code ScreenComponent}, because nobody is watching. + *

+ * Named rather than linked, those three: they live in {@code mynes-desktop}, which this module does + * not depend on and cannot resolve a link into. */ public final class Session { /** diff --git a/src/main/java/com/github/dimiro1/mynes/headless/UsageException.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/UsageException.java similarity index 100% rename from src/main/java/com/github/dimiro1/mynes/headless/UsageException.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/UsageException.java diff --git a/src/main/java/com/github/dimiro1/mynes/headless/WavWriter.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/WavWriter.java similarity index 97% rename from src/main/java/com/github/dimiro1/mynes/headless/WavWriter.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/WavWriter.java index 364d2be..3149149 100644 --- a/src/main/java/com/github/dimiro1/mynes/headless/WavWriter.java +++ b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/WavWriter.java @@ -13,8 +13,8 @@ * Streaming rather than collecting, because the amount of sound a run makes is decided by how long * the run is: a second of it is 88 kilobytes, so an hour would be three hundred megabytes of heap * held for no reason other than that nobody had written it down yet. The only thing kept in memory - * is the byte buffer the samples are turned into, reused between calls -- the same trade - * {@link com.github.dimiro1.mynes.ui.AudioOutput} makes on its way to the sound card. + * is the byte buffer the samples are turned into, reused between calls -- the same trade the + * window's {@code AudioOutput} makes on its way to the sound card. *

* A RIFF header has to say how long the sound is, and nothing knows that until the run ends, so the * two lengths go down as zeroes and are patched in {@link #close()}. That is why this writes to a diff --git a/src/main/java/com/github/dimiro1/mynes/headless/package-info.java b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/package-info.java similarity index 71% rename from src/main/java/com/github/dimiro1/mynes/headless/package-info.java rename to mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/package-info.java index a4257b7..ddd7220 100644 --- a/src/main/java/com/github/dimiro1/mynes/headless/package-info.java +++ b/mynes-headless/src/main/java/com/github/dimiro1/mynes/headless/package-info.java @@ -16,11 +16,15 @@ * com.github.dimiro1.mynes.headless.Repl} is there for the times when the question is not yet known * well enough to write down. *

- * Nothing here touches {@code mynes.ui}, except its palettes. Three separate things over - * there would make a run depend on the computer it ran on: the look and feel loads a native - * library, {@link com.github.dimiro1.mynes.ui.AudioOutput} opens a mixer, and - * {@link com.github.dimiro1.mynes.ui.Config} reads whatever is in the user's home directory. A + * Nothing here touches {@code mynes.ui}, and nothing here can: this is a module of its own, + * and {@code mynes-desktop} is not on its class path. Three separate things over there would make a + * run depend on the computer it ran on: the look and feel loads a native library, {@code + * AudioOutput} opens a mixer, and {@code Config} reads whatever is in the user's home directory. A * headless run reads none of them -- in particular it never reads the config file, so a palette * chosen in the menus cannot quietly change what a screenshot looks like. + *

+ * The palettes themselves used to be the one exception to that sentence. They are in + * {@link com.github.dimiro1.mynes.palette} now, which is in the core, so there is no exception left + * to make. */ package com.github.dimiro1.mynes.headless; diff --git a/src/test/java/com/github/dimiro1/mynes/headless/HeadlessRunTests.java b/mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/HeadlessRunTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/headless/HeadlessRunTests.java rename to mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/HeadlessRunTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/headless/InputPathTests.java b/mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/InputPathTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/headless/InputPathTests.java rename to mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/InputPathTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/headless/InputScheduleTests.java b/mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/InputScheduleTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/headless/InputScheduleTests.java rename to mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/InputScheduleTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/headless/OptionsTests.java b/mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/OptionsTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/headless/OptionsTests.java rename to mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/OptionsTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/headless/ReplTests.java b/mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/ReplTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/headless/ReplTests.java rename to mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/ReplTests.java diff --git a/src/test/java/com/github/dimiro1/mynes/headless/WavWriterTests.java b/mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/WavWriterTests.java similarity index 100% rename from src/test/java/com/github/dimiro1/mynes/headless/WavWriterTests.java rename to mynes-headless/src/test/java/com/github/dimiro1/mynes/headless/WavWriterTests.java diff --git a/mynes-headless/src/test/resources/PROVENANCE b/mynes-headless/src/test/resources/PROVENANCE new file mode 100644 index 0000000..a3f2127 --- /dev/null +++ b/mynes-headless/src/test/resources/PROVENANCE @@ -0,0 +1,15 @@ +Two cartridges, copied from mynes-core/src/test/resources, where the originals live alongside the +readmes and expected-output logs that came with them. + +They are here rather than reached for across the module boundary because of what these tests do +with them. Everything in the core reads a ROM off the classpath; the headless mode takes a --rom +and opens it, so its tests have to hand it a path on disk. Surefire runs with the working directory +set to the module, which makes src/test/resources/nestest/nestest.nes mean this copy -- the same +string the core's tests use for theirs. + +The alternative is a test-jar from the core and a helper that unpacks a resource into a temporary +directory before every run. Sixty-five kilobytes of cartridge that has not changed since 2005 is +cheaper than that, and honest about being a copy. + + nestest/nestest.nes Kevtris, 2005. Draws its menu unprompted, which most games do not. + mmc3-test-2/1-clocking.nes blargg. Mapper 4, so the report has a mapper with banking in it. diff --git a/mynes-headless/src/test/resources/mmc3-test-2/1-clocking.nes b/mynes-headless/src/test/resources/mmc3-test-2/1-clocking.nes new file mode 100644 index 0000000000000000000000000000000000000000..4458d561cbb4907ec0c228995085e3ef08e8f24a GIT binary patch literal 40976 zcmeI24QyN0702&$5;rv_pDi`yqZjB#sQ7qA8_Tw+xD+a<@(QDD0||}i#CGlC#$A#Y zSG6M8>MDwA6kyW=8Y8j@>+9B1v>`FHY2E~;$*kgSQriv0qKG(-(-s4x%hKTNf8U3b zb`z=ung%+rukZivz2}~L&hLIa)#{czw_atDHZb#Apo<6)0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpM1Tko0U|&IhyW2F0z`la5CI}U z1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01+SpMBozug$wkF;@zsYlYESEhRCY;X?$y zTr_|CqUOC5$Q)UToNdA&dXWLLvgx4$St;a4HOIaQcOmiGE5m|83~K{q}WW3;6mmfX3ZFC)CFubt@>Rhf5D|xy7()TD(4@} z1X@rSaK|SrT|?TlGN8%8D>+OL>2knWQbJO0V=YwAE&9;hy4Fwwt%Vl^79Kw(T;zdcVQnITG z6>=GfEAG8nmBm)63$eObeQZT+rLty~EW7q!ac5nka??ux3V;3fK}W1^WM%uA*vgR= z?JvhxjMTUPAXYz8*UrZ>Z^i1KzapUUhq8&Xm+IOVfNrejoVzQF*vnq5YTZ-EGL`)` z9|jJpOu<7^;@pBk`GFjlvbMWDJv}}zQh5;I^LT?@zgp zOpDka%#TV(B_(4Ai%p(j$mg{&rS#6PWn31ii7H!rSFf+T%M;?h?(T3mQx}k`%7%GD z+E=x|dU!ms@Oag+%=v6}E^}^}B`jL)n#9~o$Bk-~!EDt=9Xg3$QQa@p8?{$8G;%M?!)V+_H5nGm8~9bh!oJ9gCv(x`A2bO5LF5 zyn5d+a&Rf% zx_0m*Y-K5L%gkZ;O7X2mP?!D8IvRI8WEapr{aSA^ZmnqBMk zx*C1qp}t%=`L1ZZ-*AF$+=!WLz;rz@qfM7u%{OSLjm+0UM{R}LeNE3bB%2FgcuKMy z+t=`1lV;4Hp5c>u(O1m%12dvLpARU{HI4GZ+c=5%p*)Ts_qP0Sv&#GBKmJv+WM*MF z(#Y#)_BSNhZzT&RHP>H*)mOM&74wg(oET-iIrHxG4f`5k+cFaq5A+d!VAG$O(-sBR zMZAJ*7HG$-5^GW`txaojqiv*Vxdc&0b2wS6gOz%QHnAX)pnE>=T3lb+>I%TOek&u5 zqYIfYt2G$;uKW-VUO3Xm94=@flq~x*?_pCo^{4^|u|3_+X@pciv#$wBE&H{W;;~m7 zG9Ln4g273-f@OAcMtwUjDeBRT4xcyZ=`HmzLecy4magz(RM+F|;QnAYjutH)?(riJ@?)56(sWafE zF+zJ7c$h{VKHlRqQZ1SGEDnd1k)FJ?OP6mq23*?F8|?9PfR2gKh+E^Q1qm;D!3?Gc zE|FGZP>FMshiMMM%P3r%a_eFf2yLxp4?MKUd?)t_}Os$MdkHp!qZE(*0Nb!<` zA3ieV*z@O)p1PeK%ly;Lq$^r~Hgw&O5A?6?@c;fV9k&gx{o?YIuYXv3{eivBwv(Md zd2+{O?%H2nch&cwTsU~&+L@N4myP%yb=`R8rH-ukSWDj5x#QVO9(tku(!;!Tr=J<`5UdA45arrPax&7Y}OI|i~_nW>75vaB#unZIqJ&5tgoIvjlnkRd=_g*O=; z7PU`%XUtTF-@^4Os09PbinFAx?&GPfx0RXdXcdX~F;kN}DB`=iX%Xe!lbwMQ_XuETY7g% zMY|Z!)MzRh74vKAJSJ1jr>UA-v@g-K(bgJKHuOZXcoy-b3`K2JlnwR!{UUW{YO$)Z zbtl%Jsm&UfW@f4rvv0Rrn5k{pSav)38Crvh6pPP{vLdPnO#x z%G6V*#kvsvb&Vt=_F0q-m7^H85%C(zFxp!ov@g+!hzn&+5uG?cnW?Cai1~qbtg_!hhrx*ReArX$OT8Bq2hh%^{ISB$O#c30z`la l5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)BJh7j;NNNr4WIx3 literal 0 HcmV?d00001 diff --git a/mynes-headless/src/test/resources/nestest/nestest.nes b/mynes-headless/src/test/resources/nestest/nestest.nes new file mode 100644 index 0000000000000000000000000000000000000000..fc2a88c36db9c5c2de9cca33be0e446e12007f17 GIT binary patch literal 24592 zcmeHue|%KcweOzHWCBTq0R%?*;jy5C6&xJYs1XJP5-`rPD_v}$T=9c&FbLGf6qP<_?(wPJv(V_PI7KIVSc-e+gdOv1hI z)6f0yB_wn9THm$TUVH7e*V^Zt;hOo2&vZCg-%r)Cw?mPGdgh6i0?pGaJ~(S+TBAd2 zETmtsbnOwhrZe%87!J5d>o9w^n#cLTs)B_2akrwP5k9@j=9VBGyR4H{&Az%!@C%wCu7ubFZ2=e}Ne6dA69MCggg5+B48F{yq2me3-CN!NCoX$^Ls20hSs z==~1!^YmfSf)qt*cltx2oDV}lhok`_UMF%bK_Xkto(}U^D1#pjKhvgZ*WbNLTe@&k;_?l*Imn()h}JQJf9t2S-*T)E_3m^r8RfvvgXv( z+j4qrHL_4-wpYipOUgt4NJaG<7Pwrkd1uC0M@$*+>TScqM& zEnIca(v|hgwAJCYXJ^=dwiMS~8_cz)YK}6)TEWHr7;~=@U9>5y!!@gyE!TYW=hjVC zYdi0%JcSDv&&?fSan-fCjO(lBNR&QT}j@_u*!!j zk&tB^2e6S2{jUFJ(T6@VCeVSumN9`v=kD(?k2mdap8vr)`(wY~{6SrFT_B*d&1|!0 z^9XI)ZtbJpTC83Bc#qcouJ*-VO@B{Y_rBJ80iVVzN(E;gFe?z&B^YRc}qse25Tb{l)r1)ErVhuIlAQkHb-j?L_d z7xgKyTQ5MfEbgqjdbjQ*Zrr82aOEuR(hI2(NIR?QcI$4@HeGs=Kuu@W{k!!c)W*an zJHjq~D2U09ptI`H-FmSQA|U9}O9T*hR=v1eFBO2trJqKPsK;6Lhu!)x(e}CY;R5vu zrU&hirJb{~NcWJssb3na(=L4kNd-vxLGJMi_A;o z!nm{Q;&%OX;<+lPq=)*7!i7m^)xvgtG1wEt zDgZX!Yv^Z_F6s~^PYGxI$k4wfx&PMZpe93~WT}7$ESJ76nJ^?^1bjo|MPfdtp-+Zr zt1+8aCQftzv!R~@mN6$?wJJM`X~OjAq6%<)KGtbx*}XZZJ45#!=sx{jeXhOx<9*$CSfitR0;4~k(_M{z*Sq>v_U;eK z?!GC;%xrfZ-5<*7u10_1U40(9zy3(3DB;KAY{LAXNMGdfC8q~3FgBS};P1%@87<-9 zE`%w2Jw4htDvkvKP-3_+2?r+e_jmRAo7vAYMNgoP#vG&$+u{lCujKWWuXk=RwK`JM$B34w1MT9L1_$`gD*s-60n9)b?aIAXx9p`ZXVle^=t$1AYxdR|-!X^O z8G9jn+g`nbX1uqO*H(t~^@)1e%pcTh_ogR%zLnI16O9MWGqJK`I@g;cDaQkn871tj zdUCH`Y4!eDC0~wWpV+GJ2>31z`qMMw7h;!uJGIq3uXBeviAKQh7RUrVqr;=j5%J-` zOMn*vcUB$Vt1q->jg3%GGe;IF%yT(I`Z{y!wu~(t18b z?|DzJQd-X^QK8i#MbFRC`t*DHcTgOgSYxIL)Kk*n_c6Xl1x7#`w*+ zrRBFYGAF;a(dp#hYh*5+JsmY}HqYwn!u1w&EM0CjJz!^y@0mmNjkw;NF61|o_GX=J zjCOVLpW>6huraDL-m)>%!U{0G(Jjnr{L~!Q;&d7>m_;qjWwfB*P3YH>DZ=2mHFNT2 zSfI1S&DyKS9Z@ZHyj|OS-0^_64~dcJ>Jg0grN4-@v|S$z6RUXJtwLacenE} zvAx}M9?&L$s)r(NYWLEpc42qBb|p2g0=t3O*AcY@6z&%bv}Huy0ig&r?gu+S>}}n< zqS_iMrRhF<8K7{Mp$>^af1(;Cx|WBwqkyn5kGq_b0aU!pRYjCpgS3 zH44okoqp4m+6syLAmPNE9FrryAz^pgWjMgSA9ifu&9Mk#qA)@+fq0D|E~?)ecJ9zeWAi0A+@wR?HQ3Jx?xaDaOqaYbx^SVn{l4Kze(fV-{x z?T8f_u?PhQNEsL)(Ux&R&`Si#u#k|93fY!HA=@G*Vi6SOPa`rUKvWPRA_By%M2LU@ zv4#i{4dG%qV)}0v>5IaAcmgkB86y;LJJDfnt&D*qIKSh zu7{r2;wNH}1(BwR_T-6ntJQ*o#v5R}iTxX5i`IUy{{nU`v5yd2w0glV?ukXtCAOyr zY|%Qq2Rk7m?hOt_%u-)*a7dhj9k)>YrwA+9(CR%DNtb$x!$XpUM1i~j1m+_*w+YDV zlmXNN2$N~`65>;x8i4!^h$9vO-^E{yF>J%eh}*soTO#fOHewRpuqhx*89!JADX|rI zf=?RMUVK6J&fAPH$<6q%>J2He9bcB)5&h+U{F&^Xw;_KnH{>I#H>AXtdvd?iS+JqdMn ze+Qp3f1}|Qq}ZZ_PVK%6pE83}OQvu%t`mUF;UJd@Qtnie6I+!OZ0mj(pH>==xM{Z% z!^-1e5M?EDf?pD_mB}sGO63-1<#LOX$s9UnocJ7{GMl4OAxN3dLEb7zna@G45u{A$ zAftj5TeuM<_V8bEfzhZ8XgtwPq}awFsVz1#LD+*7Vl!K9v7N29wV|okAG_bd zr`Xa&ej!M)sX-DXwlzWS6GV!QZ9!sdTWztqt+v|UAg_tIThI$TJWI$;4tkgbvCp%F z-0GlLNf5g|OUMlmdb$L$=d%QDdr)HEe-Uw;r};{PxRGta-lCoVDPp$)c&is+`ZP~T zcxY09wD}JKWB{@I_exZCrTzaI(5UDtKwn>1N&#H}X(top;)f{-JQMTdQ4~%vBOB+_ zs{)6<9I0g+>e)j$&U4nfb6dJJjyz&)GhLm_(d`J7WMYrS9-sVpV&=}rjAzV(q>CSo zu_iqESb!6m13N6UGh>WQyXyE~E9`2*!TTDGrw81xYdw(g8@n@AtXmF3Ymky~IdEC@x3;g1PVumYh5tqFg)*+U1d2648g5E5Y8! z$-^f(LO$uTdO#t5-}lGCpoxaEe%JB*NtjUfmETt!A41+hu#s&z(Ff4&D}TD!hw=ly zL-2V3?!W-}{mP##PQ%^6G6M5j#(jmcj0V9f6K>)gzw!q$N25UMV0_Du{4F>&Z;|u{ z94Gllc>9ERPSBAlKtv+^oW$mh49nf;Mn2-qPAz=wEks}~X(k_Zn=mZpAb4uO=b z^C3tKrD{}`n5VNJ`Of>qbr&<+sSZT;R9DSxr#cX#WI)^0?z@>)Fwn@J>Of>qbs%J|Ktq%YbllecdzN#m z1KD?~L)(6;1KD?~L%Z)(hqf#aIMtyoiUU;7IB|^GPIVx%r#cYXQyqxxsSd=Z6WO&% z(AseJO5fU~thK>ny7;$fZ4y`;Nc63Zfwh5@T$@Q^ZSW9>ZO>U7jHf(3D-mh8OI;sJoY&{(a+fL#2fq;V8V1Ou9UkE5lod}UfH6WCyeLx)B z8Tc+f18qNUF6Jd7ctA4Q@hXdt4B~z%U5fjUA*qPzGUh=HPXYO3u?Aj|$mq=5`f4;e zGVJk?)MJp!K&k>#crb{JAf@WPt&c{N-tZXT>FJSpPBIKq#YTncZfY>|uWSG?`_+vckjGXR{rXaGzOTs467D;wbD)r}p@)mJ#g z6FU?GznlNEahtm@=l{y@9x&-&mreS=$`lTm^{+?5SWL+rCn99?2`uMcfJocDz?C3v z_X0%P?ghRF(snOEq)6sGP3lNpP7a%HoFF=&-Uf}=N;9&Mx0TZWld-~chtp4dOn4P^u90xGO5U3eYDG^8`|nz;iC{07#H{ zzQz5BmcBaiYvvxXP~agKf2^^=tt!Q@qlE*O3Ox3rM+DJAtms8Jg~qPpg|T_4GxKqd zU!Xe^>tz~8ZGR>}ua?szeejk8xZ&R*+b79Nf1g$X~^cO~T!=Px{29fB7xQg@;E;{N@|UktR*8eCa>hnj z^?+~&3O;8q&sVkx+m$n@;6K>U8LxSiuuy4t#wHk^A%(Bit6_7TK~WSF&e%fE*jkwI z2`k^cVPI$YAio(p1EllK%7L8`fY25Sj}$$PZ`|hM+hQTOWhqY3WBIJf4)22t$r|&F z~9(xEKSZqn+M*T|~VapORf;T=U zi~|ft7?!#b@?S!JiBXFI{u>R@xUewsss18Ah7o?aP)=RV;24bh6f<}cMlCEfn$YKA z8l!PZAqIJwKUUWI!zET1ng=HR7`ohuE-$0Yl0xHupi84QkBl{s#}-MuZ1cbw%r=il zta-TQJRS@7n}<7R9zVpYB;q)@9~E1YaycI99Gy+wD3jxX&e1u7Kpw~AoTE$-$l`dI zbF@Ja^n@OFSBdR<0k4QvaCfYdA8o9_qoSVQ%oh@u_Ow*EjU(cFA#eepxeBTf5N;9i zl@Wd^LElx-O#-?^LPuj2(6_t7($`ecrw+he1yu9^P|5&&R{=K>pj1iQ-m7q*(l~_; zWSzon=85U@N@Tji*n&g`hVH|}hg2q>s+*$OCZEWt*<1L(0k@3-+;V}1CxF|=Nj$A* z@Zf|zaiH=Pp0I%ap0I$dCxq3)+K*`8!rW(1Wv&uvI+eXj;JG}5e?kUJe}5vAgWVtW z)<*<`!fd|iiw1?+{2=44IX~WZ_WW7K+iN0n{wgCULqoi!pxpw(V~oCd+pnMx1yq)e zx1Bwo$#{E>qDQHN``=Q)ZUU4t0Q(j2ApuGi8L+eGODo<6GEQLwS*I|YdHM0Sv*+(J z-d=|LZTb;U*6c0(=fG`asCe72`o99)HcsMIE8ceY9GCId-xC(l-xC&)^@NJIojtu) zy#3--<|={LPi3zX_+_5Kzf$qGvnON4o6R5X${h-``NE2~{eAsxevt9@rY+u@Xie|! zamskxC?aQ(jGU#r++j}Z=mB4$avR4V1c?Q2v21|dR zWyPD#AMMH=3bXmbinphF6lU{-jJN&y@wT{kl8m>TdRtIWRe;d&%M?^EAQd76)%94t zR*869osGA}z30hzyQw!f-j*q#o&co`@mAMk^;kvmrc}`=i+eA$;%y+~6gH4`3bUD) zA8(6${W9ME2>09ct9Vim;ll06zgr8GwKS z77(CRQM^s)z1E7ifs9kwK-MYDW?p{0P3T=LIPgp?K6Dr;&^xk5{TlcBVRRSkYWv>$G$uqcD#oL75+pKuA z`NN90>3x{Z7goFl`Y@XxWV|`@TaSV=0#YGDkx<-g^}>J0LRS2r z*?2qLvqHw(m$tG=@z$e&3;{|RfZ|@Ohlk=#siIL1_pG+!Z6Mr78R{v7qws8`tS@CwbXT6NK{+_Ua{+_UatS3~w9qzf; ziZ{=x%vAy-PGzqW7@24AC>3vqdm5~Gv-!h{x1K)C<_jy{ihET*n;$~z#Xxl^iLcV* zm8>)92yJ2^dVL%+#n;Jwf+5}qfD^=5@g)Z$-Jv-3>N1_-KB3#Breiiu;eMJ}$cOjv z^i@#V5pQEKp5Wcl$HU9wkcY(jtRf?_JgX~-(U;D{&bTmwUe1Pm_&&L^pf!{h-$|G9 zX?z>qBLsOgM1<^R;!EkWl`KqK0&%o_md=DtCtjS|bb_*UqLt{=3BuBemZcLdOD9@n zXIaQs5+6!_#`i(RNc09dl*X4we|LaCgs2x2h!+|Sk}BgHLqW{i zD3G*XP0t?W_ftdhapoC5JVC-JBk+|Sp~^=CR7+uck_Bbs%`<)8;221aY~|Hu*%6zw zVh)I<&-9QOzO0LfTh*aB3=`VU7h+0TS}Jo`Qhnz4Df42g!3&b-V2tISElLd@&TxYsuZ%R18P1#^7vq|2Bq z%<20NxK<+?%|xT3oe`f7N5=l&blH6;St@n%K6dgXOQ-PB)>d$`t*wo{bC9JEzSG9q zz9{&BXz)MSi|c(S3)Y%@%enrD}RXZ9v?nQ*Yfg$li(jbc+%@7 z{n2mSC&hT*w4DU)F7ytce-MeS@>TIv;Y;QD;tQieaUU|(%{rkqrGy&IrT{&)#stFEv}8izSC zA76;gs#$U8+L~FcbUgZ(&IVmGtgNO%Tx-C051V*ygWJs-YC;>Fpl9Jq{DvCz_m-0! z{nB+d;WV(&FR#8~7{uot2L1;8V=U|~MaMAPP~&uuhs=F#d%x&BbRQdkNlimdO$}SM zwg&n)u!;UqDCD2WR^9_{?R~6ahOgW=qd{JM5yDs0TsnaP75&PEPs`a^Zv51iv)bB~ zk(DcIu-Ksx>8n}aa3|@nS$ps56}V!&nwm?-i}5fL(RZ%6WP+fnALcoW=Ck2uQe4i~ z`XPUhyw;X`iN3R8J@i2dR58GpjE{uLFXR0fuN=$b^OZB?UCg+Em6Ll*%i*4KtczNi zOa_Z*t;+10niW^DPzW9neuM?MI-OU*T=MIzr46B3Y#59odq87eS4#QX6`&_V|3qA8 z3kQTkwX5#KJjAjJ{;GyMZznnE7xGv!Yn-*K-~h~c#T8Dcz&F%DZr1n5S77~1XM4Tl zX#Fr_*e9;=FJp54xRL`v!vnLOFtlOV__798K6l5{Pw$vZg8$*qaQ8^RAAe=|yBvS{ z^ncj-zXW{oZCC0aZ~teiR9;e7#?Z&_lod>Is+w)fG7jF;B5R zeRU?k-sIPv{Q8q$hw|$Ya$8Pa%CArPb!xzRWvg4Fj@jy0ejP(n&Z%elbuGWX<=44> z^)9dO<<~zdUiLaj^Rw4O;5l`XaC?2suag7S%e=Z-W3Qk2bu_=8=GWEy`kG&7^XqND zx|>&j<<`&E;rx1xdYV(0^XoI!O?#cruh+nH>UMtp2A)&Lh5np+o?F-R>wA8kAE4gn z)&2hUKmQz%dmhL?7l<7Ix5@K?x~g-6y5^i0a?TA{@!a!+I7emA5&7qd+;c_#`Qrce zoFUhF@N>`ugB}?4z@P^PJuv8jK@SXiV9*1D9vJk%pa%v$FzA6n4-9%>&;x@W81%rP O2L?Sb=z;&AJn-*m;2p96 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index a0fbdf7..89feef3 100644 --- a/pom.xml +++ b/pom.xml @@ -7,16 +7,24 @@ com.github.dimiro1 mynes 0.2.0 - jar + pom mynes mynes + + + mynes-core + mynes-headless + mynes-desktop + + UTF-8 25 25 - com.github.dimiro1.mynes.ui.Main 2026-08-14T00:00:00Z - - + 3.7.2 + 11.4.3 + 26.1.0 + 2.22.1 + 6.1.3 + - - - com.formdev - flatlaf - 3.7.2 - - - com.miglayout - miglayout-swing - 11.4.3 - - + would be carrying a dependency it can never call. + + Provided scope does not travel between modules either, which is the other reason it is + here rather than in one of them: each module compiles against its own copy. --> org.jetbrains annotations - 26.1.0 + ${annotations.version} provided - - - - - com.fasterxml.jackson.core - jackson-databind - 2.22.1 - test - - org.junit.jupiter junit-jupiter-api - 6.1.3 + ${junit.version} test org.junit.jupiter junit-jupiter-params - 6.1.3 + ${junit.version} test org.junit.jupiter junit-jupiter-engine - 6.1.3 + ${junit.version} test + + + + com.formdev + flatlaf + ${flatlaf.version} + + + com.miglayout + miglayout-swing + ${miglayout.version} + + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.15.0 + + 25 + 25 + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.6 + + + + org.apache.maven.plugins + maven-jar-plugin + 3.5.1 + + + + org.codehaus.mojo + exec-maven-plugin + 3.5.1 + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.8.0 + + + + - org.apache.maven.plugins maven-compiler-plugin - 3.15.0 - - 25 - 25 - - - org.apache.maven.plugins maven-surefire-plugin - 3.5.6 - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.5.1 - - - - ${main.class} - - - - - - - - org.codehaus.mojo - exec-maven-plugin - 3.5.1 - - java - - - --enable-native-access=ALL-UNNAMED - -classpath - - ${main.class} - - - - - headless - - - -classpath %classpath ${main.class} --headless ${mynes.args} - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.8.0 - - - false - false - - - - make-assembly - package - - single - - - - jar-with-dependencies - - - - mynes - - - - ${main.class} - - - - - ALL-UNNAMED - - - - - - - - make-distribution - package - - single - - - - src/assembly/dist.xml - - - - diff --git a/scripts/download-6502-tests.sh b/scripts/download-6502-tests.sh index 07d2130..9a42c6a 100755 --- a/scripts/download-6502-tests.sh +++ b/scripts/download-6502-tests.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash # -# Downloads the full Tom Harte SingleStepTests "nes6502/v1" set into testdata/. +# Downloads the full Tom Harte SingleStepTests "nes6502/v1" set into +# mynes-core/testdata/. # # Source: https://github.com/SingleStepTests/65x02 (the canonical home of the # 65x02 family sets; also mirrored under SingleStepTests/ProcessorTests). @@ -9,9 +10,16 @@ # fetches it on demand into a gitignored directory. # # The set is 256 files (one per opcode), 10,000 cases each, ~1.4 GB total. A -# 500-case-per-opcode subset lives in src/test/resources/harte/nes6502 and is -# what plain `mvn test` uses; the test harness automatically prefers the full -# set when this script has populated testdata/nes6502/v1. +# 500-case-per-opcode subset lives in mynes-core/src/test/resources/harte/nes6502 +# and is what plain `mvn test` uses; the test harness automatically prefers the +# full set when this script has populated mynes-core/testdata/nes6502/v1. +# +# Inside the module rather than at the root of the checkout, because that is +# where HarteCaseLoader looks: it resolves a relative path, and Surefire runs +# with the working directory set to the module being tested. Getting this wrong +# is quiet rather than loud -- the loader simply falls back to the committed +# subset -- so it is worth knowing that this path and that one are the same +# decision written down twice. # # Idempotent: re-running is a no-op once the pinned commit is already unpacked. # @@ -25,9 +33,9 @@ PINNED_SHA="2f6980a2d95757486c7bee24355c360e40e2a224" EXPECTED_FILES=256 ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -DEST_DIR="$ROOT_DIR/testdata/nes6502/v1" -MARKER="$ROOT_DIR/testdata/nes6502/.commit" -WORK_DIR="$ROOT_DIR/testdata/.65x02-checkout" +DEST_DIR="$ROOT_DIR/mynes-core/testdata/nes6502/v1" +MARKER="$ROOT_DIR/mynes-core/testdata/nes6502/.commit" +WORK_DIR="$ROOT_DIR/mynes-core/testdata/.65x02-checkout" count_json() { if [ -d "$DEST_DIR" ]; then diff --git a/scripts/download-palettes.sh b/scripts/download-palettes.sh index 1358d1c..c322dce 100755 --- a/scripts/download-palettes.sh +++ b/scripts/download-palettes.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Fetches the palettes MyNES draws with into src/main/resources/palettes. +# Fetches the palettes MyNES draws with into mynes-core/src/main/resources/palettes. # # Source: https://www.firebrandx.com/nespalette.html (the standalone zips) and # https://www.firebrandx.com/downloads/Novemeber-2017-Palettes.zip (the bundle -- @@ -35,7 +35,7 @@ PAL_BYTES=1536 PAL_SHA1="3955a5f2685e94bda1a539e39fd98d468fe0e56e" ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -DEST_DIR="$ROOT_DIR/src/main/resources/palettes" +DEST_DIR="$ROOT_DIR/mynes-core/src/main/resources/palettes" WORK_DIR="$(mktemp -d)" trap 'rm -rf "$WORK_DIR"' EXIT diff --git a/scripts/sample-6502-tests.sh b/scripts/sample-6502-tests.sh index 2c37b60..a7812fb 100755 --- a/scripts/sample-6502-tests.sh +++ b/scripts/sample-6502-tests.sh @@ -2,9 +2,10 @@ # # Builds the committed subset of the Tom Harte nes6502/v1 test set. # -# Takes the first N cases of each of the 256 opcode files from the full set in testdata/ -# (see download-6502-tests.sh) and writes them gzipped into src/test/resources, so that a -# plain `mvn test` still exercises every opcode without a network fetch. The harness prefers +# Takes the first N cases of each of the 256 opcode files from the full set in +# mynes-core/testdata/ (see download-6502-tests.sh) and writes them gzipped into that module's +# test resources, so that a plain `mvn test` still exercises every opcode without a network +# fetch. The harness prefers # the full set whenever it is present, so this only has to be re-run when bumping the pinned # upstream commit or the sample size. # @@ -13,9 +14,9 @@ set -euo pipefail SAMPLE_SIZE="${SAMPLE_SIZE:-500}" ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -SRC_DIR="$ROOT_DIR/testdata/nes6502/v1" -DEST_DIR="$ROOT_DIR/src/test/resources/harte/nes6502" -MARKER="$ROOT_DIR/testdata/nes6502/.commit" +SRC_DIR="$ROOT_DIR/mynes-core/testdata/nes6502/v1" +DEST_DIR="$ROOT_DIR/mynes-core/src/test/resources/harte/nes6502" +MARKER="$ROOT_DIR/mynes-core/testdata/nes6502/.commit" if [ ! -d "$SRC_DIR" ]; then echo "$SRC_DIR is missing -- run scripts/download-6502-tests.sh first." >&2 diff --git a/scripts/smoke-distribution.sh b/scripts/smoke-distribution.sh index 1f414ef..8b7da0e 100755 --- a/scripts/smoke-distribution.sh +++ b/scripts/smoke-distribution.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Unpacks target/mynes-*.zip somewhere temporary and runs the emulator out of it, the way somebody +# Unpacks mynes-desktop/target/mynes-*.zip somewhere temporary and runs the emulator out of it, the way somebody # who downloaded it from the releases page would. Run it after `mvn -B package -DskipTests`. Both # workflows call this rather than spelling it out, so there is one copy of the check to keep right. # @@ -16,7 +16,7 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # Committed, so this needs no network and no ROM of anybody's own. nestest draws its menu unprompted, # which most cartridges do not: Super Mario Bros. and Tetris would sit on a title screen here and # pass just as well without ever having run a frame of anything. -ROM="$ROOT_DIR/src/test/resources/nestest/nestest.nes" +ROM="$ROOT_DIR/mynes-core/src/test/resources/nestest/nestest.nes" FRAMES=60 # Palettes.NESDEV is compiled in; the other eleven are read out of /palettes inside the jar. @@ -27,11 +27,11 @@ WORK_DIR="$(mktemp -d)" trap 'rm -rf "$WORK_DIR"' EXIT shopt -s nullglob -zips=("$ROOT_DIR"/target/mynes-*.zip) +zips=("$ROOT_DIR"/mynes-desktop/target/mynes-*.zip) shopt -u nullglob if [ ${#zips[@]} -ne 1 ]; then - echo "expected one target/mynes-*.zip and found ${#zips[@]}; run mvn package first." >&2 + echo "expected one mynes-desktop/target/mynes-*.zip and found ${#zips[@]}; run mvn package first." >&2 exit 1 fi From 44111b406ba4b2a45277c88e96e847787496658e Mon Sep 17 00:00:00 2001 From: dimiro1 Date: Mon, 17 Aug 2026 23:32:32 +0200 Subject: [PATCH 3/3] Keep `mvn exec:exec` working across the modules, and point Conductor at the ROM The exec configuration lives in mynes-desktop now, and a goal invoked from the command line is invoked on every project in the reactor -- so the short command died on the parent before it reached the module that could serve it. Naming the module on the command line does not help: -am pulls the parent back in, and without -am a fresh clone has nothing to resolve mynes-core against. So the other three declare the plugin skipped instead, and both commands stay as short as they were. Skipped and given an executable, which looks redundant and is not: `executable` is a required parameter, so Maven refuses the goal while injecting it, before the mojo has run far enough to notice it was told to skip. The execution id has to be spelled out too -- `exec:exec@headless` on a project with no execution of that name runs with an empty configuration rather than with the plugin's. The forked process also gets an explicit working directory, the checkout rather than the module, so that a --rom path means what it looks like and the report still lands in target/headless beside the other target directories. .conductor/settings.toml keeps both commands unchanged and follows nestest to mynes-core/src/test/resources. Co-Authored-By: Claude Opus 5 (1M context) --- .conductor/settings.toml | 2 +- CLAUDE.md | 10 ++++----- README.md | 5 ++--- mynes-desktop/pom.xml | 26 ++++++++++++++++++----- pom.xml | 45 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 74 insertions(+), 14 deletions(-) diff --git a/.conductor/settings.toml b/.conductor/settings.toml index 99768f4..55275dd 100644 --- a/.conductor/settings.toml +++ b/.conductor/settings.toml @@ -15,6 +15,6 @@ icon = "gamepad-2" # anything else, run the headless mode by hand; see CLAUDE.md. What it is worth is proving the # emulator works where the button above is greyed out. [scripts.run.headless] -command = "mvn -q compile exec:exec@headless -Dmynes.args=\"--rom src/test/resources/nestest/nestest.nes --frames 300 --screenshot last --expect-not-blank\"" +command = "mvn -q compile exec:exec@headless -Dmynes.args=\"--rom mynes-core/src/test/resources/nestest/nestest.nes --frames 300 --screenshot last --expect-not-blank\"" available_in = [ "local", "cloud" ] icon = "terminal" diff --git a/CLAUDE.md b/CLAUDE.md index 479d128..ee9dd96 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -24,11 +24,11 @@ still one file and still the whole emulator: the fat jar flattens all three modu dependencies into it. `java -jar $JAR --headless --help` lists every option. Maven can run it too -- -`mvn -q -pl mynes-desktop -am compile exec:exec@headless -Dmynes.args="--rom ROM.nes --frames 300"` --- but it costs a couple of seconds a run against the jar's third of one, so build the jar for -anything iterative. `mvn -q -pl mynes-desktop -am compile exec:exec` opens the window, which a cloud -workspace has nowhere to put. **The `-pl` is not optional**: without it Maven tries the goal in all -three modules and the two with no main class fail first. +`mvn -q compile exec:exec@headless -Dmynes.args="--rom ROM.nes --frames 300"` -- but it costs a +couple of seconds a run against the jar's third of one, so build the jar for anything iterative. +`mvn -q compile exec:exec` opens the window, which a cloud workspace has nowhere to put. Neither +needs a `-pl`: the modules that have no main class declare the goal skipped, and it runs from the +root of the checkout, so a `--rom` path means what it looks like. ### What you get, and where diff --git a/README.md b/README.md index 8c51c60..a4b0cbb 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ You need Java 25 and Maven. Nothing else. ```sh git clone https://github.com/dimiro1/mynes.git cd mynes -mvn -q -pl mynes-desktop -am compile exec:exec +mvn -q compile exec:exec ``` That opens the window. Or build a jar once and run that: @@ -237,8 +237,7 @@ and a WAV into `target/headless`. Maven can run it too, and is shorter to type i once: ```sh -mvn -q -pl mynes-desktop -am compile exec:exec@headless \ - -Dmynes.args="--rom smb.nes --frames 900 --screenshot last" +mvn -q compile exec:exec@headless -Dmynes.args="--rom smb.nes --frames 900 --screenshot last" ``` The jar is worth building for anything you run more than a few times: Maven takes a couple of diff --git a/mynes-desktop/pom.xml b/mynes-desktop/pom.xml index 7597604..35ababa 100644 --- a/mynes-desktop/pom.xml +++ b/mynes-desktop/pom.xml @@ -67,12 +67,12 @@ + false + java + + + ${project.parent.basedir} + @@ -102,6 +113,11 @@ headless + + false + diff --git a/pom.xml b/pom.xml index 89feef3..6ff8567 100644 --- a/pom.xml +++ b/pom.xml @@ -127,10 +127,20 @@ 3.5.1 + org.codehaus.mojo exec-maven-plugin 3.5.1 + + true + @@ -150,6 +160,41 @@ org.apache.maven.plugins maven-surefire-plugin + + + + org.codehaus.mojo + exec-maven-plugin + + + + true + java + + + + + headless + + true + java + + + +