From 13f49fa306f672c6dbeef5a32dcf58c4b05acd3a Mon Sep 17 00:00:00 2001 From: org Date: Wed, 6 Sep 2023 23:10:29 +0300 Subject: [PATCH 1/4] minor --- Breaknes/Breaknes/Breaknes.sln | 6 +- Breaknes/BreaknesSDL/BreaknesSDL.sln | 6 +- Breaknes/BreaknesSDL/BreaknesSDL.vcxproj | 6 +- Breaknes/BreaksCore/Readme.md | 12 +- .../Scripts/VS2022/BreaksCore.vcxproj | 14 +-- .../Scripts/VS2022/BreaksCoreStatic.vcxproj | 14 +-- Breaknes/BreaksCore/pch.h | 10 +- CMakeLists.txt | 114 +++++++++--------- {BreaksAPU => Chips}/APUSim/Readme.md | 0 .../APUSim}/Scripts/.gitignore | 0 .../APUSim/Scripts/VS2022/APUSim.vcxproj | 0 .../Scripts/VS2022/APUSim.vcxproj.filters | 0 {BreaksAPU => Chips}/APUSim/apu.cpp | 0 {BreaksAPU => Chips}/APUSim/apu.h | 0 {BreaksAPU => Chips}/APUSim/apu_layers.png | Bin {BreaksAPU => Chips}/APUSim/clkgen.cpp | 0 {BreaksAPU => Chips}/APUSim/clkgen.h | 0 {BreaksAPU => Chips}/APUSim/common.cpp | 0 {BreaksAPU => Chips}/APUSim/common.h | 0 {BreaksAPU => Chips}/APUSim/core.cpp | 0 {BreaksAPU => Chips}/APUSim/core.h | 0 {BreaksAPU => Chips}/APUSim/dac.cpp | 0 {BreaksAPU => Chips}/APUSim/dac.h | 0 {BreaksAPU => Chips}/APUSim/debug.cpp | 0 {BreaksAPU => Chips}/APUSim/debug.h | 0 {BreaksAPU => Chips}/APUSim/dma.cpp | 0 {BreaksAPU => Chips}/APUSim/dma.h | 0 {BreaksAPU => Chips}/APUSim/dpcm.cpp | 0 {BreaksAPU => Chips}/APUSim/dpcm.h | 0 {BreaksAPU => Chips}/APUSim/env.cpp | 0 {BreaksAPU => Chips}/APUSim/env.h | 0 {BreaksAPU => Chips}/APUSim/length.cpp | 0 {BreaksAPU => Chips}/APUSim/length.h | 0 {BreaksAPU => Chips}/APUSim/noise.cpp | 0 {BreaksAPU => Chips}/APUSim/noise.h | 0 {BreaksAPU => Chips}/APUSim/pads.cpp | 0 {BreaksAPU => Chips}/APUSim/pads.h | 0 {BreaksAPU => Chips}/APUSim/pch.cpp | 0 {BreaksAPU => Chips}/APUSim/pch.h | 2 +- {BreaksAPU => Chips}/APUSim/regs.cpp | 0 {BreaksAPU => Chips}/APUSim/regs.h | 0 {BreaksAPU => Chips}/APUSim/square.cpp | 0 {BreaksAPU => Chips}/APUSim/square.h | 0 {BreaksAPU => Chips}/APUSim/triangle.cpp | 0 {BreaksAPU => Chips}/APUSim/triangle.h | 0 {BreaksAPU => Chips}/FastAPU/FastAPU.vcxproj | 0 .../FastAPU/FastAPU.vcxproj.filters | 0 {BreaksAPU => Chips}/FastAPU/Readme.md | 0 {BreaksAPU => Chips}/FastAPU/apu.cpp | 0 {BreaksAPU => Chips}/FastAPU/apu.h | 0 {BreaksAPU => Chips}/FastAPU/clkgen.cpp | 0 {BreaksAPU => Chips}/FastAPU/clkgen.h | 0 {BreaksAPU => Chips}/FastAPU/core.cpp | 0 {BreaksAPU => Chips}/FastAPU/core.h | 0 {BreaksAPU => Chips}/FastAPU/dac.cpp | 0 {BreaksAPU => Chips}/FastAPU/dac.h | 0 {BreaksAPU => Chips}/FastAPU/dma.cpp | 0 {BreaksAPU => Chips}/FastAPU/dma.h | 0 {BreaksAPU => Chips}/FastAPU/dpcm.cpp | 0 {BreaksAPU => Chips}/FastAPU/dpcm.h | 0 {BreaksAPU => Chips}/FastAPU/env.cpp | 0 {BreaksAPU => Chips}/FastAPU/env.h | 0 {BreaksAPU => Chips}/FastAPU/length.cpp | 0 {BreaksAPU => Chips}/FastAPU/length.h | 0 {BreaksAPU => Chips}/FastAPU/noise.cpp | 0 {BreaksAPU => Chips}/FastAPU/noise.h | 0 {BreaksAPU => Chips}/FastAPU/pads.cpp | 0 {BreaksAPU => Chips}/FastAPU/pads.h | 0 .../Breakasm => Chips/FastAPU}/pch.cpp | 0 {BreaksAPU => Chips}/FastAPU/pch.h | 2 +- {BreaksAPU => Chips}/FastAPU/regs.cpp | 0 {BreaksAPU => Chips}/FastAPU/regs.h | 0 {BreaksAPU => Chips}/FastAPU/square.cpp | 0 {BreaksAPU => Chips}/FastAPU/square.h | 0 {BreaksAPU => Chips}/FastAPU/triangle.cpp | 0 {BreaksAPU => Chips}/FastAPU/triangle.h | 0 {Breaks6502 => Chips}/M6502Core/Readme.md | 0 .../M6502Core}/Scripts/.gitignore | 0 .../Scripts/VS2022/M6502Core.vcxproj | 0 .../Scripts/VS2022/M6502Core.vcxproj.filters | 0 .../M6502Core/address_bus.cpp | 0 {Breaks6502 => Chips}/M6502Core/address_bus.h | 0 {Breaks6502 => Chips}/M6502Core/alu.cpp | 0 {Breaks6502 => Chips}/M6502Core/alu.h | 0 .../M6502Core/alu_control.cpp | 0 {Breaks6502 => Chips}/M6502Core/alu_control.h | 0 .../M6502Core/branch_logic.cpp | 0 .../M6502Core/branch_logic.h | 0 .../M6502Core/bus_control.cpp | 0 {Breaks6502 => Chips}/M6502Core/bus_control.h | 0 {Breaks6502 => Chips}/M6502Core/core.cpp | 0 {Breaks6502 => Chips}/M6502Core/core.h | 0 {Breaks6502 => Chips}/M6502Core/data_bus.cpp | 0 {Breaks6502 => Chips}/M6502Core/data_bus.h | 0 {Breaks6502 => Chips}/M6502Core/debug.cpp | 0 {Breaks6502 => Chips}/M6502Core/debug.h | 0 {Breaks6502 => Chips}/M6502Core/decoder.cpp | 0 {Breaks6502 => Chips}/M6502Core/decoder.h | 0 {Breaks6502 => Chips}/M6502Core/dispatch.cpp | 0 {Breaks6502 => Chips}/M6502Core/dispatch.h | 0 .../M6502Core/extra_counter.cpp | 0 .../M6502Core/extra_counter.h | 0 {Breaks6502 => Chips}/M6502Core/flags.cpp | 0 {Breaks6502 => Chips}/M6502Core/flags.h | 0 .../M6502Core/flags_control.cpp | 0 .../M6502Core/flags_control.h | 0 .../M6502Core/interrupts.cpp | 0 {Breaks6502 => Chips}/M6502Core/interrupts.h | 0 {Breaks6502 => Chips}/M6502Core/ir.cpp | 0 {Breaks6502 => Chips}/M6502Core/ir.h | 0 {Breaks6502 => Chips}/M6502Core/pc.cpp | 0 {Breaks6502 => Chips}/M6502Core/pc.h | 0 .../M6502Core/pc_control.cpp | 0 {Breaks6502 => Chips}/M6502Core/pc_control.h | 0 {Breaks6502 => Chips}/M6502Core/pch.cpp | 0 {Breaks6502 => Chips}/M6502Core/pch.h | 0 {Breaks6502 => Chips}/M6502Core/predecode.cpp | 0 {Breaks6502 => Chips}/M6502Core/predecode.h | 0 .../M6502Core/random_logic.cpp | 0 .../M6502Core/random_logic.h | 0 {Breaks6502 => Chips}/M6502Core/regs.cpp | 0 {Breaks6502 => Chips}/M6502Core/regs.h | 0 .../M6502Core/regs_control.cpp | 0 .../M6502Core/regs_control.h | 0 {Breaks6502 => Chips}/M6502Core/t1_ff.jpg | Bin {BreaksPPU => Chips}/PPUSim/Readme.md | 0 .../PPUSim/Scripts/.gitignore | 0 .../PPUSim/Scripts/VS2022/PPUSim.vcxproj | 0 .../Scripts/VS2022/PPUSim.vcxproj.filters | 0 {BreaksPPU => Chips}/PPUSim/bgcol.cpp | 0 {BreaksPPU => Chips}/PPUSim/bgcol.h | 0 {BreaksPPU => Chips}/PPUSim/cram.cpp | 0 {BreaksPPU => Chips}/PPUSim/cram.h | 0 {BreaksPPU => Chips}/PPUSim/dataread.cpp | 0 {BreaksPPU => Chips}/PPUSim/dataread.h | 0 {BreaksPPU => Chips}/PPUSim/debug.cpp | 0 {BreaksPPU => Chips}/PPUSim/debug.h | 0 {BreaksPPU => Chips}/PPUSim/fifo.cpp | 0 {BreaksPPU => Chips}/PPUSim/fifo.h | 0 {BreaksPPU => Chips}/PPUSim/fsm.cpp | 0 {BreaksPPU => Chips}/PPUSim/fsm.h | 0 {BreaksPPU => Chips}/PPUSim/hv.cpp | 0 {BreaksPPU => Chips}/PPUSim/hv.h | 0 {BreaksPPU => Chips}/PPUSim/hv_decoder.cpp | 0 {BreaksPPU => Chips}/PPUSim/hv_decoder.h | 0 {BreaksPPU => Chips}/PPUSim/mux.cpp | 0 {BreaksPPU => Chips}/PPUSim/mux.h | 0 {BreaksPPU => Chips}/PPUSim/oam.cpp | 0 {BreaksPPU => Chips}/PPUSim/oam.h | 0 {BreaksPPU => Chips}/PPUSim/par.cpp | 0 {BreaksPPU => Chips}/PPUSim/par.h | 0 {BreaksPPU => Chips}/PPUSim/patgen.cpp | 0 {BreaksPPU => Chips}/PPUSim/patgen.h | 0 {BreaksPPU => Chips}/PPUSim/pch.cpp | 0 {BreaksPPU => Chips}/PPUSim/pch.h | 0 {BreaksPPU => Chips}/PPUSim/pclk.cpp | 0 {BreaksPPU => Chips}/PPUSim/ppu.cpp | 0 {BreaksPPU => Chips}/PPUSim/ppu.h | 0 {BreaksPPU => Chips}/PPUSim/ppu_layers.png | Bin {BreaksPPU => Chips}/PPUSim/regs.cpp | 0 {BreaksPPU => Chips}/PPUSim/regs.h | 0 {BreaksPPU => Chips}/PPUSim/scroll_regs.cpp | 0 {BreaksPPU => Chips}/PPUSim/scroll_regs.h | 0 {BreaksPPU => Chips}/PPUSim/sprite_eval.cpp | 0 {BreaksPPU => Chips}/PPUSim/sprite_eval.h | 0 {BreaksPPU => Chips}/PPUSim/video_out.cpp | 0 {BreaksPPU => Chips}/PPUSim/video_out.h | 0 {BreaksPPU => Chips}/PPUSim/vram_ctrl.cpp | 0 {BreaksPPU => Chips}/PPUSim/vram_ctrl.h | 0 Chips/Readme.md | 3 + Common/BaseBoardLib/Readme.md | 26 ++++ Common/BaseBoardLib/pch.h | 2 +- IO/Readme.md | 16 +-- IO/ReadmeRus.md | 16 +-- Mappers/pch.h | 4 +- Readme.md | 4 +- {BreaksAPU => Tools}/APUPlayer/.gitignore | 0 .../APUPlayer/APUPlayer.csproj | 0 .../APUPlayer/APUPlayer.csproj.user | 0 {BreaksAPU => Tools}/APUPlayer/APUPlayer.sln | 8 +- {BreaksAPU => Tools}/APUPlayer/App.config | 0 .../APUPlayer/Build/.gitignore | 0 .../APUPlayer/Build/Readme.md | 0 .../APUPlayer/FormAbout.Designer.cs | 0 {BreaksAPU => Tools}/APUPlayer/FormAbout.cs | 0 {BreaksAPU => Tools}/APUPlayer/FormAbout.resx | 0 .../APUPlayer/FormMain.Designer.cs | 0 {BreaksAPU => Tools}/APUPlayer/FormMain.cs | 0 {BreaksAPU => Tools}/APUPlayer/FormMain.resx | 0 .../APUPlayer/FormMainWorker.cs | 0 .../APUPlayer/FormSettings.Designer.cs | 0 .../APUPlayer/FormSettings.cs | 0 .../APUPlayer/FormSettings.resx | 0 .../APUPlayer/FormSnatch.Designer.cs | 0 {BreaksAPU => Tools}/APUPlayer/FormSnatch.cs | 0 .../APUPlayer/FormSnatch.resx | 0 {BreaksAPU => Tools}/APUPlayer/Program.cs | 0 .../Properties/Resources.Designer.cs | 0 .../APUPlayer/Properties/Resources.resx | 0 .../APUPlayer/Properties/Settings.Designer.cs | 0 .../APUPlayer/Properties/Settings.settings | 0 .../APUPlayer/Properties/launchSettings.json | 0 {BreaksAPU => Tools}/APUPlayer/Readme.md | 0 .../APUPlayer/WavesSupport.cs | 0 .../APUPlayer/button_get_debug.png | Bin {BreaksAPU => Tools}/APUPlayer/waves.png | Bin {Demos => Tools}/ApuPumpkin/.gitignore | 0 {Demos => Tools}/ApuPumpkin/ApuPumpkin.cpp | 0 {Demos => Tools}/ApuPumpkin/ApuPumpkin.sln | 6 +- .../ApuPumpkin/ApuPumpkin.vcxproj | 6 +- .../ApuPumpkin/ApuPumpkin.vcxproj.filters | 0 {Demos => Tools}/ApuPumpkin/Readme.md | 0 .../FastAPU => Tools/ApuPumpkin}/pch.cpp | 0 {Demos => Tools}/ApuPumpkin/pch.h | 8 +- {Breaks6502 => Tools}/Breakasm/.gitignore | 0 {Breaks6502 => Tools}/Breakasm/ASM.cpp | 0 {Breaks6502 => Tools}/Breakasm/ASM.h | 0 {Breaks6502 => Tools}/Breakasm/ASMOPS.cpp | 0 {Breaks6502 => Tools}/Breakasm/ASMOPS.h | 0 {Breaks6502 => Tools}/Breakasm/CMakeLists.txt | 0 {Breaks6502 => Tools}/Breakasm/Readme.md | 0 {Breaks6502 => Tools}/Breakasm/ReadmeRus.md | 0 .../Breakasm/Scripts/VS2022/Breakasm.sln | 0 .../Breakasm/Scripts/VS2022/Breakasm.vcxproj | 0 .../Scripts/VS2022/Breakasm.vcxproj.filters | 0 {Breaks6502 => Tools}/Breakasm/Test.asm | 0 {Breaks6502 => Tools}/Breakasm/TestAll.asm | 0 {Breaks6502 => Tools}/Breakasm/main.cpp | 0 {Demos/ApuPumpkin => Tools/Breakasm}/pch.cpp | 0 {Breaks6502 => Tools}/Breakasm/pch.h | 0 {Breaks6502 => Tools}/BreaksDebug/.gitignore | 0 {Breaks6502 => Tools}/BreaksDebug/App.config | 0 .../BreaksDebug/BreaksDebug.csproj | 0 .../BreaksDebug/BreaksDebug.csproj.user | 0 .../BreaksDebug/BreaksDebug.sln | 6 +- .../BreaksDebug/Build/Test.asm | 0 .../BreaksDebug/Build/Test.json | 0 .../BreaksDebug/Build/TestIllegal.asm | 0 .../BreaksDebug/Build/TestRora.asm | 0 .../BreaksDebug/Build/Visual6502.asm | 0 .../BreaksDebug/DumpMarkdown.cs | 0 .../BreaksDebug/FormAbout.Designer.cs | 0 .../BreaksDebug/FormAbout.cs | 0 .../BreaksDebug/FormAbout.resx | 0 .../BreaksDebug/FormMain.Designer.cs | 0 {Breaks6502 => Tools}/BreaksDebug/FormMain.cs | 0 .../BreaksDebug/FormMain.resx | 0 {Breaks6502 => Tools}/BreaksDebug/Program.cs | 0 .../BreaksDebug/Properties/AssemblyInfo.cs | 0 .../Properties/Resources.Designer.cs | 0 .../BreaksDebug/Properties/Resources.resx | 0 .../Properties/Settings.Designer.cs | 0 .../BreaksDebug/Properties/Settings.settings | 0 .../Properties/launchSettings.json | 0 .../BreaksDebug/QuickDisasm.cs | 0 {Breaks6502 => Tools}/BreaksDebug/Readme.md | 2 +- {Breaks6502 => Tools}/BreaksDebug/UnitTest.cs | 0 .../BreaksDebug/WavesSupport.cs | 0 {Breaks6502 => Tools}/BreaksDebug/concept.jpg | Bin .../hand-holding-hammer-icon-png.ico | Bin {Breaks6502 => Tools}/BreaksDebug/step.png | Bin {Demos => Tools}/DumpRegdump/.gitignore | 0 {Demos => Tools}/DumpRegdump/DumpRegdump.py | 0 {Demos => Tools}/FurryPlotDemo/.gitignore | 0 .../FurryPlotDemo/FormMain.Designer.cs | 0 {Demos => Tools}/FurryPlotDemo/FormMain.cs | 0 {Demos => Tools}/FurryPlotDemo/FormMain.resx | 0 .../FurryPlotDemo/FurryPlotControl.cs | 0 .../FurryPlotDemo/FurryPlotDemo.csproj | 0 .../FurryPlotDemo/FurryPlotDemo.sln | 0 {Demos => Tools}/FurryPlotDemo/Program.cs | 0 {Demos => Tools}/InfernoColormap/.gitignore | 0 .../InfernoColormap/FormMain.Designer.cs | 0 {Demos => Tools}/InfernoColormap/FormMain.cs | 0 .../InfernoColormap/FormMain.resx | 0 .../InfernoColormap/InfernoColormap.cs | 0 .../InfernoColormap/InfernoColormap.csproj | 0 .../InfernoColormap/InfernoColormap.sln | 0 {Demos => Tools}/InfernoColormap/Program.cs | 0 {Demos => Tools}/InfernoColormap/Readme.md | 2 +- {BreaksPPU => Tools}/PPUPlayer/.gitignore | 0 .../PPUPlayer/Build/.gitignore | 0 .../PPUPlayer/Build/Readme.md | 0 {BreaksPPU => Tools}/PPUPlayer/DummyNrom.cs | 0 .../PPUPlayer/DumpsProcessing.cs | 0 .../PPUPlayer/FormAbout.Designer.cs | 0 {BreaksPPU => Tools}/PPUPlayer/FormAbout.cs | 0 {BreaksPPU => Tools}/PPUPlayer/FormAbout.resx | 0 .../PPUPlayer/FormColorSpace.Designer.cs | 0 .../PPUPlayer/FormColorSpace.cs | 0 .../PPUPlayer/FormColorSpace.resx | 0 .../PPUPlayer/FormComponentViewer.Designer.cs | 0 .../PPUPlayer/FormComponentViewer.cs | 0 .../PPUPlayer/FormComponentViewer.resx | 0 .../PPUPlayer/FormCompositeViewer.Designer.cs | 0 .../PPUPlayer/FormCompositeViewer.cs | 0 .../PPUPlayer/FormCompositeViewer.resx | 0 .../PPUPlayer/FormMain.Designer.cs | 0 {BreaksPPU => Tools}/PPUPlayer/FormMain.cs | 0 {BreaksPPU => Tools}/PPUPlayer/FormMain.resx | 0 .../PPUPlayer/FormMainWorker.cs | 0 .../PPUPlayer/FormRawViewer.Designer.cs | 0 .../PPUPlayer/FormRawViewer.cs | 0 .../PPUPlayer/FormRawViewer.resx | 0 .../PPUPlayer/FormSettings.Designer.cs | 0 .../PPUPlayer/FormSettings.cs | 0 .../PPUPlayer/FormSettings.resx | 0 .../PPUPlayer/FormSnatch.Designer.cs | 0 {BreaksPPU => Tools}/PPUPlayer/FormSnatch.cs | 0 .../PPUPlayer/FormSnatch.resx | 0 .../PPUPlayer/PPUPlayer.csproj | 0 .../PPUPlayer/PPUPlayer.csproj.user | 0 {BreaksPPU => Tools}/PPUPlayer/PPUPlayer.sln | 6 +- {BreaksPPU => Tools}/PPUPlayer/PPU_Player.png | Bin .../PPUPlayer/PPU_Player_Diag_Eng.png | Bin {BreaksPPU => Tools}/PPUPlayer/Program.cs | 0 .../Properties/Resources.Designer.cs | 0 .../PPUPlayer/Properties/Resources.resx | 0 .../PPUPlayer/Properties/Settings.Designer.cs | 0 .../PPUPlayer/Properties/Settings.settings | 0 .../PPUPlayer/Properties/launchSettings.json | 0 {BreaksPPU => Tools}/PPUPlayer/Readme.md | 0 .../PPUPlayer/VideoProcessing.cs | 0 .../PPUPlayer/WavesSupport.cs | 0 .../PPUPlayer/button_get_debug.png | Bin .../PPUPlayer/button_pause.png | Bin .../PPUPlayer/button_play.png | Bin .../PPUPlayer/button_stop.png | Bin .../PPUPlayer/ppu_player_logo.png | Bin {Demos => Tools}/PpuPumpkin/.gitignore | 0 {Demos => Tools}/PpuPumpkin/PpuPumpkin.cpp | 0 {Demos => Tools}/PpuPumpkin/PpuPumpkin.sln | 2 +- .../PpuPumpkin/PpuPumpkin.vcxproj | 2 +- .../PpuPumpkin/PpuPumpkin.vcxproj.filters | 0 {Demos => Tools}/PpuPumpkin/Readme.md | 0 {Demos => Tools}/PpuPumpkin/pch.cpp | 0 {Demos => Tools}/PpuPumpkin/pch.h | 2 +- .../PpuPumpkin/ppusim_profiler.png | Bin {Demos => Tools}/SignalPlotDemo/Readme.md | 2 +- .../SignalPlotDemo/SignalPlotDemo.sln | 0 .../SignalPlotDemo/SignalPlotDemo/.gitignore | 0 .../SignalPlotDemo/FormMain.Designer.cs | 0 .../SignalPlotDemo/SignalPlotDemo/FormMain.cs | 0 .../SignalPlotDemo/FormMain.resx | 0 .../SignalPlotDemo/SignalPlotDemo/Program.cs | 0 .../SignalPlotDemo/SignalPlotControl.cs | 0 .../SignalPlotDemo/SignalPlotDemo.csproj | 0 {Demos => Tools}/SlooowPlaaayer/.gitignore | 0 .../SlooowPlaaayer/FormAbout.Designer.cs | 0 {Demos => Tools}/SlooowPlaaayer/FormAbout.cs | 0 .../SlooowPlaaayer/FormAbout.resx | 0 .../SlooowPlaaayer/FormMain.Designer.cs | 0 {Demos => Tools}/SlooowPlaaayer/FormMain.cs | 0 {Demos => Tools}/SlooowPlaaayer/FormMain.resx | 0 .../SlooowPlaaayer/FormSnatch.Designer.cs | 0 {Demos => Tools}/SlooowPlaaayer/FormSnatch.cs | 0 .../SlooowPlaaayer/FormSnatch.resx | 0 {Demos => Tools}/SlooowPlaaayer/Program.cs | 0 .../Properties/Resources.Designer.cs | 0 .../SlooowPlaaayer/Properties/Resources.resx | 0 {Demos => Tools}/SlooowPlaaayer/Readme.md | 2 +- .../SlooowPlaaayer/SlooowPlaaayer.csproj | 0 .../SlooowPlaaayer/SlooowPlaaayer.jpg | Bin .../SlooowPlaaayer/SlooowPlaaayer.sln | 0 {Demos => Tools}/SlooowPlaaayer/WavLoad.cs | 0 UnitTest/Readme.md | 2 +- UnitTest/UnitTest.sln | 6 +- UnitTest/UnitTest.vcxproj | 6 +- UnitTest/pch.h | 6 +- .../PPUPlayer => Wiki}/DumpVideoSignalEng.md | 16 +-- .../PPUPlayer => Wiki}/DumpVideoSignalRus.md | 16 +-- .../PPUPlayer/PPU_Player_Eng.pdf | Bin .../PPUPlayer/PPU_Player_Eng.pptx | Bin .../PPUPlayer/PPU_Player_Rus.pdf | Bin .../PPUPlayer/PPU_Player_Rus.pptx | Bin {UserManual => Wiki}/Runtime.md | 0 UserManual/Readme.md => Wiki/UserManual.md | 4 +- {UserManual => Wiki}/debug.graphml | 0 ...2-2ecd4e71-2599-4050-9ce0-815c0336ad27.png | Bin ...2-2ecd4e71-2599-4050-9ce0-815c0336ad27.psd | Bin .../imgstore/20_JSR_T1_PHI1.jpg | Bin Wiki/imgstore/40H368.jpg | Bin 0 -> 56859 bytes {UserManual => Wiki}/imgstore/APUPlayer.jpg | Bin {UserManual => Wiki}/imgstore/BogusBoard.jpg | Bin .../imgstore/InfernoColormap.png | Bin Wiki/imgstore/LS139.jpg | Bin 0 -> 51275 bytes Wiki/imgstore/LS373.jpg | Bin 0 -> 46890 bytes .../imgstore/PPUPlayer_All.png | Bin Wiki/imgstore/SRAM.jpg | Bin 0 -> 42830 bytes .../imgstore/SignalPlotDemo.png | Bin .../imgstore/SlooowPlaaayer.png | Bin {UserManual => Wiki}/imgstore/UnitTest.jpg | Bin {UserManual => Wiki}/imgstore/debug.jpg | Bin .../imgstore/dendy_controller.png | Bin .../imgstore/dump_video_001.png | Bin .../imgstore/dump_video_002.png | Bin .../imgstore/dump_video_003.png | Bin .../imgstore/dump_video_004.png | Bin .../imgstore/dump_video_005.png | Bin .../imgstore/dump_video_006.png | Bin .../imgstore/dump_video_007.png | Bin .../imgstore/dump_video_008.png | Bin .../imgstore/fami_logisim.jpg | Bin .../imgstore/famicom_controller1.png | Bin .../imgstore/famicom_controller2.png | Bin {UserManual => Wiki}/imgstore/main.jpg | Bin {UserManual => Wiki}/imgstore/mariwa.png | Bin {UserManual => Wiki}/imgstore/nes.png | Bin .../imgstore/nes_controller.png | Bin {UserManual => Wiki}/imgstore/progress.png | Bin {UserManual => Wiki}/imgstore/settings.jpg | Bin .../imgstore/slow_player_stable_diffusion.jpg | Bin .../imgstore/virt_dendy_controller.png | Bin .../imgstore/virt_famicom_controller1.png | Bin .../imgstore/virt_famicom_controller2.png | Bin .../imgstore/virt_nes_controller.png | Bin 416 files changed, 198 insertions(+), 169 deletions(-) rename {BreaksAPU => Chips}/APUSim/Readme.md (100%) rename {Breaks6502/M6502Core => Chips/APUSim}/Scripts/.gitignore (100%) rename {BreaksAPU => Chips}/APUSim/Scripts/VS2022/APUSim.vcxproj (100%) rename {BreaksAPU => Chips}/APUSim/Scripts/VS2022/APUSim.vcxproj.filters (100%) rename {BreaksAPU => Chips}/APUSim/apu.cpp (100%) rename {BreaksAPU => Chips}/APUSim/apu.h (100%) rename {BreaksAPU => Chips}/APUSim/apu_layers.png (100%) rename {BreaksAPU => Chips}/APUSim/clkgen.cpp (100%) rename {BreaksAPU => Chips}/APUSim/clkgen.h (100%) rename {BreaksAPU => Chips}/APUSim/common.cpp (100%) rename {BreaksAPU => Chips}/APUSim/common.h (100%) rename {BreaksAPU => Chips}/APUSim/core.cpp (100%) rename {BreaksAPU => Chips}/APUSim/core.h (100%) rename {BreaksAPU => Chips}/APUSim/dac.cpp (100%) rename {BreaksAPU => Chips}/APUSim/dac.h (100%) rename {BreaksAPU => Chips}/APUSim/debug.cpp (100%) rename {BreaksAPU => Chips}/APUSim/debug.h (100%) rename {BreaksAPU => Chips}/APUSim/dma.cpp (100%) rename {BreaksAPU => Chips}/APUSim/dma.h (100%) rename {BreaksAPU => Chips}/APUSim/dpcm.cpp (100%) rename {BreaksAPU => Chips}/APUSim/dpcm.h (100%) rename {BreaksAPU => Chips}/APUSim/env.cpp (100%) rename {BreaksAPU => Chips}/APUSim/env.h (100%) rename {BreaksAPU => Chips}/APUSim/length.cpp (100%) rename {BreaksAPU => Chips}/APUSim/length.h (100%) rename {BreaksAPU => Chips}/APUSim/noise.cpp (100%) rename {BreaksAPU => Chips}/APUSim/noise.h (100%) rename {BreaksAPU => Chips}/APUSim/pads.cpp (100%) rename {BreaksAPU => Chips}/APUSim/pads.h (100%) rename {BreaksAPU => Chips}/APUSim/pch.cpp (100%) rename {BreaksAPU => Chips}/APUSim/pch.h (75%) rename {BreaksAPU => Chips}/APUSim/regs.cpp (100%) rename {BreaksAPU => Chips}/APUSim/regs.h (100%) rename {BreaksAPU => Chips}/APUSim/square.cpp (100%) rename {BreaksAPU => Chips}/APUSim/square.h (100%) rename {BreaksAPU => Chips}/APUSim/triangle.cpp (100%) rename {BreaksAPU => Chips}/APUSim/triangle.h (100%) rename {BreaksAPU => Chips}/FastAPU/FastAPU.vcxproj (100%) rename {BreaksAPU => Chips}/FastAPU/FastAPU.vcxproj.filters (100%) rename {BreaksAPU => Chips}/FastAPU/Readme.md (100%) rename {BreaksAPU => Chips}/FastAPU/apu.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/apu.h (100%) rename {BreaksAPU => Chips}/FastAPU/clkgen.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/clkgen.h (100%) rename {BreaksAPU => Chips}/FastAPU/core.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/core.h (100%) rename {BreaksAPU => Chips}/FastAPU/dac.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/dac.h (100%) rename {BreaksAPU => Chips}/FastAPU/dma.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/dma.h (100%) rename {BreaksAPU => Chips}/FastAPU/dpcm.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/dpcm.h (100%) rename {BreaksAPU => Chips}/FastAPU/env.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/env.h (100%) rename {BreaksAPU => Chips}/FastAPU/length.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/length.h (100%) rename {BreaksAPU => Chips}/FastAPU/noise.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/noise.h (100%) rename {BreaksAPU => Chips}/FastAPU/pads.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/pads.h (100%) rename {Breaks6502/Breakasm => Chips/FastAPU}/pch.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/pch.h (75%) rename {BreaksAPU => Chips}/FastAPU/regs.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/regs.h (100%) rename {BreaksAPU => Chips}/FastAPU/square.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/square.h (100%) rename {BreaksAPU => Chips}/FastAPU/triangle.cpp (100%) rename {BreaksAPU => Chips}/FastAPU/triangle.h (100%) rename {Breaks6502 => Chips}/M6502Core/Readme.md (100%) rename {BreaksAPU/APUSim => Chips/M6502Core}/Scripts/.gitignore (100%) rename {Breaks6502 => Chips}/M6502Core/Scripts/VS2022/M6502Core.vcxproj (100%) rename {Breaks6502 => Chips}/M6502Core/Scripts/VS2022/M6502Core.vcxproj.filters (100%) rename {Breaks6502 => Chips}/M6502Core/address_bus.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/address_bus.h (100%) rename {Breaks6502 => Chips}/M6502Core/alu.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/alu.h (100%) rename {Breaks6502 => Chips}/M6502Core/alu_control.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/alu_control.h (100%) rename {Breaks6502 => Chips}/M6502Core/branch_logic.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/branch_logic.h (100%) rename {Breaks6502 => Chips}/M6502Core/bus_control.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/bus_control.h (100%) rename {Breaks6502 => Chips}/M6502Core/core.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/core.h (100%) rename {Breaks6502 => Chips}/M6502Core/data_bus.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/data_bus.h (100%) rename {Breaks6502 => Chips}/M6502Core/debug.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/debug.h (100%) rename {Breaks6502 => Chips}/M6502Core/decoder.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/decoder.h (100%) rename {Breaks6502 => Chips}/M6502Core/dispatch.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/dispatch.h (100%) rename {Breaks6502 => Chips}/M6502Core/extra_counter.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/extra_counter.h (100%) rename {Breaks6502 => Chips}/M6502Core/flags.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/flags.h (100%) rename {Breaks6502 => Chips}/M6502Core/flags_control.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/flags_control.h (100%) rename {Breaks6502 => Chips}/M6502Core/interrupts.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/interrupts.h (100%) rename {Breaks6502 => Chips}/M6502Core/ir.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/ir.h (100%) rename {Breaks6502 => Chips}/M6502Core/pc.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/pc.h (100%) rename {Breaks6502 => Chips}/M6502Core/pc_control.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/pc_control.h (100%) rename {Breaks6502 => Chips}/M6502Core/pch.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/pch.h (100%) rename {Breaks6502 => Chips}/M6502Core/predecode.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/predecode.h (100%) rename {Breaks6502 => Chips}/M6502Core/random_logic.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/random_logic.h (100%) rename {Breaks6502 => Chips}/M6502Core/regs.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/regs.h (100%) rename {Breaks6502 => Chips}/M6502Core/regs_control.cpp (100%) rename {Breaks6502 => Chips}/M6502Core/regs_control.h (100%) rename {Breaks6502 => Chips}/M6502Core/t1_ff.jpg (100%) rename {BreaksPPU => Chips}/PPUSim/Readme.md (100%) rename {BreaksPPU => Chips}/PPUSim/Scripts/.gitignore (100%) rename {BreaksPPU => Chips}/PPUSim/Scripts/VS2022/PPUSim.vcxproj (100%) rename {BreaksPPU => Chips}/PPUSim/Scripts/VS2022/PPUSim.vcxproj.filters (100%) rename {BreaksPPU => Chips}/PPUSim/bgcol.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/bgcol.h (100%) rename {BreaksPPU => Chips}/PPUSim/cram.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/cram.h (100%) rename {BreaksPPU => Chips}/PPUSim/dataread.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/dataread.h (100%) rename {BreaksPPU => Chips}/PPUSim/debug.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/debug.h (100%) rename {BreaksPPU => Chips}/PPUSim/fifo.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/fifo.h (100%) rename {BreaksPPU => Chips}/PPUSim/fsm.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/fsm.h (100%) rename {BreaksPPU => Chips}/PPUSim/hv.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/hv.h (100%) rename {BreaksPPU => Chips}/PPUSim/hv_decoder.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/hv_decoder.h (100%) rename {BreaksPPU => Chips}/PPUSim/mux.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/mux.h (100%) rename {BreaksPPU => Chips}/PPUSim/oam.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/oam.h (100%) rename {BreaksPPU => Chips}/PPUSim/par.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/par.h (100%) rename {BreaksPPU => Chips}/PPUSim/patgen.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/patgen.h (100%) rename {BreaksPPU => Chips}/PPUSim/pch.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/pch.h (100%) rename {BreaksPPU => Chips}/PPUSim/pclk.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/ppu.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/ppu.h (100%) rename {BreaksPPU => Chips}/PPUSim/ppu_layers.png (100%) rename {BreaksPPU => Chips}/PPUSim/regs.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/regs.h (100%) rename {BreaksPPU => Chips}/PPUSim/scroll_regs.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/scroll_regs.h (100%) rename {BreaksPPU => Chips}/PPUSim/sprite_eval.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/sprite_eval.h (100%) rename {BreaksPPU => Chips}/PPUSim/video_out.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/video_out.h (100%) rename {BreaksPPU => Chips}/PPUSim/vram_ctrl.cpp (100%) rename {BreaksPPU => Chips}/PPUSim/vram_ctrl.h (100%) create mode 100644 Chips/Readme.md rename {BreaksAPU => Tools}/APUPlayer/.gitignore (100%) rename {BreaksAPU => Tools}/APUPlayer/APUPlayer.csproj (100%) rename {BreaksAPU => Tools}/APUPlayer/APUPlayer.csproj.user (100%) rename {BreaksAPU => Tools}/APUPlayer/APUPlayer.sln (97%) rename {BreaksAPU => Tools}/APUPlayer/App.config (100%) rename {BreaksAPU => Tools}/APUPlayer/Build/.gitignore (100%) rename {BreaksAPU => Tools}/APUPlayer/Build/Readme.md (100%) rename {BreaksAPU => Tools}/APUPlayer/FormAbout.Designer.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/FormAbout.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/FormAbout.resx (100%) rename {BreaksAPU => Tools}/APUPlayer/FormMain.Designer.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/FormMain.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/FormMain.resx (100%) rename {BreaksAPU => Tools}/APUPlayer/FormMainWorker.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/FormSettings.Designer.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/FormSettings.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/FormSettings.resx (100%) rename {BreaksAPU => Tools}/APUPlayer/FormSnatch.Designer.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/FormSnatch.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/FormSnatch.resx (100%) rename {BreaksAPU => Tools}/APUPlayer/Program.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/Properties/Resources.Designer.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/Properties/Resources.resx (100%) rename {BreaksAPU => Tools}/APUPlayer/Properties/Settings.Designer.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/Properties/Settings.settings (100%) rename {BreaksAPU => Tools}/APUPlayer/Properties/launchSettings.json (100%) rename {BreaksAPU => Tools}/APUPlayer/Readme.md (100%) rename {BreaksAPU => Tools}/APUPlayer/WavesSupport.cs (100%) rename {BreaksAPU => Tools}/APUPlayer/button_get_debug.png (100%) rename {BreaksAPU => Tools}/APUPlayer/waves.png (100%) rename {Demos => Tools}/ApuPumpkin/.gitignore (100%) rename {Demos => Tools}/ApuPumpkin/ApuPumpkin.cpp (100%) rename {Demos => Tools}/ApuPumpkin/ApuPumpkin.sln (93%) rename {Demos => Tools}/ApuPumpkin/ApuPumpkin.vcxproj (97%) rename {Demos => Tools}/ApuPumpkin/ApuPumpkin.vcxproj.filters (100%) rename {Demos => Tools}/ApuPumpkin/Readme.md (100%) rename {BreaksAPU/FastAPU => Tools/ApuPumpkin}/pch.cpp (100%) rename {Demos => Tools}/ApuPumpkin/pch.h (60%) rename {Breaks6502 => Tools}/Breakasm/.gitignore (100%) rename {Breaks6502 => Tools}/Breakasm/ASM.cpp (100%) rename {Breaks6502 => Tools}/Breakasm/ASM.h (100%) rename {Breaks6502 => Tools}/Breakasm/ASMOPS.cpp (100%) rename {Breaks6502 => Tools}/Breakasm/ASMOPS.h (100%) rename {Breaks6502 => Tools}/Breakasm/CMakeLists.txt (100%) rename {Breaks6502 => Tools}/Breakasm/Readme.md (100%) rename {Breaks6502 => Tools}/Breakasm/ReadmeRus.md (100%) rename {Breaks6502 => Tools}/Breakasm/Scripts/VS2022/Breakasm.sln (100%) rename {Breaks6502 => Tools}/Breakasm/Scripts/VS2022/Breakasm.vcxproj (100%) rename {Breaks6502 => Tools}/Breakasm/Scripts/VS2022/Breakasm.vcxproj.filters (100%) rename {Breaks6502 => Tools}/Breakasm/Test.asm (100%) rename {Breaks6502 => Tools}/Breakasm/TestAll.asm (100%) rename {Breaks6502 => Tools}/Breakasm/main.cpp (100%) rename {Demos/ApuPumpkin => Tools/Breakasm}/pch.cpp (100%) rename {Breaks6502 => Tools}/Breakasm/pch.h (100%) rename {Breaks6502 => Tools}/BreaksDebug/.gitignore (100%) rename {Breaks6502 => Tools}/BreaksDebug/App.config (100%) rename {Breaks6502 => Tools}/BreaksDebug/BreaksDebug.csproj (100%) rename {Breaks6502 => Tools}/BreaksDebug/BreaksDebug.csproj.user (100%) rename {Breaks6502 => Tools}/BreaksDebug/BreaksDebug.sln (97%) rename {Breaks6502 => Tools}/BreaksDebug/Build/Test.asm (100%) rename {Breaks6502 => Tools}/BreaksDebug/Build/Test.json (100%) rename {Breaks6502 => Tools}/BreaksDebug/Build/TestIllegal.asm (100%) rename {Breaks6502 => Tools}/BreaksDebug/Build/TestRora.asm (100%) rename {Breaks6502 => Tools}/BreaksDebug/Build/Visual6502.asm (100%) rename {Breaks6502 => Tools}/BreaksDebug/DumpMarkdown.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/FormAbout.Designer.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/FormAbout.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/FormAbout.resx (100%) rename {Breaks6502 => Tools}/BreaksDebug/FormMain.Designer.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/FormMain.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/FormMain.resx (100%) rename {Breaks6502 => Tools}/BreaksDebug/Program.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/Properties/AssemblyInfo.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/Properties/Resources.Designer.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/Properties/Resources.resx (100%) rename {Breaks6502 => Tools}/BreaksDebug/Properties/Settings.Designer.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/Properties/Settings.settings (100%) rename {Breaks6502 => Tools}/BreaksDebug/Properties/launchSettings.json (100%) rename {Breaks6502 => Tools}/BreaksDebug/QuickDisasm.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/Readme.md (98%) rename {Breaks6502 => Tools}/BreaksDebug/UnitTest.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/WavesSupport.cs (100%) rename {Breaks6502 => Tools}/BreaksDebug/concept.jpg (100%) rename {Breaks6502 => Tools}/BreaksDebug/hand-holding-hammer-icon-png.ico (100%) rename {Breaks6502 => Tools}/BreaksDebug/step.png (100%) rename {Demos => Tools}/DumpRegdump/.gitignore (100%) rename {Demos => Tools}/DumpRegdump/DumpRegdump.py (100%) rename {Demos => Tools}/FurryPlotDemo/.gitignore (100%) rename {Demos => Tools}/FurryPlotDemo/FormMain.Designer.cs (100%) rename {Demos => Tools}/FurryPlotDemo/FormMain.cs (100%) rename {Demos => Tools}/FurryPlotDemo/FormMain.resx (100%) rename {Demos => Tools}/FurryPlotDemo/FurryPlotControl.cs (100%) rename {Demos => Tools}/FurryPlotDemo/FurryPlotDemo.csproj (100%) rename {Demos => Tools}/FurryPlotDemo/FurryPlotDemo.sln (100%) rename {Demos => Tools}/FurryPlotDemo/Program.cs (100%) rename {Demos => Tools}/InfernoColormap/.gitignore (100%) rename {Demos => Tools}/InfernoColormap/FormMain.Designer.cs (100%) rename {Demos => Tools}/InfernoColormap/FormMain.cs (100%) rename {Demos => Tools}/InfernoColormap/FormMain.resx (100%) rename {Demos => Tools}/InfernoColormap/InfernoColormap.cs (100%) rename {Demos => Tools}/InfernoColormap/InfernoColormap.csproj (100%) rename {Demos => Tools}/InfernoColormap/InfernoColormap.sln (100%) rename {Demos => Tools}/InfernoColormap/Program.cs (100%) rename {Demos => Tools}/InfernoColormap/Readme.md (80%) rename {BreaksPPU => Tools}/PPUPlayer/.gitignore (100%) rename {BreaksPPU => Tools}/PPUPlayer/Build/.gitignore (100%) rename {BreaksPPU => Tools}/PPUPlayer/Build/Readme.md (100%) rename {BreaksPPU => Tools}/PPUPlayer/DummyNrom.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/DumpsProcessing.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormAbout.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormAbout.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormAbout.resx (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormColorSpace.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormColorSpace.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormColorSpace.resx (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormComponentViewer.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormComponentViewer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormComponentViewer.resx (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormCompositeViewer.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormCompositeViewer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormCompositeViewer.resx (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormMain.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormMain.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormMain.resx (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormMainWorker.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormRawViewer.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormRawViewer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormRawViewer.resx (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormSettings.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormSettings.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormSettings.resx (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormSnatch.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormSnatch.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/FormSnatch.resx (100%) rename {BreaksPPU => Tools}/PPUPlayer/PPUPlayer.csproj (100%) rename {BreaksPPU => Tools}/PPUPlayer/PPUPlayer.csproj.user (100%) rename {BreaksPPU => Tools}/PPUPlayer/PPUPlayer.sln (97%) rename {BreaksPPU => Tools}/PPUPlayer/PPU_Player.png (100%) rename {BreaksPPU => Tools}/PPUPlayer/PPU_Player_Diag_Eng.png (100%) rename {BreaksPPU => Tools}/PPUPlayer/Program.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/Properties/Resources.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/Properties/Resources.resx (100%) rename {BreaksPPU => Tools}/PPUPlayer/Properties/Settings.Designer.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/Properties/Settings.settings (100%) rename {BreaksPPU => Tools}/PPUPlayer/Properties/launchSettings.json (100%) rename {BreaksPPU => Tools}/PPUPlayer/Readme.md (100%) rename {BreaksPPU => Tools}/PPUPlayer/VideoProcessing.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/WavesSupport.cs (100%) rename {BreaksPPU => Tools}/PPUPlayer/button_get_debug.png (100%) rename {BreaksPPU => Tools}/PPUPlayer/button_pause.png (100%) rename {BreaksPPU => Tools}/PPUPlayer/button_play.png (100%) rename {BreaksPPU => Tools}/PPUPlayer/button_stop.png (100%) rename {BreaksPPU => Tools}/PPUPlayer/ppu_player_logo.png (100%) rename {Demos => Tools}/PpuPumpkin/.gitignore (100%) rename {Demos => Tools}/PpuPumpkin/PpuPumpkin.cpp (100%) rename {Demos => Tools}/PpuPumpkin/PpuPumpkin.sln (96%) rename {Demos => Tools}/PpuPumpkin/PpuPumpkin.vcxproj (99%) rename {Demos => Tools}/PpuPumpkin/PpuPumpkin.vcxproj.filters (100%) rename {Demos => Tools}/PpuPumpkin/Readme.md (100%) rename {Demos => Tools}/PpuPumpkin/pch.cpp (100%) rename {Demos => Tools}/PpuPumpkin/pch.h (82%) rename {Demos => Tools}/PpuPumpkin/ppusim_profiler.png (100%) rename {Demos => Tools}/SignalPlotDemo/Readme.md (73%) rename {Demos => Tools}/SignalPlotDemo/SignalPlotDemo.sln (100%) rename {Demos => Tools}/SignalPlotDemo/SignalPlotDemo/.gitignore (100%) rename {Demos => Tools}/SignalPlotDemo/SignalPlotDemo/FormMain.Designer.cs (100%) rename {Demos => Tools}/SignalPlotDemo/SignalPlotDemo/FormMain.cs (100%) rename {Demos => Tools}/SignalPlotDemo/SignalPlotDemo/FormMain.resx (100%) rename {Demos => Tools}/SignalPlotDemo/SignalPlotDemo/Program.cs (100%) rename {Demos => Tools}/SignalPlotDemo/SignalPlotDemo/SignalPlotControl.cs (100%) rename {Demos => Tools}/SignalPlotDemo/SignalPlotDemo/SignalPlotDemo.csproj (100%) rename {Demos => Tools}/SlooowPlaaayer/.gitignore (100%) rename {Demos => Tools}/SlooowPlaaayer/FormAbout.Designer.cs (100%) rename {Demos => Tools}/SlooowPlaaayer/FormAbout.cs (100%) rename {Demos => Tools}/SlooowPlaaayer/FormAbout.resx (100%) rename {Demos => Tools}/SlooowPlaaayer/FormMain.Designer.cs (100%) rename {Demos => Tools}/SlooowPlaaayer/FormMain.cs (100%) rename {Demos => Tools}/SlooowPlaaayer/FormMain.resx (100%) rename {Demos => Tools}/SlooowPlaaayer/FormSnatch.Designer.cs (100%) rename {Demos => Tools}/SlooowPlaaayer/FormSnatch.cs (100%) rename {Demos => Tools}/SlooowPlaaayer/FormSnatch.resx (100%) rename {Demos => Tools}/SlooowPlaaayer/Program.cs (100%) rename {Demos => Tools}/SlooowPlaaayer/Properties/Resources.Designer.cs (100%) rename {Demos => Tools}/SlooowPlaaayer/Properties/Resources.resx (100%) rename {Demos => Tools}/SlooowPlaaayer/Readme.md (90%) rename {Demos => Tools}/SlooowPlaaayer/SlooowPlaaayer.csproj (100%) rename {Demos => Tools}/SlooowPlaaayer/SlooowPlaaayer.jpg (100%) rename {Demos => Tools}/SlooowPlaaayer/SlooowPlaaayer.sln (100%) rename {Demos => Tools}/SlooowPlaaayer/WavLoad.cs (100%) rename {UserManual/PPUPlayer => Wiki}/DumpVideoSignalEng.md (85%) rename {UserManual/PPUPlayer => Wiki}/DumpVideoSignalRus.md (89%) rename {UserManual => Wiki}/PPUPlayer/PPU_Player_Eng.pdf (100%) rename {UserManual => Wiki}/PPUPlayer/PPU_Player_Eng.pptx (100%) rename {UserManual => Wiki}/PPUPlayer/PPU_Player_Rus.pdf (100%) rename {UserManual => Wiki}/PPUPlayer/PPU_Player_Rus.pptx (100%) rename {UserManual => Wiki}/Runtime.md (100%) rename UserManual/Readme.md => Wiki/UserManual.md (71%) rename {UserManual => Wiki}/debug.graphml (100%) rename {UserManual => Wiki}/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.png (100%) rename {UserManual => Wiki}/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.psd (100%) rename {UserManual => Wiki}/imgstore/20_JSR_T1_PHI1.jpg (100%) create mode 100644 Wiki/imgstore/40H368.jpg rename {UserManual => Wiki}/imgstore/APUPlayer.jpg (100%) rename {UserManual => Wiki}/imgstore/BogusBoard.jpg (100%) rename {UserManual => Wiki}/imgstore/InfernoColormap.png (100%) create mode 100644 Wiki/imgstore/LS139.jpg create mode 100644 Wiki/imgstore/LS373.jpg rename {UserManual => Wiki}/imgstore/PPUPlayer_All.png (100%) create mode 100644 Wiki/imgstore/SRAM.jpg rename {UserManual => Wiki}/imgstore/SignalPlotDemo.png (100%) rename {UserManual => Wiki}/imgstore/SlooowPlaaayer.png (100%) rename {UserManual => Wiki}/imgstore/UnitTest.jpg (100%) rename {UserManual => Wiki}/imgstore/debug.jpg (100%) rename {UserManual => Wiki}/imgstore/dendy_controller.png (100%) rename {UserManual => Wiki}/imgstore/dump_video_001.png (100%) rename {UserManual => Wiki}/imgstore/dump_video_002.png (100%) rename {UserManual => Wiki}/imgstore/dump_video_003.png (100%) rename {UserManual => Wiki}/imgstore/dump_video_004.png (100%) rename {UserManual => Wiki}/imgstore/dump_video_005.png (100%) rename {UserManual => Wiki}/imgstore/dump_video_006.png (100%) rename {UserManual => Wiki}/imgstore/dump_video_007.png (100%) rename {UserManual => Wiki}/imgstore/dump_video_008.png (100%) rename {UserManual => Wiki}/imgstore/fami_logisim.jpg (100%) rename {UserManual => Wiki}/imgstore/famicom_controller1.png (100%) rename {UserManual => Wiki}/imgstore/famicom_controller2.png (100%) rename {UserManual => Wiki}/imgstore/main.jpg (100%) rename {UserManual => Wiki}/imgstore/mariwa.png (100%) rename {UserManual => Wiki}/imgstore/nes.png (100%) rename {UserManual => Wiki}/imgstore/nes_controller.png (100%) rename {UserManual => Wiki}/imgstore/progress.png (100%) rename {UserManual => Wiki}/imgstore/settings.jpg (100%) rename {UserManual => Wiki}/imgstore/slow_player_stable_diffusion.jpg (100%) rename {UserManual => Wiki}/imgstore/virt_dendy_controller.png (100%) rename {UserManual => Wiki}/imgstore/virt_famicom_controller1.png (100%) rename {UserManual => Wiki}/imgstore/virt_famicom_controller2.png (100%) rename {UserManual => Wiki}/imgstore/virt_nes_controller.png (100%) diff --git a/Breaknes/Breaknes/Breaknes.sln b/Breaknes/Breaknes/Breaknes.sln index 760ad54b..f6754578 100644 --- a/Breaknes/Breaknes/Breaknes.sln +++ b/Breaknes/Breaknes/Breaknes.sln @@ -7,11 +7,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Breaknes", "Breaknes.csproj EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BreaksCore", "..\BreaksCore\Scripts\VS2022\BreaksCore.vcxproj", "{88908FB4-0012-4533-BFFB-30AA9F72EBDC}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Breaks6502\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Chips\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\BreaksPPU\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\Chips\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\BreaksAPU\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\Chips\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Breaks Core", "Breaks Core", "{F7FC065C-EBE2-4648-9BD4-79B660C14322}" EndProject diff --git a/Breaknes/BreaknesSDL/BreaknesSDL.sln b/Breaknes/BreaknesSDL/BreaknesSDL.sln index c363d0f3..7fffe568 100644 --- a/Breaknes/BreaknesSDL/BreaknesSDL.sln +++ b/Breaknes/BreaknesSDL/BreaknesSDL.sln @@ -13,11 +13,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseBoardLib", "..\..\Commo EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mappers", "..\..\Mappers\Scripts\VS2022\Mappers.vcxproj", "{1CE1EFD6-4DBF-4D93-AD3A-94C808EA70AB}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Breaks6502\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Chips\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\BreaksAPU\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\Chips\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\BreaksPPU\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\Chips\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BreaksCoreStatic", "..\BreaksCore\Scripts\VS2022\BreaksCoreStatic.vcxproj", "{59610324-CE90-474C-89F1-8A998C52B346}" EndProject diff --git a/Breaknes/BreaknesSDL/BreaknesSDL.vcxproj b/Breaknes/BreaknesSDL/BreaknesSDL.vcxproj index af28727b..93e8f25a 100644 --- a/Breaknes/BreaknesSDL/BreaknesSDL.vcxproj +++ b/Breaknes/BreaknesSDL/BreaknesSDL.vcxproj @@ -149,13 +149,13 @@ {59610324-ce90-474c-89f1-8a998c52b346} - + {75210c0a-a812-4246-a179-b50d8a25a121} - + {50e93d78-36dc-46c3-82ea-cab373e18729} - + {ebd9b3eb-3c04-43ed-b454-e9442b21f5a0} diff --git a/Breaknes/BreaksCore/Readme.md b/Breaknes/BreaksCore/Readme.md index 4b516a75..adc4f24b 100644 --- a/Breaknes/BreaksCore/Readme.md +++ b/Breaknes/BreaksCore/Readme.md @@ -20,13 +20,13 @@ List of supported boards. The plan is to simulate the Generic Famicom board as follows: -![fami_logisim](/UserManual/imgstore/fami_logisim.jpg) +![fami_logisim](/Wiki/imgstore/fami_logisim.jpg) ### NES The plan is to simulate the Generic NES board as follows: -![nes](/UserManual/imgstore/nes.png) +![nes](/Wiki/imgstore/nes.png) ### Dendy/Subor/Phantom/Whatever @@ -36,7 +36,7 @@ TBD. BogusBoard is a default motherboard if BreaksCore did not recognize the board type when it created the instances or other erroneous parameters. -![BogusBoard](/UserManual/imgstore/BogusBoard.jpg) +![BogusBoard](/Wiki/imgstore/BogusBoard.jpg) This system contains 64 KBytes of RAM, a 6502 processor core and nothing else. @@ -46,7 +46,7 @@ In other words, it's a minimal computing system to check if anything is ticking A special debug board for the PPUPlayer. -![PPUPlayer_All](/UserManual/imgstore/PPUPlayer_All.png) +![PPUPlayer_All](/Wiki/imgstore/PPUPlayer_All.png) The board contains the PPU, adjacent logic (Address Latch, VRAM) and partial support for the cartridge connector (only the PPU/CHR pins are used). @@ -54,7 +54,7 @@ The board contains the PPU, adjacent logic (Address Latch, VRAM) and partial sup Another debug board for "playing" the APU register dump. -![APUPlayer](/UserManual/imgstore/APUPlayer.jpg) +![APUPlayer](/Wiki/imgstore/APUPlayer.jpg) It is roughly the same as PPUPlayer, but simpler in that the APU does not require a cartridge connector and additional bindings associated with it. @@ -72,7 +72,7 @@ Debug entities are divided into the following categories: - DebugInfo: get/set internal state - MemLayout: read/write memory dumps -![debug](/UserManual/imgstore/debug.jpg) +![debug](/Wiki/imgstore/debug.jpg) ### DebugInfo diff --git a/Breaknes/BreaksCore/Scripts/VS2022/BreaksCore.vcxproj b/Breaknes/BreaksCore/Scripts/VS2022/BreaksCore.vcxproj index f46a379e..04b08470 100644 --- a/Breaknes/BreaksCore/Scripts/VS2022/BreaksCore.vcxproj +++ b/Breaknes/BreaksCore/Scripts/VS2022/BreaksCore.vcxproj @@ -19,8 +19,8 @@ - - + + @@ -45,8 +45,8 @@ - - + + @@ -65,13 +65,13 @@ - + {75210c0a-a812-4246-a179-b50d8a25a121} - + {50e93d78-36dc-46c3-82ea-cab373e18729} - + {ebd9b3eb-3c04-43ed-b454-e9442b21f5a0} diff --git a/Breaknes/BreaksCore/Scripts/VS2022/BreaksCoreStatic.vcxproj b/Breaknes/BreaksCore/Scripts/VS2022/BreaksCoreStatic.vcxproj index 7ca90736..25cf7b11 100644 --- a/Breaknes/BreaksCore/Scripts/VS2022/BreaksCoreStatic.vcxproj +++ b/Breaknes/BreaksCore/Scripts/VS2022/BreaksCoreStatic.vcxproj @@ -19,8 +19,8 @@ - - + + @@ -44,8 +44,8 @@ - - + + @@ -64,13 +64,13 @@ - + {75210c0a-a812-4246-a179-b50d8a25a121} - + {50e93d78-36dc-46c3-82ea-cab373e18729} - + {ebd9b3eb-3c04-43ed-b454-e9442b21f5a0} diff --git a/Breaknes/BreaksCore/pch.h b/Breaknes/BreaksCore/pch.h index 75d663bf..00a41acf 100644 --- a/Breaknes/BreaksCore/pch.h +++ b/Breaknes/BreaksCore/pch.h @@ -11,8 +11,8 @@ #include #endif -#include "../../Breaks6502/Breakasm/ASM.h" -#include "../../Breaks6502/Breakasm/ASMOPS.h" +#include "../../Tools/Breakasm/ASM.h" +#include "../../Tools/Breakasm/ASMOPS.h" // Very basic @@ -21,9 +21,9 @@ // Big chips -#include "../../Breaks6502/M6502Core/core.h" -#include "../../BreaksAPU/APUSim/apu.h" -#include "../../BreaksPPU/PPUSim/ppu.h" +#include "../../Chips/M6502Core/core.h" +#include "../../Chips/APUSim/apu.h" +#include "../../Chips/PPUSim/ppu.h" // Board logic diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b808ebc..8de1f4b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,63 +33,63 @@ add_executable (breaknes #Common/JsonLib/Json.cpp - BreaksAPU/APUSim/apu.cpp - BreaksAPU/APUSim/clkgen.cpp - BreaksAPU/APUSim/common.cpp - BreaksAPU/APUSim/core.cpp - BreaksAPU/APUSim/dac.cpp - BreaksAPU/APUSim/debug.cpp - BreaksAPU/APUSim/dma.cpp - BreaksAPU/APUSim/dpcm.cpp - BreaksAPU/APUSim/env.cpp - BreaksAPU/APUSim/length.cpp - BreaksAPU/APUSim/noise.cpp - BreaksAPU/APUSim/pads.cpp - BreaksAPU/APUSim/regs.cpp - BreaksAPU/APUSim/square.cpp - BreaksAPU/APUSim/triangle.cpp - - BreaksPPU/PPUSim/bgcol.cpp - BreaksPPU/PPUSim/cram.cpp - BreaksPPU/PPUSim/dataread.cpp - BreaksPPU/PPUSim/debug.cpp - BreaksPPU/PPUSim/fifo.cpp - BreaksPPU/PPUSim/fsm.cpp - BreaksPPU/PPUSim/hv.cpp - BreaksPPU/PPUSim/hv_decoder.cpp - BreaksPPU/PPUSim/mux.cpp - BreaksPPU/PPUSim/oam.cpp - BreaksPPU/PPUSim/par.cpp - BreaksPPU/PPUSim/patgen.cpp - BreaksPPU/PPUSim/pclk.cpp - BreaksPPU/PPUSim/ppu.cpp - BreaksPPU/PPUSim/regs.cpp - BreaksPPU/PPUSim/scroll_regs.cpp - BreaksPPU/PPUSim/sprite_eval.cpp - BreaksPPU/PPUSim/video_out.cpp - BreaksPPU/PPUSim/vram_ctrl.cpp - - Breaks6502/M6502Core/address_bus.cpp - Breaks6502/M6502Core/alu.cpp - Breaks6502/M6502Core/alu_control.cpp - Breaks6502/M6502Core/branch_logic.cpp - Breaks6502/M6502Core/bus_control.cpp - Breaks6502/M6502Core/core.cpp - Breaks6502/M6502Core/data_bus.cpp - Breaks6502/M6502Core/debug.cpp - Breaks6502/M6502Core/decoder.cpp - Breaks6502/M6502Core/dispatch.cpp - Breaks6502/M6502Core/extra_counter.cpp - Breaks6502/M6502Core/flags.cpp - Breaks6502/M6502Core/flags_control.cpp - Breaks6502/M6502Core/interrupts.cpp - Breaks6502/M6502Core/ir.cpp - Breaks6502/M6502Core/pc.cpp - Breaks6502/M6502Core/pc_control.cpp - Breaks6502/M6502Core/predecode.cpp - Breaks6502/M6502Core/random_logic.cpp - Breaks6502/M6502Core/regs.cpp - Breaks6502/M6502Core/regs_control.cpp + Chips/APUSim/apu.cpp + Chips/APUSim/clkgen.cpp + Chips/APUSim/common.cpp + Chips/APUSim/core.cpp + Chips/APUSim/dac.cpp + Chips/APUSim/debug.cpp + Chips/APUSim/dma.cpp + Chips/APUSim/dpcm.cpp + Chips/APUSim/env.cpp + Chips/APUSim/length.cpp + Chips/APUSim/noise.cpp + Chips/APUSim/pads.cpp + Chips/APUSim/regs.cpp + Chips/APUSim/square.cpp + Chips/APUSim/triangle.cpp + + Chips/PPUSim/bgcol.cpp + Chips/PPUSim/cram.cpp + Chips/PPUSim/dataread.cpp + Chips/PPUSim/debug.cpp + Chips/PPUSim/fifo.cpp + Chips/PPUSim/fsm.cpp + Chips/PPUSim/hv.cpp + Chips/PPUSim/hv_decoder.cpp + Chips/PPUSim/mux.cpp + Chips/PPUSim/oam.cpp + Chips/PPUSim/par.cpp + Chips/PPUSim/patgen.cpp + Chips/PPUSim/pclk.cpp + Chips/PPUSim/ppu.cpp + Chips/PPUSim/regs.cpp + Chips/PPUSim/scroll_regs.cpp + Chips/PPUSim/sprite_eval.cpp + Chips/PPUSim/video_out.cpp + Chips/PPUSim/vram_ctrl.cpp + + Chips/M6502Core/address_bus.cpp + Chips/M6502Core/alu.cpp + Chips/M6502Core/alu_control.cpp + Chips/M6502Core/branch_logic.cpp + Chips/M6502Core/bus_control.cpp + Chips/M6502Core/core.cpp + Chips/M6502Core/data_bus.cpp + Chips/M6502Core/debug.cpp + Chips/M6502Core/decoder.cpp + Chips/M6502Core/dispatch.cpp + Chips/M6502Core/extra_counter.cpp + Chips/M6502Core/flags.cpp + Chips/M6502Core/flags_control.cpp + Chips/M6502Core/interrupts.cpp + Chips/M6502Core/ir.cpp + Chips/M6502Core/pc.cpp + Chips/M6502Core/pc_control.cpp + Chips/M6502Core/predecode.cpp + Chips/M6502Core/random_logic.cpp + Chips/M6502Core/regs.cpp + Chips/M6502Core/regs_control.cpp Mappers/AbstractCartridge.cpp Mappers/CartridgeFactory.cpp diff --git a/BreaksAPU/APUSim/Readme.md b/Chips/APUSim/Readme.md similarity index 100% rename from BreaksAPU/APUSim/Readme.md rename to Chips/APUSim/Readme.md diff --git a/Breaks6502/M6502Core/Scripts/.gitignore b/Chips/APUSim/Scripts/.gitignore similarity index 100% rename from Breaks6502/M6502Core/Scripts/.gitignore rename to Chips/APUSim/Scripts/.gitignore diff --git a/BreaksAPU/APUSim/Scripts/VS2022/APUSim.vcxproj b/Chips/APUSim/Scripts/VS2022/APUSim.vcxproj similarity index 100% rename from BreaksAPU/APUSim/Scripts/VS2022/APUSim.vcxproj rename to Chips/APUSim/Scripts/VS2022/APUSim.vcxproj diff --git a/BreaksAPU/APUSim/Scripts/VS2022/APUSim.vcxproj.filters b/Chips/APUSim/Scripts/VS2022/APUSim.vcxproj.filters similarity index 100% rename from BreaksAPU/APUSim/Scripts/VS2022/APUSim.vcxproj.filters rename to Chips/APUSim/Scripts/VS2022/APUSim.vcxproj.filters diff --git a/BreaksAPU/APUSim/apu.cpp b/Chips/APUSim/apu.cpp similarity index 100% rename from BreaksAPU/APUSim/apu.cpp rename to Chips/APUSim/apu.cpp diff --git a/BreaksAPU/APUSim/apu.h b/Chips/APUSim/apu.h similarity index 100% rename from BreaksAPU/APUSim/apu.h rename to Chips/APUSim/apu.h diff --git a/BreaksAPU/APUSim/apu_layers.png b/Chips/APUSim/apu_layers.png similarity index 100% rename from BreaksAPU/APUSim/apu_layers.png rename to Chips/APUSim/apu_layers.png diff --git a/BreaksAPU/APUSim/clkgen.cpp b/Chips/APUSim/clkgen.cpp similarity index 100% rename from BreaksAPU/APUSim/clkgen.cpp rename to Chips/APUSim/clkgen.cpp diff --git a/BreaksAPU/APUSim/clkgen.h b/Chips/APUSim/clkgen.h similarity index 100% rename from BreaksAPU/APUSim/clkgen.h rename to Chips/APUSim/clkgen.h diff --git a/BreaksAPU/APUSim/common.cpp b/Chips/APUSim/common.cpp similarity index 100% rename from BreaksAPU/APUSim/common.cpp rename to Chips/APUSim/common.cpp diff --git a/BreaksAPU/APUSim/common.h b/Chips/APUSim/common.h similarity index 100% rename from BreaksAPU/APUSim/common.h rename to Chips/APUSim/common.h diff --git a/BreaksAPU/APUSim/core.cpp b/Chips/APUSim/core.cpp similarity index 100% rename from BreaksAPU/APUSim/core.cpp rename to Chips/APUSim/core.cpp diff --git a/BreaksAPU/APUSim/core.h b/Chips/APUSim/core.h similarity index 100% rename from BreaksAPU/APUSim/core.h rename to Chips/APUSim/core.h diff --git a/BreaksAPU/APUSim/dac.cpp b/Chips/APUSim/dac.cpp similarity index 100% rename from BreaksAPU/APUSim/dac.cpp rename to Chips/APUSim/dac.cpp diff --git a/BreaksAPU/APUSim/dac.h b/Chips/APUSim/dac.h similarity index 100% rename from BreaksAPU/APUSim/dac.h rename to Chips/APUSim/dac.h diff --git a/BreaksAPU/APUSim/debug.cpp b/Chips/APUSim/debug.cpp similarity index 100% rename from BreaksAPU/APUSim/debug.cpp rename to Chips/APUSim/debug.cpp diff --git a/BreaksAPU/APUSim/debug.h b/Chips/APUSim/debug.h similarity index 100% rename from BreaksAPU/APUSim/debug.h rename to Chips/APUSim/debug.h diff --git a/BreaksAPU/APUSim/dma.cpp b/Chips/APUSim/dma.cpp similarity index 100% rename from BreaksAPU/APUSim/dma.cpp rename to Chips/APUSim/dma.cpp diff --git a/BreaksAPU/APUSim/dma.h b/Chips/APUSim/dma.h similarity index 100% rename from BreaksAPU/APUSim/dma.h rename to Chips/APUSim/dma.h diff --git a/BreaksAPU/APUSim/dpcm.cpp b/Chips/APUSim/dpcm.cpp similarity index 100% rename from BreaksAPU/APUSim/dpcm.cpp rename to Chips/APUSim/dpcm.cpp diff --git a/BreaksAPU/APUSim/dpcm.h b/Chips/APUSim/dpcm.h similarity index 100% rename from BreaksAPU/APUSim/dpcm.h rename to Chips/APUSim/dpcm.h diff --git a/BreaksAPU/APUSim/env.cpp b/Chips/APUSim/env.cpp similarity index 100% rename from BreaksAPU/APUSim/env.cpp rename to Chips/APUSim/env.cpp diff --git a/BreaksAPU/APUSim/env.h b/Chips/APUSim/env.h similarity index 100% rename from BreaksAPU/APUSim/env.h rename to Chips/APUSim/env.h diff --git a/BreaksAPU/APUSim/length.cpp b/Chips/APUSim/length.cpp similarity index 100% rename from BreaksAPU/APUSim/length.cpp rename to Chips/APUSim/length.cpp diff --git a/BreaksAPU/APUSim/length.h b/Chips/APUSim/length.h similarity index 100% rename from BreaksAPU/APUSim/length.h rename to Chips/APUSim/length.h diff --git a/BreaksAPU/APUSim/noise.cpp b/Chips/APUSim/noise.cpp similarity index 100% rename from BreaksAPU/APUSim/noise.cpp rename to Chips/APUSim/noise.cpp diff --git a/BreaksAPU/APUSim/noise.h b/Chips/APUSim/noise.h similarity index 100% rename from BreaksAPU/APUSim/noise.h rename to Chips/APUSim/noise.h diff --git a/BreaksAPU/APUSim/pads.cpp b/Chips/APUSim/pads.cpp similarity index 100% rename from BreaksAPU/APUSim/pads.cpp rename to Chips/APUSim/pads.cpp diff --git a/BreaksAPU/APUSim/pads.h b/Chips/APUSim/pads.h similarity index 100% rename from BreaksAPU/APUSim/pads.h rename to Chips/APUSim/pads.h diff --git a/BreaksAPU/APUSim/pch.cpp b/Chips/APUSim/pch.cpp similarity index 100% rename from BreaksAPU/APUSim/pch.cpp rename to Chips/APUSim/pch.cpp diff --git a/BreaksAPU/APUSim/pch.h b/Chips/APUSim/pch.h similarity index 75% rename from BreaksAPU/APUSim/pch.h rename to Chips/APUSim/pch.h index 02c5139f..188d4a3d 100644 --- a/BreaksAPU/APUSim/pch.h +++ b/Chips/APUSim/pch.h @@ -5,6 +5,6 @@ #include #include "../../Common/BaseLogicLib/BaseLogic.h" -#include "../../Breaks6502/M6502Core/core.h" +#include "../../Chips/M6502Core/core.h" #include "apu.h" diff --git a/BreaksAPU/APUSim/regs.cpp b/Chips/APUSim/regs.cpp similarity index 100% rename from BreaksAPU/APUSim/regs.cpp rename to Chips/APUSim/regs.cpp diff --git a/BreaksAPU/APUSim/regs.h b/Chips/APUSim/regs.h similarity index 100% rename from BreaksAPU/APUSim/regs.h rename to Chips/APUSim/regs.h diff --git a/BreaksAPU/APUSim/square.cpp b/Chips/APUSim/square.cpp similarity index 100% rename from BreaksAPU/APUSim/square.cpp rename to Chips/APUSim/square.cpp diff --git a/BreaksAPU/APUSim/square.h b/Chips/APUSim/square.h similarity index 100% rename from BreaksAPU/APUSim/square.h rename to Chips/APUSim/square.h diff --git a/BreaksAPU/APUSim/triangle.cpp b/Chips/APUSim/triangle.cpp similarity index 100% rename from BreaksAPU/APUSim/triangle.cpp rename to Chips/APUSim/triangle.cpp diff --git a/BreaksAPU/APUSim/triangle.h b/Chips/APUSim/triangle.h similarity index 100% rename from BreaksAPU/APUSim/triangle.h rename to Chips/APUSim/triangle.h diff --git a/BreaksAPU/FastAPU/FastAPU.vcxproj b/Chips/FastAPU/FastAPU.vcxproj similarity index 100% rename from BreaksAPU/FastAPU/FastAPU.vcxproj rename to Chips/FastAPU/FastAPU.vcxproj diff --git a/BreaksAPU/FastAPU/FastAPU.vcxproj.filters b/Chips/FastAPU/FastAPU.vcxproj.filters similarity index 100% rename from BreaksAPU/FastAPU/FastAPU.vcxproj.filters rename to Chips/FastAPU/FastAPU.vcxproj.filters diff --git a/BreaksAPU/FastAPU/Readme.md b/Chips/FastAPU/Readme.md similarity index 100% rename from BreaksAPU/FastAPU/Readme.md rename to Chips/FastAPU/Readme.md diff --git a/BreaksAPU/FastAPU/apu.cpp b/Chips/FastAPU/apu.cpp similarity index 100% rename from BreaksAPU/FastAPU/apu.cpp rename to Chips/FastAPU/apu.cpp diff --git a/BreaksAPU/FastAPU/apu.h b/Chips/FastAPU/apu.h similarity index 100% rename from BreaksAPU/FastAPU/apu.h rename to Chips/FastAPU/apu.h diff --git a/BreaksAPU/FastAPU/clkgen.cpp b/Chips/FastAPU/clkgen.cpp similarity index 100% rename from BreaksAPU/FastAPU/clkgen.cpp rename to Chips/FastAPU/clkgen.cpp diff --git a/BreaksAPU/FastAPU/clkgen.h b/Chips/FastAPU/clkgen.h similarity index 100% rename from BreaksAPU/FastAPU/clkgen.h rename to Chips/FastAPU/clkgen.h diff --git a/BreaksAPU/FastAPU/core.cpp b/Chips/FastAPU/core.cpp similarity index 100% rename from BreaksAPU/FastAPU/core.cpp rename to Chips/FastAPU/core.cpp diff --git a/BreaksAPU/FastAPU/core.h b/Chips/FastAPU/core.h similarity index 100% rename from BreaksAPU/FastAPU/core.h rename to Chips/FastAPU/core.h diff --git a/BreaksAPU/FastAPU/dac.cpp b/Chips/FastAPU/dac.cpp similarity index 100% rename from BreaksAPU/FastAPU/dac.cpp rename to Chips/FastAPU/dac.cpp diff --git a/BreaksAPU/FastAPU/dac.h b/Chips/FastAPU/dac.h similarity index 100% rename from BreaksAPU/FastAPU/dac.h rename to Chips/FastAPU/dac.h diff --git a/BreaksAPU/FastAPU/dma.cpp b/Chips/FastAPU/dma.cpp similarity index 100% rename from BreaksAPU/FastAPU/dma.cpp rename to Chips/FastAPU/dma.cpp diff --git a/BreaksAPU/FastAPU/dma.h b/Chips/FastAPU/dma.h similarity index 100% rename from BreaksAPU/FastAPU/dma.h rename to Chips/FastAPU/dma.h diff --git a/BreaksAPU/FastAPU/dpcm.cpp b/Chips/FastAPU/dpcm.cpp similarity index 100% rename from BreaksAPU/FastAPU/dpcm.cpp rename to Chips/FastAPU/dpcm.cpp diff --git a/BreaksAPU/FastAPU/dpcm.h b/Chips/FastAPU/dpcm.h similarity index 100% rename from BreaksAPU/FastAPU/dpcm.h rename to Chips/FastAPU/dpcm.h diff --git a/BreaksAPU/FastAPU/env.cpp b/Chips/FastAPU/env.cpp similarity index 100% rename from BreaksAPU/FastAPU/env.cpp rename to Chips/FastAPU/env.cpp diff --git a/BreaksAPU/FastAPU/env.h b/Chips/FastAPU/env.h similarity index 100% rename from BreaksAPU/FastAPU/env.h rename to Chips/FastAPU/env.h diff --git a/BreaksAPU/FastAPU/length.cpp b/Chips/FastAPU/length.cpp similarity index 100% rename from BreaksAPU/FastAPU/length.cpp rename to Chips/FastAPU/length.cpp diff --git a/BreaksAPU/FastAPU/length.h b/Chips/FastAPU/length.h similarity index 100% rename from BreaksAPU/FastAPU/length.h rename to Chips/FastAPU/length.h diff --git a/BreaksAPU/FastAPU/noise.cpp b/Chips/FastAPU/noise.cpp similarity index 100% rename from BreaksAPU/FastAPU/noise.cpp rename to Chips/FastAPU/noise.cpp diff --git a/BreaksAPU/FastAPU/noise.h b/Chips/FastAPU/noise.h similarity index 100% rename from BreaksAPU/FastAPU/noise.h rename to Chips/FastAPU/noise.h diff --git a/BreaksAPU/FastAPU/pads.cpp b/Chips/FastAPU/pads.cpp similarity index 100% rename from BreaksAPU/FastAPU/pads.cpp rename to Chips/FastAPU/pads.cpp diff --git a/BreaksAPU/FastAPU/pads.h b/Chips/FastAPU/pads.h similarity index 100% rename from BreaksAPU/FastAPU/pads.h rename to Chips/FastAPU/pads.h diff --git a/Breaks6502/Breakasm/pch.cpp b/Chips/FastAPU/pch.cpp similarity index 100% rename from Breaks6502/Breakasm/pch.cpp rename to Chips/FastAPU/pch.cpp diff --git a/BreaksAPU/FastAPU/pch.h b/Chips/FastAPU/pch.h similarity index 75% rename from BreaksAPU/FastAPU/pch.h rename to Chips/FastAPU/pch.h index 02c5139f..188d4a3d 100644 --- a/BreaksAPU/FastAPU/pch.h +++ b/Chips/FastAPU/pch.h @@ -5,6 +5,6 @@ #include #include "../../Common/BaseLogicLib/BaseLogic.h" -#include "../../Breaks6502/M6502Core/core.h" +#include "../../Chips/M6502Core/core.h" #include "apu.h" diff --git a/BreaksAPU/FastAPU/regs.cpp b/Chips/FastAPU/regs.cpp similarity index 100% rename from BreaksAPU/FastAPU/regs.cpp rename to Chips/FastAPU/regs.cpp diff --git a/BreaksAPU/FastAPU/regs.h b/Chips/FastAPU/regs.h similarity index 100% rename from BreaksAPU/FastAPU/regs.h rename to Chips/FastAPU/regs.h diff --git a/BreaksAPU/FastAPU/square.cpp b/Chips/FastAPU/square.cpp similarity index 100% rename from BreaksAPU/FastAPU/square.cpp rename to Chips/FastAPU/square.cpp diff --git a/BreaksAPU/FastAPU/square.h b/Chips/FastAPU/square.h similarity index 100% rename from BreaksAPU/FastAPU/square.h rename to Chips/FastAPU/square.h diff --git a/BreaksAPU/FastAPU/triangle.cpp b/Chips/FastAPU/triangle.cpp similarity index 100% rename from BreaksAPU/FastAPU/triangle.cpp rename to Chips/FastAPU/triangle.cpp diff --git a/BreaksAPU/FastAPU/triangle.h b/Chips/FastAPU/triangle.h similarity index 100% rename from BreaksAPU/FastAPU/triangle.h rename to Chips/FastAPU/triangle.h diff --git a/Breaks6502/M6502Core/Readme.md b/Chips/M6502Core/Readme.md similarity index 100% rename from Breaks6502/M6502Core/Readme.md rename to Chips/M6502Core/Readme.md diff --git a/BreaksAPU/APUSim/Scripts/.gitignore b/Chips/M6502Core/Scripts/.gitignore similarity index 100% rename from BreaksAPU/APUSim/Scripts/.gitignore rename to Chips/M6502Core/Scripts/.gitignore diff --git a/Breaks6502/M6502Core/Scripts/VS2022/M6502Core.vcxproj b/Chips/M6502Core/Scripts/VS2022/M6502Core.vcxproj similarity index 100% rename from Breaks6502/M6502Core/Scripts/VS2022/M6502Core.vcxproj rename to Chips/M6502Core/Scripts/VS2022/M6502Core.vcxproj diff --git a/Breaks6502/M6502Core/Scripts/VS2022/M6502Core.vcxproj.filters b/Chips/M6502Core/Scripts/VS2022/M6502Core.vcxproj.filters similarity index 100% rename from Breaks6502/M6502Core/Scripts/VS2022/M6502Core.vcxproj.filters rename to Chips/M6502Core/Scripts/VS2022/M6502Core.vcxproj.filters diff --git a/Breaks6502/M6502Core/address_bus.cpp b/Chips/M6502Core/address_bus.cpp similarity index 100% rename from Breaks6502/M6502Core/address_bus.cpp rename to Chips/M6502Core/address_bus.cpp diff --git a/Breaks6502/M6502Core/address_bus.h b/Chips/M6502Core/address_bus.h similarity index 100% rename from Breaks6502/M6502Core/address_bus.h rename to Chips/M6502Core/address_bus.h diff --git a/Breaks6502/M6502Core/alu.cpp b/Chips/M6502Core/alu.cpp similarity index 100% rename from Breaks6502/M6502Core/alu.cpp rename to Chips/M6502Core/alu.cpp diff --git a/Breaks6502/M6502Core/alu.h b/Chips/M6502Core/alu.h similarity index 100% rename from Breaks6502/M6502Core/alu.h rename to Chips/M6502Core/alu.h diff --git a/Breaks6502/M6502Core/alu_control.cpp b/Chips/M6502Core/alu_control.cpp similarity index 100% rename from Breaks6502/M6502Core/alu_control.cpp rename to Chips/M6502Core/alu_control.cpp diff --git a/Breaks6502/M6502Core/alu_control.h b/Chips/M6502Core/alu_control.h similarity index 100% rename from Breaks6502/M6502Core/alu_control.h rename to Chips/M6502Core/alu_control.h diff --git a/Breaks6502/M6502Core/branch_logic.cpp b/Chips/M6502Core/branch_logic.cpp similarity index 100% rename from Breaks6502/M6502Core/branch_logic.cpp rename to Chips/M6502Core/branch_logic.cpp diff --git a/Breaks6502/M6502Core/branch_logic.h b/Chips/M6502Core/branch_logic.h similarity index 100% rename from Breaks6502/M6502Core/branch_logic.h rename to Chips/M6502Core/branch_logic.h diff --git a/Breaks6502/M6502Core/bus_control.cpp b/Chips/M6502Core/bus_control.cpp similarity index 100% rename from Breaks6502/M6502Core/bus_control.cpp rename to Chips/M6502Core/bus_control.cpp diff --git a/Breaks6502/M6502Core/bus_control.h b/Chips/M6502Core/bus_control.h similarity index 100% rename from Breaks6502/M6502Core/bus_control.h rename to Chips/M6502Core/bus_control.h diff --git a/Breaks6502/M6502Core/core.cpp b/Chips/M6502Core/core.cpp similarity index 100% rename from Breaks6502/M6502Core/core.cpp rename to Chips/M6502Core/core.cpp diff --git a/Breaks6502/M6502Core/core.h b/Chips/M6502Core/core.h similarity index 100% rename from Breaks6502/M6502Core/core.h rename to Chips/M6502Core/core.h diff --git a/Breaks6502/M6502Core/data_bus.cpp b/Chips/M6502Core/data_bus.cpp similarity index 100% rename from Breaks6502/M6502Core/data_bus.cpp rename to Chips/M6502Core/data_bus.cpp diff --git a/Breaks6502/M6502Core/data_bus.h b/Chips/M6502Core/data_bus.h similarity index 100% rename from Breaks6502/M6502Core/data_bus.h rename to Chips/M6502Core/data_bus.h diff --git a/Breaks6502/M6502Core/debug.cpp b/Chips/M6502Core/debug.cpp similarity index 100% rename from Breaks6502/M6502Core/debug.cpp rename to Chips/M6502Core/debug.cpp diff --git a/Breaks6502/M6502Core/debug.h b/Chips/M6502Core/debug.h similarity index 100% rename from Breaks6502/M6502Core/debug.h rename to Chips/M6502Core/debug.h diff --git a/Breaks6502/M6502Core/decoder.cpp b/Chips/M6502Core/decoder.cpp similarity index 100% rename from Breaks6502/M6502Core/decoder.cpp rename to Chips/M6502Core/decoder.cpp diff --git a/Breaks6502/M6502Core/decoder.h b/Chips/M6502Core/decoder.h similarity index 100% rename from Breaks6502/M6502Core/decoder.h rename to Chips/M6502Core/decoder.h diff --git a/Breaks6502/M6502Core/dispatch.cpp b/Chips/M6502Core/dispatch.cpp similarity index 100% rename from Breaks6502/M6502Core/dispatch.cpp rename to Chips/M6502Core/dispatch.cpp diff --git a/Breaks6502/M6502Core/dispatch.h b/Chips/M6502Core/dispatch.h similarity index 100% rename from Breaks6502/M6502Core/dispatch.h rename to Chips/M6502Core/dispatch.h diff --git a/Breaks6502/M6502Core/extra_counter.cpp b/Chips/M6502Core/extra_counter.cpp similarity index 100% rename from Breaks6502/M6502Core/extra_counter.cpp rename to Chips/M6502Core/extra_counter.cpp diff --git a/Breaks6502/M6502Core/extra_counter.h b/Chips/M6502Core/extra_counter.h similarity index 100% rename from Breaks6502/M6502Core/extra_counter.h rename to Chips/M6502Core/extra_counter.h diff --git a/Breaks6502/M6502Core/flags.cpp b/Chips/M6502Core/flags.cpp similarity index 100% rename from Breaks6502/M6502Core/flags.cpp rename to Chips/M6502Core/flags.cpp diff --git a/Breaks6502/M6502Core/flags.h b/Chips/M6502Core/flags.h similarity index 100% rename from Breaks6502/M6502Core/flags.h rename to Chips/M6502Core/flags.h diff --git a/Breaks6502/M6502Core/flags_control.cpp b/Chips/M6502Core/flags_control.cpp similarity index 100% rename from Breaks6502/M6502Core/flags_control.cpp rename to Chips/M6502Core/flags_control.cpp diff --git a/Breaks6502/M6502Core/flags_control.h b/Chips/M6502Core/flags_control.h similarity index 100% rename from Breaks6502/M6502Core/flags_control.h rename to Chips/M6502Core/flags_control.h diff --git a/Breaks6502/M6502Core/interrupts.cpp b/Chips/M6502Core/interrupts.cpp similarity index 100% rename from Breaks6502/M6502Core/interrupts.cpp rename to Chips/M6502Core/interrupts.cpp diff --git a/Breaks6502/M6502Core/interrupts.h b/Chips/M6502Core/interrupts.h similarity index 100% rename from Breaks6502/M6502Core/interrupts.h rename to Chips/M6502Core/interrupts.h diff --git a/Breaks6502/M6502Core/ir.cpp b/Chips/M6502Core/ir.cpp similarity index 100% rename from Breaks6502/M6502Core/ir.cpp rename to Chips/M6502Core/ir.cpp diff --git a/Breaks6502/M6502Core/ir.h b/Chips/M6502Core/ir.h similarity index 100% rename from Breaks6502/M6502Core/ir.h rename to Chips/M6502Core/ir.h diff --git a/Breaks6502/M6502Core/pc.cpp b/Chips/M6502Core/pc.cpp similarity index 100% rename from Breaks6502/M6502Core/pc.cpp rename to Chips/M6502Core/pc.cpp diff --git a/Breaks6502/M6502Core/pc.h b/Chips/M6502Core/pc.h similarity index 100% rename from Breaks6502/M6502Core/pc.h rename to Chips/M6502Core/pc.h diff --git a/Breaks6502/M6502Core/pc_control.cpp b/Chips/M6502Core/pc_control.cpp similarity index 100% rename from Breaks6502/M6502Core/pc_control.cpp rename to Chips/M6502Core/pc_control.cpp diff --git a/Breaks6502/M6502Core/pc_control.h b/Chips/M6502Core/pc_control.h similarity index 100% rename from Breaks6502/M6502Core/pc_control.h rename to Chips/M6502Core/pc_control.h diff --git a/Breaks6502/M6502Core/pch.cpp b/Chips/M6502Core/pch.cpp similarity index 100% rename from Breaks6502/M6502Core/pch.cpp rename to Chips/M6502Core/pch.cpp diff --git a/Breaks6502/M6502Core/pch.h b/Chips/M6502Core/pch.h similarity index 100% rename from Breaks6502/M6502Core/pch.h rename to Chips/M6502Core/pch.h diff --git a/Breaks6502/M6502Core/predecode.cpp b/Chips/M6502Core/predecode.cpp similarity index 100% rename from Breaks6502/M6502Core/predecode.cpp rename to Chips/M6502Core/predecode.cpp diff --git a/Breaks6502/M6502Core/predecode.h b/Chips/M6502Core/predecode.h similarity index 100% rename from Breaks6502/M6502Core/predecode.h rename to Chips/M6502Core/predecode.h diff --git a/Breaks6502/M6502Core/random_logic.cpp b/Chips/M6502Core/random_logic.cpp similarity index 100% rename from Breaks6502/M6502Core/random_logic.cpp rename to Chips/M6502Core/random_logic.cpp diff --git a/Breaks6502/M6502Core/random_logic.h b/Chips/M6502Core/random_logic.h similarity index 100% rename from Breaks6502/M6502Core/random_logic.h rename to Chips/M6502Core/random_logic.h diff --git a/Breaks6502/M6502Core/regs.cpp b/Chips/M6502Core/regs.cpp similarity index 100% rename from Breaks6502/M6502Core/regs.cpp rename to Chips/M6502Core/regs.cpp diff --git a/Breaks6502/M6502Core/regs.h b/Chips/M6502Core/regs.h similarity index 100% rename from Breaks6502/M6502Core/regs.h rename to Chips/M6502Core/regs.h diff --git a/Breaks6502/M6502Core/regs_control.cpp b/Chips/M6502Core/regs_control.cpp similarity index 100% rename from Breaks6502/M6502Core/regs_control.cpp rename to Chips/M6502Core/regs_control.cpp diff --git a/Breaks6502/M6502Core/regs_control.h b/Chips/M6502Core/regs_control.h similarity index 100% rename from Breaks6502/M6502Core/regs_control.h rename to Chips/M6502Core/regs_control.h diff --git a/Breaks6502/M6502Core/t1_ff.jpg b/Chips/M6502Core/t1_ff.jpg similarity index 100% rename from Breaks6502/M6502Core/t1_ff.jpg rename to Chips/M6502Core/t1_ff.jpg diff --git a/BreaksPPU/PPUSim/Readme.md b/Chips/PPUSim/Readme.md similarity index 100% rename from BreaksPPU/PPUSim/Readme.md rename to Chips/PPUSim/Readme.md diff --git a/BreaksPPU/PPUSim/Scripts/.gitignore b/Chips/PPUSim/Scripts/.gitignore similarity index 100% rename from BreaksPPU/PPUSim/Scripts/.gitignore rename to Chips/PPUSim/Scripts/.gitignore diff --git a/BreaksPPU/PPUSim/Scripts/VS2022/PPUSim.vcxproj b/Chips/PPUSim/Scripts/VS2022/PPUSim.vcxproj similarity index 100% rename from BreaksPPU/PPUSim/Scripts/VS2022/PPUSim.vcxproj rename to Chips/PPUSim/Scripts/VS2022/PPUSim.vcxproj diff --git a/BreaksPPU/PPUSim/Scripts/VS2022/PPUSim.vcxproj.filters b/Chips/PPUSim/Scripts/VS2022/PPUSim.vcxproj.filters similarity index 100% rename from BreaksPPU/PPUSim/Scripts/VS2022/PPUSim.vcxproj.filters rename to Chips/PPUSim/Scripts/VS2022/PPUSim.vcxproj.filters diff --git a/BreaksPPU/PPUSim/bgcol.cpp b/Chips/PPUSim/bgcol.cpp similarity index 100% rename from BreaksPPU/PPUSim/bgcol.cpp rename to Chips/PPUSim/bgcol.cpp diff --git a/BreaksPPU/PPUSim/bgcol.h b/Chips/PPUSim/bgcol.h similarity index 100% rename from BreaksPPU/PPUSim/bgcol.h rename to Chips/PPUSim/bgcol.h diff --git a/BreaksPPU/PPUSim/cram.cpp b/Chips/PPUSim/cram.cpp similarity index 100% rename from BreaksPPU/PPUSim/cram.cpp rename to Chips/PPUSim/cram.cpp diff --git a/BreaksPPU/PPUSim/cram.h b/Chips/PPUSim/cram.h similarity index 100% rename from BreaksPPU/PPUSim/cram.h rename to Chips/PPUSim/cram.h diff --git a/BreaksPPU/PPUSim/dataread.cpp b/Chips/PPUSim/dataread.cpp similarity index 100% rename from BreaksPPU/PPUSim/dataread.cpp rename to Chips/PPUSim/dataread.cpp diff --git a/BreaksPPU/PPUSim/dataread.h b/Chips/PPUSim/dataread.h similarity index 100% rename from BreaksPPU/PPUSim/dataread.h rename to Chips/PPUSim/dataread.h diff --git a/BreaksPPU/PPUSim/debug.cpp b/Chips/PPUSim/debug.cpp similarity index 100% rename from BreaksPPU/PPUSim/debug.cpp rename to Chips/PPUSim/debug.cpp diff --git a/BreaksPPU/PPUSim/debug.h b/Chips/PPUSim/debug.h similarity index 100% rename from BreaksPPU/PPUSim/debug.h rename to Chips/PPUSim/debug.h diff --git a/BreaksPPU/PPUSim/fifo.cpp b/Chips/PPUSim/fifo.cpp similarity index 100% rename from BreaksPPU/PPUSim/fifo.cpp rename to Chips/PPUSim/fifo.cpp diff --git a/BreaksPPU/PPUSim/fifo.h b/Chips/PPUSim/fifo.h similarity index 100% rename from BreaksPPU/PPUSim/fifo.h rename to Chips/PPUSim/fifo.h diff --git a/BreaksPPU/PPUSim/fsm.cpp b/Chips/PPUSim/fsm.cpp similarity index 100% rename from BreaksPPU/PPUSim/fsm.cpp rename to Chips/PPUSim/fsm.cpp diff --git a/BreaksPPU/PPUSim/fsm.h b/Chips/PPUSim/fsm.h similarity index 100% rename from BreaksPPU/PPUSim/fsm.h rename to Chips/PPUSim/fsm.h diff --git a/BreaksPPU/PPUSim/hv.cpp b/Chips/PPUSim/hv.cpp similarity index 100% rename from BreaksPPU/PPUSim/hv.cpp rename to Chips/PPUSim/hv.cpp diff --git a/BreaksPPU/PPUSim/hv.h b/Chips/PPUSim/hv.h similarity index 100% rename from BreaksPPU/PPUSim/hv.h rename to Chips/PPUSim/hv.h diff --git a/BreaksPPU/PPUSim/hv_decoder.cpp b/Chips/PPUSim/hv_decoder.cpp similarity index 100% rename from BreaksPPU/PPUSim/hv_decoder.cpp rename to Chips/PPUSim/hv_decoder.cpp diff --git a/BreaksPPU/PPUSim/hv_decoder.h b/Chips/PPUSim/hv_decoder.h similarity index 100% rename from BreaksPPU/PPUSim/hv_decoder.h rename to Chips/PPUSim/hv_decoder.h diff --git a/BreaksPPU/PPUSim/mux.cpp b/Chips/PPUSim/mux.cpp similarity index 100% rename from BreaksPPU/PPUSim/mux.cpp rename to Chips/PPUSim/mux.cpp diff --git a/BreaksPPU/PPUSim/mux.h b/Chips/PPUSim/mux.h similarity index 100% rename from BreaksPPU/PPUSim/mux.h rename to Chips/PPUSim/mux.h diff --git a/BreaksPPU/PPUSim/oam.cpp b/Chips/PPUSim/oam.cpp similarity index 100% rename from BreaksPPU/PPUSim/oam.cpp rename to Chips/PPUSim/oam.cpp diff --git a/BreaksPPU/PPUSim/oam.h b/Chips/PPUSim/oam.h similarity index 100% rename from BreaksPPU/PPUSim/oam.h rename to Chips/PPUSim/oam.h diff --git a/BreaksPPU/PPUSim/par.cpp b/Chips/PPUSim/par.cpp similarity index 100% rename from BreaksPPU/PPUSim/par.cpp rename to Chips/PPUSim/par.cpp diff --git a/BreaksPPU/PPUSim/par.h b/Chips/PPUSim/par.h similarity index 100% rename from BreaksPPU/PPUSim/par.h rename to Chips/PPUSim/par.h diff --git a/BreaksPPU/PPUSim/patgen.cpp b/Chips/PPUSim/patgen.cpp similarity index 100% rename from BreaksPPU/PPUSim/patgen.cpp rename to Chips/PPUSim/patgen.cpp diff --git a/BreaksPPU/PPUSim/patgen.h b/Chips/PPUSim/patgen.h similarity index 100% rename from BreaksPPU/PPUSim/patgen.h rename to Chips/PPUSim/patgen.h diff --git a/BreaksPPU/PPUSim/pch.cpp b/Chips/PPUSim/pch.cpp similarity index 100% rename from BreaksPPU/PPUSim/pch.cpp rename to Chips/PPUSim/pch.cpp diff --git a/BreaksPPU/PPUSim/pch.h b/Chips/PPUSim/pch.h similarity index 100% rename from BreaksPPU/PPUSim/pch.h rename to Chips/PPUSim/pch.h diff --git a/BreaksPPU/PPUSim/pclk.cpp b/Chips/PPUSim/pclk.cpp similarity index 100% rename from BreaksPPU/PPUSim/pclk.cpp rename to Chips/PPUSim/pclk.cpp diff --git a/BreaksPPU/PPUSim/ppu.cpp b/Chips/PPUSim/ppu.cpp similarity index 100% rename from BreaksPPU/PPUSim/ppu.cpp rename to Chips/PPUSim/ppu.cpp diff --git a/BreaksPPU/PPUSim/ppu.h b/Chips/PPUSim/ppu.h similarity index 100% rename from BreaksPPU/PPUSim/ppu.h rename to Chips/PPUSim/ppu.h diff --git a/BreaksPPU/PPUSim/ppu_layers.png b/Chips/PPUSim/ppu_layers.png similarity index 100% rename from BreaksPPU/PPUSim/ppu_layers.png rename to Chips/PPUSim/ppu_layers.png diff --git a/BreaksPPU/PPUSim/regs.cpp b/Chips/PPUSim/regs.cpp similarity index 100% rename from BreaksPPU/PPUSim/regs.cpp rename to Chips/PPUSim/regs.cpp diff --git a/BreaksPPU/PPUSim/regs.h b/Chips/PPUSim/regs.h similarity index 100% rename from BreaksPPU/PPUSim/regs.h rename to Chips/PPUSim/regs.h diff --git a/BreaksPPU/PPUSim/scroll_regs.cpp b/Chips/PPUSim/scroll_regs.cpp similarity index 100% rename from BreaksPPU/PPUSim/scroll_regs.cpp rename to Chips/PPUSim/scroll_regs.cpp diff --git a/BreaksPPU/PPUSim/scroll_regs.h b/Chips/PPUSim/scroll_regs.h similarity index 100% rename from BreaksPPU/PPUSim/scroll_regs.h rename to Chips/PPUSim/scroll_regs.h diff --git a/BreaksPPU/PPUSim/sprite_eval.cpp b/Chips/PPUSim/sprite_eval.cpp similarity index 100% rename from BreaksPPU/PPUSim/sprite_eval.cpp rename to Chips/PPUSim/sprite_eval.cpp diff --git a/BreaksPPU/PPUSim/sprite_eval.h b/Chips/PPUSim/sprite_eval.h similarity index 100% rename from BreaksPPU/PPUSim/sprite_eval.h rename to Chips/PPUSim/sprite_eval.h diff --git a/BreaksPPU/PPUSim/video_out.cpp b/Chips/PPUSim/video_out.cpp similarity index 100% rename from BreaksPPU/PPUSim/video_out.cpp rename to Chips/PPUSim/video_out.cpp diff --git a/BreaksPPU/PPUSim/video_out.h b/Chips/PPUSim/video_out.h similarity index 100% rename from BreaksPPU/PPUSim/video_out.h rename to Chips/PPUSim/video_out.h diff --git a/BreaksPPU/PPUSim/vram_ctrl.cpp b/Chips/PPUSim/vram_ctrl.cpp similarity index 100% rename from BreaksPPU/PPUSim/vram_ctrl.cpp rename to Chips/PPUSim/vram_ctrl.cpp diff --git a/BreaksPPU/PPUSim/vram_ctrl.h b/Chips/PPUSim/vram_ctrl.h similarity index 100% rename from BreaksPPU/PPUSim/vram_ctrl.h rename to Chips/PPUSim/vram_ctrl.h diff --git a/Chips/Readme.md b/Chips/Readme.md new file mode 100644 index 00000000..0ce9c057 --- /dev/null +++ b/Chips/Readme.md @@ -0,0 +1,3 @@ +# Chips + +This is where the functional simulators of large chips and cores are located. diff --git a/Common/BaseBoardLib/Readme.md b/Common/BaseBoardLib/Readme.md index 98f095a7..5b8c2cd9 100644 --- a/Common/BaseBoardLib/Readme.md +++ b/Common/BaseBoardLib/Readme.md @@ -3,3 +3,29 @@ This library contains components that are found on the simulated motherboards. These are not necessarily actual chips, they can be some special debugging components, e.g. Fake6502. + +## 40H368 - IO Binding + +![40H368](/Wiki/imgstore/40H368.jpg) + +An array of `notif0` elements (in Verilog terms) used to bind IO ports. The connection of external ports and CPU differs between Famicom/NES. + +## LS139 - Famicom/NES "North Bridge" + +![LS139](/Wiki/imgstore/LS139.jpg) + +This paired decoder is used to select the address space of the PPU register interface, internal S-RAM ("Work RAM"), or external ROM. + +The distinguishing feature is that the output from one half is fed to the same chip :-) + +## LS373 - PPU VRAM Address Latch + +![LS373](/Wiki/imgstore/LS373.jpg) + +Used for PPU Address/Data bus multiplexing. "Memorizes" the lower 8 bits of the PPU address bus when PPU ALE=1. + +## SRAM - Typical S-RAM from 90's + +![SRAM](/Wiki/imgstore/SRAM.jpg) + +Well, that's easy. diff --git a/Common/BaseBoardLib/pch.h b/Common/BaseBoardLib/pch.h index ec4df621..5007faec 100644 --- a/Common/BaseBoardLib/pch.h +++ b/Common/BaseBoardLib/pch.h @@ -6,7 +6,7 @@ #include #include "../BaseLogicLib/BaseLogic.h" -#include "../../Breaks6502/M6502Core/core.h" +#include "../../Chips/M6502Core/core.h" #include "LS139.h" #include "LS368.h" diff --git a/IO/Readme.md b/IO/Readme.md index 9a9f3cd5..26cd7363 100644 --- a/IO/Readme.md +++ b/IO/Readme.md @@ -45,7 +45,7 @@ Does not contain any IOState. ## Famicom Controller (Port1) -![famicom_controller1](/UserManual/imgstore/famicom_controller1.png) +![famicom_controller1](/Wiki/imgstore/famicom_controller1.png) DeviceID: 0x00000001 @@ -64,7 +64,7 @@ Although Famicom controllers are not removable, they can be detached inside the ## Famicom Controller (Port2) -![famicom_controller2](/UserManual/imgstore/famicom_controller2.png) +![famicom_controller2](/Wiki/imgstore/famicom_controller2.png) DeviceID: 0x00000002 @@ -83,7 +83,7 @@ Volume and mic level values are in the UInt8 range so far, we'll see how good th ## NES Controller (Port1/2) -![nes_controller](/UserManual/imgstore/nes_controller.png) +![nes_controller](/Wiki/imgstore/nes_controller.png) DeviceID: 0x00000003 @@ -100,7 +100,7 @@ DeviceID: 0x00000003 ## Dendy Turbo Controller (Port1/2) -![dendy_controller](/UserManual/imgstore/dendy_controller.png) +![dendy_controller](/Wiki/imgstore/dendy_controller.png) DeviceID: 0x00000004 @@ -119,7 +119,7 @@ DeviceID: 0x00000004 ## Virtual Famicom Controller (Port1) -![virt_famicom_controller1](/UserManual/imgstore/virt_famicom_controller1.png) +![virt_famicom_controller1](/Wiki/imgstore/virt_famicom_controller1.png) DeviceID: 0x00010001 @@ -136,7 +136,7 @@ DeviceID: 0x00010001 ## Virtual Famicom Controller (Port2) -![virt_famicom_controller2](/UserManual/imgstore/virt_famicom_controller2.png) +![virt_famicom_controller2](/Wiki/imgstore/virt_famicom_controller2.png) DeviceID: 0x00010002 @@ -153,7 +153,7 @@ DeviceID: 0x00010002 ## Virtual NES Controller (Port1/2) -![virt_nes_controller](/UserManual/imgstore/virt_nes_controller.png) +![virt_nes_controller](/Wiki/imgstore/virt_nes_controller.png) DeviceID: 0x00010003 @@ -170,7 +170,7 @@ DeviceID: 0x00010003 ## Virtual Dendy Turbo Controller (Port1/2) -![virt_dendy_controller](/UserManual/imgstore/virt_dendy_controller.png) +![virt_dendy_controller](/Wiki/imgstore/virt_dendy_controller.png) DeviceID: 0x00010004 diff --git a/IO/ReadmeRus.md b/IO/ReadmeRus.md index 471c8768..cef1e895 100644 --- a/IO/ReadmeRus.md +++ b/IO/ReadmeRus.md @@ -45,7 +45,7 @@ DeviceID: 0x00000000 ## Famicom Controller (Port1) -![famicom_controller1](/UserManual/imgstore/famicom_controller1.png) +![famicom_controller1](/Wiki/imgstore/famicom_controller1.png) DeviceID: 0x00000001 @@ -64,7 +64,7 @@ DeviceID: 0x00000001 ## Famicom Controller (Port2) -![famicom_controller2](/UserManual/imgstore/famicom_controller2.png) +![famicom_controller2](/Wiki/imgstore/famicom_controller2.png) DeviceID: 0x00000002 @@ -83,7 +83,7 @@ DeviceID: 0x00000002 ## NES Controller (Port1/2) -![nes_controller](/UserManual/imgstore/nes_controller.png) +![nes_controller](/Wiki/imgstore/nes_controller.png) DeviceID: 0x00000003 @@ -100,7 +100,7 @@ DeviceID: 0x00000003 ## Dendy Turbo Controller (Port1/2) -![dendy_controller](/UserManual/imgstore/dendy_controller.png) +![dendy_controller](/Wiki/imgstore/dendy_controller.png) DeviceID: 0x00000004 @@ -119,7 +119,7 @@ DeviceID: 0x00000004 ## Virtual Famicom Controller (Port1) -![virt_famicom_controller1](/UserManual/imgstore/virt_famicom_controller1.png) +![virt_famicom_controller1](/Wiki/imgstore/virt_famicom_controller1.png) DeviceID: 0x00010001 @@ -136,7 +136,7 @@ DeviceID: 0x00010001 ## Virtual Famicom Controller (Port2) -![virt_famicom_controller2](/UserManual/imgstore/virt_famicom_controller2.png) +![virt_famicom_controller2](/Wiki/imgstore/virt_famicom_controller2.png) DeviceID: 0x00010002 @@ -153,7 +153,7 @@ DeviceID: 0x00010002 ## Virtual NES Controller (Port1/2) -![virt_nes_controller](/UserManual/imgstore/virt_nes_controller.png) +![virt_nes_controller](/Wiki/imgstore/virt_nes_controller.png) DeviceID: 0x00010003 @@ -170,7 +170,7 @@ DeviceID: 0x00010003 ## Virtual Dendy Turbo Controller (Port1/2) -![virt_dendy_controller](/UserManual/imgstore/virt_dendy_controller.png) +![virt_dendy_controller](/Wiki/imgstore/virt_dendy_controller.png) DeviceID: 0x00010004 diff --git a/Mappers/pch.h b/Mappers/pch.h index a43af46b..cd84fc27 100644 --- a/Mappers/pch.h +++ b/Mappers/pch.h @@ -9,8 +9,8 @@ #include "../Common/BaseLogicLib/BaseLogic.h" #include "../Breaknes/BreaksCore/DebugHub.h" -#include "../Breaks6502/M6502Core/core.h" -#include "../BreaksAPU/APUSim/apu.h" +#include "../Chips/M6502Core/core.h" +#include "../Chips/APUSim/apu.h" #include "../Common/BaseBoardLib/LS32.h" #include "../Common/BaseBoardLib/LS161.h" diff --git a/Readme.md b/Readme.md index 8668dede..665fcd40 100644 --- a/Readme.md +++ b/Readme.md @@ -1,11 +1,11 @@ -![logo](/UserManual/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.png) +![logo](/Wiki/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.png) NES/Famicom/Dendy emulator at the gate level. ## Progress -![progress](/UserManual/imgstore/progress.png) +![progress](/Wiki/imgstore/progress.png) ## Build for Windows diff --git a/BreaksAPU/APUPlayer/.gitignore b/Tools/APUPlayer/.gitignore similarity index 100% rename from BreaksAPU/APUPlayer/.gitignore rename to Tools/APUPlayer/.gitignore diff --git a/BreaksAPU/APUPlayer/APUPlayer.csproj b/Tools/APUPlayer/APUPlayer.csproj similarity index 100% rename from BreaksAPU/APUPlayer/APUPlayer.csproj rename to Tools/APUPlayer/APUPlayer.csproj diff --git a/BreaksAPU/APUPlayer/APUPlayer.csproj.user b/Tools/APUPlayer/APUPlayer.csproj.user similarity index 100% rename from BreaksAPU/APUPlayer/APUPlayer.csproj.user rename to Tools/APUPlayer/APUPlayer.csproj.user diff --git a/BreaksAPU/APUPlayer/APUPlayer.sln b/Tools/APUPlayer/APUPlayer.sln similarity index 97% rename from BreaksAPU/APUPlayer/APUPlayer.sln rename to Tools/APUPlayer/APUPlayer.sln index ff61293e..d9c7e770 100644 --- a/BreaksAPU/APUPlayer/APUPlayer.sln +++ b/Tools/APUPlayer/APUPlayer.sln @@ -7,9 +7,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "APUPlayer", "APUPlayer.cspr EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseLogicLib", "..\..\Common\BaseLogicLib\Scripts\VS2022\BaseLogicLib.vcxproj", "{11AAD192-46EB-4D5D-B81F-BCEE11D6AF8E}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\Chips\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Breaks6502\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Chips\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseBoardLib", "..\..\Common\BaseBoardLib\Scripts\VS2022\BaseBoardLib.vcxproj", "{36F535AD-B87B-4F4D-A5F9-0F2377FBA7EA}" EndProject @@ -17,7 +17,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpTools", "..\..\Common\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BreaksCore", "..\..\Breaknes\BreaksCore\Scripts\VS2022\BreaksCore.vcxproj", "{88908FB4-0012-4533-BFFB-30AA9F72EBDC}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\BreaksPPU\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\Chips\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JsonLib", "..\..\Common\JsonLib\Scripts\VS2022\JsonLib.vcxproj", "{8782459B-4E38-4227-AA98-6E7E8E06659C}" EndProject @@ -25,7 +25,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mappers", "..\..\Mappers\Sc EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Breaks Core", "Breaks Core", "{19CBF7A9-A823-49FB-94AE-AE1EE4BF4423}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FastAPU", "..\FastAPU\FastAPU.vcxproj", "{2C9982F5-51F1-4BDA-B331-C88690CC3BEE}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FastAPU", "..\..\Chips\FastAPU\FastAPU.vcxproj", "{2C9982F5-51F1-4BDA-B331-C88690CC3BEE}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IO", "..\..\IO\Scripts\VS2022\IO.vcxproj", "{AC032844-AE3A-4224-B6CE-451C5DBE80B9}" EndProject diff --git a/BreaksAPU/APUPlayer/App.config b/Tools/APUPlayer/App.config similarity index 100% rename from BreaksAPU/APUPlayer/App.config rename to Tools/APUPlayer/App.config diff --git a/BreaksAPU/APUPlayer/Build/.gitignore b/Tools/APUPlayer/Build/.gitignore similarity index 100% rename from BreaksAPU/APUPlayer/Build/.gitignore rename to Tools/APUPlayer/Build/.gitignore diff --git a/BreaksAPU/APUPlayer/Build/Readme.md b/Tools/APUPlayer/Build/Readme.md similarity index 100% rename from BreaksAPU/APUPlayer/Build/Readme.md rename to Tools/APUPlayer/Build/Readme.md diff --git a/BreaksAPU/APUPlayer/FormAbout.Designer.cs b/Tools/APUPlayer/FormAbout.Designer.cs similarity index 100% rename from BreaksAPU/APUPlayer/FormAbout.Designer.cs rename to Tools/APUPlayer/FormAbout.Designer.cs diff --git a/BreaksAPU/APUPlayer/FormAbout.cs b/Tools/APUPlayer/FormAbout.cs similarity index 100% rename from BreaksAPU/APUPlayer/FormAbout.cs rename to Tools/APUPlayer/FormAbout.cs diff --git a/BreaksAPU/APUPlayer/FormAbout.resx b/Tools/APUPlayer/FormAbout.resx similarity index 100% rename from BreaksAPU/APUPlayer/FormAbout.resx rename to Tools/APUPlayer/FormAbout.resx diff --git a/BreaksAPU/APUPlayer/FormMain.Designer.cs b/Tools/APUPlayer/FormMain.Designer.cs similarity index 100% rename from BreaksAPU/APUPlayer/FormMain.Designer.cs rename to Tools/APUPlayer/FormMain.Designer.cs diff --git a/BreaksAPU/APUPlayer/FormMain.cs b/Tools/APUPlayer/FormMain.cs similarity index 100% rename from BreaksAPU/APUPlayer/FormMain.cs rename to Tools/APUPlayer/FormMain.cs diff --git a/BreaksAPU/APUPlayer/FormMain.resx b/Tools/APUPlayer/FormMain.resx similarity index 100% rename from BreaksAPU/APUPlayer/FormMain.resx rename to Tools/APUPlayer/FormMain.resx diff --git a/BreaksAPU/APUPlayer/FormMainWorker.cs b/Tools/APUPlayer/FormMainWorker.cs similarity index 100% rename from BreaksAPU/APUPlayer/FormMainWorker.cs rename to Tools/APUPlayer/FormMainWorker.cs diff --git a/BreaksAPU/APUPlayer/FormSettings.Designer.cs b/Tools/APUPlayer/FormSettings.Designer.cs similarity index 100% rename from BreaksAPU/APUPlayer/FormSettings.Designer.cs rename to Tools/APUPlayer/FormSettings.Designer.cs diff --git a/BreaksAPU/APUPlayer/FormSettings.cs b/Tools/APUPlayer/FormSettings.cs similarity index 100% rename from BreaksAPU/APUPlayer/FormSettings.cs rename to Tools/APUPlayer/FormSettings.cs diff --git a/BreaksAPU/APUPlayer/FormSettings.resx b/Tools/APUPlayer/FormSettings.resx similarity index 100% rename from BreaksAPU/APUPlayer/FormSettings.resx rename to Tools/APUPlayer/FormSettings.resx diff --git a/BreaksAPU/APUPlayer/FormSnatch.Designer.cs b/Tools/APUPlayer/FormSnatch.Designer.cs similarity index 100% rename from BreaksAPU/APUPlayer/FormSnatch.Designer.cs rename to Tools/APUPlayer/FormSnatch.Designer.cs diff --git a/BreaksAPU/APUPlayer/FormSnatch.cs b/Tools/APUPlayer/FormSnatch.cs similarity index 100% rename from BreaksAPU/APUPlayer/FormSnatch.cs rename to Tools/APUPlayer/FormSnatch.cs diff --git a/BreaksAPU/APUPlayer/FormSnatch.resx b/Tools/APUPlayer/FormSnatch.resx similarity index 100% rename from BreaksAPU/APUPlayer/FormSnatch.resx rename to Tools/APUPlayer/FormSnatch.resx diff --git a/BreaksAPU/APUPlayer/Program.cs b/Tools/APUPlayer/Program.cs similarity index 100% rename from BreaksAPU/APUPlayer/Program.cs rename to Tools/APUPlayer/Program.cs diff --git a/BreaksAPU/APUPlayer/Properties/Resources.Designer.cs b/Tools/APUPlayer/Properties/Resources.Designer.cs similarity index 100% rename from BreaksAPU/APUPlayer/Properties/Resources.Designer.cs rename to Tools/APUPlayer/Properties/Resources.Designer.cs diff --git a/BreaksAPU/APUPlayer/Properties/Resources.resx b/Tools/APUPlayer/Properties/Resources.resx similarity index 100% rename from BreaksAPU/APUPlayer/Properties/Resources.resx rename to Tools/APUPlayer/Properties/Resources.resx diff --git a/BreaksAPU/APUPlayer/Properties/Settings.Designer.cs b/Tools/APUPlayer/Properties/Settings.Designer.cs similarity index 100% rename from BreaksAPU/APUPlayer/Properties/Settings.Designer.cs rename to Tools/APUPlayer/Properties/Settings.Designer.cs diff --git a/BreaksAPU/APUPlayer/Properties/Settings.settings b/Tools/APUPlayer/Properties/Settings.settings similarity index 100% rename from BreaksAPU/APUPlayer/Properties/Settings.settings rename to Tools/APUPlayer/Properties/Settings.settings diff --git a/BreaksAPU/APUPlayer/Properties/launchSettings.json b/Tools/APUPlayer/Properties/launchSettings.json similarity index 100% rename from BreaksAPU/APUPlayer/Properties/launchSettings.json rename to Tools/APUPlayer/Properties/launchSettings.json diff --git a/BreaksAPU/APUPlayer/Readme.md b/Tools/APUPlayer/Readme.md similarity index 100% rename from BreaksAPU/APUPlayer/Readme.md rename to Tools/APUPlayer/Readme.md diff --git a/BreaksAPU/APUPlayer/WavesSupport.cs b/Tools/APUPlayer/WavesSupport.cs similarity index 100% rename from BreaksAPU/APUPlayer/WavesSupport.cs rename to Tools/APUPlayer/WavesSupport.cs diff --git a/BreaksAPU/APUPlayer/button_get_debug.png b/Tools/APUPlayer/button_get_debug.png similarity index 100% rename from BreaksAPU/APUPlayer/button_get_debug.png rename to Tools/APUPlayer/button_get_debug.png diff --git a/BreaksAPU/APUPlayer/waves.png b/Tools/APUPlayer/waves.png similarity index 100% rename from BreaksAPU/APUPlayer/waves.png rename to Tools/APUPlayer/waves.png diff --git a/Demos/ApuPumpkin/.gitignore b/Tools/ApuPumpkin/.gitignore similarity index 100% rename from Demos/ApuPumpkin/.gitignore rename to Tools/ApuPumpkin/.gitignore diff --git a/Demos/ApuPumpkin/ApuPumpkin.cpp b/Tools/ApuPumpkin/ApuPumpkin.cpp similarity index 100% rename from Demos/ApuPumpkin/ApuPumpkin.cpp rename to Tools/ApuPumpkin/ApuPumpkin.cpp diff --git a/Demos/ApuPumpkin/ApuPumpkin.sln b/Tools/ApuPumpkin/ApuPumpkin.sln similarity index 93% rename from Demos/ApuPumpkin/ApuPumpkin.sln rename to Tools/ApuPumpkin/ApuPumpkin.sln index 511779f0..6546353f 100644 --- a/Demos/ApuPumpkin/ApuPumpkin.sln +++ b/Tools/ApuPumpkin/ApuPumpkin.sln @@ -7,11 +7,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ApuPumpkin", "ApuPumpkin.vc EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseLogicLib", "..\..\Common\BaseLogicLib\Scripts\VS2022\BaseLogicLib.vcxproj", "{11AAD192-46EB-4D5D-B81F-BCEE11D6AF8E}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Breaks6502\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Chips\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\BreaksAPU\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\Chips\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FastAPU", "..\..\BreaksAPU\FastAPU\FastAPU.vcxproj", "{2C9982F5-51F1-4BDA-B331-C88690CC3BEE}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FastAPU", "..\..\Chips\FastAPU\FastAPU.vcxproj", "{2C9982F5-51F1-4BDA-B331-C88690CC3BEE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Demos/ApuPumpkin/ApuPumpkin.vcxproj b/Tools/ApuPumpkin/ApuPumpkin.vcxproj similarity index 97% rename from Demos/ApuPumpkin/ApuPumpkin.vcxproj rename to Tools/ApuPumpkin/ApuPumpkin.vcxproj index 0ff0fa43..437707f9 100644 --- a/Demos/ApuPumpkin/ApuPumpkin.vcxproj +++ b/Tools/ApuPumpkin/ApuPumpkin.vcxproj @@ -154,13 +154,13 @@ - + {75210c0a-a812-4246-a179-b50d8a25a121} - + {50e93d78-36dc-46c3-82ea-cab373e18729} - + {2c9982f5-51f1-4bda-b331-c88690cc3bee} diff --git a/Demos/ApuPumpkin/ApuPumpkin.vcxproj.filters b/Tools/ApuPumpkin/ApuPumpkin.vcxproj.filters similarity index 100% rename from Demos/ApuPumpkin/ApuPumpkin.vcxproj.filters rename to Tools/ApuPumpkin/ApuPumpkin.vcxproj.filters diff --git a/Demos/ApuPumpkin/Readme.md b/Tools/ApuPumpkin/Readme.md similarity index 100% rename from Demos/ApuPumpkin/Readme.md rename to Tools/ApuPumpkin/Readme.md diff --git a/BreaksAPU/FastAPU/pch.cpp b/Tools/ApuPumpkin/pch.cpp similarity index 100% rename from BreaksAPU/FastAPU/pch.cpp rename to Tools/ApuPumpkin/pch.cpp diff --git a/Demos/ApuPumpkin/pch.h b/Tools/ApuPumpkin/pch.h similarity index 60% rename from Demos/ApuPumpkin/pch.h rename to Tools/ApuPumpkin/pch.h index 85ba9ffa..929106df 100644 --- a/Demos/ApuPumpkin/pch.h +++ b/Tools/ApuPumpkin/pch.h @@ -1,6 +1,6 @@ #pragma once -#define FAST_APU 1 +#define FAST_APU 0 #include #include @@ -11,10 +11,10 @@ #include #include "../../Common/BaseLogicLib/BaseLogic.h" -#include "../../Breaks6502/M6502Core/core.h" +#include "../../Chips/M6502Core/core.h" #if FAST_APU -#include "../../BreaksAPU/FastAPU/apu.h" +#include "../../Chips/FastAPU/apu.h" #else -#include "../../BreaksAPU/APUSim/apu.h" +#include "../../Chips/APUSim/apu.h" #endif diff --git a/Breaks6502/Breakasm/.gitignore b/Tools/Breakasm/.gitignore similarity index 100% rename from Breaks6502/Breakasm/.gitignore rename to Tools/Breakasm/.gitignore diff --git a/Breaks6502/Breakasm/ASM.cpp b/Tools/Breakasm/ASM.cpp similarity index 100% rename from Breaks6502/Breakasm/ASM.cpp rename to Tools/Breakasm/ASM.cpp diff --git a/Breaks6502/Breakasm/ASM.h b/Tools/Breakasm/ASM.h similarity index 100% rename from Breaks6502/Breakasm/ASM.h rename to Tools/Breakasm/ASM.h diff --git a/Breaks6502/Breakasm/ASMOPS.cpp b/Tools/Breakasm/ASMOPS.cpp similarity index 100% rename from Breaks6502/Breakasm/ASMOPS.cpp rename to Tools/Breakasm/ASMOPS.cpp diff --git a/Breaks6502/Breakasm/ASMOPS.h b/Tools/Breakasm/ASMOPS.h similarity index 100% rename from Breaks6502/Breakasm/ASMOPS.h rename to Tools/Breakasm/ASMOPS.h diff --git a/Breaks6502/Breakasm/CMakeLists.txt b/Tools/Breakasm/CMakeLists.txt similarity index 100% rename from Breaks6502/Breakasm/CMakeLists.txt rename to Tools/Breakasm/CMakeLists.txt diff --git a/Breaks6502/Breakasm/Readme.md b/Tools/Breakasm/Readme.md similarity index 100% rename from Breaks6502/Breakasm/Readme.md rename to Tools/Breakasm/Readme.md diff --git a/Breaks6502/Breakasm/ReadmeRus.md b/Tools/Breakasm/ReadmeRus.md similarity index 100% rename from Breaks6502/Breakasm/ReadmeRus.md rename to Tools/Breakasm/ReadmeRus.md diff --git a/Breaks6502/Breakasm/Scripts/VS2022/Breakasm.sln b/Tools/Breakasm/Scripts/VS2022/Breakasm.sln similarity index 100% rename from Breaks6502/Breakasm/Scripts/VS2022/Breakasm.sln rename to Tools/Breakasm/Scripts/VS2022/Breakasm.sln diff --git a/Breaks6502/Breakasm/Scripts/VS2022/Breakasm.vcxproj b/Tools/Breakasm/Scripts/VS2022/Breakasm.vcxproj similarity index 100% rename from Breaks6502/Breakasm/Scripts/VS2022/Breakasm.vcxproj rename to Tools/Breakasm/Scripts/VS2022/Breakasm.vcxproj diff --git a/Breaks6502/Breakasm/Scripts/VS2022/Breakasm.vcxproj.filters b/Tools/Breakasm/Scripts/VS2022/Breakasm.vcxproj.filters similarity index 100% rename from Breaks6502/Breakasm/Scripts/VS2022/Breakasm.vcxproj.filters rename to Tools/Breakasm/Scripts/VS2022/Breakasm.vcxproj.filters diff --git a/Breaks6502/Breakasm/Test.asm b/Tools/Breakasm/Test.asm similarity index 100% rename from Breaks6502/Breakasm/Test.asm rename to Tools/Breakasm/Test.asm diff --git a/Breaks6502/Breakasm/TestAll.asm b/Tools/Breakasm/TestAll.asm similarity index 100% rename from Breaks6502/Breakasm/TestAll.asm rename to Tools/Breakasm/TestAll.asm diff --git a/Breaks6502/Breakasm/main.cpp b/Tools/Breakasm/main.cpp similarity index 100% rename from Breaks6502/Breakasm/main.cpp rename to Tools/Breakasm/main.cpp diff --git a/Demos/ApuPumpkin/pch.cpp b/Tools/Breakasm/pch.cpp similarity index 100% rename from Demos/ApuPumpkin/pch.cpp rename to Tools/Breakasm/pch.cpp diff --git a/Breaks6502/Breakasm/pch.h b/Tools/Breakasm/pch.h similarity index 100% rename from Breaks6502/Breakasm/pch.h rename to Tools/Breakasm/pch.h diff --git a/Breaks6502/BreaksDebug/.gitignore b/Tools/BreaksDebug/.gitignore similarity index 100% rename from Breaks6502/BreaksDebug/.gitignore rename to Tools/BreaksDebug/.gitignore diff --git a/Breaks6502/BreaksDebug/App.config b/Tools/BreaksDebug/App.config similarity index 100% rename from Breaks6502/BreaksDebug/App.config rename to Tools/BreaksDebug/App.config diff --git a/Breaks6502/BreaksDebug/BreaksDebug.csproj b/Tools/BreaksDebug/BreaksDebug.csproj similarity index 100% rename from Breaks6502/BreaksDebug/BreaksDebug.csproj rename to Tools/BreaksDebug/BreaksDebug.csproj diff --git a/Breaks6502/BreaksDebug/BreaksDebug.csproj.user b/Tools/BreaksDebug/BreaksDebug.csproj.user similarity index 100% rename from Breaks6502/BreaksDebug/BreaksDebug.csproj.user rename to Tools/BreaksDebug/BreaksDebug.csproj.user diff --git a/Breaks6502/BreaksDebug/BreaksDebug.sln b/Tools/BreaksDebug/BreaksDebug.sln similarity index 97% rename from Breaks6502/BreaksDebug/BreaksDebug.sln rename to Tools/BreaksDebug/BreaksDebug.sln index ddc79a00..8456fe20 100644 --- a/Breaks6502/BreaksDebug/BreaksDebug.sln +++ b/Tools/BreaksDebug/BreaksDebug.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 17.1.32319.34 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BreaksDebug", "BreaksDebug.csproj", "{F609D0B4-2EB2-491C-BE8F-E2B5D65ECDA4}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Chips\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseLogicLib", "..\..\Common\BaseLogicLib\Scripts\VS2022\BaseLogicLib.vcxproj", "{11AAD192-46EB-4D5D-B81F-BCEE11D6AF8E}" EndProject @@ -13,7 +13,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpTools", "..\..\Common\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BreaksCore", "..\..\Breaknes\BreaksCore\Scripts\VS2022\BreaksCore.vcxproj", "{88908FB4-0012-4533-BFFB-30AA9F72EBDC}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\BreaksPPU\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\Chips\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JsonLib", "..\..\Common\JsonLib\Scripts\VS2022\JsonLib.vcxproj", "{8782459B-4E38-4227-AA98-6E7E8E06659C}" EndProject @@ -21,7 +21,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mappers", "..\..\Mappers\Sc EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseBoardLib", "..\..\Common\BaseBoardLib\Scripts\VS2022\BaseBoardLib.vcxproj", "{36F535AD-B87B-4F4D-A5F9-0F2377FBA7EA}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\BreaksAPU\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\Chips\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BreaksCore Libs", "BreaksCore Libs", "{E71BE94D-A2B9-4175-B510-261ACD5576A7}" EndProject diff --git a/Breaks6502/BreaksDebug/Build/Test.asm b/Tools/BreaksDebug/Build/Test.asm similarity index 100% rename from Breaks6502/BreaksDebug/Build/Test.asm rename to Tools/BreaksDebug/Build/Test.asm diff --git a/Breaks6502/BreaksDebug/Build/Test.json b/Tools/BreaksDebug/Build/Test.json similarity index 100% rename from Breaks6502/BreaksDebug/Build/Test.json rename to Tools/BreaksDebug/Build/Test.json diff --git a/Breaks6502/BreaksDebug/Build/TestIllegal.asm b/Tools/BreaksDebug/Build/TestIllegal.asm similarity index 100% rename from Breaks6502/BreaksDebug/Build/TestIllegal.asm rename to Tools/BreaksDebug/Build/TestIllegal.asm diff --git a/Breaks6502/BreaksDebug/Build/TestRora.asm b/Tools/BreaksDebug/Build/TestRora.asm similarity index 100% rename from Breaks6502/BreaksDebug/Build/TestRora.asm rename to Tools/BreaksDebug/Build/TestRora.asm diff --git a/Breaks6502/BreaksDebug/Build/Visual6502.asm b/Tools/BreaksDebug/Build/Visual6502.asm similarity index 100% rename from Breaks6502/BreaksDebug/Build/Visual6502.asm rename to Tools/BreaksDebug/Build/Visual6502.asm diff --git a/Breaks6502/BreaksDebug/DumpMarkdown.cs b/Tools/BreaksDebug/DumpMarkdown.cs similarity index 100% rename from Breaks6502/BreaksDebug/DumpMarkdown.cs rename to Tools/BreaksDebug/DumpMarkdown.cs diff --git a/Breaks6502/BreaksDebug/FormAbout.Designer.cs b/Tools/BreaksDebug/FormAbout.Designer.cs similarity index 100% rename from Breaks6502/BreaksDebug/FormAbout.Designer.cs rename to Tools/BreaksDebug/FormAbout.Designer.cs diff --git a/Breaks6502/BreaksDebug/FormAbout.cs b/Tools/BreaksDebug/FormAbout.cs similarity index 100% rename from Breaks6502/BreaksDebug/FormAbout.cs rename to Tools/BreaksDebug/FormAbout.cs diff --git a/Breaks6502/BreaksDebug/FormAbout.resx b/Tools/BreaksDebug/FormAbout.resx similarity index 100% rename from Breaks6502/BreaksDebug/FormAbout.resx rename to Tools/BreaksDebug/FormAbout.resx diff --git a/Breaks6502/BreaksDebug/FormMain.Designer.cs b/Tools/BreaksDebug/FormMain.Designer.cs similarity index 100% rename from Breaks6502/BreaksDebug/FormMain.Designer.cs rename to Tools/BreaksDebug/FormMain.Designer.cs diff --git a/Breaks6502/BreaksDebug/FormMain.cs b/Tools/BreaksDebug/FormMain.cs similarity index 100% rename from Breaks6502/BreaksDebug/FormMain.cs rename to Tools/BreaksDebug/FormMain.cs diff --git a/Breaks6502/BreaksDebug/FormMain.resx b/Tools/BreaksDebug/FormMain.resx similarity index 100% rename from Breaks6502/BreaksDebug/FormMain.resx rename to Tools/BreaksDebug/FormMain.resx diff --git a/Breaks6502/BreaksDebug/Program.cs b/Tools/BreaksDebug/Program.cs similarity index 100% rename from Breaks6502/BreaksDebug/Program.cs rename to Tools/BreaksDebug/Program.cs diff --git a/Breaks6502/BreaksDebug/Properties/AssemblyInfo.cs b/Tools/BreaksDebug/Properties/AssemblyInfo.cs similarity index 100% rename from Breaks6502/BreaksDebug/Properties/AssemblyInfo.cs rename to Tools/BreaksDebug/Properties/AssemblyInfo.cs diff --git a/Breaks6502/BreaksDebug/Properties/Resources.Designer.cs b/Tools/BreaksDebug/Properties/Resources.Designer.cs similarity index 100% rename from Breaks6502/BreaksDebug/Properties/Resources.Designer.cs rename to Tools/BreaksDebug/Properties/Resources.Designer.cs diff --git a/Breaks6502/BreaksDebug/Properties/Resources.resx b/Tools/BreaksDebug/Properties/Resources.resx similarity index 100% rename from Breaks6502/BreaksDebug/Properties/Resources.resx rename to Tools/BreaksDebug/Properties/Resources.resx diff --git a/Breaks6502/BreaksDebug/Properties/Settings.Designer.cs b/Tools/BreaksDebug/Properties/Settings.Designer.cs similarity index 100% rename from Breaks6502/BreaksDebug/Properties/Settings.Designer.cs rename to Tools/BreaksDebug/Properties/Settings.Designer.cs diff --git a/Breaks6502/BreaksDebug/Properties/Settings.settings b/Tools/BreaksDebug/Properties/Settings.settings similarity index 100% rename from Breaks6502/BreaksDebug/Properties/Settings.settings rename to Tools/BreaksDebug/Properties/Settings.settings diff --git a/Breaks6502/BreaksDebug/Properties/launchSettings.json b/Tools/BreaksDebug/Properties/launchSettings.json similarity index 100% rename from Breaks6502/BreaksDebug/Properties/launchSettings.json rename to Tools/BreaksDebug/Properties/launchSettings.json diff --git a/Breaks6502/BreaksDebug/QuickDisasm.cs b/Tools/BreaksDebug/QuickDisasm.cs similarity index 100% rename from Breaks6502/BreaksDebug/QuickDisasm.cs rename to Tools/BreaksDebug/QuickDisasm.cs diff --git a/Breaks6502/BreaksDebug/Readme.md b/Tools/BreaksDebug/Readme.md similarity index 98% rename from Breaks6502/BreaksDebug/Readme.md rename to Tools/BreaksDebug/Readme.md index 5177db31..cf982b73 100644 --- a/Breaks6502/BreaksDebug/Readme.md +++ b/Tools/BreaksDebug/Readme.md @@ -63,7 +63,7 @@ About that: |ADL|0x0E| |ADH|0xC0| -![20_JSR_T1_PHI1](/UserManual/imgstore/20_JSR_T1_PHI1.jpg) +![20_JSR_T1_PHI1](/Wiki/imgstore/20_JSR_T1_PHI1.jpg) ## UnitTest diff --git a/Breaks6502/BreaksDebug/UnitTest.cs b/Tools/BreaksDebug/UnitTest.cs similarity index 100% rename from Breaks6502/BreaksDebug/UnitTest.cs rename to Tools/BreaksDebug/UnitTest.cs diff --git a/Breaks6502/BreaksDebug/WavesSupport.cs b/Tools/BreaksDebug/WavesSupport.cs similarity index 100% rename from Breaks6502/BreaksDebug/WavesSupport.cs rename to Tools/BreaksDebug/WavesSupport.cs diff --git a/Breaks6502/BreaksDebug/concept.jpg b/Tools/BreaksDebug/concept.jpg similarity index 100% rename from Breaks6502/BreaksDebug/concept.jpg rename to Tools/BreaksDebug/concept.jpg diff --git a/Breaks6502/BreaksDebug/hand-holding-hammer-icon-png.ico b/Tools/BreaksDebug/hand-holding-hammer-icon-png.ico similarity index 100% rename from Breaks6502/BreaksDebug/hand-holding-hammer-icon-png.ico rename to Tools/BreaksDebug/hand-holding-hammer-icon-png.ico diff --git a/Breaks6502/BreaksDebug/step.png b/Tools/BreaksDebug/step.png similarity index 100% rename from Breaks6502/BreaksDebug/step.png rename to Tools/BreaksDebug/step.png diff --git a/Demos/DumpRegdump/.gitignore b/Tools/DumpRegdump/.gitignore similarity index 100% rename from Demos/DumpRegdump/.gitignore rename to Tools/DumpRegdump/.gitignore diff --git a/Demos/DumpRegdump/DumpRegdump.py b/Tools/DumpRegdump/DumpRegdump.py similarity index 100% rename from Demos/DumpRegdump/DumpRegdump.py rename to Tools/DumpRegdump/DumpRegdump.py diff --git a/Demos/FurryPlotDemo/.gitignore b/Tools/FurryPlotDemo/.gitignore similarity index 100% rename from Demos/FurryPlotDemo/.gitignore rename to Tools/FurryPlotDemo/.gitignore diff --git a/Demos/FurryPlotDemo/FormMain.Designer.cs b/Tools/FurryPlotDemo/FormMain.Designer.cs similarity index 100% rename from Demos/FurryPlotDemo/FormMain.Designer.cs rename to Tools/FurryPlotDemo/FormMain.Designer.cs diff --git a/Demos/FurryPlotDemo/FormMain.cs b/Tools/FurryPlotDemo/FormMain.cs similarity index 100% rename from Demos/FurryPlotDemo/FormMain.cs rename to Tools/FurryPlotDemo/FormMain.cs diff --git a/Demos/FurryPlotDemo/FormMain.resx b/Tools/FurryPlotDemo/FormMain.resx similarity index 100% rename from Demos/FurryPlotDemo/FormMain.resx rename to Tools/FurryPlotDemo/FormMain.resx diff --git a/Demos/FurryPlotDemo/FurryPlotControl.cs b/Tools/FurryPlotDemo/FurryPlotControl.cs similarity index 100% rename from Demos/FurryPlotDemo/FurryPlotControl.cs rename to Tools/FurryPlotDemo/FurryPlotControl.cs diff --git a/Demos/FurryPlotDemo/FurryPlotDemo.csproj b/Tools/FurryPlotDemo/FurryPlotDemo.csproj similarity index 100% rename from Demos/FurryPlotDemo/FurryPlotDemo.csproj rename to Tools/FurryPlotDemo/FurryPlotDemo.csproj diff --git a/Demos/FurryPlotDemo/FurryPlotDemo.sln b/Tools/FurryPlotDemo/FurryPlotDemo.sln similarity index 100% rename from Demos/FurryPlotDemo/FurryPlotDemo.sln rename to Tools/FurryPlotDemo/FurryPlotDemo.sln diff --git a/Demos/FurryPlotDemo/Program.cs b/Tools/FurryPlotDemo/Program.cs similarity index 100% rename from Demos/FurryPlotDemo/Program.cs rename to Tools/FurryPlotDemo/Program.cs diff --git a/Demos/InfernoColormap/.gitignore b/Tools/InfernoColormap/.gitignore similarity index 100% rename from Demos/InfernoColormap/.gitignore rename to Tools/InfernoColormap/.gitignore diff --git a/Demos/InfernoColormap/FormMain.Designer.cs b/Tools/InfernoColormap/FormMain.Designer.cs similarity index 100% rename from Demos/InfernoColormap/FormMain.Designer.cs rename to Tools/InfernoColormap/FormMain.Designer.cs diff --git a/Demos/InfernoColormap/FormMain.cs b/Tools/InfernoColormap/FormMain.cs similarity index 100% rename from Demos/InfernoColormap/FormMain.cs rename to Tools/InfernoColormap/FormMain.cs diff --git a/Demos/InfernoColormap/FormMain.resx b/Tools/InfernoColormap/FormMain.resx similarity index 100% rename from Demos/InfernoColormap/FormMain.resx rename to Tools/InfernoColormap/FormMain.resx diff --git a/Demos/InfernoColormap/InfernoColormap.cs b/Tools/InfernoColormap/InfernoColormap.cs similarity index 100% rename from Demos/InfernoColormap/InfernoColormap.cs rename to Tools/InfernoColormap/InfernoColormap.cs diff --git a/Demos/InfernoColormap/InfernoColormap.csproj b/Tools/InfernoColormap/InfernoColormap.csproj similarity index 100% rename from Demos/InfernoColormap/InfernoColormap.csproj rename to Tools/InfernoColormap/InfernoColormap.csproj diff --git a/Demos/InfernoColormap/InfernoColormap.sln b/Tools/InfernoColormap/InfernoColormap.sln similarity index 100% rename from Demos/InfernoColormap/InfernoColormap.sln rename to Tools/InfernoColormap/InfernoColormap.sln diff --git a/Demos/InfernoColormap/Program.cs b/Tools/InfernoColormap/Program.cs similarity index 100% rename from Demos/InfernoColormap/Program.cs rename to Tools/InfernoColormap/Program.cs diff --git a/Demos/InfernoColormap/Readme.md b/Tools/InfernoColormap/Readme.md similarity index 80% rename from Demos/InfernoColormap/Readme.md rename to Tools/InfernoColormap/Readme.md index 20a1e4f2..a7db08a7 100644 --- a/Demos/InfernoColormap/Readme.md +++ b/Tools/InfernoColormap/Readme.md @@ -1,6 +1,6 @@ # InfernoColormap -![InfernoColormap](/UserManual/imgstore/InfernoColormap.png) +![InfernoColormap](/Wiki/imgstore/InfernoColormap.png) Demo to test the inferno palette from Matplotlib (https://matplotlib.org/stable/gallery/color/colormap_reference.html#sphx-glr-gallery-color-colormap-reference-py) diff --git a/BreaksPPU/PPUPlayer/.gitignore b/Tools/PPUPlayer/.gitignore similarity index 100% rename from BreaksPPU/PPUPlayer/.gitignore rename to Tools/PPUPlayer/.gitignore diff --git a/BreaksPPU/PPUPlayer/Build/.gitignore b/Tools/PPUPlayer/Build/.gitignore similarity index 100% rename from BreaksPPU/PPUPlayer/Build/.gitignore rename to Tools/PPUPlayer/Build/.gitignore diff --git a/BreaksPPU/PPUPlayer/Build/Readme.md b/Tools/PPUPlayer/Build/Readme.md similarity index 100% rename from BreaksPPU/PPUPlayer/Build/Readme.md rename to Tools/PPUPlayer/Build/Readme.md diff --git a/BreaksPPU/PPUPlayer/DummyNrom.cs b/Tools/PPUPlayer/DummyNrom.cs similarity index 100% rename from BreaksPPU/PPUPlayer/DummyNrom.cs rename to Tools/PPUPlayer/DummyNrom.cs diff --git a/BreaksPPU/PPUPlayer/DumpsProcessing.cs b/Tools/PPUPlayer/DumpsProcessing.cs similarity index 100% rename from BreaksPPU/PPUPlayer/DumpsProcessing.cs rename to Tools/PPUPlayer/DumpsProcessing.cs diff --git a/BreaksPPU/PPUPlayer/FormAbout.Designer.cs b/Tools/PPUPlayer/FormAbout.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormAbout.Designer.cs rename to Tools/PPUPlayer/FormAbout.Designer.cs diff --git a/BreaksPPU/PPUPlayer/FormAbout.cs b/Tools/PPUPlayer/FormAbout.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormAbout.cs rename to Tools/PPUPlayer/FormAbout.cs diff --git a/BreaksPPU/PPUPlayer/FormAbout.resx b/Tools/PPUPlayer/FormAbout.resx similarity index 100% rename from BreaksPPU/PPUPlayer/FormAbout.resx rename to Tools/PPUPlayer/FormAbout.resx diff --git a/BreaksPPU/PPUPlayer/FormColorSpace.Designer.cs b/Tools/PPUPlayer/FormColorSpace.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormColorSpace.Designer.cs rename to Tools/PPUPlayer/FormColorSpace.Designer.cs diff --git a/BreaksPPU/PPUPlayer/FormColorSpace.cs b/Tools/PPUPlayer/FormColorSpace.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormColorSpace.cs rename to Tools/PPUPlayer/FormColorSpace.cs diff --git a/BreaksPPU/PPUPlayer/FormColorSpace.resx b/Tools/PPUPlayer/FormColorSpace.resx similarity index 100% rename from BreaksPPU/PPUPlayer/FormColorSpace.resx rename to Tools/PPUPlayer/FormColorSpace.resx diff --git a/BreaksPPU/PPUPlayer/FormComponentViewer.Designer.cs b/Tools/PPUPlayer/FormComponentViewer.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormComponentViewer.Designer.cs rename to Tools/PPUPlayer/FormComponentViewer.Designer.cs diff --git a/BreaksPPU/PPUPlayer/FormComponentViewer.cs b/Tools/PPUPlayer/FormComponentViewer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormComponentViewer.cs rename to Tools/PPUPlayer/FormComponentViewer.cs diff --git a/BreaksPPU/PPUPlayer/FormComponentViewer.resx b/Tools/PPUPlayer/FormComponentViewer.resx similarity index 100% rename from BreaksPPU/PPUPlayer/FormComponentViewer.resx rename to Tools/PPUPlayer/FormComponentViewer.resx diff --git a/BreaksPPU/PPUPlayer/FormCompositeViewer.Designer.cs b/Tools/PPUPlayer/FormCompositeViewer.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormCompositeViewer.Designer.cs rename to Tools/PPUPlayer/FormCompositeViewer.Designer.cs diff --git a/BreaksPPU/PPUPlayer/FormCompositeViewer.cs b/Tools/PPUPlayer/FormCompositeViewer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormCompositeViewer.cs rename to Tools/PPUPlayer/FormCompositeViewer.cs diff --git a/BreaksPPU/PPUPlayer/FormCompositeViewer.resx b/Tools/PPUPlayer/FormCompositeViewer.resx similarity index 100% rename from BreaksPPU/PPUPlayer/FormCompositeViewer.resx rename to Tools/PPUPlayer/FormCompositeViewer.resx diff --git a/BreaksPPU/PPUPlayer/FormMain.Designer.cs b/Tools/PPUPlayer/FormMain.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormMain.Designer.cs rename to Tools/PPUPlayer/FormMain.Designer.cs diff --git a/BreaksPPU/PPUPlayer/FormMain.cs b/Tools/PPUPlayer/FormMain.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormMain.cs rename to Tools/PPUPlayer/FormMain.cs diff --git a/BreaksPPU/PPUPlayer/FormMain.resx b/Tools/PPUPlayer/FormMain.resx similarity index 100% rename from BreaksPPU/PPUPlayer/FormMain.resx rename to Tools/PPUPlayer/FormMain.resx diff --git a/BreaksPPU/PPUPlayer/FormMainWorker.cs b/Tools/PPUPlayer/FormMainWorker.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormMainWorker.cs rename to Tools/PPUPlayer/FormMainWorker.cs diff --git a/BreaksPPU/PPUPlayer/FormRawViewer.Designer.cs b/Tools/PPUPlayer/FormRawViewer.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormRawViewer.Designer.cs rename to Tools/PPUPlayer/FormRawViewer.Designer.cs diff --git a/BreaksPPU/PPUPlayer/FormRawViewer.cs b/Tools/PPUPlayer/FormRawViewer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormRawViewer.cs rename to Tools/PPUPlayer/FormRawViewer.cs diff --git a/BreaksPPU/PPUPlayer/FormRawViewer.resx b/Tools/PPUPlayer/FormRawViewer.resx similarity index 100% rename from BreaksPPU/PPUPlayer/FormRawViewer.resx rename to Tools/PPUPlayer/FormRawViewer.resx diff --git a/BreaksPPU/PPUPlayer/FormSettings.Designer.cs b/Tools/PPUPlayer/FormSettings.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormSettings.Designer.cs rename to Tools/PPUPlayer/FormSettings.Designer.cs diff --git a/BreaksPPU/PPUPlayer/FormSettings.cs b/Tools/PPUPlayer/FormSettings.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormSettings.cs rename to Tools/PPUPlayer/FormSettings.cs diff --git a/BreaksPPU/PPUPlayer/FormSettings.resx b/Tools/PPUPlayer/FormSettings.resx similarity index 100% rename from BreaksPPU/PPUPlayer/FormSettings.resx rename to Tools/PPUPlayer/FormSettings.resx diff --git a/BreaksPPU/PPUPlayer/FormSnatch.Designer.cs b/Tools/PPUPlayer/FormSnatch.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormSnatch.Designer.cs rename to Tools/PPUPlayer/FormSnatch.Designer.cs diff --git a/BreaksPPU/PPUPlayer/FormSnatch.cs b/Tools/PPUPlayer/FormSnatch.cs similarity index 100% rename from BreaksPPU/PPUPlayer/FormSnatch.cs rename to Tools/PPUPlayer/FormSnatch.cs diff --git a/BreaksPPU/PPUPlayer/FormSnatch.resx b/Tools/PPUPlayer/FormSnatch.resx similarity index 100% rename from BreaksPPU/PPUPlayer/FormSnatch.resx rename to Tools/PPUPlayer/FormSnatch.resx diff --git a/BreaksPPU/PPUPlayer/PPUPlayer.csproj b/Tools/PPUPlayer/PPUPlayer.csproj similarity index 100% rename from BreaksPPU/PPUPlayer/PPUPlayer.csproj rename to Tools/PPUPlayer/PPUPlayer.csproj diff --git a/BreaksPPU/PPUPlayer/PPUPlayer.csproj.user b/Tools/PPUPlayer/PPUPlayer.csproj.user similarity index 100% rename from BreaksPPU/PPUPlayer/PPUPlayer.csproj.user rename to Tools/PPUPlayer/PPUPlayer.csproj.user diff --git a/BreaksPPU/PPUPlayer/PPUPlayer.sln b/Tools/PPUPlayer/PPUPlayer.sln similarity index 97% rename from BreaksPPU/PPUPlayer/PPUPlayer.sln rename to Tools/PPUPlayer/PPUPlayer.sln index 9552ac1a..b967ce8a 100644 --- a/BreaksPPU/PPUPlayer/PPUPlayer.sln +++ b/Tools/PPUPlayer/PPUPlayer.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 17.1.32319.34 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PPUPlayer", "PPUPlayer.csproj", "{14D56ED1-75C4-4479-AEF2-CAA392122019}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\Chips\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseBoardLib", "..\..\Common\BaseBoardLib\Scripts\VS2022\BaseBoardLib.vcxproj", "{36F535AD-B87B-4F4D-A5F9-0F2377FBA7EA}" EndProject @@ -17,11 +17,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharpTools", "..\..\Common\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BreaksCore", "..\..\Breaknes\BreaksCore\Scripts\VS2022\BreaksCore.vcxproj", "{88908FB4-0012-4533-BFFB-30AA9F72EBDC}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Breaks6502\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Chips\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Breaks Core", "Breaks Core", "{A8AE6809-CB40-4389-B27B-B767576D0D5C}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\BreaksAPU\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\..\Chips\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JsonLib", "..\..\Common\JsonLib\Scripts\VS2022\JsonLib.vcxproj", "{8782459B-4E38-4227-AA98-6E7E8E06659C}" EndProject diff --git a/BreaksPPU/PPUPlayer/PPU_Player.png b/Tools/PPUPlayer/PPU_Player.png similarity index 100% rename from BreaksPPU/PPUPlayer/PPU_Player.png rename to Tools/PPUPlayer/PPU_Player.png diff --git a/BreaksPPU/PPUPlayer/PPU_Player_Diag_Eng.png b/Tools/PPUPlayer/PPU_Player_Diag_Eng.png similarity index 100% rename from BreaksPPU/PPUPlayer/PPU_Player_Diag_Eng.png rename to Tools/PPUPlayer/PPU_Player_Diag_Eng.png diff --git a/BreaksPPU/PPUPlayer/Program.cs b/Tools/PPUPlayer/Program.cs similarity index 100% rename from BreaksPPU/PPUPlayer/Program.cs rename to Tools/PPUPlayer/Program.cs diff --git a/BreaksPPU/PPUPlayer/Properties/Resources.Designer.cs b/Tools/PPUPlayer/Properties/Resources.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/Properties/Resources.Designer.cs rename to Tools/PPUPlayer/Properties/Resources.Designer.cs diff --git a/BreaksPPU/PPUPlayer/Properties/Resources.resx b/Tools/PPUPlayer/Properties/Resources.resx similarity index 100% rename from BreaksPPU/PPUPlayer/Properties/Resources.resx rename to Tools/PPUPlayer/Properties/Resources.resx diff --git a/BreaksPPU/PPUPlayer/Properties/Settings.Designer.cs b/Tools/PPUPlayer/Properties/Settings.Designer.cs similarity index 100% rename from BreaksPPU/PPUPlayer/Properties/Settings.Designer.cs rename to Tools/PPUPlayer/Properties/Settings.Designer.cs diff --git a/BreaksPPU/PPUPlayer/Properties/Settings.settings b/Tools/PPUPlayer/Properties/Settings.settings similarity index 100% rename from BreaksPPU/PPUPlayer/Properties/Settings.settings rename to Tools/PPUPlayer/Properties/Settings.settings diff --git a/BreaksPPU/PPUPlayer/Properties/launchSettings.json b/Tools/PPUPlayer/Properties/launchSettings.json similarity index 100% rename from BreaksPPU/PPUPlayer/Properties/launchSettings.json rename to Tools/PPUPlayer/Properties/launchSettings.json diff --git a/BreaksPPU/PPUPlayer/Readme.md b/Tools/PPUPlayer/Readme.md similarity index 100% rename from BreaksPPU/PPUPlayer/Readme.md rename to Tools/PPUPlayer/Readme.md diff --git a/BreaksPPU/PPUPlayer/VideoProcessing.cs b/Tools/PPUPlayer/VideoProcessing.cs similarity index 100% rename from BreaksPPU/PPUPlayer/VideoProcessing.cs rename to Tools/PPUPlayer/VideoProcessing.cs diff --git a/BreaksPPU/PPUPlayer/WavesSupport.cs b/Tools/PPUPlayer/WavesSupport.cs similarity index 100% rename from BreaksPPU/PPUPlayer/WavesSupport.cs rename to Tools/PPUPlayer/WavesSupport.cs diff --git a/BreaksPPU/PPUPlayer/button_get_debug.png b/Tools/PPUPlayer/button_get_debug.png similarity index 100% rename from BreaksPPU/PPUPlayer/button_get_debug.png rename to Tools/PPUPlayer/button_get_debug.png diff --git a/BreaksPPU/PPUPlayer/button_pause.png b/Tools/PPUPlayer/button_pause.png similarity index 100% rename from BreaksPPU/PPUPlayer/button_pause.png rename to Tools/PPUPlayer/button_pause.png diff --git a/BreaksPPU/PPUPlayer/button_play.png b/Tools/PPUPlayer/button_play.png similarity index 100% rename from BreaksPPU/PPUPlayer/button_play.png rename to Tools/PPUPlayer/button_play.png diff --git a/BreaksPPU/PPUPlayer/button_stop.png b/Tools/PPUPlayer/button_stop.png similarity index 100% rename from BreaksPPU/PPUPlayer/button_stop.png rename to Tools/PPUPlayer/button_stop.png diff --git a/BreaksPPU/PPUPlayer/ppu_player_logo.png b/Tools/PPUPlayer/ppu_player_logo.png similarity index 100% rename from BreaksPPU/PPUPlayer/ppu_player_logo.png rename to Tools/PPUPlayer/ppu_player_logo.png diff --git a/Demos/PpuPumpkin/.gitignore b/Tools/PpuPumpkin/.gitignore similarity index 100% rename from Demos/PpuPumpkin/.gitignore rename to Tools/PpuPumpkin/.gitignore diff --git a/Demos/PpuPumpkin/PpuPumpkin.cpp b/Tools/PpuPumpkin/PpuPumpkin.cpp similarity index 100% rename from Demos/PpuPumpkin/PpuPumpkin.cpp rename to Tools/PpuPumpkin/PpuPumpkin.cpp diff --git a/Demos/PpuPumpkin/PpuPumpkin.sln b/Tools/PpuPumpkin/PpuPumpkin.sln similarity index 96% rename from Demos/PpuPumpkin/PpuPumpkin.sln rename to Tools/PpuPumpkin/PpuPumpkin.sln index 1741c0ee..5e20f9d0 100644 --- a/Demos/PpuPumpkin/PpuPumpkin.sln +++ b/Tools/PpuPumpkin/PpuPumpkin.sln @@ -7,7 +7,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PpuPumpkin", "PpuPumpkin.vc EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseLogicLib", "..\..\Common\BaseLogicLib\Scripts\VS2022\BaseLogicLib.vcxproj", "{11AAD192-46EB-4D5D-B81F-BCEE11D6AF8E}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\BreaksPPU\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\Chips\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Demos/PpuPumpkin/PpuPumpkin.vcxproj b/Tools/PpuPumpkin/PpuPumpkin.vcxproj similarity index 99% rename from Demos/PpuPumpkin/PpuPumpkin.vcxproj rename to Tools/PpuPumpkin/PpuPumpkin.vcxproj index be1c64c6..97c8c01f 100644 --- a/Demos/PpuPumpkin/PpuPumpkin.vcxproj +++ b/Tools/PpuPumpkin/PpuPumpkin.vcxproj @@ -162,7 +162,7 @@ - + {ebd9b3eb-3c04-43ed-b454-e9442b21f5a0} diff --git a/Demos/PpuPumpkin/PpuPumpkin.vcxproj.filters b/Tools/PpuPumpkin/PpuPumpkin.vcxproj.filters similarity index 100% rename from Demos/PpuPumpkin/PpuPumpkin.vcxproj.filters rename to Tools/PpuPumpkin/PpuPumpkin.vcxproj.filters diff --git a/Demos/PpuPumpkin/Readme.md b/Tools/PpuPumpkin/Readme.md similarity index 100% rename from Demos/PpuPumpkin/Readme.md rename to Tools/PpuPumpkin/Readme.md diff --git a/Demos/PpuPumpkin/pch.cpp b/Tools/PpuPumpkin/pch.cpp similarity index 100% rename from Demos/PpuPumpkin/pch.cpp rename to Tools/PpuPumpkin/pch.cpp diff --git a/Demos/PpuPumpkin/pch.h b/Tools/PpuPumpkin/pch.h similarity index 82% rename from Demos/PpuPumpkin/pch.h rename to Tools/PpuPumpkin/pch.h index 70d184d7..2bc7018b 100644 --- a/Demos/PpuPumpkin/pch.h +++ b/Tools/PpuPumpkin/pch.h @@ -9,4 +9,4 @@ #include #include "../../Common/BaseLogicLib/BaseLogic.h" -#include "../../BreaksPPU/PPUSim/ppu.h" +#include "../../Chips/PPUSim/ppu.h" diff --git a/Demos/PpuPumpkin/ppusim_profiler.png b/Tools/PpuPumpkin/ppusim_profiler.png similarity index 100% rename from Demos/PpuPumpkin/ppusim_profiler.png rename to Tools/PpuPumpkin/ppusim_profiler.png diff --git a/Demos/SignalPlotDemo/Readme.md b/Tools/SignalPlotDemo/Readme.md similarity index 73% rename from Demos/SignalPlotDemo/Readme.md rename to Tools/SignalPlotDemo/Readme.md index b0e61c80..79a5e605 100644 --- a/Demos/SignalPlotDemo/Readme.md +++ b/Tools/SignalPlotDemo/Readme.md @@ -1,6 +1,6 @@ # SignalPlotDemo -![SignalPlotDemo](/UserManual/imgstore/SignalPlotDemo.png) +![SignalPlotDemo](/Wiki/imgstore/SignalPlotDemo.png) Demonstration of the custom WinForms SignalPlotControl. diff --git a/Demos/SignalPlotDemo/SignalPlotDemo.sln b/Tools/SignalPlotDemo/SignalPlotDemo.sln similarity index 100% rename from Demos/SignalPlotDemo/SignalPlotDemo.sln rename to Tools/SignalPlotDemo/SignalPlotDemo.sln diff --git a/Demos/SignalPlotDemo/SignalPlotDemo/.gitignore b/Tools/SignalPlotDemo/SignalPlotDemo/.gitignore similarity index 100% rename from Demos/SignalPlotDemo/SignalPlotDemo/.gitignore rename to Tools/SignalPlotDemo/SignalPlotDemo/.gitignore diff --git a/Demos/SignalPlotDemo/SignalPlotDemo/FormMain.Designer.cs b/Tools/SignalPlotDemo/SignalPlotDemo/FormMain.Designer.cs similarity index 100% rename from Demos/SignalPlotDemo/SignalPlotDemo/FormMain.Designer.cs rename to Tools/SignalPlotDemo/SignalPlotDemo/FormMain.Designer.cs diff --git a/Demos/SignalPlotDemo/SignalPlotDemo/FormMain.cs b/Tools/SignalPlotDemo/SignalPlotDemo/FormMain.cs similarity index 100% rename from Demos/SignalPlotDemo/SignalPlotDemo/FormMain.cs rename to Tools/SignalPlotDemo/SignalPlotDemo/FormMain.cs diff --git a/Demos/SignalPlotDemo/SignalPlotDemo/FormMain.resx b/Tools/SignalPlotDemo/SignalPlotDemo/FormMain.resx similarity index 100% rename from Demos/SignalPlotDemo/SignalPlotDemo/FormMain.resx rename to Tools/SignalPlotDemo/SignalPlotDemo/FormMain.resx diff --git a/Demos/SignalPlotDemo/SignalPlotDemo/Program.cs b/Tools/SignalPlotDemo/SignalPlotDemo/Program.cs similarity index 100% rename from Demos/SignalPlotDemo/SignalPlotDemo/Program.cs rename to Tools/SignalPlotDemo/SignalPlotDemo/Program.cs diff --git a/Demos/SignalPlotDemo/SignalPlotDemo/SignalPlotControl.cs b/Tools/SignalPlotDemo/SignalPlotDemo/SignalPlotControl.cs similarity index 100% rename from Demos/SignalPlotDemo/SignalPlotDemo/SignalPlotControl.cs rename to Tools/SignalPlotDemo/SignalPlotDemo/SignalPlotControl.cs diff --git a/Demos/SignalPlotDemo/SignalPlotDemo/SignalPlotDemo.csproj b/Tools/SignalPlotDemo/SignalPlotDemo/SignalPlotDemo.csproj similarity index 100% rename from Demos/SignalPlotDemo/SignalPlotDemo/SignalPlotDemo.csproj rename to Tools/SignalPlotDemo/SignalPlotDemo/SignalPlotDemo.csproj diff --git a/Demos/SlooowPlaaayer/.gitignore b/Tools/SlooowPlaaayer/.gitignore similarity index 100% rename from Demos/SlooowPlaaayer/.gitignore rename to Tools/SlooowPlaaayer/.gitignore diff --git a/Demos/SlooowPlaaayer/FormAbout.Designer.cs b/Tools/SlooowPlaaayer/FormAbout.Designer.cs similarity index 100% rename from Demos/SlooowPlaaayer/FormAbout.Designer.cs rename to Tools/SlooowPlaaayer/FormAbout.Designer.cs diff --git a/Demos/SlooowPlaaayer/FormAbout.cs b/Tools/SlooowPlaaayer/FormAbout.cs similarity index 100% rename from Demos/SlooowPlaaayer/FormAbout.cs rename to Tools/SlooowPlaaayer/FormAbout.cs diff --git a/Demos/SlooowPlaaayer/FormAbout.resx b/Tools/SlooowPlaaayer/FormAbout.resx similarity index 100% rename from Demos/SlooowPlaaayer/FormAbout.resx rename to Tools/SlooowPlaaayer/FormAbout.resx diff --git a/Demos/SlooowPlaaayer/FormMain.Designer.cs b/Tools/SlooowPlaaayer/FormMain.Designer.cs similarity index 100% rename from Demos/SlooowPlaaayer/FormMain.Designer.cs rename to Tools/SlooowPlaaayer/FormMain.Designer.cs diff --git a/Demos/SlooowPlaaayer/FormMain.cs b/Tools/SlooowPlaaayer/FormMain.cs similarity index 100% rename from Demos/SlooowPlaaayer/FormMain.cs rename to Tools/SlooowPlaaayer/FormMain.cs diff --git a/Demos/SlooowPlaaayer/FormMain.resx b/Tools/SlooowPlaaayer/FormMain.resx similarity index 100% rename from Demos/SlooowPlaaayer/FormMain.resx rename to Tools/SlooowPlaaayer/FormMain.resx diff --git a/Demos/SlooowPlaaayer/FormSnatch.Designer.cs b/Tools/SlooowPlaaayer/FormSnatch.Designer.cs similarity index 100% rename from Demos/SlooowPlaaayer/FormSnatch.Designer.cs rename to Tools/SlooowPlaaayer/FormSnatch.Designer.cs diff --git a/Demos/SlooowPlaaayer/FormSnatch.cs b/Tools/SlooowPlaaayer/FormSnatch.cs similarity index 100% rename from Demos/SlooowPlaaayer/FormSnatch.cs rename to Tools/SlooowPlaaayer/FormSnatch.cs diff --git a/Demos/SlooowPlaaayer/FormSnatch.resx b/Tools/SlooowPlaaayer/FormSnatch.resx similarity index 100% rename from Demos/SlooowPlaaayer/FormSnatch.resx rename to Tools/SlooowPlaaayer/FormSnatch.resx diff --git a/Demos/SlooowPlaaayer/Program.cs b/Tools/SlooowPlaaayer/Program.cs similarity index 100% rename from Demos/SlooowPlaaayer/Program.cs rename to Tools/SlooowPlaaayer/Program.cs diff --git a/Demos/SlooowPlaaayer/Properties/Resources.Designer.cs b/Tools/SlooowPlaaayer/Properties/Resources.Designer.cs similarity index 100% rename from Demos/SlooowPlaaayer/Properties/Resources.Designer.cs rename to Tools/SlooowPlaaayer/Properties/Resources.Designer.cs diff --git a/Demos/SlooowPlaaayer/Properties/Resources.resx b/Tools/SlooowPlaaayer/Properties/Resources.resx similarity index 100% rename from Demos/SlooowPlaaayer/Properties/Resources.resx rename to Tools/SlooowPlaaayer/Properties/Resources.resx diff --git a/Demos/SlooowPlaaayer/Readme.md b/Tools/SlooowPlaaayer/Readme.md similarity index 90% rename from Demos/SlooowPlaaayer/Readme.md rename to Tools/SlooowPlaaayer/Readme.md index eb1e97a7..8174236f 100644 --- a/Demos/SlooowPlaaayer/Readme.md +++ b/Tools/SlooowPlaaayer/Readme.md @@ -1,6 +1,6 @@ # Slooow Plaaayer -![SlooowPlaaayer](/UserManual/imgstore/SlooowPlaaayer.png) +![SlooowPlaaayer](/Wiki/imgstore/SlooowPlaaayer.png) Utility for playing audio samples that were obtained from a slow source (such as APUSim). diff --git a/Demos/SlooowPlaaayer/SlooowPlaaayer.csproj b/Tools/SlooowPlaaayer/SlooowPlaaayer.csproj similarity index 100% rename from Demos/SlooowPlaaayer/SlooowPlaaayer.csproj rename to Tools/SlooowPlaaayer/SlooowPlaaayer.csproj diff --git a/Demos/SlooowPlaaayer/SlooowPlaaayer.jpg b/Tools/SlooowPlaaayer/SlooowPlaaayer.jpg similarity index 100% rename from Demos/SlooowPlaaayer/SlooowPlaaayer.jpg rename to Tools/SlooowPlaaayer/SlooowPlaaayer.jpg diff --git a/Demos/SlooowPlaaayer/SlooowPlaaayer.sln b/Tools/SlooowPlaaayer/SlooowPlaaayer.sln similarity index 100% rename from Demos/SlooowPlaaayer/SlooowPlaaayer.sln rename to Tools/SlooowPlaaayer/SlooowPlaaayer.sln diff --git a/Demos/SlooowPlaaayer/WavLoad.cs b/Tools/SlooowPlaaayer/WavLoad.cs similarity index 100% rename from Demos/SlooowPlaaayer/WavLoad.cs rename to Tools/SlooowPlaaayer/WavLoad.cs diff --git a/UnitTest/Readme.md b/UnitTest/Readme.md index b307ab1f..ac635b20 100644 --- a/UnitTest/Readme.md +++ b/UnitTest/Readme.md @@ -2,7 +2,7 @@ Unit tests for emulated chips and cores. -![UnitTest](/UserManual/imgstore/UnitTest.jpg) +![UnitTest](/Wiki/imgstore/UnitTest.jpg) Each emulated chip class contains a friendly class that has access to all internals. diff --git a/UnitTest/UnitTest.sln b/UnitTest/UnitTest.sln index f26d3534..fe940233 100644 --- a/UnitTest/UnitTest.sln +++ b/UnitTest/UnitTest.sln @@ -5,11 +5,11 @@ VisualStudioVersion = 17.1.32319.34 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnitTest", "UnitTest.vcxproj", "{A40DADDC-798D-4C21-A34B-3098410E17C3}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\Breaks6502\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\Chips\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\BreaksAPU\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "APUSim", "..\Chips\APUSim\Scripts\VS2022\APUSim.vcxproj", "{50E93D78-36DC-46C3-82EA-CAB373E18729}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\BreaksPPU\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\Chips\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseLogicLib", "..\Common\BaseLogicLib\Scripts\VS2022\BaseLogicLib.vcxproj", "{11AAD192-46EB-4D5D-B81F-BCEE11D6AF8E}" EndProject diff --git a/UnitTest/UnitTest.vcxproj b/UnitTest/UnitTest.vcxproj index e53f3cbb..cdae655d 100644 --- a/UnitTest/UnitTest.vcxproj +++ b/UnitTest/UnitTest.vcxproj @@ -182,13 +182,13 @@ - + {75210c0a-a812-4246-a179-b50d8a25a121} - + {50e93d78-36dc-46c3-82ea-cab373e18729} - + {ebd9b3eb-3c04-43ed-b454-e9442b21f5a0} diff --git a/UnitTest/pch.h b/UnitTest/pch.h index 979a2c0f..07c2ba29 100644 --- a/UnitTest/pch.h +++ b/UnitTest/pch.h @@ -9,9 +9,9 @@ #include "../Common/BaseLogicLib/BaseLogic.h" -#include "../Breaks6502/M6502Core/core.h" -#include "../BreaksAPU/APUSim/apu.h" -#include "../BreaksPPU/PPUSim/ppu.h" +#include "../Chips/M6502Core/core.h" +#include "../Chips/APUSim/apu.h" +#include "../Chips/PPUSim/ppu.h" #include "../IO/CD4021.h" diff --git a/UserManual/PPUPlayer/DumpVideoSignalEng.md b/Wiki/DumpVideoSignalEng.md similarity index 85% rename from UserManual/PPUPlayer/DumpVideoSignalEng.md rename to Wiki/DumpVideoSignalEng.md index 35a36efc..20da2dd9 100644 --- a/UserManual/PPUPlayer/DumpVideoSignalEng.md +++ b/Wiki/DumpVideoSignalEng.md @@ -8,15 +8,15 @@ Requirements: Start PPUPlayer: -![dump_video_001](/UserManual/imgstore/dump_video_001.png) +![dump_video_001](/Wiki/imgstore/dump_video_001.png) Select in the settings the PPU revision for which you want to get the video signal dump: -![dump_video_002](/UserManual/imgstore/dump_video_002.png) +![dump_video_002](/Wiki/imgstore/dump_video_002.png) Run PPUPlayer in "free flight" (Run PPU). Go to the Current Scan tab and make sure the PPU is alive: -![dump_video_003](/UserManual/imgstore/dump_video_003.png) +![dump_video_003](/Wiki/imgstore/dump_video_003.png) ## Dump of PPU state in Nintendulator @@ -24,7 +24,7 @@ Run some game in Nintendulator, preferably without a complicated mapper. Open the debugger and save all of the PPU memory: -![dump_video_004](/UserManual/imgstore/dump_video_004.png) +![dump_video_004](/Wiki/imgstore/dump_video_004.png) You will get a file with the extension .ppumem, which can be found somewhere in the depths of your Users/AppData folder. @@ -34,7 +34,7 @@ Select `Load Nintendulator PPU Dump` in the menu `PPU Dumps` and load the PPU me This will result in something like this: -![dump_video_005](/UserManual/imgstore/dump_video_005.png) +![dump_video_005](/Wiki/imgstore/dump_video_005.png) But oops. Something's wrong. @@ -44,11 +44,11 @@ Especially important is register $2000, which sets the Pattern table addresses a To fix this, go to the Debug tab and change the value of register $2000 (for Contra you need to set it to 0x30): -![dump_video_006](/UserManual/imgstore/dump_video_006.png) +![dump_video_006](/Wiki/imgstore/dump_video_006.png) It turned out like this: -![dump_video_007](/UserManual/imgstore/dump_video_007.png) +![dump_video_007](/Wiki/imgstore/dump_video_007.png) ## Turn on the video signal dump @@ -63,7 +63,7 @@ In the menu `PPU Dumps` you need to select `Start video signal dump`, specify th It is possible to get the pixel value before the DAC circuitry instead of the PPU video signal: -![dump_video_008](/UserManual/imgstore/dump_video_008.png) +![dump_video_008](/Wiki/imgstore/dump_video_008.png) In this case uint16_t values of the following format will be dumped: diff --git a/UserManual/PPUPlayer/DumpVideoSignalRus.md b/Wiki/DumpVideoSignalRus.md similarity index 89% rename from UserManual/PPUPlayer/DumpVideoSignalRus.md rename to Wiki/DumpVideoSignalRus.md index 182f7d8e..6f19f451 100644 --- a/UserManual/PPUPlayer/DumpVideoSignalRus.md +++ b/Wiki/DumpVideoSignalRus.md @@ -8,15 +8,15 @@ Запустить PPUPlayer: -![dump_video_001](/UserManual/imgstore/dump_video_001.png) +![dump_video_001](/Wiki/imgstore/dump_video_001.png) Выбрать в настройках ревизию PPU, для которого нужно получить дамп видеосигнала: -![dump_video_002](/UserManual/imgstore/dump_video_002.png) +![dump_video_002](/Wiki/imgstore/dump_video_002.png) Запустить PPUPlayer в "свободный полёт" (Run PPU). Перейти на вкладку Current Scan и убедиться что PPU живой: -![dump_video_003](/UserManual/imgstore/dump_video_003.png) +![dump_video_003](/Wiki/imgstore/dump_video_003.png) ## Дамп состояния PPU в Nintendulator @@ -24,7 +24,7 @@ Открыть отладачик и сдампить всю память PPU: -![dump_video_004](/UserManual/imgstore/dump_video_004.png) +![dump_video_004](/Wiki/imgstore/dump_video_004.png) Получится файл с расширением .ppumem, который можно найти где-то в недрах вашей папки Users/AppData. @@ -34,7 +34,7 @@ Получится примерно такое: -![dump_video_005](/UserManual/imgstore/dump_video_005.png) +![dump_video_005](/Wiki/imgstore/dump_video_005.png) Но упс. Что-то не так. @@ -44,11 +44,11 @@ Чтобы это исправить, переходим на вкладку Debug и меняем значение регистра $2000 (для Contra нужно установить значение 0x30): -![dump_video_006](/UserManual/imgstore/dump_video_006.png) +![dump_video_006](/Wiki/imgstore/dump_video_006.png) Получилось такое: -![dump_video_007](/UserManual/imgstore/dump_video_007.png) +![dump_video_007](/Wiki/imgstore/dump_video_007.png) ## Включить дамп видеосигнала @@ -63,7 +63,7 @@ Есть возможность вместо видеосигнала PPU получать значение пикселей до схемы ЦАП: -![dump_video_008](/UserManual/imgstore/dump_video_008.png) +![dump_video_008](/Wiki/imgstore/dump_video_008.png) В этом случае будут дампиться значения uint16_t следующего формата: diff --git a/UserManual/PPUPlayer/PPU_Player_Eng.pdf b/Wiki/PPUPlayer/PPU_Player_Eng.pdf similarity index 100% rename from UserManual/PPUPlayer/PPU_Player_Eng.pdf rename to Wiki/PPUPlayer/PPU_Player_Eng.pdf diff --git a/UserManual/PPUPlayer/PPU_Player_Eng.pptx b/Wiki/PPUPlayer/PPU_Player_Eng.pptx similarity index 100% rename from UserManual/PPUPlayer/PPU_Player_Eng.pptx rename to Wiki/PPUPlayer/PPU_Player_Eng.pptx diff --git a/UserManual/PPUPlayer/PPU_Player_Rus.pdf b/Wiki/PPUPlayer/PPU_Player_Rus.pdf similarity index 100% rename from UserManual/PPUPlayer/PPU_Player_Rus.pdf rename to Wiki/PPUPlayer/PPU_Player_Rus.pdf diff --git a/UserManual/PPUPlayer/PPU_Player_Rus.pptx b/Wiki/PPUPlayer/PPU_Player_Rus.pptx similarity index 100% rename from UserManual/PPUPlayer/PPU_Player_Rus.pptx rename to Wiki/PPUPlayer/PPU_Player_Rus.pptx diff --git a/UserManual/Runtime.md b/Wiki/Runtime.md similarity index 100% rename from UserManual/Runtime.md rename to Wiki/Runtime.md diff --git a/UserManual/Readme.md b/Wiki/UserManual.md similarity index 71% rename from UserManual/Readme.md rename to Wiki/UserManual.md index bb3de73e..920e4344 100644 --- a/UserManual/Readme.md +++ b/Wiki/UserManual.md @@ -2,7 +2,7 @@ ## Main Window -![main](/UserManual/imgstore/main.jpg) +![main](/Wiki/imgstore/main.jpg) - File->Load ROM Dump...: Select the .nes ROM image. The emulation will start right away. @@ -12,6 +12,6 @@ ## Settings -![settings](/UserManual/imgstore/settings.jpg) +![settings](/Wiki/imgstore/settings.jpg) - Save: Save and close diff --git a/UserManual/debug.graphml b/Wiki/debug.graphml similarity index 100% rename from UserManual/debug.graphml rename to Wiki/debug.graphml diff --git a/UserManual/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.png b/Wiki/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.png similarity index 100% rename from UserManual/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.png rename to Wiki/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.png diff --git a/UserManual/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.psd b/Wiki/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.psd similarity index 100% rename from UserManual/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.psd rename to Wiki/imgstore/157481692-2ecd4e71-2599-4050-9ce0-815c0336ad27.psd diff --git a/UserManual/imgstore/20_JSR_T1_PHI1.jpg b/Wiki/imgstore/20_JSR_T1_PHI1.jpg similarity index 100% rename from UserManual/imgstore/20_JSR_T1_PHI1.jpg rename to Wiki/imgstore/20_JSR_T1_PHI1.jpg diff --git a/Wiki/imgstore/40H368.jpg b/Wiki/imgstore/40H368.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8b0510052a3c2408c25bfbcd221e372e6a1e81ca GIT binary patch literal 56859 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 z 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 literal 0 HcmV?d00001 diff --git a/UserManual/imgstore/APUPlayer.jpg b/Wiki/imgstore/APUPlayer.jpg similarity index 100% rename from UserManual/imgstore/APUPlayer.jpg rename to Wiki/imgstore/APUPlayer.jpg diff --git a/UserManual/imgstore/BogusBoard.jpg b/Wiki/imgstore/BogusBoard.jpg similarity index 100% rename from UserManual/imgstore/BogusBoard.jpg rename to Wiki/imgstore/BogusBoard.jpg diff --git a/UserManual/imgstore/InfernoColormap.png b/Wiki/imgstore/InfernoColormap.png similarity index 100% rename from UserManual/imgstore/InfernoColormap.png rename to Wiki/imgstore/InfernoColormap.png diff --git a/Wiki/imgstore/LS139.jpg b/Wiki/imgstore/LS139.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7cb53e6da6274a6b43e3aad2ac1bcb9bb1b31cd8 GIT binary patch literal 51275 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 E+0s}b4FCWD literal 0 HcmV?d00001 diff --git a/Wiki/imgstore/LS373.jpg b/Wiki/imgstore/LS373.jpg new file mode 100644 index 0000000000000000000000000000000000000000..99633dc60d3510b954eb314e0c52d40aacd3fbdb GIT binary patch literal 46890 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 KCBcd)AOG3a^ZGgf literal 0 HcmV?d00001 diff --git a/UserManual/imgstore/PPUPlayer_All.png b/Wiki/imgstore/PPUPlayer_All.png similarity index 100% rename from UserManual/imgstore/PPUPlayer_All.png rename to Wiki/imgstore/PPUPlayer_All.png diff --git a/Wiki/imgstore/SRAM.jpg b/Wiki/imgstore/SRAM.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66a29c532fc236965349e23b68d765c353a436d7 GIT binary patch literal 42830 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

@++?iD2cJ?ro8P$ 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 WqB==eXrh4VhS5a;9pPA_f&bb5hMh|Q literal 0 HcmV?d00001 diff --git a/UserManual/imgstore/SignalPlotDemo.png b/Wiki/imgstore/SignalPlotDemo.png similarity index 100% rename from UserManual/imgstore/SignalPlotDemo.png rename to Wiki/imgstore/SignalPlotDemo.png diff --git a/UserManual/imgstore/SlooowPlaaayer.png b/Wiki/imgstore/SlooowPlaaayer.png similarity index 100% rename from UserManual/imgstore/SlooowPlaaayer.png rename to Wiki/imgstore/SlooowPlaaayer.png diff --git a/UserManual/imgstore/UnitTest.jpg b/Wiki/imgstore/UnitTest.jpg similarity index 100% rename from UserManual/imgstore/UnitTest.jpg rename to Wiki/imgstore/UnitTest.jpg diff --git a/UserManual/imgstore/debug.jpg b/Wiki/imgstore/debug.jpg similarity index 100% rename from UserManual/imgstore/debug.jpg rename to Wiki/imgstore/debug.jpg diff --git a/UserManual/imgstore/dendy_controller.png b/Wiki/imgstore/dendy_controller.png similarity index 100% rename from UserManual/imgstore/dendy_controller.png rename to Wiki/imgstore/dendy_controller.png diff --git a/UserManual/imgstore/dump_video_001.png b/Wiki/imgstore/dump_video_001.png similarity index 100% rename from UserManual/imgstore/dump_video_001.png rename to Wiki/imgstore/dump_video_001.png diff --git a/UserManual/imgstore/dump_video_002.png b/Wiki/imgstore/dump_video_002.png similarity index 100% rename from UserManual/imgstore/dump_video_002.png rename to Wiki/imgstore/dump_video_002.png diff --git a/UserManual/imgstore/dump_video_003.png b/Wiki/imgstore/dump_video_003.png similarity index 100% rename from UserManual/imgstore/dump_video_003.png rename to Wiki/imgstore/dump_video_003.png diff --git a/UserManual/imgstore/dump_video_004.png b/Wiki/imgstore/dump_video_004.png similarity index 100% rename from UserManual/imgstore/dump_video_004.png rename to Wiki/imgstore/dump_video_004.png diff --git a/UserManual/imgstore/dump_video_005.png b/Wiki/imgstore/dump_video_005.png similarity index 100% rename from UserManual/imgstore/dump_video_005.png rename to Wiki/imgstore/dump_video_005.png diff --git a/UserManual/imgstore/dump_video_006.png b/Wiki/imgstore/dump_video_006.png similarity index 100% rename from UserManual/imgstore/dump_video_006.png rename to Wiki/imgstore/dump_video_006.png diff --git a/UserManual/imgstore/dump_video_007.png b/Wiki/imgstore/dump_video_007.png similarity index 100% rename from UserManual/imgstore/dump_video_007.png rename to Wiki/imgstore/dump_video_007.png diff --git a/UserManual/imgstore/dump_video_008.png b/Wiki/imgstore/dump_video_008.png similarity index 100% rename from UserManual/imgstore/dump_video_008.png rename to Wiki/imgstore/dump_video_008.png diff --git a/UserManual/imgstore/fami_logisim.jpg b/Wiki/imgstore/fami_logisim.jpg similarity index 100% rename from UserManual/imgstore/fami_logisim.jpg rename to Wiki/imgstore/fami_logisim.jpg diff --git a/UserManual/imgstore/famicom_controller1.png b/Wiki/imgstore/famicom_controller1.png similarity index 100% rename from UserManual/imgstore/famicom_controller1.png rename to Wiki/imgstore/famicom_controller1.png diff --git a/UserManual/imgstore/famicom_controller2.png b/Wiki/imgstore/famicom_controller2.png similarity index 100% rename from UserManual/imgstore/famicom_controller2.png rename to Wiki/imgstore/famicom_controller2.png diff --git a/UserManual/imgstore/main.jpg b/Wiki/imgstore/main.jpg similarity index 100% rename from UserManual/imgstore/main.jpg rename to Wiki/imgstore/main.jpg diff --git a/UserManual/imgstore/mariwa.png b/Wiki/imgstore/mariwa.png similarity index 100% rename from UserManual/imgstore/mariwa.png rename to Wiki/imgstore/mariwa.png diff --git a/UserManual/imgstore/nes.png b/Wiki/imgstore/nes.png similarity index 100% rename from UserManual/imgstore/nes.png rename to Wiki/imgstore/nes.png diff --git a/UserManual/imgstore/nes_controller.png b/Wiki/imgstore/nes_controller.png similarity index 100% rename from UserManual/imgstore/nes_controller.png rename to Wiki/imgstore/nes_controller.png diff --git a/UserManual/imgstore/progress.png b/Wiki/imgstore/progress.png similarity index 100% rename from UserManual/imgstore/progress.png rename to Wiki/imgstore/progress.png diff --git a/UserManual/imgstore/settings.jpg b/Wiki/imgstore/settings.jpg similarity index 100% rename from UserManual/imgstore/settings.jpg rename to Wiki/imgstore/settings.jpg diff --git a/UserManual/imgstore/slow_player_stable_diffusion.jpg b/Wiki/imgstore/slow_player_stable_diffusion.jpg similarity index 100% rename from UserManual/imgstore/slow_player_stable_diffusion.jpg rename to Wiki/imgstore/slow_player_stable_diffusion.jpg diff --git a/UserManual/imgstore/virt_dendy_controller.png b/Wiki/imgstore/virt_dendy_controller.png similarity index 100% rename from UserManual/imgstore/virt_dendy_controller.png rename to Wiki/imgstore/virt_dendy_controller.png diff --git a/UserManual/imgstore/virt_famicom_controller1.png b/Wiki/imgstore/virt_famicom_controller1.png similarity index 100% rename from UserManual/imgstore/virt_famicom_controller1.png rename to Wiki/imgstore/virt_famicom_controller1.png diff --git a/UserManual/imgstore/virt_famicom_controller2.png b/Wiki/imgstore/virt_famicom_controller2.png similarity index 100% rename from UserManual/imgstore/virt_famicom_controller2.png rename to Wiki/imgstore/virt_famicom_controller2.png diff --git a/UserManual/imgstore/virt_nes_controller.png b/Wiki/imgstore/virt_nes_controller.png similarity index 100% rename from UserManual/imgstore/virt_nes_controller.png rename to Wiki/imgstore/virt_nes_controller.png From bc156c6ed6806b36e44e8e0f9b60e3f388a3fccb Mon Sep 17 00:00:00 2001 From: org Date: Wed, 6 Sep 2023 23:12:56 +0300 Subject: [PATCH 2/4] mappers_ucode --- Mappers/Readme.md | 5 ++--- Mappers/Readme_ru.md | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Mappers/Readme.md b/Mappers/Readme.md index 863675f7..e076738f 100644 --- a/Mappers/Readme.md +++ b/Mappers/Readme.md @@ -34,9 +34,8 @@ We have: - 6502 Emulator - 6502 firmware that simulates cartridge pin access and implements wild mapper logic -![mappers_ucode1](mappers_ucode1.png) - -![mappers_ucode2](mappers_ucode2.png) +|![mappers_ucode1](mappers_ucode1.png)|![mappers_ucode2](mappers_ucode2.png)| +|---|---| Of course, most of the mappers are easier to simulate in C++, but for universality, let's add the ability to write simulators of our own mappers. diff --git a/Mappers/Readme_ru.md b/Mappers/Readme_ru.md index 03d50277..f7f0fa99 100644 --- a/Mappers/Readme_ru.md +++ b/Mappers/Readme_ru.md @@ -34,9 +34,8 @@ NES/Famicom славится своим большим количеством м - Эмулятор 6502 - Микропрограмма на 6502, которая симулирует обращение к пинам картриджа и реализует логику "дикого" маппера -![mappers_ucode1](mappers_ucode1.png) - -![mappers_ucode2](mappers_ucode2.png) +|![mappers_ucode1](mappers_ucode1.png)|![mappers_ucode2](mappers_ucode2.png)| +|---|---| Конечно, большую часть мапперов проще симулировать на C++, но для универсальности добавим возможность написания симуляторов своих мапперов. From 9526acb5acca6b15ba3fb6f9b0be5ac6129efd2b Mon Sep 17 00:00:00 2001 From: org Date: Wed, 6 Sep 2023 23:19:06 +0300 Subject: [PATCH 3/4] Update FormSettings.cs --- Breaknes/Breaknes/FormSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Breaknes/Breaknes/FormSettings.cs b/Breaknes/Breaknes/FormSettings.cs index 7e5a1217..587afb61 100644 --- a/Breaknes/Breaknes/FormSettings.cs +++ b/Breaknes/Breaknes/FormSettings.cs @@ -53,7 +53,7 @@ static BreaknesSettings SetDefaultSettings() { BreaknesSettings settings = new(); - settings.MainBoard = "NES-001 (PCB rev. -01 to -04) (1985-1986)"; + settings.MainBoard = "NES-001 (PCB rev. -01 to -04)"; settings.DumpAudio = false; settings.DumpAudioDir = ""; settings.DumpVideo = false; From 2d8a27dd291875f29e3307d5ba504803194cbe87 Mon Sep 17 00:00:00 2001 From: org Date: Wed, 6 Sep 2023 23:34:37 +0300 Subject: [PATCH 4/4] paths --- Tools/BreaksDebug/BreaksDebug.sln | 2 +- Tools/PPUPlayer/PPUPlayer.sln | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/BreaksDebug/BreaksDebug.sln b/Tools/BreaksDebug/BreaksDebug.sln index 8456fe20..5cdc47ad 100644 --- a/Tools/BreaksDebug/BreaksDebug.sln +++ b/Tools/BreaksDebug/BreaksDebug.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 17.1.32319.34 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BreaksDebug", "BreaksDebug.csproj", "{F609D0B4-2EB2-491C-BE8F-E2B5D65ECDA4}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Chips\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "M6502Core", "..\..\Chips\M6502Core\Scripts\VS2022\M6502Core.vcxproj", "{75210C0A-A812-4246-A179-B50D8A25A121}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseLogicLib", "..\..\Common\BaseLogicLib\Scripts\VS2022\BaseLogicLib.vcxproj", "{11AAD192-46EB-4D5D-B81F-BCEE11D6AF8E}" EndProject diff --git a/Tools/PPUPlayer/PPUPlayer.sln b/Tools/PPUPlayer/PPUPlayer.sln index b967ce8a..e30af0f8 100644 --- a/Tools/PPUPlayer/PPUPlayer.sln +++ b/Tools/PPUPlayer/PPUPlayer.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 17.1.32319.34 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PPUPlayer", "PPUPlayer.csproj", "{14D56ED1-75C4-4479-AEF2-CAA392122019}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\Chips\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPUSim", "..\..\Chips\PPUSim\Scripts\VS2022\PPUSim.vcxproj", "{EBD9B3EB-3C04-43ED-B454-E9442B21F5A0}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BaseBoardLib", "..\..\Common\BaseBoardLib\Scripts\VS2022\BaseBoardLib.vcxproj", "{36F535AD-B87B-4F4D-A5F9-0F2377FBA7EA}" EndProject