From a04aa8c58460de23c6618bd3b3186194a0fc0b2c Mon Sep 17 00:00:00 2001 From: ASNiVOR Date: Sat, 2 Nov 2024 10:58:35 +0000 Subject: [PATCH] 65c02 --- .gitignore | 2 +- Assets/dll/vrEmu6502.dll | Bin 0 -> 57856 bytes ExternalProjects/vfEmu6502/build_linux.sh | 11 ++ ExternalProjects/vfEmu6502/vfEmu6502.sln | 31 ++++ ExternalProjects/vfEmu6502/vfEmu6502.vcxproj | 151 ++++++++++++++++++ ExternalProjects/vfEmu6502/vr6502.c | 7 + ExternalProjects/vfEmu6502/vr6502.h | 1 + .../CPUs/65x02/vr6502.Interop.cs | 44 +++++ .../CPUs/65x02/vr6502.Structures.cs | 87 ++++++++++ .../CPUs/65x02/vr6502.cs | 33 ++++ 10 files changed, 366 insertions(+), 1 deletion(-) create mode 100644 Assets/dll/vrEmu6502.dll create mode 100644 ExternalProjects/vfEmu6502/build_linux.sh create mode 100644 ExternalProjects/vfEmu6502/vfEmu6502.sln create mode 100644 ExternalProjects/vfEmu6502/vfEmu6502.vcxproj create mode 100644 ExternalProjects/vfEmu6502/vr6502.c create mode 100644 ExternalProjects/vfEmu6502/vr6502.h create mode 100644 src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.Interop.cs create mode 100644 src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.Structures.cs create mode 100644 src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.cs diff --git a/.gitignore b/.gitignore index 3f3edcf585..5613cb0e9b 100644 --- a/.gitignore +++ b/.gitignore @@ -48,4 +48,4 @@ UpgradeLog.htm /packages launchSettings.json -/ExternalProjects/vfEmu6502/x64/Debug +/ExternalProjects/vfEmu6502/x64 diff --git a/Assets/dll/vrEmu6502.dll b/Assets/dll/vrEmu6502.dll new file mode 100644 index 0000000000000000000000000000000000000000..b6395eafed53ca44ffe08f3828b614c8ced40ea6 GIT binary patch literal 57856 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 literal 0 HcmV?d00001 diff --git a/ExternalProjects/vfEmu6502/build_linux.sh b/ExternalProjects/vfEmu6502/build_linux.sh new file mode 100644 index 0000000000..6ec316cab8 --- /dev/null +++ b/ExternalProjects/vfEmu6502/build_linux.sh @@ -0,0 +1,11 @@ +#!/bin/sh +if [ -z "$BIZHAWKBUILD_HOME" ]; then export BIZHAWKBUILD_HOME="$(realpath "$(dirname "$0")/../..")"; fi +if [ -z "$CC" ]; then export CXX="clang"; fi + +mkdir -p build +$CC -std=c11 -O3 -fvisibility=hidden -fPIC -shared -s FlooohZ80.c -o build/vrEmu6502.so + +cp build/libFlooohZ80.so "$BIZHAWKBUILD_HOME/Assets/dll" +if [ -e "$BIZHAWKBUILD_HOME/output" ]; then + cp build/libFlooohZ80.so "$BIZHAWKBUILD_HOME/output/dll" +fi diff --git a/ExternalProjects/vfEmu6502/vfEmu6502.sln b/ExternalProjects/vfEmu6502/vfEmu6502.sln new file mode 100644 index 0000000000..8e6423f97a --- /dev/null +++ b/ExternalProjects/vfEmu6502/vfEmu6502.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.9.34616.47 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vfEmu6502", "vfEmu6502.vcxproj", "{2215CCFC-9478-4CA8-8E76-661605A6D60C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2215CCFC-9478-4CA8-8E76-661605A6D60C}.Debug|x64.ActiveCfg = Debug|x64 + {2215CCFC-9478-4CA8-8E76-661605A6D60C}.Debug|x64.Build.0 = Debug|x64 + {2215CCFC-9478-4CA8-8E76-661605A6D60C}.Debug|x86.ActiveCfg = Debug|Win32 + {2215CCFC-9478-4CA8-8E76-661605A6D60C}.Debug|x86.Build.0 = Debug|Win32 + {2215CCFC-9478-4CA8-8E76-661605A6D60C}.Release|x64.ActiveCfg = Release|x64 + {2215CCFC-9478-4CA8-8E76-661605A6D60C}.Release|x64.Build.0 = Release|x64 + {2215CCFC-9478-4CA8-8E76-661605A6D60C}.Release|x86.ActiveCfg = Release|Win32 + {2215CCFC-9478-4CA8-8E76-661605A6D60C}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {FF38F018-AEDF-406B-9DE7-DE892A6B03C1} + EndGlobalSection +EndGlobal diff --git a/ExternalProjects/vfEmu6502/vfEmu6502.vcxproj b/ExternalProjects/vfEmu6502/vfEmu6502.vcxproj new file mode 100644 index 0000000000..d9ed8fa99f --- /dev/null +++ b/ExternalProjects/vfEmu6502/vfEmu6502.vcxproj @@ -0,0 +1,151 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 17.0 + Win32Proj + {2215ccfc-9478-4ca8-8e76-661605a6d60c} + vfEmu6502 + 10.0 + + + + Application + true + v143 + Unicode + + + Application + false + v143 + true + Unicode + + + DynamicLibrary + true + v143 + Unicode + + + DynamicLibrary + false + v143 + true + Unicode + + + + + + + + + + + + + + + + + + + + + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + vfEmu6502 + + + ..\..\Assets\dll + $(Platform)\$(Configuration)\ + vrEmu6502 + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + CompileAsC + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + CompileAsC + + + Console + true + true + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/ExternalProjects/vfEmu6502/vr6502.c b/ExternalProjects/vfEmu6502/vr6502.c new file mode 100644 index 0000000000..abe564f289 --- /dev/null +++ b/ExternalProjects/vfEmu6502/vr6502.c @@ -0,0 +1,7 @@ +#include "vrEmu6502/src/vrEmu6502.h" + +#ifdef _WIN32 +#define VR_EMU_6502_DLLEXPORT __declspec(dllexport) +#else +#define VR_EMU_6502_DLLEXPORT __attribute__((visibility("default"))) +#endif \ No newline at end of file diff --git a/ExternalProjects/vfEmu6502/vr6502.h b/ExternalProjects/vfEmu6502/vr6502.h new file mode 100644 index 0000000000..6f70f09bee --- /dev/null +++ b/ExternalProjects/vfEmu6502/vr6502.h @@ -0,0 +1 @@ +#pragma once diff --git a/src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.Interop.cs b/src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.Interop.cs new file mode 100644 index 0000000000..3cb9e50b0e --- /dev/null +++ b/src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.Interop.cs @@ -0,0 +1,44 @@ +using System.Runtime.InteropServices; +using static BizHawk.Emulation.Cores.Components.vr6502.vr6502; + +namespace BizHawk.Emulation.Cores.Components.vr6502 +{ + public static class VrEmu6502Interop + { + private const string lib = "vrEmu6502"; + private const CallingConvention cc = CallingConvention.Cdecl; + + /// + /// Instantiate a new 6502 emulator + /// + [DllImport(lib, CallingConvention = cc)] + public static extern VrEmu6502State vrEmu6502New( + VrEmu6502Model model, + VrEmu6502MemRead readFn, + VrEmu6502MemWrite writeFn); + + /// + /// Destroy a 6502 emulator + /// + [DllImport(lib, CallingConvention = cc)] + public static extern void vrEmu6502Destroy(ref VrEmu6502State state); + + /// + /// Reset a 6502 emulator + /// + [DllImport(lib, CallingConvention = cc)] + public static extern void vrEmu6502Reset(ref VrEmu6502State state); + + /// + /// A single clock tick + /// + [DllImport(lib, CallingConvention = cc)] + public static extern void vrEmu6502Tick(ref VrEmu6502State state); + + /// + /// A single instruction cycle + /// + [DllImport(lib, CallingConvention = cc)] + public static extern byte vrEmu6502InstCycle(ref VrEmu6502State state); + } +} diff --git a/src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.Structures.cs b/src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.Structures.cs new file mode 100644 index 0000000000..37b09386ef --- /dev/null +++ b/src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.Structures.cs @@ -0,0 +1,87 @@ +using System.Runtime.InteropServices; + +namespace BizHawk.Emulation.Cores.Components.vr6502 +{ + public partial class vr6502 + { + [StructLayout(LayoutKind.Sequential)] + public struct VrEmu6502State + { + public VrEmu6502Model Model; + + public IntPtr ReadFn; + public IntPtr WriteFn; + + public VrEmu6502Interrupt IntPin; + public VrEmu6502Interrupt NmiPin; + + public byte Step; + public byte CurrentOpcode; + public ushort CurrentOpcodeAddr; + + public bool Wai; + public bool Stp; + + public ushort Pc; + + public byte Ac; + public byte Ix; + public byte Iy; + public byte Sp; + + public byte Flags; + + public ushort ZpBase; + public ushort SpBase; + public ushort TmpAddr; + + public IntPtr Opcodes; // Use IntPtr for pointer to array + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] + public string[] MnemonicNames; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] + public VrEmu6502AddrMode[] AddrModes; + } + + public enum VrEmu6502Model + { + CPU_6502, + CPU_6502U, + CPU_65C02, + CPU_W65C02, + CPU_R65C02, + CPU_6510 = CPU_6502U, + CPU_8500 = CPU_6510, + CPU_8502 = CPU_8500, + CPU_7501 = CPU_6502, + CPU_8501 = CPU_6502 + } + + public enum VrEmu6502Interrupt + { + IntCleared, + IntRequested, + IntLow = IntRequested, + IntHigh = IntCleared + } + + public enum VrEmu6502AddrMode + { + AddrModeAbs, + AddrModeAbsX, + AddrModeAbsY, + AddrModeImm, + AddrModeAbsInd, + AddrModeAbsIndX, + AddrModeIndX, + AddrModeIndY, + AddrModeRel, + AddrModeZP, + AddrModeZPI, + AddrModeZPX, + AddrModeZPY, + AddrModeAcc, + AddrModeImp + } + } +} diff --git a/src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.cs b/src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.cs new file mode 100644 index 0000000000..712b8ae5c7 --- /dev/null +++ b/src/BizHawk.Emulation.Cores/CPUs/65x02/vr6502.cs @@ -0,0 +1,33 @@ + +namespace BizHawk.Emulation.Cores.Components.vr6502 +{ + public partial class vr6502 + { + private VrEmu6502State _6502s; + private readonly VrEmu6502Model _model; + + public vr6502(VrEmu6502Model model, VrEmu6502MemRead readFn, VrEmu6502MemWrite writeFn) + { + _model = model; + _6502s = VrEmu6502Interop.vrEmu6502New(_model, readFn, writeFn); + } + + public delegate byte VrEmu6502MemRead(ushort addr, bool isDbg); + public delegate void VrEmu6502MemWrite(ushort addr, byte val); + + public void Reset() + { + VrEmu6502Interop.vrEmu6502Reset(ref _6502s); + } + + public void ExecuteTick() + { + VrEmu6502Interop.vrEmu6502Tick(ref _6502s); + } + + public void ExecuteInstruction() + { + VrEmu6502Interop.vrEmu6502InstCycle(ref _6502s); + } + } +}