diff --git a/.gitignore b/.gitignore index 44e618d4..41a8bcd7 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ /AxibugEmuOnline.Client/ProjectSettings/ProjectVersion.txt /AxibugEmuOnline.Client/ProjectSettings/AutoStreamingSettings.asset /AxibugEmuOnline.Client/Logs +/virtuanessrc097-master/save diff --git a/AxibugEmuOnline.Client/Assets/Scene/EmuTest.unity b/AxibugEmuOnline.Client/Assets/Scene/EmuTest.unity index 2d477ba1..e73c73ee 100644 --- a/AxibugEmuOnline.Client/Assets/Scene/EmuTest.unity +++ b/AxibugEmuOnline.Client/Assets/Scene/EmuTest.unity @@ -123,49 +123,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &149545946 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 149545948} - - component: {fileID: 149545947} - m_Layer: 0 - m_Name: NesEmulator - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &149545947 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 149545946} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 39557e19783acee499ace6c68549e8f8, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &149545948 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 149545946} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &708549044 GameObject: m_ObjectHideFlags: 0 @@ -408,3 +365,60 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &4232056520998800727 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536011, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4232056521131536013, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} + propertyPath: m_Name + value: NesEmulator + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f8bea3f8aa351bb46ada33b2274729ea, type: 3} diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreDebuger.cs b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreDebuger.cs index d0310954..cdf1191b 100644 --- a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreDebuger.cs +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreDebuger.cs @@ -7,6 +7,7 @@ namespace AxibugEmuOnline.Client { public class CoreDebuger : IDebugerImpl { + public void Log(string message) { Debug.Log(message); diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreSupporter.cs b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreSupporter.cs index 0c3fb5c2..7cb639b3 100644 --- a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreSupporter.cs +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/CoreSupporter.cs @@ -64,5 +64,33 @@ namespace AxibugEmuOnline.Client } public EmulatorConfig Config { get; private set; } = new EmulatorConfig(); + + public void PrepareDirectory(string directPath) + { + Directory.CreateDirectory($"{Application.persistentDataPath}/{directPath}"); + } + + public void SaveFile(byte[] fileData, string directPath, string fileName) + { + PrepareDirectory(directPath); + + var fileFullpath = $"{Application.persistentDataPath}/{directPath}/{fileName}"; + File.WriteAllBytes(fileFullpath, fileData); + } + + public Stream OpenFile(string directPath, string fileName) + { + try + { + var data = File.ReadAllBytes($"{Application.persistentDataPath}/{directPath}/{fileName}"); + if (data == null) return null; + return new MemoryStream(data); + } + catch + { + return null; + } + + } } } diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs index a22cab92..308cd88b 100644 --- a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.cs @@ -1,3 +1,5 @@ +using System; +using System.IO; using UnityEngine; using VirtualNes.Core; using VirtualNes.Core.Debug; @@ -8,6 +10,8 @@ namespace AxibugEmuOnline.Client { private NES m_nesIns; + public VideoProvider VideoProvider; + private void Start() { StartGame("Kirby.nes"); @@ -19,8 +23,16 @@ namespace AxibugEmuOnline.Client Supporter.Setup(new CoreSupporter()); Debuger.Setup(new CoreDebuger()); - m_nesIns = new NES(romName); - m_nesIns.Command(NESCOMMAND.NESCMD_HWRESET); + + try + { + m_nesIns = new NES(romName); + } + catch (Exception ex) + { + m_nesIns = null; + Debug.LogError(ex); + } } public void StopGame() @@ -29,9 +41,18 @@ namespace AxibugEmuOnline.Client m_nesIns = null; } + private void Update() { - m_nesIns?.EmulateFrame(true); + if (m_nesIns != null) + { + m_nesIns.EmulateFrame(true); + + var screenBuffer = m_nesIns.ppu.GetScreenPtr(); + var lineColorMode = m_nesIns.ppu.GetLineColorMode(); + + VideoProvider.SetDrawData(screenBuffer, lineColorMode, 256, 240); + } } } } diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab new file mode 100644 index 00000000..d695d77b --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab @@ -0,0 +1,264 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4232056520112715746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4232056520112715745} + - component: {fileID: 4232056520112715744} + m_Layer: 0 + m_Name: VideoProvider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4232056520112715745 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056520112715746} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4232056520494431727} + m_Father: {fileID: 4232056521131536011} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4232056520112715744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056520112715746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83fbe375412d1af4482ae76e81c1dda2, type: 3} + m_Name: + m_EditorClassIdentifier: + Image: {fileID: 4232056521759880274} +--- !u!1 &4232056520494431712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4232056520494431727} + - component: {fileID: 4232056520494431724} + - component: {fileID: 4232056520494431725} + - component: {fileID: 4232056520494431726} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4232056520494431727 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056520494431712} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 4232056521759880275} + m_Father: {fileID: 4232056520112715745} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &4232056520494431724 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056520494431712} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &4232056520494431725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056520494431712} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &4232056520494431726 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056520494431712} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &4232056521131536013 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4232056521131536011} + - component: {fileID: 4232056521131536012} + m_Layer: 0 + m_Name: NesEmulator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4232056521131536011 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056521131536013} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4232056520112715745} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4232056521131536012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056521131536013} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39557e19783acee499ace6c68549e8f8, type: 3} + m_Name: + m_EditorClassIdentifier: + VideoProvider: {fileID: 4232056520112715744} +--- !u!1 &4232056521759880276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4232056521759880275} + - component: {fileID: 4232056521759880273} + - component: {fileID: 4232056521759880274} + m_Layer: 5 + m_Name: RawImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4232056521759880275 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056521759880276} + m_LocalRotation: {x: 1, y: 0, z: 0, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4232056520494431727} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 180, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 272, y: 240} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4232056521759880273 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056521759880276} + m_CullTransparentMesh: 1 +--- !u!114 &4232056521759880274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4232056521759880276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 8400000, guid: ffe34aaf87e4b9942b4c2ac05943d444, type: 2} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab.meta b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab.meta new file mode 100644 index 00000000..6e486980 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/NesEmulator.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f8bea3f8aa351bb46ada33b2274729ea +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/New Render Texture.renderTexture b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/New Render Texture.renderTexture new file mode 100644 index 00000000..67213061 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/New Render Texture.renderTexture @@ -0,0 +1,38 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New Render Texture + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 3 + m_Width: 272 + m_Height: 240 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthFormat: 2 + m_ColorFormat: 8 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/New Render Texture.renderTexture.meta b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/New Render Texture.renderTexture.meta new file mode 100644 index 00000000..bfd7ec1a --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/New Render Texture.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ffe34aaf87e4b9942b4c2ac05943d444 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/PaletteDefine.cs b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/PaletteDefine.cs new file mode 100644 index 00000000..4cb4fd3a --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/PaletteDefine.cs @@ -0,0 +1,242 @@ +using Codice.CM.Client.Differences; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using VirtualNes.Core; + +namespace AxibugEmuOnline.Client.Assets.Script.NesEmulator +{ + public static class PaletteDefine + { + public class PALBUF + { + public byte r; + public byte g; + public byte b; + + public PALBUF(byte r, byte g, byte b) + { + this.r = r; + this.g = g; + this.b = b; + } + } + + // スキャンラインカラー + private static int m_nScanlineColor => Supporter.Config.graphics.nScanlineColor; + + public static float[][] PalConvTbl = new float[8][] + { + new float[3]{1.00f, 1.00f, 1.00f}, + new float[3]{1.00f, 0.80f, 0.73f}, + new float[3]{0.73f, 1.00f, 0.70f}, + new float[3]{0.76f, 0.78f, 0.58f}, + new float[3]{0.86f, 0.80f, 1.00f}, + new float[3]{0.83f, 0.68f, 0.85f}, + new float[3]{0.67f, 0.77f, 0.83f}, + new float[3]{0.68f, 0.68f, 0.68f}, + }; + + public static PALBUF[] m_PaletteBuf = new PALBUF[64] + { + new PALBUF(0x7F, 0x7F, 0x7F), + new PALBUF(0x20, 0x00, 0xB0), + new PALBUF(0x28, 0x00, 0xB8), + new PALBUF(0x60, 0x10, 0xA0), + new PALBUF(0x98, 0x20, 0x78), + new PALBUF(0xB0, 0x10, 0x30), + new PALBUF(0xA0, 0x30, 0x00), + new PALBUF(0x78, 0x40, 0x00), + new PALBUF(0x48, 0x58, 0x00), + new PALBUF(0x38, 0x68, 0x00), + new PALBUF(0x38, 0x6C, 0x00), + new PALBUF(0x30, 0x60, 0x40), + new PALBUF(0x30, 0x50, 0x80), + new PALBUF(0x00, 0x00, 0x00), + new PALBUF(0x00, 0x00, 0x00), + new PALBUF(0x00, 0x00, 0x00), + new PALBUF(0xBC, 0xBC, 0xBC), + new PALBUF(0x40, 0x60, 0xF8), + new PALBUF(0x40, 0x40, 0xFF), + new PALBUF(0x90, 0x40, 0xF0), + new PALBUF(0xD8, 0x40, 0xC0), + new PALBUF(0xD8, 0x40, 0x60), + new PALBUF(0xE0, 0x50, 0x00), + new PALBUF(0xC0, 0x70, 0x00), + new PALBUF(0x88, 0x88, 0x00), + new PALBUF(0x50, 0xA0, 0x00), + new PALBUF(0x48, 0xA8, 0x10), + new PALBUF(0x48, 0xA0, 0x68), + new PALBUF(0x40, 0x90, 0xC0), + new PALBUF(0x00, 0x00, 0x00), + new PALBUF(0x00, 0x00, 0x00), + new PALBUF(0x00, 0x00, 0x00), + new PALBUF(0xFF, 0xFF, 0xFF), + new PALBUF(0x60, 0xA0, 0xFF), + new PALBUF(0x50, 0x80, 0xFF), + new PALBUF(0xA0, 0x70, 0xFF), + new PALBUF(0xF0, 0x60, 0xFF), + new PALBUF(0xFF, 0x60, 0xB0), + new PALBUF(0xFF, 0x78, 0x30), + new PALBUF(0xFF, 0xA0, 0x00), + new PALBUF(0xE8, 0xD0, 0x20), + new PALBUF(0x98, 0xE8, 0x00), + new PALBUF(0x70, 0xF0, 0x40), + new PALBUF(0x70, 0xE0, 0x90), + new PALBUF(0x60, 0xD0, 0xE0), + new PALBUF(0x60, 0x60, 0x60), + new PALBUF(0x00, 0x00, 0x00), + new PALBUF(0x00, 0x00, 0x00), + new PALBUF(0xFF, 0xFF, 0xFF), + new PALBUF(0x90, 0xD0, 0xFF), + new PALBUF(0xA0, 0xB8, 0xFF), + new PALBUF(0xC0, 0xB0, 0xFF), + new PALBUF(0xE0, 0xB0, 0xFF), + new PALBUF(0xFF, 0xB8, 0xE8), + new PALBUF(0xFF, 0xC8, 0xB8), + new PALBUF(0xFF, 0xD8, 0xA0), + new PALBUF(0xFF, 0xF0, 0x90), + new PALBUF(0xC8, 0xF0, 0x80), + new PALBUF(0xA0, 0xF0, 0xA0), + new PALBUF(0xA0, 0xFF, 0xC8), + new PALBUF(0xA0, 0xFF, 0xF0), + new PALBUF(0xA0, 0xA0, 0xA0), + new PALBUF(0x00, 0x00, 0x00), + new PALBUF(0x00, 0x00, 0x00), + }; + + #region ピクセルフォーマットに変換したパレット + // Color + public static uint[][] m_cnPalette = new uint[8][] + { + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + }; + // Color/Scanline + public static uint[][] m_csPalette = new uint[8][] + { + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + }; + + // Monochrome + public static uint[][] m_mnPalette = new uint[8][] + { + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + }; + + // Monochrome/Scanline + public static uint[][] m_msPalette = new uint[8][] + { + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + new uint[256], + }; + #endregion + + static PaletteDefine() + { + int Rbit = 0, Gbit = 0, Bbit = 0; + int Rsft = 0, Gsft = 0, Bsft = 0; + + GetBitMask(0xFF0000, ref Rsft, ref Rbit); + GetBitMask(0x00FF00, ref Gsft, ref Gbit); + GetBitMask(0x0000FF, ref Bsft, ref Bbit); + + for (int j = 0; j < 8; j++) + { + for (int i = 0; i < 64; i++) + { + uint Rn, Gn, Bn; + uint Rs, Gs, Bs; + + // Normal + Rn = (uint)(PalConvTbl[j][0] * m_PaletteBuf[i].r); + Gn = (uint)(PalConvTbl[j][1] * m_PaletteBuf[i].g); + Bn = (uint)(PalConvTbl[j][2] * m_PaletteBuf[i].b); + // Scanline + Rs = (uint)(PalConvTbl[j][0] * m_PaletteBuf[i].r * m_nScanlineColor / 100.0f); + Gs = (uint)(PalConvTbl[j][1] * m_PaletteBuf[i].g * m_nScanlineColor / 100.0f); + Bs = (uint)(PalConvTbl[j][2] * m_PaletteBuf[i].b * m_nScanlineColor / 100.0f); + + m_cnPalette[j][i] = ((Rn >> (8 - Rbit)) << Rsft) | ((Gn >> (8 - Gbit)) << Gsft) | ((Bn >> (8 - Bbit)) << Bsft); + m_csPalette[j][i] = ((Rs >> (8 - Rbit)) << Rsft) | ((Gs >> (8 - Gbit)) << Gsft) | ((Bs >> (8 - Bbit)) << Bsft); + + // Monochrome + Rn = (uint)(m_PaletteBuf[i & 0x30].r); + Gn = (uint)(m_PaletteBuf[i & 0x30].g); + Bn = (uint)(m_PaletteBuf[i & 0x30].b); + Rn = + Gn = + Bn = (uint)(0.299f * Rn + 0.587f * Gn + 0.114f * Bn); + Rn = (uint)(PalConvTbl[j][0] * Rn); + Gn = (uint)(PalConvTbl[j][1] * Gn); + Bn = (uint)(PalConvTbl[j][2] * Bn); + if (Rn > 0xFF) Rs = 0xFF; + if (Gn > 0xFF) Gs = 0xFF; + if (Bn > 0xFF) Bs = 0xFF; + // Scanline + Rs = (uint)(m_PaletteBuf[i & 0x30].r * m_nScanlineColor / 100.0f); + Gs = (uint)(m_PaletteBuf[i & 0x30].g * m_nScanlineColor / 100.0f); + Bs = (uint)(m_PaletteBuf[i & 0x30].b * m_nScanlineColor / 100.0f); + Rs = + Gs = + Bs = (uint)(0.299f * Rs + 0.587f * Gs + 0.114f * Bs); + Rs = (uint)(PalConvTbl[j][0] * Rs); + Gs = (uint)(PalConvTbl[j][1] * Gs); + Bs = (uint)(PalConvTbl[j][2] * Bs); + if (Rs > 0xFF) Rs = 0xFF; + if (Gs > 0xFF) Gs = 0xFF; + if (Bs > 0xFF) Bs = 0xFF; + + m_mnPalette[j][i] = ((Rn >> (8 - Rbit)) << Rsft) | ((Gn >> (8 - Gbit)) << Gsft) | ((Bn >> (8 - Bbit)) << Bsft); + m_msPalette[j][i] = ((Rs >> (8 - Rbit)) << Rsft) | ((Gs >> (8 - Gbit)) << Gsft) | ((Bs >> (8 - Bbit)) << Bsft); + } + } + } + + // ビット位置の取得 + static void GetBitMask(uint val, ref int shift, ref int bits) + { + shift = 0; + while (((val & (1 << shift)) == 0) && (shift < 32)) + { + shift++; + } + + bits = 32; + while (((val & (1 << (bits - 1))) == 0) && (bits > 0)) + { + bits--; + } + bits = bits - shift; + } + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/PaletteDefine.cs.meta b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/PaletteDefine.cs.meta new file mode 100644 index 00000000..d93c9c2d --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/PaletteDefine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bbd3f54279eb4ae45831a914b13d1cec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs new file mode 100644 index 00000000..b4372e30 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs @@ -0,0 +1,82 @@ +using AxibugEmuOnline.Client.Assets.Script.NesEmulator; +using Codice.CM.Client.Differences; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using UnityEngine; +using UnityEngine.Playables; +using UnityEngine.UI; +using VirtualNes.Core; + +namespace AxibugEmuOnline.Client +{ + public class VideoProvider : MonoBehaviour + { + public RawImage Image; + + private Color32[] wrapTexBuffer; + private IntPtr wrapTexBufferPointer; + private Texture2D wrapTex; + + public void SetDrawData(byte[] screenData, byte[] lineColorMode, int screenWidth, int screenHeight) + { + if (wrapTex == null) + { + wrapTex = new Texture2D(screenWidth, screenHeight, TextureFormat.BGRA32, false); + wrapTexBuffer = new Color32[screenWidth * screenHeight]; + // ̶飬ֹƶ + GCHandle handle = GCHandle.Alloc(wrapTexBuffer, GCHandleType.Pinned); + // ȡָ + wrapTexBufferPointer = handle.AddrOfPinnedObject(); + } + + uint[] pPal; + int pScn = 0; + int width; + + var Dst = wrapTexBuffer; + var pDst = 0; + + for (int line = 0; line < screenHeight; line++) + { + if ((lineColorMode[line] & 0x80) == 0) + { + pPal = PaletteDefine.m_cnPalette[lineColorMode[line] & 0x07]; + } + else + { + pPal = PaletteDefine.m_mnPalette[lineColorMode[line] & 0x07]; + } + + width = screenWidth; + + while (width > 0) + { + var edx = screenData[pScn + 8]; + + byte index = (byte)(edx & 0xFF); + var colorData = pPal[index]; + var rawData = BitConverter.GetBytes(colorData); + Dst[pDst] = new Color32(rawData[0], rawData[1], rawData[2], 255); + + pScn += 1; + pDst += 1; + width -= 1; + } + + pScn += PPU.SCREEN_WIDTH - screenWidth; + } + + //wrapTex.SetPixels32(wrapTexBuffer); + wrapTex.LoadRawTextureData(wrapTexBufferPointer, screenWidth * screenHeight * 4); + wrapTex.Apply(); + + Graphics.Blit(wrapTex, Image.mainTexture as RenderTexture); + } + + + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs.meta b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs.meta new file mode 100644 index 00000000..a7c1dff0 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/NesEmulator/VideoProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83fbe375412d1af4482ae76e81c1dda2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FDS.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FDS.cs index 56943b56..d273fc4b 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FDS.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FDS.cs @@ -9,22 +9,23 @@ namespace VirtualNes.Core public override void Reset(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : 实现 } public override void Setup(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : 实现 } public override void Write(ushort addr, byte data) { - throw new System.NotImplementedException(); + //todo : 实现 } public override int Process(int channel) { - throw new System.NotImplementedException(); + //todo : 实现 + return 0; } internal void SyncWrite(ushort addr, byte data) @@ -34,7 +35,7 @@ namespace VirtualNes.Core private void WriteSub(ushort addr, byte data, FDSSOUND ch, double rate) { - throw new NotImplementedException(); + //todo : 实现 } private class FDSSOUND diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FME7.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FME7.cs index e567bb24..28717444 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FME7.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_FME7.cs @@ -6,22 +6,23 @@ namespace VirtualNes.Core { public override void Reset(float fClock, int nRate) { - throw new NotImplementedException(); + //todo : 实现 } public override void Setup(float fClock, int nRate) { - throw new NotImplementedException(); + //todo : 实现 } public override void Write(ushort addr, byte data) { - throw new NotImplementedException(); + //todo : 实现 } public override int Process(int channel) { - throw new NotImplementedException(); + //todo : 实现 + return 0; } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_INTERNAL.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_INTERNAL.cs index 5f1fb969..1b887559 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_INTERNAL.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_INTERNAL.cs @@ -127,22 +127,23 @@ namespace VirtualNes.Core public override void Reset(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : ʵ } public override void Setup(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : ʵ } public override void Write(ushort addr, byte data) { - throw new System.NotImplementedException(); + //todo : ʵ } public override int Process(int channel) { - throw new System.NotImplementedException(); + //todo : ʵ + return 0; } internal byte SyncRead(ushort addr) diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_MMC5.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_MMC5.cs index 0b0d4de1..30ffb1e2 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_MMC5.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_MMC5.cs @@ -6,27 +6,28 @@ namespace VirtualNes.Core { public override void Reset(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : 实现 } public override void Setup(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : 实现 } public override void Write(ushort addr, byte data) { - throw new System.NotImplementedException(); + //todo : 实现 } public override int Process(int channel) { - throw new System.NotImplementedException(); + //todo : 实现 + return 0; } internal void SyncWrite(ushort addr, byte data) { - throw new NotImplementedException(); + //todo : 实现 } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_N106.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_N106.cs index e34a56fc..2fe943e4 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_N106.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_N106.cs @@ -4,22 +4,23 @@ { public override void Reset(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : 实现 } public override void Setup(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : 实现 } public override void Write(ushort addr, byte data) { - throw new System.NotImplementedException(); + //todo : 实现 } public override int Process(int channel) { - throw new System.NotImplementedException(); + //todo : 实现 + return 0; } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC7.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC7.cs index f15b9d22..448ddd0f 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC7.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ApuEX/APU_VRC7.cs @@ -4,22 +4,23 @@ { public override void Reset(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : 实现 } public override void Setup(float fClock, int nRate) { - throw new System.NotImplementedException(); + //todo : 实现 } public override void Write(ushort addr, byte data) { - throw new System.NotImplementedException(); + //todo : 实现 } public override int Process(int channel) { - throw new System.NotImplementedException(); + //todo : 实现 + return 0; } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CPU.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CPU.cs index 2b5fad91..5203e1a6 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CPU.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CPU.cs @@ -1,6 +1,7 @@ #undef DPCM_SYNCCLOCK using System; +using VirtualNes.Core.Debug; namespace VirtualNes.Core { @@ -42,7 +43,7 @@ namespace VirtualNes.Core private int DMA_cycles; private Mapper mapper; private APU apu; - private R6502 R = new R6502(); + internal R6502 R = new R6502(); private byte[] ZN_Table = new byte[256]; private Memory STACK; @@ -132,75 +133,77 @@ namespace VirtualNes.Core switch (opcode) { - case 0x69: + case 0x69: // ADC #$?? MR_IM(); ADC(); ADD_CYCLE(2); break; - case 0x65: + case 0x65: // ADC $?? MR_ZP(); ADC(); ADD_CYCLE(3); break; - case 0x75: + case 0x75: // ADC $??,X MR_ZX(); ADC(); ADD_CYCLE(4); break; - case 0x6D: + case 0x6D: // ADC $???? MR_AB(); ADC(); ADD_CYCLE(4); break; - case 0x7D: + case 0x7D: // ADC $????,X MR_AX(); ADC(); CHECK_EA(); ADD_CYCLE(4); break; - case 0x79: + case 0x79: // ADC $????,Y MR_AY(); ADC(); CHECK_EA(); ADD_CYCLE(4); break; - case 0x61: + case 0x61: // ADC ($??,X) MR_IX(); ADC(); ADD_CYCLE(6); break; - case 0x71: + case 0x71: // ADC ($??),Y MR_IY(); ADC(); CHECK_EA(); ADD_CYCLE(4); break; - case 0xE9: + + case 0xE9: // SBC #$?? MR_IM(); SBC(); ADD_CYCLE(2); break; - case 0xE5: + case 0xE5: // SBC $?? MR_ZP(); SBC(); ADD_CYCLE(3); break; - case 0xF5: + case 0xF5: // SBC $??,X MR_ZX(); SBC(); ADD_CYCLE(4); break; - case 0xED: + case 0xED: // SBC $???? MR_AB(); SBC(); ADD_CYCLE(4); break; - case 0xFD: + case 0xFD: // SBC $????,X MR_AX(); SBC(); CHECK_EA(); ADD_CYCLE(4); break; - case 0xF9: // SBC $????Y + case 0xF9: // SBC $????,Y MR_AY(); SBC(); CHECK_EA(); ADD_CYCLE(4); break; - case 0xE1: // SBC ($??X) + case 0xE1: // SBC ($??,X) MR_IX(); SBC(); ADD_CYCLE(6); break; - case 0xF1: // SBC ($??)Y + case 0xF1: // SBC ($??),Y MR_IY(); SBC(); CHECK_EA(); ADD_CYCLE(5); break; + case 0xC6: // DEC $?? MR_ZP(); DEC(); MW_ZP(); ADD_CYCLE(5); break; - case 0xD6: // DEC $??X + case 0xD6: // DEC $??,X MR_ZX(); DEC(); MW_ZP(); ADD_CYCLE(6); break; @@ -208,10 +211,11 @@ namespace VirtualNes.Core MR_AB(); DEC(); MW_EA(); ADD_CYCLE(6); break; - case 0xDE: // DEC $????X + case 0xDE: // DEC $????,X MR_AX(); DEC(); MW_EA(); ADD_CYCLE(7); break; + case 0xCA: // DEX DEX(); ADD_CYCLE(2); @@ -220,11 +224,12 @@ namespace VirtualNes.Core DEY(); ADD_CYCLE(2); break; + case 0xE6: // INC $?? MR_ZP(); INC(); MW_ZP(); ADD_CYCLE(5); break; - case 0xF6: // INC $??X + case 0xF6: // INC $??,X MR_ZX(); INC(); MW_ZP(); ADD_CYCLE(6); break; @@ -232,10 +237,11 @@ namespace VirtualNes.Core MR_AB(); INC(); MW_EA(); ADD_CYCLE(6); break; - case 0xFE: // INC $????X + case 0xFE: // INC $????,X MR_AX(); INC(); MW_EA(); ADD_CYCLE(7); break; + case 0xE8: // INX INX(); ADD_CYCLE(2); @@ -244,6 +250,7 @@ namespace VirtualNes.Core INY(); ADD_CYCLE(2); break; + case 0x29: // AND #$?? MR_IM(); AND(); ADD_CYCLE(2); @@ -252,7 +259,7 @@ namespace VirtualNes.Core MR_ZP(); AND(); ADD_CYCLE(3); break; - case 0x35: // AND $??X + case 0x35: // AND $??,X MR_ZX(); AND(); ADD_CYCLE(4); break; @@ -260,22 +267,23 @@ namespace VirtualNes.Core MR_AB(); AND(); ADD_CYCLE(4); break; - case 0x3D: // AND $????X + case 0x3D: // AND $????,X MR_AX(); AND(); CHECK_EA(); ADD_CYCLE(4); break; - case 0x39: // AND $????Y + case 0x39: // AND $????,Y MR_AY(); AND(); CHECK_EA(); ADD_CYCLE(4); break; - case 0x21: // AND ($??X) + case 0x21: // AND ($??,X) MR_IX(); AND(); ADD_CYCLE(6); break; - case 0x31: // AND ($??)Y + case 0x31: // AND ($??),Y MR_IY(); AND(); CHECK_EA(); ADD_CYCLE(5); break; + case 0x0A: // ASL A ASL_A(); ADD_CYCLE(2); @@ -705,7 +713,7 @@ namespace VirtualNes.Core ADD_CYCLE(6); break; - // 僼儔僌惂屼宯 + // フラグ制御系 case 0x18: // CLC CLC(); ADD_CYCLE(2); @@ -736,7 +744,7 @@ namespace VirtualNes.Core ADD_CYCLE(2); break; - // 僗僞僢僋宯 + // スタック系 case 0x48: // PHA PUSH(R.A); ADD_CYCLE(3); @@ -755,7 +763,7 @@ namespace VirtualNes.Core ADD_CYCLE(4); break; - // 偦偺懠 + // その他 case 0x00: // BRK BRK(); ADD_CYCLE(7); @@ -765,7 +773,7 @@ namespace VirtualNes.Core ADD_CYCLE(2); break; - // 枹岞奐柦椷孮 + // 未公開命令群 case 0x0B: // ANC #$?? case 0x2B: // ANC #$?? MR_IM(); ANC(); @@ -1105,7 +1113,7 @@ namespace VirtualNes.Core default: if (!Supporter.Config.emulator.bIllegalOp) { - throw new Exception("Illegal Opcode"); + throw new Exception("IllegalOp"); } else { @@ -1113,6 +1121,8 @@ namespace VirtualNes.Core ADD_CYCLE(4); } break; + // default: + // __assume(0); } if (nmi_request != 0) @@ -1143,7 +1153,6 @@ namespace VirtualNes.Core #endif return TOTAL_cycles - OLD_cycles; } - private void _IRQ() { PUSH((byte)(R.PC >> 8)); @@ -1169,7 +1178,7 @@ namespace VirtualNes.Core return (ushort)(nes.Read(addr) + nes.Read((ushort)(addr + 1)) * 0x100); } - var temp = MMU.CPU_MEM_BANK[addr >> 13].Span; + var temp = MMU.CPU_MEM_BANK[addr >> 13]; shortTemp[0] = temp[addr & 0x1FFF]; shortTemp[1] = temp[(addr & 0x1FFF) + 1]; return BitConverter.ToUInt16(shortTemp, 0); @@ -1716,14 +1725,14 @@ namespace VirtualNes.Core internal byte OP6502(ushort addr) { - return MMU.CPU_MEM_BANK[addr >> 13].Span[addr & 0x1FFF]; + return MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF]; } private byte[] shortTemp = new byte[2]; internal ushort OP6502W(ushort addr) { var bytePage = MMU.CPU_MEM_BANK[addr >> 13]; - var spanByte = bytePage.Span; + var spanByte = bytePage; shortTemp[0] = spanByte[addr & 0x1FFF]; shortTemp[1] = spanByte[(addr & 0x1FFF) + 1]; return BitConverter.ToUInt16(shortTemp, 0); @@ -1744,11 +1753,11 @@ namespace VirtualNes.Core else { // Dummy access - mapper.Read(addr, MMU.CPU_MEM_BANK[addr >> 13].Span[addr & 0x1FFF]); + mapper.Read(addr, MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF]); } // Quick bank read - return MMU.CPU_MEM_BANK[addr >> 13].Span[addr & 0x1FFF]; + return MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF]; } private void AND() @@ -1836,7 +1845,7 @@ namespace VirtualNes.Core { ET = OP6502W(R.PC); R.PC += 2; - EA = (byte)(ET + R.X); + EA = (ushort)(ET + R.X); DT = RD6502(EA); } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Cheat.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Cheat.cs index f1d47667..57780261 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Cheat.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Cheat.cs @@ -2,6 +2,22 @@ { public class CHEATCODE { + // 埲壓偺俀偮偼OR儅僗僋 + public const int CHEAT_ENABLE = 1 << 0; + public const int CHEAT_KEYDISABLE = 1 << 1; + + // 彂偒崬傒庬椶 + public const int CHEAT_TYPE_ALWAYS = 0; // 忢偵彂偒崬傒 + public const int CHEAT_TYPE_ONCE = 1; // 侾夞偩偗彂偒崬傒 + public const int CHEAT_TYPE_GREATER = 2; // 僨乕僞傛傝戝偒偄帪 + public const int CHEAT_TYPE_LESS = 3; // 僨乕僞傛傝彫偝偄帪 + + // 僨乕僞挿 + public const int CHEAT_LENGTH_1BYTE = 0; + public const int CHEAT_LENGTH_2BYTE = 1; + public const int CHEAT_LENGTH_3BYTE = 2; + public const int CHEAT_LENGTH_4BYTE = 3; + public byte enable; public byte type; public byte length; diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs new file mode 100644 index 00000000..4966557a --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs @@ -0,0 +1,28 @@ +namespace VirtualNes.Core +{ + public class ByteArrayRef + { + private byte[] m_rawArray; + private int m_offset; + private int m_length; + + public ByteArrayRef(byte[] array, int offset, int length) + { + m_rawArray = array; + m_offset = offset; + m_length = length; + } + + public byte this[int index] + { + get + { + return m_rawArray[m_offset + index]; + } + set + { + m_rawArray[(m_offset + index)] = value; + } + } + } +} diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs.meta b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs.meta new file mode 100644 index 00000000..eba7e428 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/ByteArrayRef.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe59f85b299db6f498a7e87a5125df58 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/MemoryUtility.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/MemoryUtility.cs index 71a82caf..b6a45c32 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/MemoryUtility.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/CoreLibs/MemoryUtility.cs @@ -1,17 +1,26 @@ -using System.Runtime.CompilerServices; +using System; +using System.Runtime.CompilerServices; namespace VirtualNes.Core { public static class MemoryUtility { - public static void ZEROMEMORY(byte[] array, uint length) + public static void ZEROMEMORY(byte[] array, int length) { - memset(array, 0, length); + Array.Clear(array, 0, array.Length); } - public static void memset(byte[] array, byte value, uint length) + public static void memset(byte[] array, byte value, int length) { - Unsafe.InitBlock(ref array[0], value, length); + memset(array, 0, value, length); + } + + public static void memset(byte[] array, int offset, byte value, int length) + { + for (int i = offset; i < length; i++) + { + array[i] = value; + } } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Debuger.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Debuger.cs index 8845558c..21ab49a4 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Debuger.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Debuger.cs @@ -1,4 +1,6 @@ -namespace VirtualNes.Core.Debug +using System.Collections.Generic; + +namespace VirtualNes.Core.Debug { public static class Debuger { diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs index b3d409f6..2ce14c8e 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/MMU.cs @@ -1,15 +1,16 @@ using System; +using VirtualNes.Core; namespace VirtualNes { public static class MMU { // CPU 儊儌儕僶儞僋 - public static Memory[] CPU_MEM_BANK = new Memory[8]; // 8K扨埵 + public static ByteArrayRef[] CPU_MEM_BANK = new ByteArrayRef[8]; // 8K扨埵 public static byte[] CPU_MEM_TYPE = new byte[8]; public static int[] CPU_MEM_PAGE = new int[8]; // 僗僥乕僩僙乕僽梡 // PPU 儊儌儕僶儞僋 - public static Memory[] PPU_MEM_BANK = new Memory[12]; // 1K扨埵 + public static ByteArrayRef[] PPU_MEM_BANK = new ByteArrayRef[12]; // 1K扨埵 public static byte[] PPU_MEM_TYPE = new byte[12]; public static int[] PPU_MEM_PAGE = new int[12]; // 僗僥乕僩僙乕僽梡 public static byte[] CRAM_USED = new byte[16]; // 僗僥乕僩僙乕僽梡 @@ -67,9 +68,12 @@ namespace VirtualNes public const byte VRAM_MIRROR4L = 0x03; // PA10 L屌掕 $2000-$23FF偺儈儔乕 public const byte VRAM_MIRROR4H = 0x04; // PA10 H屌掕 $2400-$27FF偺儈儔乕 - internal static void SetPROM_Bank(byte page, Memory ptr, byte type) + // Frame-IRQ儗僕僗僞($4017) + public static int FrameIRQ; + + internal static void SetPROM_Bank(byte page, byte[] ptr, byte type) { - CPU_MEM_BANK[page] = ptr; + CPU_MEM_BANK[page] = new ByteArrayRef(ptr, 0, ptr.Length); CPU_MEM_TYPE[page] = type; CPU_MEM_PAGE[page] = 0; } @@ -77,7 +81,7 @@ namespace VirtualNes internal static void SetPROM_8K_Bank(byte page, int bank) { bank %= PROM_8K_SIZE; - CPU_MEM_BANK[page] = new Memory(MMU.PROM, 0x2000 * bank, MMU.PROM.Length - 0x2000 * bank); + CPU_MEM_BANK[page] = new ByteArrayRef(MMU.PROM, 0x2000 * bank, MMU.PROM.Length - 0x2000 * bank); CPU_MEM_TYPE[page] = BANKTYPE_ROM; CPU_MEM_PAGE[page] = bank; } @@ -105,7 +109,7 @@ namespace VirtualNes } // PPU VROM bank - internal static void SetVROM_Bank(byte page, Memory ptr, byte type) + internal static void SetVROM_Bank(byte page, ByteArrayRef ptr, byte type) { PPU_MEM_BANK[page] = ptr; PPU_MEM_TYPE[page] = type; @@ -115,7 +119,7 @@ namespace VirtualNes internal static void SetVROM_1K_Bank(byte page, int bank) { bank %= VROM_1K_SIZE; - PPU_MEM_BANK[page] = new Memory(VROM, 0x0400 * bank, VROM.Length - (0x0400 * bank)); + PPU_MEM_BANK[page] = new ByteArrayRef(VROM, 0x0400 * bank, VROM.Length - (0x0400 * bank)); PPU_MEM_TYPE[page] = BANKTYPE_VROM; PPU_MEM_PAGE[page] = bank; } @@ -158,7 +162,7 @@ namespace VirtualNes internal static void SetCRAM_1K_Bank(byte page, int bank) { bank &= 0x1F; - PPU_MEM_BANK[page] = new Memory(MMU.CRAM, 0x0400 * bank, MMU.CRAM.Length - 0x0400 * bank); + PPU_MEM_BANK[page] = new ByteArrayRef(MMU.CRAM, 0x0400 * bank, MMU.CRAM.Length - 0x0400 * bank); PPU_MEM_TYPE[page] = BANKTYPE_CRAM; PPU_MEM_PAGE[page] = bank; @@ -190,7 +194,7 @@ namespace VirtualNes internal static void SetVRAM_1K_Bank(byte page, int bank) { bank &= 3; - PPU_MEM_BANK[page] = new Memory(VRAM, 0x0400 * bank, VRAM.Length - 0x0400 * bank); + PPU_MEM_BANK[page] = new ByteArrayRef(VRAM, 0x0400 * bank, VRAM.Length - 0x0400 * bank); PPU_MEM_TYPE[page] = BANKTYPE_VRAM; PPU_MEM_PAGE[page] = bank; } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper.cs index 75c6b555..c61fae72 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper.cs @@ -5,6 +5,7 @@ namespace VirtualNes.Core public abstract class Mapper { protected NES nes; + public Mapper(NES parent) { nes = parent; @@ -25,7 +26,7 @@ namespace VirtualNes.Core // $6000-$7FFF WRAM if (addr >= 0x6000 && addr <= 0x7FFF) { - return MMU.CPU_MEM_BANK[addr >> 13].Span[addr & 0x1FFF]; + return MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF]; } return (byte)(addr >> 8); @@ -34,7 +35,7 @@ namespace VirtualNes.Core { if (addr >= 0x6000 && addr <= 0x7FFF) { - MMU.CPU_MEM_BANK[addr >> 13].Span[addr & 0x1FFF] = data; + MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF] = data; } } @@ -78,10 +79,13 @@ namespace VirtualNes.Core public static Mapper CreateMapper(NES parent, int no) { + //todo : 实现加载mapper switch (no) { + case 4: + return new Mapper004(parent); default: - throw new NotImplementedException($"Mapper#{no} is not Impl"); + throw new NotImplementedException($"Mapper#{no:000} is not Impl"); } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper004.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper004.cs new file mode 100644 index 00000000..0106263f --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper004.cs @@ -0,0 +1,576 @@ +using Codice.CM.Client.Differences; +using System; + +namespace VirtualNes.Core +{ + public class Mapper004 : Mapper + { + private const int MMC3_IRQ_KLAX = 1; + private const int MMC3_IRQ_SHOUGIMEIKAN = 2; + private const int MMC3_IRQ_DAI2JISUPER = 3; + private const int MMC3_IRQ_DBZ2 = 4; + private const int MMC3_IRQ_ROCKMAN3 = 5; + + protected byte[] reg = new byte[8]; + protected byte prg0, prg1; + protected byte chr01, chr23, chr4, chr5, chr6, chr7; + protected byte we_sram; + + protected byte irq_type; + protected byte irq_enable; + protected byte irq_counter; + protected byte irq_latch; + protected byte irq_request; + protected byte irq_preset; + protected byte irq_preset_vbl; + + protected byte vs_patch; + protected byte vs_index; + + private byte[] VS_TKO_Security = new byte[32] + { + 0xff, 0xbf, 0xb7, 0x97, 0x97, 0x17, 0x57, 0x4f, + 0x6f, 0x6b, 0xeb, 0xa9, 0xb1, 0x90, 0x94, 0x14, + 0x56, 0x4e, 0x6f, 0x6b, 0xeb, 0xa9, 0xb1, 0x90, + 0xd4, 0x5c, 0x3e, 0x26, 0x87, 0x83, 0x13, 0x00 + }; + + public Mapper004(NES parent) : base(parent) { } + + public override void Reset() + { + for (int i = 0; i < 8; i++) + { + reg[i] = 0x00; + } + + prg0 = 0; + prg1 = 1; + SetBank_CPU(); + + chr01 = 0; + chr23 = 2; + chr4 = 4; + chr5 = 5; + chr6 = 6; + chr7 = 7; + SetBank_PPU(); + + we_sram = 0; // Disable + irq_enable = 0; // Disable + irq_counter = 0; + irq_latch = 0xFF; + irq_request = 0; + irq_preset = 0; + irq_preset_vbl = 0; + + // IRQ僞僀僾愝掕 + nes.SetIrqType(NES.IRQMETHOD.IRQ_CLOCK); + irq_type = 0; + + uint crc = nes.rom.GetPROM_CRC(); + + if (crc == 0x5c707ac4) + { // Mother(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0xcb106f49) + { // F-1 Sensation(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0x1170392a) + { // Karakuri Kengou Den - Musashi Road - Karakuri Nin Hashiru!(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0x14a01c70) + { // Gun-Dec(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0xeffeea40) + { // For Klax(J) + irq_type = MMC3_IRQ_KLAX; + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0xc17ae2dc) + { // God Slayer - Haruka Tenkuu no Sonata(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0x126ea4a0) + { // Summer Carnival '92 - Recca(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0x1f2f4861) + { // J League Fighting Soccer - The King of Ace Strikers(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0x5a6860f1) + { // Shougi Meikan '92(J) + irq_type = MMC3_IRQ_SHOUGIMEIKAN; + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0xae280e20) + { // Shougi Meikan '93(J) + irq_type = MMC3_IRQ_SHOUGIMEIKAN; + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0xe19a2473) + { // Sugoro Quest - Dice no Senshi Tachi(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0x702d9b33) + { // Star Wars - The Empire Strikes Back(Victor)(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0xa9a0d729) + { // Dai Kaijuu - Deburas(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0xc5fea9f2) + { // Dai 2 Ji - Super Robot Taisen(J) + irq_type = MMC3_IRQ_DAI2JISUPER; + } + if (crc == 0xd852c2f7) + { // Time Zone(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0xecfd3c69) + { // Taito Chase H.Q.(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0x7a748058) + { // Tom & Jerry (and Tuffy)(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0xaafe699c) + { // Ninja Ryukenden 3 - Yomi no Hakobune(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0x6cc62c06) + { // Hoshi no Kirby - Yume no Izumi no Monogatari(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0x877dba77) + { // My Life My Love - Boku no Yume - Watashi no Negai(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0x6f96ed15) + { // Max Warrior - Wakusei Kaigenrei(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0x8685f366) + { // Matendouji(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0x8635fed1) + { // Mickey Mouse 3 - Yume Fuusen(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0x26ff3ea2) + { // Yume Penguin Monogatari(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0x7671bc51) + { // Red Ariimaa 2(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0xade11141) + { // Wanpaku Kokkun no Gourmet World(J) + nes.SetIrqType(NES.IRQMETHOD.IRQ_HSYNC); + } + if (crc == 0x7c7ab58e) + { // Walkuere no Bouken - Toki no Kagi Densetsu(J) + nes.SetRenderMethod(EnumRenderMethod.POST_RENDER); + } + if (crc == 0x26ff3ea2) + { // Yume Penguin Monogatari(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + if (crc == 0x126ea4a0) + { // Summer Carnival '92 Recca(J) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + + if (crc == 0x1d2e5018 // Rockman 3(J) + || crc == 0x6b999aaf) + { // Megaman 3(U) + irq_type = MMC3_IRQ_ROCKMAN3; + } + + if (crc == 0xd88d48d7) + { // Kick Master(U) + irq_type = MMC3_IRQ_ROCKMAN3; + } + + if (crc == 0xA67EA466) + { // Alien 3(U) + nes.SetRenderMethod(EnumRenderMethod.TILE_RENDER); + } + + if (crc == 0xe763891b) + { // DBZ2 + irq_type = MMC3_IRQ_DBZ2; + } + + // VS-Unisystem + vs_patch = 0; + vs_index = 0; + + if (crc == 0xeb2dba63 // VS TKO Boxing + || crc == 0x98cfe016) + { // VS TKO Boxing (Alt) + vs_patch = 1; + } + if (crc == 0x135adf7c) + { // VS Atari RBI Baseball + vs_patch = 2; + } + if (crc == 0xf9d3b0a3 // VS Super Xevious + || crc == 0x9924980a // VS Super Xevious (b1) + || crc == 0x66bb838f) + { // VS Super Xevious (b2) + vs_patch = 3; + } + } + + private void SetBank_PPU() + { + if (MMU.VROM_1K_SIZE != 0) + { + if ((reg[0] & 0x80) != 0) + { + MMU.SetVROM_8K_Bank(chr4, chr5, chr6, chr7, + chr01, chr01 + 1, chr23, chr23 + 1); + } + else + { + MMU.SetVROM_8K_Bank(chr01, chr01 + 1, chr23, chr23 + 1, + chr4, chr5, chr6, chr7); + } + } + else + { + if ((reg[0] & 0x80) != 0) + { + MMU.SetCRAM_1K_Bank(4, (chr01 + 0) & 0x07); + MMU.SetCRAM_1K_Bank(5, (chr01 + 1) & 0x07); + MMU.SetCRAM_1K_Bank(6, (chr23 + 0) & 0x07); + MMU.SetCRAM_1K_Bank(7, (chr23 + 1) & 0x07); + MMU.SetCRAM_1K_Bank(0, chr4 & 0x07); + MMU.SetCRAM_1K_Bank(1, chr5 & 0x07); + MMU.SetCRAM_1K_Bank(2, chr6 & 0x07); + MMU.SetCRAM_1K_Bank(3, chr7 & 0x07); + } + else + { + MMU.SetCRAM_1K_Bank(0, (chr01 + 0) & 0x07); + MMU.SetCRAM_1K_Bank(1, (chr01 + 1) & 0x07); + MMU.SetCRAM_1K_Bank(2, (chr23 + 0) & 0x07); + MMU.SetCRAM_1K_Bank(3, (chr23 + 1) & 0x07); + MMU.SetCRAM_1K_Bank(4, chr4 & 0x07); + MMU.SetCRAM_1K_Bank(5, chr5 & 0x07); + MMU.SetCRAM_1K_Bank(6, chr6 & 0x07); + MMU.SetCRAM_1K_Bank(7, chr7 & 0x07); + } + } + } + + public override byte ReadLow(ushort addr) + { + if (vs_patch == 0) + { + if (addr >= 0x5000 && addr <= 0x5FFF) + { + return MMU.XRAM[addr - 0x4000]; + } + } + else if (vs_patch == 1) + { + // VS TKO Boxing Security + if (addr == 0x5E00) + { + vs_index = 0; + return 0x00; + } + else if (addr == 0x5E01) + { + return VS_TKO_Security[(vs_index++) & 0x1F]; + } + } + else if (vs_patch == 2) + { + // VS Atari RBI Baseball Security + if (addr == 0x5E00) + { + vs_index = 0; + return 0x00; + } + else if (addr == 0x5E01) + { + if (vs_index++ == 9) + return 0x6F; + else + return 0xB4; + } + } + else if (vs_patch == 3) + { + // VS Super Xevious + switch (addr) + { + case 0x54FF: + return 0x05; + case 0x5678: + if (vs_index != 0) + return 0x00; + else + return 0x01; + case 0x578f: + if (vs_index != 0) + return 0xD1; + else + return 0x89; + case 0x5567: + if (vs_index != 0) + { + vs_index = 0; + return 0x3E; + } + else + { + vs_index = 1; + return 0x37; + } + default: + break; + } + } + + return base.ReadLow(addr); + } + + public override void WriteLow(ushort addr, byte data) + { + if (addr >= 0x5000 && addr <= 0x5FFF) + { + MMU.XRAM[addr - 0x4000] = data; + } + else + { + base.WriteLow(addr, data); + } + } + + public override void Write(ushort addr, byte data) + { + switch (addr & 0xE001) + { + case 0x8000: + reg[0] = data; + SetBank_CPU(); + SetBank_PPU(); + break; + case 0x8001: + reg[1] = data; + + switch (reg[0] & 0x07) + { + case 0x00: + chr01 = (byte)(data & 0xFE); + SetBank_PPU(); + break; + case 0x01: + chr23 = (byte)(data & 0xFE); + SetBank_PPU(); + break; + case 0x02: + chr4 = data; + SetBank_PPU(); + break; + case 0x03: + chr5 = data; + SetBank_PPU(); + break; + case 0x04: + chr6 = data; + SetBank_PPU(); + break; + case 0x05: + chr7 = data; + SetBank_PPU(); + break; + case 0x06: + prg0 = data; + SetBank_CPU(); + break; + case 0x07: + prg1 = data; + SetBank_CPU(); + break; + } + break; + case 0xA000: + reg[2] = data; + if (!nes.rom.Is4SCREEN()) + { + if ((data & 0x01) != 0) MMU.SetVRAM_Mirror(MMU.VRAM_HMIRROR); + else MMU.SetVRAM_Mirror(MMU.VRAM_VMIRROR); + } + break; + case 0xA001: + reg[3] = data; + //DEBUGOUT( "MPRWR A=%04X D=%02X L=%3d CYC=%d\n", addr&0xFFFF, data&0xFF, nes->GetScanline(), nes->cpu->GetTotalCycles() ); + break; + case 0xC000: + //DEBUGOUT( "MPRWR A=%04X D=%02X L=%3d CYC=%d\n", addr&0xFFFF, data&0xFF, nes->GetScanline(), nes->cpu->GetTotalCycles() ); + reg[4] = data; + if (irq_type == MMC3_IRQ_KLAX || irq_type == MMC3_IRQ_ROCKMAN3) + { + irq_counter = data; + } + else + { + irq_latch = data; + } + if (irq_type == MMC3_IRQ_DBZ2) + { + irq_latch = 0x07; + } + break; + case 0xC001: + reg[5] = data; + if (irq_type == MMC3_IRQ_KLAX || irq_type == MMC3_IRQ_ROCKMAN3) + { + irq_latch = data; + } + else + { + if ((nes.GetScanline() < 240) || (irq_type == MMC3_IRQ_SHOUGIMEIKAN)) + { + irq_counter |= 0x80; + irq_preset = 0xFF; + } + else + { + irq_counter |= 0x80; + irq_preset_vbl = 0xFF; + irq_preset = 0; + } + } + break; + case 0xE000: + reg[6] = data; + irq_enable = 0; + irq_request = 0; + + nes.cpu.ClrIRQ(CPU.IRQ_MAPPER); + break; + case 0xE001: + reg[7] = data; + irq_enable = 1; + irq_request = 0; + + // nes->cpu->ClrIRQ( IRQ_MAPPER ); + break; + } + } + + public override void Clock(int cycles) + { + + } + + public override void HSync(int scanline) + { + if (irq_type == MMC3_IRQ_KLAX) + { + if ((scanline >= 0 && scanline <= 239) && nes.ppu.IsDispON()) + { + if (irq_enable != 0) + { + if (irq_counter == 0) + { + irq_counter = irq_latch; + irq_request = 0xFF; + } + if (irq_counter > 0) + { + irq_counter--; + } + } + } + if (irq_request != 0) + { + nes.cpu.SetIRQ(CPU.IRQ_MAPPER); + } + } + else if (irq_type == MMC3_IRQ_ROCKMAN3) + { + if ((scanline >= 0 && scanline <= 239) && nes.ppu.IsDispON()) + { + if (irq_enable != 0) + { + if ((--irq_counter) == 0) + { + irq_request = 0xFF; + irq_counter = irq_latch; + } + } + } + if (irq_request != 0) + { + nes.cpu.SetIRQ(CPU.IRQ_MAPPER); + } + } + else + { + if ((scanline >= 0 && scanline <= 239) && nes.ppu.IsDispON()) + { + if (irq_preset_vbl != 0) + { + irq_counter = irq_latch; + irq_preset_vbl = 0; + } + if (irq_preset != 0) + { + irq_counter = irq_latch; + irq_preset = 0; + if (irq_type == MMC3_IRQ_DAI2JISUPER && scanline == 0) + { + irq_counter--; + } + } + else if (irq_counter > 0) + { + irq_counter--; + } + + if (irq_counter == 0) + { + if (irq_enable != 0) + { + irq_request = 0xFF; + + nes.cpu.SetIRQ(CPU.IRQ_MAPPER); + } + irq_preset = 0xFF; + } + } + } + } + + private void SetBank_CPU() + { + if ((reg[0] & 0x40) != 0) + { + MMU.SetPROM_32K_Bank(MMU.PROM_8K_SIZE - 2, prg1, prg0, MMU.PROM_8K_SIZE - 1); + } + else + { + MMU.SetPROM_32K_Bank(prg0, prg1, MMU.PROM_8K_SIZE - 2, MMU.PROM_8K_SIZE - 1); + } + } + } +} diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper004.cs.meta b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper004.cs.meta new file mode 100644 index 00000000..cdf97fb6 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Mapper/Mapper004.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1be6fcc00c619e84cbf0d5d92701b2e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs index 118698e4..39c67cef 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/NES.cs @@ -1,13 +1,22 @@ +using Codice.CM.Client.Differences; +using Google.Protobuf.Collections; using System; using System.Collections.Generic; using System.IO; +using System.Linq; +using System.Numerics; using System.Text; +using UnityEngine.UIElements; +using UnityEngine; using VirtualNes.Core.Debug; +using Unity.VisualScripting.Antlr3.Runtime.Tree; namespace VirtualNes.Core { public class NES { + public const int FETCH_CYCLES = 8; + public CPU cpu; public PPU ppu; public APU apu; @@ -28,6 +37,9 @@ namespace VirtualNes.Core private bool m_bMoviePlay; private bool m_bMovieRec; private Stream m_fpMovie; + private uint m_MovieControl; + private int m_MovieStepTotal; + private int m_MovieStep; private bool m_bTapePlay; private bool m_bTapeRec; private Stream m_fpTape; @@ -58,9 +70,111 @@ namespace VirtualNes.Core private int NES_scanline; private EnumRenderMethod RenderMethod; private bool bZapper; + private int ZapperX; + private int ZapperY; private long base_cycles; private long emul_cycles; + // For VS-Unisystem + byte m_VSDipValue; + VSDIPSWITCH[] m_VSDipTable; + + private byte[] m_PadImg = new byte[226] + { + 28, 8, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x0F, + 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, + 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x0F, + 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }; + + private byte[] m_KeyImg0 = new byte[6] + { + 2, 2, + 0x2A, 0x2A, + 0x2A, 0x2A, + }; + + private byte[] m_KeyImg1 = new byte[8] + { + 3, 3, + 0x2A, 0x2A, 0x2A, + 0x2A, 0x2A, 0x2A, + }; + + private byte[] m_KeyImg2 = new byte[18] + { + 4, 4, + 0xFF, 0x2A, 0x2A, 0xFF, + 0x2A, 0x2A, 0x2A, 0x2A, + 0x2A, 0x2A, 0x2A, 0x2A, + 0xFF, 0x2A, 0x2A, 0xFF, + }; + + private byte[] Font6x8 = new byte[768] + { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00, + 0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x50,0x50,0xF8,0x50,0xF8,0x50,0x50,0x00, + 0x20,0x78,0xA0,0x70,0x28,0xF0,0x20,0x00,0x48,0xB0,0x50,0x20,0x50,0x68,0x90,0x00, + 0x40,0xA0,0xA8,0x68,0x90,0x90,0x68,0x00,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00, + 0x10,0x20,0x40,0x40,0x40,0x20,0x10,0x00,0x40,0x20,0x10,0x10,0x10,0x20,0x40,0x00, + 0x00,0x88,0x50,0x20,0x50,0x88,0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x08,0x10,0x10,0x20,0x40,0x40,0x80,0x00, + 0x70,0x88,0x98,0xA8,0xC8,0x88,0x70,0x00,0x20,0x60,0x20,0x20,0x20,0x20,0xF8,0x00, + 0x70,0x88,0x08,0x30,0x40,0x80,0xF8,0x00,0x70,0x88,0x08,0x30,0x08,0x88,0x70,0x00, + 0x30,0x50,0x90,0x90,0xF8,0x10,0x10,0x00,0xF8,0x80,0x80,0xF0,0x08,0x08,0xF0,0x00, + 0x70,0x88,0x80,0xF0,0x88,0x88,0x70,0x00,0xF8,0x08,0x10,0x10,0x20,0x20,0x20,0x00, + 0x70,0x88,0x88,0x70,0x88,0x88,0x70,0x00,0x70,0x88,0x88,0x78,0x08,0x88,0x70,0x00, + 0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x40,0x00, + 0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x00,0x00,0x00,0xF8,0x00,0xF8,0x00,0x00,0x00, + 0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x00,0x70,0x88,0x08,0x10,0x20,0x00,0x20,0x00, + 0x30,0x48,0x88,0x98,0xA8,0xA8,0x78,0x00,0x20,0x50,0x50,0x88,0xF8,0x88,0x88,0x00, + 0xF0,0x88,0x88,0xF0,0x88,0x88,0xF0,0x00,0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x00, + 0xF0,0x88,0x88,0x88,0x88,0x88,0xF0,0x00,0xF8,0x80,0x80,0xF0,0x80,0x80,0xF8,0x00, + 0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0x00,0x70,0x88,0x80,0xB8,0x88,0x88,0x70,0x00, + 0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0xF8,0x00, + 0x38,0x08,0x08,0x08,0x08,0x88,0x70,0x00,0x88,0x88,0x90,0xE0,0x90,0x88,0x88,0x00, + 0x80,0x80,0x80,0x80,0x80,0x80,0xF8,0x00,0x88,0xD8,0xA8,0xA8,0xA8,0xA8,0xA8,0x00, + 0x88,0xC8,0xA8,0xA8,0xA8,0x98,0x88,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00, + 0xF0,0x88,0x88,0xF0,0x80,0x80,0x80,0x00,0x70,0x88,0x88,0x88,0xA8,0x90,0x68,0x00, + 0xF0,0x88,0x88,0xF0,0x88,0x88,0x88,0x00,0x70,0x88,0x80,0x70,0x08,0x88,0x70,0x00, + 0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00, + 0x88,0x88,0x88,0x50,0x50,0x50,0x20,0x00,0x88,0xA8,0xA8,0xA8,0xA8,0xD8,0x88,0x00, + 0x88,0x88,0x50,0x20,0x50,0x88,0x88,0x00,0x88,0x88,0x88,0x70,0x20,0x20,0x20,0x00, + 0xF8,0x08,0x10,0x20,0x40,0x80,0xF8,0x00,0x70,0x40,0x40,0x40,0x40,0x40,0x70,0x00, + 0x88,0x50,0xF8,0x20,0xF8,0x20,0x20,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x70,0x00, + 0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00, + 0x80,0xC0,0xE0,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x70,0x08,0x78,0x88,0xF8,0x00, + 0x80,0x80,0x80,0xF0,0x88,0x88,0xF0,0x00,0x00,0x00,0x78,0x80,0x80,0x80,0x78,0x00, + 0x08,0x08,0x08,0x78,0x88,0x88,0x78,0x00,0x00,0x00,0x70,0x88,0xF8,0x80,0x78,0x00, + 0x18,0x20,0xF8,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x78,0x88,0x78,0x08,0xF0,0x00, + 0x80,0x80,0x80,0xF0,0x88,0x88,0x88,0x00,0x20,0x00,0x20,0x20,0x20,0x20,0x20,0x00, + 0x20,0x00,0x20,0x20,0x20,0x20,0xC0,0x00,0x80,0x80,0x88,0x90,0xE0,0x90,0x88,0x00, + 0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x00,0x00,0x00,0xF0,0xA8,0xA8,0xA8,0xA8,0x00, + 0x00,0x00,0xF0,0x88,0x88,0x88,0x88,0x00,0x00,0x00,0x70,0x88,0x88,0x88,0x70,0x00, + 0x00,0x00,0xF0,0x88,0xF0,0x80,0x80,0x00,0x00,0x00,0x78,0x88,0x78,0x08,0x08,0x00, + 0x00,0x00,0xB8,0xC0,0x80,0x80,0x80,0x00,0x00,0x00,0x78,0x80,0x70,0x08,0xF0,0x00, + 0x20,0x20,0xF8,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x70,0x00, + 0x00,0x00,0x88,0x88,0x50,0x50,0x20,0x00,0x00,0x00,0x88,0xA8,0xA8,0xD8,0x88,0x00, + 0x00,0x00,0x88,0x50,0x20,0x50,0x88,0x00,0x00,0x00,0x88,0x88,0x78,0x08,0xF0,0x00, + 0x00,0x00,0xF8,0x08,0x70,0x80,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + }; + public NES(string fname) { Debuger.Log("VirtuaNES - CSharpCore\n"); @@ -111,6 +225,11 @@ namespace VirtualNes.Core Debuger.Log("Allocating PPU..."); ppu = new PPU(this); + var screenBuffer = new byte[PPU.SCREEN_WIDTH * PPU.SCREEN_HEIGHT]; + var colormode = new byte[PPU.SCREEN_HEIGHT]; + + ppu.SetScreenPtr(screenBuffer, colormode); + Debuger.Log("Allocating APU..."); apu = new APU(this); @@ -119,10 +238,221 @@ namespace VirtualNes.Core Debuger.Log("Loading ROM Image..."); rom = new ROM(fname); + + mapper = Mapper.CreateMapper(this, rom.GetMapperNo()); + + Debuger.Log("OK"); + + Debuger.Log($"{rom.GetRomName()}"); + Debuger.Log($"Mapper : #{rom.GetMapperNo():D3}"); + Debuger.Log($"PRG SIZE : {16 * rom.GetPROM_SIZE():4:0000}K"); + Debuger.Log($"CHR SIZE : {8 * rom.GetVROM_SIZE():4:0000}K"); + + Debuger.Log($"V MIRROR :{rom.IsVMIRROR()}"); + Debuger.Log($"4 SCREEN :{rom.Is4SCREEN()}"); + Debuger.Log($"SAVE RAM :{rom.IsSAVERAM()}"); + Debuger.Log($"TRAINER :{rom.IsTRAINER()}"); + Debuger.Log($"VS-Unisystem :{rom.IsVSUNISYSTEM()}"); + + NesSub_MemoryInitial(); + LoadSRAM(); + LoadDISK(); + + { + // Pad饹ڤȳڻߥ󥰤WΤǤ + uint crc = rom.GetPROM_CRC(); + if ( + crc == 0xe792de94 // Best Play - Pro Yakyuu (New) (J) + || crc == 0xf79d684a // Best Play - Pro Yakyuu (Old) (J) + || crc == 0xc2ef3422 // Best Play - Pro Yakyuu 2 (J) + || crc == 0x974e8840 // Best Play - Pro Yakyuu '90 (J) + || crc == 0xb8747abf // Best Play - Pro Yakyuu Special (J) + || crc == 0x9fa1c11f // Castle Excellent (J) + || crc == 0x0b0d4d1b // Derby Stallion - Zenkoku Ban (J) + || crc == 0x728c3d98 // Downtown - Nekketsu Monogatari (J) + || crc == 0xd68a6f33 // Dungeon Kid (J) + || crc == 0x3a51eb04 // Fleet Commander (J) + || crc == 0x7c46998b // Haja no Fuuin (J) + || crc == 0x7e5d2f1a // Itadaki Street - Watashi no Mise ni Yottette (J) + || crc == 0xcee5857b // Ninjara Hoi! (J) + || crc == 0x50ec5e8b // Wizardry - Legacy of Llylgamyn (J) + || crc == 0x343e9146 // Wizardry - Proving Grounds of the Mad Overlord (J) + || crc == 0x33d07e45) + { // Wizardry - The Knight of Diamonds (J) + pad.SetExController(EXCONTROLLER.EXCONTROLLER_TURBOFILE); + } + } + + LoadTurboFile(); + + // VS-UnisystemΥǥեO + if (rom.IsVSUNISYSTEM()) + { + uint crc = rom.GetPROM_CRC(); + + m_VSDipValue = 0; + m_VSDipTable = VsUnisystem.vsdip_default; + } + + Reset(); + + // `ФΥǥեȥץO(Orʹ) + GameOption.defRenderMethod = (int)GetRenderMethod(); + GameOption.defIRQtype = GetIrqType(); + GameOption.defFrameIRQ = GetFrameIRQmode(); + GameOption.defVideoMode = GetVideoMode(); + + // O`ɤO(ȥ꤬oХǥեȤ) + if (rom.GetMapperNo() != 20) + { + GameOption.Load(rom.GetPROM_CRC()); + } + else + { + GameOption.Load(rom.GetGameID(), rom.GetMakerID()); + } + + SetRenderMethod((EnumRenderMethod)GameOption.nRenderMethod); + SetIrqType((IRQMETHOD)GameOption.nIRQtype); + SetFrameIRQmode(GameOption.bFrameIRQ); + SetVideoMode(GameOption.bVideoMode); } catch (Exception ex) { Debuger.LogError(ex.ToString()); + throw ex; + } + } + + private int GetIrqType() + { + return nIRQtype; + } + + private void LoadTurboFile() + { + MemoryUtility.ZEROMEMORY(MMU.ERAM, MMU.ERAM.Length); + + if (pad.GetExController() != (int)EXCONTROLLER.EXCONTROLLER_TURBOFILE) + return; + + var fp = Supporter.OpenFile(Supporter.Config.path.szSavePath, "TurboFile.vtf"); + try + { + if (fp == null) + { + // xxx ե_ޤ + throw new Exception($"Can Not Open File [TurboFile.vtf]"); + } + + long size = fp.Length; + // ե륵ȡ + if (size > 32 * 1024) + { + size = 32 * 1024; + } + + fp.Read(MMU.ERAM, 0, MMU.ERAM.Length); + fp.Close(); + } + catch (Exception ex) + { + fp?.Close(); + Debuger.LogError($"Loading TurboFile Error.\n{ex}"); + } + } + + private void LoadDISK() + { + //todo : ŵȡ֧ + } + + private void LoadSRAM() + { + if (rom.IsNSF()) + return; + + MemoryUtility.ZEROMEMORY(MMU.WRAM, MMU.WRAM.Length); + + if (!rom.IsSAVERAM()) + return; + + var saveFileDir = Supporter.Config.path.szSavePath; + var saveFileName = $"{rom.GetRomName()}.sav"; + + var fp = Supporter.OpenFile(saveFileDir, saveFileName); + + try + { + if (fp == null) + { + throw new Exception("not find ram file to read"); + } + + Debuger.Log("Loading SAVERAM..."); + + int size = (int)fp.Length; + if (size <= 128 * 1024) + { + fp.Read(MMU.WRAM, 0, size); + } + Debuger.Log("OK."); + fp.Close(); + } + catch (Exception ex) + { + fp?.Close(); + fp = null; + } + } + + private void NesSub_MemoryInitial() + { + int i; + + // NA + MemoryUtility.ZEROMEMORY(MMU.RAM, MMU.RAM.Length); + MemoryUtility.ZEROMEMORY(MMU.WRAM, MMU.WRAM.Length); + MemoryUtility.ZEROMEMORY(MMU.DRAM, MMU.DRAM.Length); + MemoryUtility.ZEROMEMORY(MMU.ERAM, MMU.ERAM.Length); + MemoryUtility.ZEROMEMORY(MMU.XRAM, MMU.XRAM.Length); + MemoryUtility.ZEROMEMORY(MMU.CRAM, MMU.CRAM.Length); + MemoryUtility.ZEROMEMORY(MMU.VRAM, MMU.VRAM.Length); + + MemoryUtility.ZEROMEMORY(MMU.SPRAM, MMU.SPRAM.Length); + MemoryUtility.ZEROMEMORY(MMU.BGPAL, MMU.BGPAL.Length); + MemoryUtility.ZEROMEMORY(MMU.SPPAL, MMU.SPPAL.Length); + + MemoryUtility.ZEROMEMORY(MMU.CPUREG, MMU.CPUREG.Length); + MemoryUtility.ZEROMEMORY(MMU.PPUREG, MMU.PPUREG.Length); + + MMU.FrameIRQ = 0xC0; + + MMU.PROM = MMU.VROM = null; + + // 0 Zh~΍ + MMU.PROM_8K_SIZE = MMU.PROM_16K_SIZE = MMU.PROM_32K_SIZE = 1; + MMU.VROM_1K_SIZE = MMU.VROM_2K_SIZE = MMU.VROM_4K_SIZE = MMU.VROM_8K_SIZE = 1; + + // ftHgoNݒ + for (i = 0; i < 8; i++) + { + MMU.CPU_MEM_BANK[i] = null; + MMU.CPU_MEM_TYPE[i] = MMU.BANKTYPE_ROM; + MMU.CPU_MEM_PAGE[i] = 0; + } + + // RAM/WRAM + MMU.SetPROM_Bank(0, MMU.RAM, MMU.BANKTYPE_RAM); + MMU.SetPROM_Bank(3, MMU.WRAM, MMU.BANKTYPE_RAM); + + // _~[ + MMU.SetPROM_Bank(1, MMU.XRAM, MMU.BANKTYPE_ROM); + MMU.SetPROM_Bank(2, MMU.XRAM, MMU.BANKTYPE_ROM); + + for (i = 0; i < 8; i++) + { + MMU.CRAM_USED[i] = 0; } } @@ -156,8 +486,11 @@ namespace VirtualNes.Core m_CheatCode.Clear(); } + private int FrameCount = 0; public void EmulateFrame(bool bDraw) { + FrameCount++; + int scanline = 0; if (rom.IsNSF()) { @@ -168,6 +501,7 @@ namespace VirtualNes.Core CheatCodeProcess(); NES_scanline = scanline; + bool NotTile = RenderMethod != EnumRenderMethod.TILE_RENDER; if (RenderMethod != EnumRenderMethod.TILE_RENDER) { @@ -181,12 +515,413 @@ namespace VirtualNes.Core if (RenderMethod < EnumRenderMethod.POST_RENDER) { EmulationCPU(nescfg.ScanlineCycles); + ppu.FrameStart(); + ppu.ScanlineNext(); + mapper.HSync(scanline); + ppu.ScanlineStart(); + } + else + { + EmulationCPU(nescfg.HDrawCycles); + ppu.FrameStart(); + ppu.ScanlineNext(); + mapper.HSync(scanline); + EmulationCPU(FETCH_CYCLES * 32); + ppu.ScanlineStart(); + EmulationCPU(FETCH_CYCLES * 10 + nescfg.ScanlineEndCycles); } } + else if (scanline < 240) + { + if (RenderMethod < EnumRenderMethod.POST_RENDER) + { + if (RenderMethod == EnumRenderMethod.POST_ALL_RENDER) + EmulationCPU(nescfg.ScanlineCycles); + if (bDraw) + { + ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip); + } + else + { + if (pad.IsZapperMode() && scanline == ZapperY) + { + ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip); + } + else + { + if (!ppu.IsSprite0(scanline)) + { + ppu.DummyScanline(scanline); + } + else + { + ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip); + } + } + } + ppu.ScanlineNext(); // ̈ʒuŃX^[n͉ʂႤ + if (RenderMethod == EnumRenderMethod.PRE_ALL_RENDER) + EmulationCPU(nescfg.ScanlineCycles); + + mapper.HSync(scanline); + ppu.ScanlineStart(); + } + else + { + if (RenderMethod == EnumRenderMethod.POST_RENDER) + EmulationCPU(nescfg.HDrawCycles); + if (bDraw) + { + ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip); + } + else + { + if (pad.IsZapperMode() && scanline == ZapperY) + { + ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip); + } + else + { + if (!ppu.IsSprite0(scanline)) + { + ppu.DummyScanline(scanline); + } + else + { + ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip); + } + } + } + if (RenderMethod == EnumRenderMethod.PRE_RENDER) + EmulationCPU(nescfg.HDrawCycles); + ppu.ScanlineNext(); + mapper.HSync(scanline); + EmulationCPU(FETCH_CYCLES * 32); + ppu.ScanlineStart(); + EmulationCPU(FETCH_CYCLES * 10 + nescfg.ScanlineEndCycles); + } + } + else if (scanline == 240) + { + mapper.VSync(); + if (RenderMethod < EnumRenderMethod.POST_RENDER) + { + EmulationCPU(nescfg.ScanlineCycles); + mapper.HSync(scanline); + } + else + { + EmulationCPU(nescfg.HDrawCycles); + mapper.HSync(scanline); + EmulationCPU(nescfg.HBlankCycles); + } + } + else if (scanline <= nescfg.TotalScanlines - 1) + { + pad.VSync(); + + // VBLANK + if (scanline == nescfg.TotalScanlines - 1) + { + ppu.VBlankEnd(); + } + if (RenderMethod < EnumRenderMethod.POST_RENDER) + { + if (scanline == 241) + { + ppu.VBlankStart(); + if ((MMU.PPUREG[0] & PPU.PPU_VBLANK_BIT) != 0) + { + cpu.NMI(); + } + } + EmulationCPU(nescfg.ScanlineCycles); + mapper.HSync(scanline); + } + else + { + if (scanline == 241) + { + ppu.VBlankStart(); + if ((MMU.PPUREG[0] & PPU.PPU_VBLANK_BIT) != 0) + { + cpu.NMI(); + } + } + EmulationCPU(nescfg.HDrawCycles); + mapper.HSync(scanline); + EmulationCPU(nescfg.HBlankCycles); + } + + if (scanline == nescfg.TotalScanlines - 1) + { + break; + } + } + if (pad.IsZapperMode()) + { + if (scanline == ZapperY) + bZapper = true; + else + bZapper = false; + } + + scanline++; + NES_scanline = scanline; + } + } + else + { + bZapper = false; + while (true) + { + ppu.SetRenderScanline(scanline); + + if (scanline == 0) + { + // _~[XLC + // H-Draw (4fetches*32) + EmulationCPU(FETCH_CYCLES * 128); + ppu.FrameStart(); + ppu.ScanlineNext(); + EmulationCPU(FETCH_CYCLES * 10); + mapper.HSync(scanline); + EmulationCPU(FETCH_CYCLES * 22); + ppu.ScanlineStart(); + EmulationCPU(FETCH_CYCLES * 10 + nescfg.ScanlineEndCycles); + } + else if (scanline < 240) + { + // XN[`(Scanline 1`239) + if (bDraw) + { + ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip); + ppu.ScanlineNext(); + EmulationCPU(FETCH_CYCLES * 10); + mapper.HSync(scanline); + EmulationCPU(FETCH_CYCLES * 22); + ppu.ScanlineStart(); + EmulationCPU(FETCH_CYCLES * 10 + nescfg.ScanlineEndCycles); + } + else + { + if (pad.IsZapperMode() && scanline == ZapperY) + { + ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip); + ppu.ScanlineNext(); + EmulationCPU(FETCH_CYCLES * 10); + mapper.HSync(scanline); + EmulationCPU(FETCH_CYCLES * 22); + ppu.ScanlineStart(); + EmulationCPU(FETCH_CYCLES * 10 + nescfg.ScanlineEndCycles); + } + else + { + if (!ppu.IsSprite0(scanline)) + { + // H-Draw (4fetches*32) + EmulationCPU(FETCH_CYCLES * 128); + ppu.DummyScanline(scanline); + ppu.ScanlineNext(); + EmulationCPU(FETCH_CYCLES * 10); + mapper.HSync(scanline); + EmulationCPU(FETCH_CYCLES * 22); + ppu.ScanlineStart(); + EmulationCPU(FETCH_CYCLES * 10 + nescfg.ScanlineEndCycles); + } + else + { + ppu.Scanline(scanline, Supporter.Config.graphics.bAllSprite, Supporter.Config.graphics.bLeftClip); + ppu.ScanlineNext(); + EmulationCPU(FETCH_CYCLES * 10); + mapper.HSync(scanline); + EmulationCPU(FETCH_CYCLES * 22); + ppu.ScanlineStart(); + EmulationCPU(FETCH_CYCLES * 10 + nescfg.ScanlineEndCycles); + } + } + } + } + else if (scanline == 240) + { + // _~[XLC (Scanline 240) + mapper.VSync(); + + EmulationCPU(nescfg.HDrawCycles); + // H-Sync + mapper.HSync(scanline); + + EmulationCPU(nescfg.HBlankCycles); + } + else if (scanline <= nescfg.TotalScanlines - 1) + { + pad.VSync(); + + // VBLANK + if (scanline == nescfg.TotalScanlines - 1) + { + ppu.VBlankEnd(); + } + if (scanline == 241) + { + ppu.VBlankStart(); + if ((MMU.PPUREG[0] & PPU.PPU_VBLANK_BIT) != 0) + { + cpu.NMI(); + } + } + EmulationCPU(nescfg.HDrawCycles); + + // H-Sync + mapper.HSync(scanline); + + EmulationCPU(nescfg.HBlankCycles); + + if (scanline == nescfg.TotalScanlines - 1) + { + break; + } + } + if (pad.IsZapperMode()) + { + if (scanline == ZapperY) + bZapper = true; + else + bZapper = false; + } + + scanline++; + NES_scanline = scanline; + } + } + + if (bDraw) + { + DrawPad(); + } + } + + private void DrawPad() + { + if (m_bMoviePlay) + { + int offset_h = 12; + int offset_v = Supporter.Config.graphics.bAllLine ? (240 - 18) : (240 - 22); + + if (Supporter.Config.movie.bPadDisplay) + { + uint dwData = pad.GetSyncData(); + for (int i = 0; i < 4; i++) + { + byte Data = (byte)(dwData >> (i * 8)); + if ((m_MovieControl & (1 << i)) != 0) + { + DrawBitmap(offset_h, offset_v, m_PadImg); + + // KEY + if ((Data & (1 << 4)) != 0) DrawBitmap(offset_h + 3, offset_v + 1, m_KeyImg0); // U + if ((Data & (1 << 5)) != 0) DrawBitmap(offset_h + 3, offset_v + 5, m_KeyImg0); // D + if ((Data & (1 << 6)) != 0) DrawBitmap(offset_h + 1, offset_v + 3, m_KeyImg0); // L + if ((Data & (1 << 7)) != 0) DrawBitmap(offset_h + 5, offset_v + 3, m_KeyImg0); // R + + // START,SELECT + if ((Data & (1 << 2)) != 0) DrawBitmap(offset_h + 9, offset_v + 5, m_KeyImg1); // SELECT + if ((Data & (1 << 3)) != 0) DrawBitmap(offset_h + 13, offset_v + 5, m_KeyImg1); // START + + // A,B + if ((Data & (1 << 0)) != 0) DrawBitmap(offset_h + 23, offset_v + 3, m_KeyImg2); // A + if ((Data & (1 << 1)) != 0) DrawBitmap(offset_h + 18, offset_v + 3, m_KeyImg2); // B + + offset_h += 30; + } + } + } + + if (Supporter.Config.movie.bTimeDisplay) + { + // Time display + int t = m_MovieStep; + int h = t / 216000; + t -= h * 216000; + int m = t / 3600; + t -= m * 3600; + int s = t / 60; + t -= s * 60; + + string szTemp = $"{h:00}:{m:00}:{s:00}.{t * 100 / 60:00}"; + DrawString(256 - 80 + 0, offset_v - 1, szTemp, 0x1F); + DrawString(256 - 80 + 0, offset_v + 1, szTemp, 0x1F); + DrawString(256 - 80 - 1, offset_v + 0, szTemp, 0x1F); + DrawString(256 - 80 + 1, offset_v + 0, szTemp, 0x1F); + DrawString(256 - 80, offset_v, szTemp, 0x30); } } } + internal void DrawString(int x, int y, string str, byte col) + { + foreach (var @char in str) + { + DrawFont(x, y, (byte)@char, col); + x += 6; + } + } + + internal void DrawFont(int x, int y, byte chr, byte col) + { + int i; + int pFnt; + int pPtr; + var Scn = ppu.GetScreenPtr(); + int pScn = 8; + + + if (chr < 0x20 || chr > 0x7F) + return; + chr -= 0x20; + pFnt = chr * 8; + pPtr = pScn + (256 + 16) * y + x; + for (i = 0; i < 8; i++) + { + if ((Font6x8[pFnt + i] & 0x80) != 0) Scn[pPtr + 0] = col; + if ((Font6x8[pFnt + i] & 0x40) != 0) Scn[pPtr + 1] = col; + if ((Font6x8[pFnt + i] & 0x20) != 0) Scn[pPtr + 2] = col; + if ((Font6x8[pFnt + i] & 0x10) != 0) Scn[pPtr + 3] = col; + if ((Font6x8[pFnt + i] & 0x08) != 0) Scn[pPtr + 4] = col; + if ((Font6x8[pFnt + i] & 0x04) != 0) Scn[pPtr + 5] = col; + pPtr += (256 + 16); + } + } + + private void DrawBitmap(int x, int y, byte[] bitMap) + { + int i, j; + int h, v; + var Scn = ppu.GetScreenPtr(); + int pScn = 8 + (256 + 16) * y + x; + int pPtr; + + int lpBitmap = 0; + h = bitMap[lpBitmap++]; + v = bitMap[lpBitmap++]; + + for (j = 0; j < v; j++) + { + pPtr = pScn; + for (i = 0; i < h; i++) + { + if (bitMap[lpBitmap] != 0xFF) + { + Scn[pPtr] = bitMap[lpBitmap]; + } + lpBitmap++; + pPtr++; + } + pScn += 256 + 16; + } + } + + int CPU_CALL_COUNT = 0; internal void EmulationCPU(int basecycles) { int cycles; @@ -196,8 +931,11 @@ namespace VirtualNes.Core if (cycles > 0) { - emul_cycles += cpu.EXEC(cycles); + var cycleAdd = cpu.EXEC(cycles); + emul_cycles += cycleAdd; } + + CPU_CALL_COUNT++; } internal void Reset() @@ -207,27 +945,27 @@ namespace VirtualNes.Core SaveTurboFile(); // RAM Clear - MemoryUtility.ZEROMEMORY(MMU.RAM, (uint)MMU.RAM.Length); + MemoryUtility.ZEROMEMORY(MMU.RAM, MMU.RAM.Length); if (rom.GetPROM_CRC() == 0x29401686) - { // Minna no Taabou no Nakayoshi Dai Sakusen(J) - MemoryUtility.memset(MMU.RAM, 0xFF, (uint)MMU.RAM.Length); + { // Minna no Taabou no Nakayoshi Dai Sakusen(J) + MemoryUtility.memset(MMU.RAM, 0xFF, MMU.RAM.Length); } // RAM set if (!rom.IsSAVERAM() && rom.GetMapperNo() != 20) { - MemoryUtility.memset(MMU.WRAM, 0xFF, (uint)MMU.WRAM.Length); + MemoryUtility.memset(MMU.WRAM, 0xFF, MMU.WRAM.Length); } - MemoryUtility.ZEROMEMORY(MMU.CRAM, (uint)MMU.CRAM.Length); - MemoryUtility.ZEROMEMORY(MMU.VRAM, (uint)MMU.VRAM.Length); + MemoryUtility.ZEROMEMORY(MMU.CRAM, MMU.CRAM.Length); + MemoryUtility.ZEROMEMORY(MMU.VRAM, MMU.VRAM.Length); - MemoryUtility.ZEROMEMORY(MMU.SPRAM, (uint)MMU.SPRAM.Length); - MemoryUtility.ZEROMEMORY(MMU.BGPAL, (uint)MMU.BGPAL.Length); - MemoryUtility.ZEROMEMORY(MMU.SPPAL, (uint)MMU.SPPAL.Length); + MemoryUtility.ZEROMEMORY(MMU.SPRAM, MMU.SPRAM.Length); + MemoryUtility.ZEROMEMORY(MMU.BGPAL, MMU.BGPAL.Length); + MemoryUtility.ZEROMEMORY(MMU.SPPAL, MMU.SPPAL.Length); - MemoryUtility.ZEROMEMORY(MMU.CPUREG, (uint)MMU.CPUREG.Length); - MemoryUtility.ZEROMEMORY(MMU.PPUREG, (uint)MMU.PPUREG.Length); + MemoryUtility.ZEROMEMORY(MMU.CPUREG, MMU.CPUREG.Length); + MemoryUtility.ZEROMEMORY(MMU.PPUREG, MMU.PPUREG.Length); m_bDiskThrottle = false; @@ -311,10 +1049,7 @@ namespace VirtualNes.Core apu.SoundSetup(); } - public void SetRenderMethod(EnumRenderMethod type) - { - RenderMethod = type; - } + internal void SoftReset() { @@ -345,7 +1080,7 @@ namespace VirtualNes.Core { if (m_bNsfInit) { - MemoryUtility.ZEROMEMORY(MMU.RAM, (uint)MMU.RAM.Length); + MemoryUtility.ZEROMEMORY(MMU.RAM, MMU.RAM.Length); if ((rom.GetNsfHeader().ExtraChipSelect & 0x04) == 0) { MemoryUtility.ZEROMEMORY(MMU.RAM, 0x2000); @@ -407,7 +1142,54 @@ namespace VirtualNes.Core internal void CheatCodeProcess() { - //todo : ʵ + foreach (var it in m_CheatCode) + { + if ((it.enable & CHEATCODE.CHEAT_ENABLE) == 0) + continue; + + switch (it.type) + { + case CHEATCODE.CHEAT_TYPE_ALWAYS: + CheatWrite(it.length, it.address, it.data); + break; + case CHEATCODE.CHEAT_TYPE_ONCE: + CheatWrite(it.length, it.address, it.data); + it.enable = 0; + break; + case CHEATCODE.CHEAT_TYPE_GREATER: + if (CheatRead(it.length, it.address) > it.data) + { + CheatWrite(it.length, it.address, it.data); + } + break; + case CHEATCODE.CHEAT_TYPE_LESS: + if (CheatRead(it.length, it.address) < it.data) + { + CheatWrite(it.length, it.address, it.data); + } + break; + } + } + } + + private uint CheatRead(byte length, ushort addr) + { + uint data = 0; + for (int i = 0; i <= length; i++) + { + data |= (uint)(Read((ushort)(addr + i)) * (1 << (i * 8))); + } + + return data; + } + + private void CheatWrite(int length, ushort addr, uint data) + { + for (int i = 0; i <= length; i++) + { + Write((ushort)(addr + i), (byte)(data & 0xFF)); + data >>= 8; + } } public void Dispose() @@ -495,7 +1277,23 @@ namespace VirtualNes.Core private void SaveTurboFile() { - //todo : ʵ + int i; + + if (pad.GetExController() != (int)EXCONTROLLER.EXCONTROLLER_TURBOFILE) + return; + + for (i = 0; i < MMU.ERAM.Length; i++) + { + if (MMU.ERAM[i] != 0x00) + break; + } + + if (i < MMU.ERAM.Length) + { + Debuger.Log("Saving TURBOFILE..."); + + Supporter.SaveFile(MMU.ERAM, Supporter.Config.path.szSavePath, "TurboFile.vtf"); + } } internal void Clock(int cycles) @@ -544,7 +1342,53 @@ namespace VirtualNes.Core internal void Tape(int cycles) { - //todo : ʵTape (ĿǼ¼ҲPlay,ȼܵ) + if (!(IsTapePlay() || IsTapeRec())) + { + return; + } + + if ((m_TapeCycles -= (double)cycles) > 0) + return; + + m_TapeCycles += (nescfg.CpuClock / 32000.0); + // m_TapeCycles += (nescfg->CpuClock / 22050.0); // xă_ۂ + + if (m_bTapePlay) + { + int data = m_fpTape.ReadByte(); + if (data != -1) //EOF + { + if ((data & 0xFF) >= 0x8C) + { + m_TapeOut = 0x02; + } + else + if ((data & 0xFF) <= 0x74) + { + m_TapeOut = 0x00; + } + } + else + { + TapeStop(); + } + } + if (m_bTapeRec) + { + m_fpTape.WriteByte((m_TapeIn & 7) == 7 ? (byte)0x90 : (byte)0x70); + } + } + + private void TapeStop() + { + if (!m_bBarcode) + { + cpu.SetClockProcess(false); + } + + m_bTapePlay = m_bTapeRec = false; + m_fpTape?.Dispose(); + m_fpTape = null; } internal byte Read(ushort addr) @@ -570,10 +1414,10 @@ namespace VirtualNes.Core case 0x05: // $A000-$BFFF case 0x06: // $C000-$DFFF case 0x07: // $E000-$FFFF - return MMU.CPU_MEM_BANK[addr >> 13].Span[addr & 0x1FFF]; + return MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF]; } - return 0x00; // Warning\h + return 0x00; // Warning\h } private byte ReadReg(ushort addr) @@ -675,7 +1519,10 @@ namespace VirtualNes.Core return ret; } - + public void SetRenderMethod(EnumRenderMethod type) + { + RenderMethod = type; + } internal void Write(ushort addr, byte data) { switch (addr >> 13) @@ -723,16 +1570,16 @@ namespace VirtualNes.Core if ((addr & 0x8000) != 0) { // 8character codes - if (MMU.CPU_MEM_BANK[addr >> 13].Span[addr & 0x1FFF] == m_GenieCode[i].cmp) + if (MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF] == m_GenieCode[i].cmp) { - MMU.CPU_MEM_BANK[addr >> 13].Span[addr & 0x1FFF] = m_GenieCode[i].data; + MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF] = m_GenieCode[i].data; } } else { // 6character codes addr |= 0x8000; - MMU.CPU_MEM_BANK[addr >> 13].Span[addr & 0x1FFF] = m_GenieCode[i].data; + MMU.CPU_MEM_BANK[addr >> 13][addr & 0x1FFF] = m_GenieCode[i].data; } } } @@ -805,5 +1652,25 @@ namespace VirtualNes.Core { return bFrameIRQ; } + + internal EnumRenderMethod GetRenderMethod() + { + return RenderMethod; + } + + internal void SetIrqType(IRQMETHOD nType) + { + nIRQtype = (int)nType; + } + + internal int GetScanline() + { + return NES_scanline; + } + + public enum IRQMETHOD + { + IRQ_HSYNC = 0, IRQ_CLOCK = 1 + } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PAD.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PAD.cs index 46aac06e..01f5df14 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PAD.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PAD.cs @@ -330,7 +330,7 @@ namespace VirtualNes.Core } } - private void SetExController(EXCONTROLLER type) + internal void SetExController(EXCONTROLLER type) { excontroller_select = (int)type; @@ -404,6 +404,42 @@ namespace VirtualNes.Core expad.Reset(); } } + + internal bool IsZapperMode() + { + return bZapperMode; + } + + internal void VSync() + { + padbitsync[0] = padbit[0]; + padbitsync[1] = padbit[1]; + padbitsync[2] = padbit[2]; + padbitsync[3] = padbit[3]; + micbitsync = micbit; + } + + internal uint GetSyncData() + { + uint ret; + ret = (uint)(padbit[0] | (padbit[1] << 8) | (padbit[2] << 16) | (padbit[3] << 24)); + ret |= (uint)(micbit << 8); + return ret; + } + + internal void SetSyncData(uint data) + { + micbit = (byte)((data & 0x00000400) >> 8); + padbit[0] = (byte)data; + padbit[1] = (byte)(data >> 8); + padbit[2] = (byte)(data >> 16); + padbit[3] = (byte)(data >> 24); + } + + internal int GetExController() + { + return excontroller_select; + } } public enum VSType diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PPU.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PPU.cs index f5b64b3d..ffbeb54d 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PPU.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/PPU.cs @@ -1,10 +1,10 @@ -using Codice.CM.Client.Differences; -using System; - -namespace VirtualNes.Core +namespace VirtualNes.Core { public class PPU { + public const int SCREEN_WIDTH = 256 + 16; + public const int SCREEN_HEIGHT = 240; + private static byte[][] CreateCOLORMAP() { byte[][] res = new byte[5][]; @@ -187,7 +187,7 @@ namespace VirtualNes.Core } addr &= 0xEFFF; } - MMU.PPU7_Temp = MMU.PPU_MEM_BANK[addr >> 10].Span[addr & 0x03FF]; + MMU.PPU7_Temp = MMU.PPU_MEM_BANK[addr >> 10][addr & 0x03FF]; break; } @@ -199,7 +199,7 @@ namespace VirtualNes.Core ScanlineNo = scanline; if (scanline < 240) { - lpScanline = (int)(Screen.SCREEN_WIDTH) * scanline; + lpScanline = (SCREEN_WIDTH) * scanline; } } @@ -323,7 +323,7 @@ namespace VirtualNes.Core } if (MMU.PPU_MEM_TYPE[vaddr >> 10] != MMU.BANKTYPE_VROM) { - MMU.PPU_MEM_BANK[vaddr >> 10].Span[vaddr & 0x03FF] = data; + MMU.PPU_MEM_BANK[vaddr >> 10][vaddr & 0x03FF] = data; } break; } @@ -358,15 +358,810 @@ namespace VirtualNes.Core loopy_shift = 0; if (lpScreen != null) - MemoryUtility.memset(lpScreen, 0x3F, (int)(Screen.SCREEN_WIDTH) * (int)(Screen.SCREEN_HEIGHT)); + MemoryUtility.memset(lpScreen, 0x3F, SCREEN_WIDTH * SCREEN_HEIGHT); if (lpColormode != null) - MemoryUtility.memset(lpColormode, 0, (int)(Screen.SCREEN_HEIGHT)); + MemoryUtility.memset(lpColormode, 0, SCREEN_HEIGHT); } - private enum Screen + internal void FrameStart() { - SCREEN_WIDTH = 256 + 16, - SCREEN_HEIGHT = 240 + if ((MMU.PPUREG[1] & (PPU_SPDISP_BIT | PPU_BGDISP_BIT)) != 0) + { + MMU.loopy_v = MMU.loopy_t; + loopy_shift = MMU.loopy_x; + loopy_y = (ushort)((MMU.loopy_v & 0x7000) >> 12); + } + + if (lpScreen != null) + { + MemoryUtility.memset(lpScreen, 0x3F, SCREEN_WIDTH); + } + if (lpColormode != null) + { + lpColormode[0] = 0; + } + } + + internal void ScanlineNext() + { + if ((MMU.PPUREG[1] & (PPU_BGDISP_BIT | PPU_SPDISP_BIT)) != 0) + { + if ((MMU.loopy_v & 0x7000) == 0x7000) + { + MMU.loopy_v &= 0x8FFF; + if ((MMU.loopy_v & 0x03E0) == 0x03A0) + { + MMU.loopy_v ^= 0x0800; + MMU.loopy_v &= 0xFC1F; + } + else + { + if ((MMU.loopy_v & 0x03E0) == 0x03E0) + { + MMU.loopy_v &= 0xFC1F; + } + else + { + MMU.loopy_v += 0x0020; + } + } + } + else + { + MMU.loopy_v += 0x1000; + } + loopy_y = (ushort)((MMU.loopy_v & 0x7000) >> 12); + } + } + + internal void ScanlineStart() + { + if ((MMU.PPUREG[1] & (PPU_BGDISP_BIT | PPU_SPDISP_BIT)) != 0) + { + MMU.loopy_v = (ushort)((MMU.loopy_v & 0xFBE0) | (MMU.loopy_t & 0x041F)); + loopy_shift = MMU.loopy_x; + loopy_y = (ushort)((MMU.loopy_v & 0x7000) >> 12); + nes.mapper.PPU_Latch((ushort)(0x2000 + (MMU.loopy_v & 0x0FFF))); + } + } + + private byte[] BGwrite = new byte[33 + 1]; + private byte[] BGmono = new byte[33 + 1]; + private byte[] SPwrite = new byte[33 + 1]; + + internal void Scanline(int scanline, bool bMax, bool bLeftClip) + { + int pScn = 0; + int pBGw = 0; + byte chr_h = 0, chr_l = 0, attr = 0; + + MemoryUtility.ZEROMEMORY(BGwrite, BGwrite.Length); + MemoryUtility.ZEROMEMORY(BGmono, BGmono.Length); + + // Linecolor mode + lpColormode[scanline] = (byte)(((MMU.PPUREG[1] & PPU_BGCOLOR_BIT) >> 5) | ((MMU.PPUREG[1] & PPU_COLORMODE_BIT) << 7)); + + // Render BG + if ((MMU.PPUREG[1] & PPU_BGDISP_BIT) == 0) + { + MemoryUtility.memset(lpScreen, lpScanline, MMU.BGPAL[0], SCREEN_WIDTH); + if (nes.GetRenderMethod() == EnumRenderMethod.TILE_RENDER) + { + nes.EmulationCPU(NES.FETCH_CYCLES * 4 * 32); + } + } + else + { + if (nes.GetRenderMethod() != EnumRenderMethod.TILE_RENDER) + { + if (!bExtLatch) + { + // Without Extension Latch + pScn = lpScanline + (8 - loopy_shift); + pBGw = 0; + + int tileofs = (MMU.PPUREG[0] & PPU_BGTBL_BIT) << 8; + int ntbladr = 0x2000 + (MMU.loopy_v & 0x0FFF); + int attradr = 0x23C0 + (MMU.loopy_v & 0x0C00) + ((MMU.loopy_v & 0x0380) >> 4); + int ntbl_x = ntbladr & 0x001F; + int attrsft = (ntbladr & 0x0040) >> 4; + var pNTBL = MMU.PPU_MEM_BANK[ntbladr >> 10]; + + int tileadr; + int cache_tile = unchecked((int)(0xFFFF0000)); + byte cache_attr = 0xFF; + + chr_h = chr_l = attr = 0; + + attradr &= 0x3FF; + + + for (int i = 0; i < 33; i++) + { + tileadr = tileofs + pNTBL[ntbladr & 0x03FF] * 0x10 + loopy_y; + attr = (byte)(((pNTBL[attradr + (ntbl_x >> 2)] >> ((ntbl_x & 2) + attrsft)) & 3) << 2); + + if (cache_tile == tileadr && cache_attr == attr) + { + lpScreen[pScn + 0] = lpScreen[pScn - 8]; + lpScreen[pScn + 0 + 1] = lpScreen[pScn - 8 + 1]; + lpScreen[pScn + 0 + 2] = lpScreen[pScn - 8 + 2]; + lpScreen[pScn + 0 + 3] = lpScreen[pScn - 8 + 3]; + + lpScreen[pScn + 4] = lpScreen[pScn - 4]; + lpScreen[pScn + 4 + 1] = lpScreen[pScn - 4 + 1]; + lpScreen[pScn + 4 + 2] = lpScreen[pScn - 4 + 2]; + lpScreen[pScn + 4 + 3] = lpScreen[pScn - 4 + 3]; + + BGwrite[pBGw + 0] = BGwrite[pBGw - 1]; + } + else + { + cache_tile = tileadr; + cache_attr = attr; + chr_l = MMU.PPU_MEM_BANK[tileadr >> 10][tileadr & 0x03FF]; + chr_h = MMU.PPU_MEM_BANK[tileadr >> 10][(tileadr & 0x03FF) + 8]; + BGwrite[pBGw] = (byte)(chr_h | chr_l); + + int pBGPAL = attr; + { + int c1 = ((chr_l >> 1) & 0x55) | (chr_h & 0xAA); + int c2 = (chr_l & 0x55) | ((chr_h << 1) & 0xAA); + lpScreen[pScn + 0] = MMU.BGPAL[pBGPAL + (c1 >> 6)]; + lpScreen[pScn + 4] = MMU.BGPAL[pBGPAL + ((c1 >> 2) & 3)]; + lpScreen[pScn + 1] = MMU.BGPAL[pBGPAL + ((c1 >> 6))]; + lpScreen[pScn + 5] = MMU.BGPAL[pBGPAL + ((c2 >> 2) & 3)]; + lpScreen[pScn + 2] = MMU.BGPAL[pBGPAL + ((c1 >> 4) & 3)]; + lpScreen[pScn + 6] = MMU.BGPAL[pBGPAL + (c1 & 3)]; + lpScreen[pScn + 3] = MMU.BGPAL[pBGPAL + ((c2 >> 4) & 3)]; + lpScreen[pScn + 7] = MMU.BGPAL[pBGPAL + (c2 & 3)]; + } + } + pScn += 8; + pBGw++; + + // Character latch(For MMC2/MMC4) + if (bChrLatch) + { + nes.mapper.PPU_ChrLatch((ushort)(tileadr)); + } + + if (++ntbl_x == 32) + { + ntbl_x = 0; + ntbladr ^= 0x41F; + attradr = 0x03C0 + ((ntbladr & 0x0380) >> 4); + pNTBL = MMU.PPU_MEM_BANK[ntbladr >> 10]; + } + else + { + ntbladr++; + } + } + } + else + { + // With Extension Latch(For MMC5) + pScn = lpScanline + (8 - loopy_shift); + pBGw = 0; + + int ntbladr = 0x2000 + (MMU.loopy_v & 0x0FFF); + int ntbl_x = ntbladr & 0x1F; + + int cache_tile = unchecked((int)(0xFFFF0000)); + byte cache_attr = 0xFF; + + byte exattr = 0; + chr_h = chr_l = attr = 0; + + for (int i = 0; i < 33; i++) + { + nes.mapper.PPU_ExtLatchX(i); + nes.mapper.PPU_ExtLatch((ushort)ntbladr, ref chr_l, ref chr_h, ref exattr); + attr = (byte)(exattr & 0x0C); + + if (cache_tile != ((chr_h << 8) + chr_l) || cache_attr != attr) + { + cache_tile = ((chr_h << 8) + chr_l); + cache_attr = attr; + BGwrite[pBGw] = (byte)(chr_h | chr_l); + + int pBGPAL = attr; + { + int c1 = ((chr_l >> 1) & 0x55) | (chr_h & 0xAA); + int c2 = (chr_l & 0x55) | ((chr_h << 1) & 0xAA); + lpScreen[pScn + 0] = MMU.BGPAL[pBGPAL + (c1 >> 6)]; + lpScreen[pScn + 4] = MMU.BGPAL[pBGPAL + ((c1 >> 2) & 3)]; + lpScreen[pScn + 1] = MMU.BGPAL[pBGPAL + (c2 >> 6)]; + lpScreen[pScn + 5] = MMU.BGPAL[pBGPAL + ((c2 >> 2) & 3)]; + lpScreen[pScn + 2] = MMU.BGPAL[pBGPAL + ((c1 >> 4) & 3)]; + lpScreen[pScn + 6] = MMU.BGPAL[pBGPAL + (c1 & 3)]; + lpScreen[pScn + 3] = MMU.BGPAL[pBGPAL + ((c2 >> 4) & 3)]; + lpScreen[pScn + 7] = MMU.BGPAL[pBGPAL + (c2 & 3)]; + } + } + else + { + lpScreen[pScn + 0] = lpScreen[pScn - 8]; + lpScreen[pScn + 0 + 1] = lpScreen[pScn - 8 + 1]; + lpScreen[pScn + 0 + 2] = lpScreen[pScn - 8 + 2]; + lpScreen[pScn + 0 + 3] = lpScreen[pScn - 8 + 3]; + + lpScreen[pScn + 4] = lpScreen[pScn - 4]; + lpScreen[pScn + 4 + 1] = lpScreen[pScn - 4 + 1]; + lpScreen[pScn + 4 + 2] = lpScreen[pScn - 4 + 2]; + lpScreen[pScn + 4 + 3] = lpScreen[pScn - 4 + 3]; + + BGwrite[pBGw + 0] = BGwrite[pBGw - 1]; + } + pScn += 8; + pBGw++; + + if (++ntbl_x == 32) + { + ntbl_x = 0; + ntbladr ^= 0x41F; + } + else + { + ntbladr++; + } + } + } + } + else + { + if (!bExtLatch) + { + // Without Extension Latch + if (!bExtNameTable) + { + pScn = lpScanline + (8 - loopy_shift); + pBGw = 0; + + int ntbladr = 0x2000 + (MMU.loopy_v & 0x0FFF); + int attradr = 0x03C0 + ((MMU.loopy_v & 0x0380) >> 4); + int ntbl_x = ntbladr & 0x001F; + int attrsft = (ntbladr & 0x0040) >> 4; + var pNTBL = MMU.PPU_MEM_BANK[ntbladr >> 10]; + + int tileadr = 0; + int cache_tile = unchecked((int)(0xFFFF0000)); + byte cache_attr = 0xFF; + + chr_h = chr_l = attr = 0; + + for (int i = 0; i < 33; i++) + { + tileadr = ((MMU.PPUREG[0] & PPU_BGTBL_BIT) << 8) + pNTBL[ntbladr & 0x03FF] * 0x10 + loopy_y; + + if (i != 0) + { + nes.EmulationCPU(NES.FETCH_CYCLES * 4); + } + + attr = (byte)(((pNTBL[attradr + (ntbl_x >> 2)] >> ((ntbl_x & 2) + attrsft)) & 3) << 2); + + if (cache_tile != tileadr || cache_attr != attr) + { + cache_tile = tileadr; + cache_attr = attr; + + chr_l = MMU.PPU_MEM_BANK[tileadr >> 10][tileadr & 0x03FF]; + chr_h = MMU.PPU_MEM_BANK[tileadr >> 10][(tileadr & 0x03FF) + 8]; + lpScreen[pBGw] = (byte)(chr_l | chr_h); + + int pBGPAL = attr; + { + int c1 = ((chr_l >> 1) & 0x55) | (chr_h & 0xAA); + int c2 = (chr_l & 0x55) | ((chr_h << 1) & 0xAA); + lpScreen[pScn + 0] = MMU.BGPAL[pBGPAL + (c1 >> 6)]; + lpScreen[pScn + 4] = MMU.BGPAL[pBGPAL + ((c1 >> 2) & 3)]; + lpScreen[pScn + 1] = MMU.BGPAL[pBGPAL + ((c2 >> 6))]; + lpScreen[pScn + 5] = MMU.BGPAL[pBGPAL + ((c2 >> 2) & 3)]; + lpScreen[pScn + 2] = MMU.BGPAL[pBGPAL + ((c1 >> 4) & 3)]; + lpScreen[pScn + 6] = MMU.BGPAL[pBGPAL + (c1 & 3)]; + lpScreen[pScn + 3] = MMU.BGPAL[pBGPAL + ((c2 >> 4) & 3)]; + lpScreen[pScn + 7] = MMU.BGPAL[pBGPAL + (c2 & 3)]; + } + } + else + { + lpScreen[pScn + 0] = lpScreen[pScn - 8]; + lpScreen[pScn + 0 + 1] = lpScreen[pScn - 8 + 1]; + lpScreen[pScn + 0 + 2] = lpScreen[pScn - 8 + 2]; + lpScreen[pScn + 0 + 3] = lpScreen[pScn - 8 + 3]; + + lpScreen[pScn + 4] = lpScreen[pScn - 4]; + lpScreen[pScn + 4 + 1] = lpScreen[pScn - 4 + 1]; + lpScreen[pScn + 4 + 2] = lpScreen[pScn - 4 + 2]; + lpScreen[pScn + 4 + 3] = lpScreen[pScn - 4 + 3]; + + BGwrite[pBGw + 0] = BGwrite[pBGw - 1]; + } + pScn += 8; + pBGw++; + + // Character latch(For MMC2/MMC4) + if (bChrLatch) + { + nes.mapper.PPU_ChrLatch((ushort)(tileadr)); + } + + if (++ntbl_x == 32) + { + ntbl_x = 0; + ntbladr ^= 0x41F; + attradr = 0x03C0 + ((ntbladr & 0x0380) >> 4); + pNTBL = MMU.PPU_MEM_BANK[ntbladr >> 10]; + } + else + { + ntbladr++; + } + } + } + else + { + pScn = lpScanline + (8 - loopy_shift); + pBGw = 0; + + int ntbladr; + int tileadr; + int cache_tile = unchecked((int)(0xFFFF0000)); + byte cache_attr = 0xFF; + + chr_h = chr_l = attr = 0; + + ushort loopy_v_tmp = MMU.loopy_v; + + for (int i = 0; i < 33; i++) + { + if (i != 0) + { + nes.EmulationCPU(NES.FETCH_CYCLES * 4); + } + + ntbladr = 0x2000 + (MMU.loopy_v & 0x0FFF); + tileadr = ((MMU.PPUREG[0] & PPU_BGTBL_BIT) << 8) + MMU.PPU_MEM_BANK[ntbladr >> 10][ntbladr & 0x03FF] * 0x10 + ((MMU.loopy_v & 0x7000) >> 12); + attr = (byte)(((MMU.PPU_MEM_BANK[ntbladr >> 10][0x03C0 + ((ntbladr & 0x0380) >> 4) + ((ntbladr & 0x001C) >> 2)] >> (((ntbladr & 0x40) >> 4) + (ntbladr & 0x02))) & 3) << 2); + + if (cache_tile != tileadr || cache_attr != attr) + { + cache_tile = tileadr; + cache_attr = attr; + + chr_l = MMU.PPU_MEM_BANK[tileadr >> 10][tileadr & 0x03FF]; + chr_h = MMU.PPU_MEM_BANK[tileadr >> 10][(tileadr & 0x03FF) + 8]; + BGwrite[pBGw] = (byte)(chr_l | chr_h); + + int pBGPAL = attr; + { + int c1 = ((chr_l >> 1) & 0x55) | (chr_h & 0xAA); + int c2 = (chr_l & 0x55) | ((chr_h << 1) & 0xAA); + lpScreen[pScn + 0] = MMU.BGPAL[pBGPAL + (c1 >> 6)]; + lpScreen[pScn + 4] = MMU.BGPAL[pBGPAL + ((c1 >> 2) & 3)]; + lpScreen[pScn + 1] = MMU.BGPAL[pBGPAL + (c2 >> 6)]; + lpScreen[pScn + 5] = MMU.BGPAL[pBGPAL + ((c2 >> 2) & 3)]; + lpScreen[pScn + 2] = MMU.BGPAL[pBGPAL + ((c1 >> 4) & 3)]; + lpScreen[pScn + 6] = MMU.BGPAL[pBGPAL + (c1 & 3)]; + lpScreen[pScn + 3] = MMU.BGPAL[pBGPAL + ((c2 >> 4) & 3)]; + lpScreen[pScn + 7] = MMU.BGPAL[pBGPAL + (c2 & 3)]; + } + } + else + { + lpScreen[pScn + 0] = lpScreen[pScn - 8]; + lpScreen[pScn + 0 + 1] = lpScreen[pScn - 8 + 1]; + lpScreen[pScn + 0 + 2] = lpScreen[pScn - 8 + 2]; + lpScreen[pScn + 0 + 3] = lpScreen[pScn - 8 + 3]; + + lpScreen[pScn + 4] = lpScreen[pScn - 4]; + lpScreen[pScn + 4 + 1] = lpScreen[pScn - 4 + 1]; + lpScreen[pScn + 4 + 2] = lpScreen[pScn - 4 + 2]; + lpScreen[pScn + 4 + 3] = lpScreen[pScn - 4 + 3]; + + BGwrite[pBGw + 0] = BGwrite[pBGw - 1]; + } + pScn += 8; + pBGw++; + + // Character latch(For MMC2/MMC4) + if (bChrLatch) + { + nes.mapper.PPU_ChrLatch((ushort)tileadr); + } + + if ((MMU.loopy_v & 0x1F) == 0x1F) + { + MMU.loopy_v ^= 0x041F; + } + else + { + MMU.loopy_v++; + } + } + MMU.loopy_v = loopy_v_tmp; + } + } + else + { + // With Extension Latch(For MMC5) + pScn = lpScanline + (8 - loopy_shift); + pBGw = 0; + + int ntbladr = 0x2000 + (MMU.loopy_v & 0x0FFF); + int ntbl_x = ntbladr & 0x1F; + + int cache_tile = unchecked((int)0xFFFF0000); + byte cache_attr = 0xFF; + + byte exattr = 0; + chr_h = chr_l = attr = 0; + + for (int i = 0; i < 33; i++) + { + if (i != 0) + { + nes.EmulationCPU(NES.FETCH_CYCLES * 4); + } + nes.mapper.PPU_ExtLatchX(i); + nes.mapper.PPU_ExtLatch((ushort)ntbladr, ref chr_l, ref chr_h, ref exattr); + attr = (byte)(exattr & 0x0C); + + if (cache_tile != ((chr_h << 8) + chr_l) || cache_attr != attr) + { + cache_tile = ((chr_h << 8) + chr_l); + cache_attr = attr; + BGwrite[pBGw] = (byte)(chr_l | chr_h); + + int pBGPAL = attr; + { + int c1 = ((chr_l >> 1) & 0x55) | (chr_h & 0xAA); + int c2 = (chr_l & 0x55) | ((chr_h << 1) & 0xAA); + lpScreen[pScn + 0] = MMU.BGPAL[pBGPAL + ((c1 >> 6))]; + lpScreen[pScn + 4] = MMU.BGPAL[pBGPAL + ((c1 >> 2) & 3)]; + lpScreen[pScn + 1] = MMU.BGPAL[pBGPAL + ((c2 >> 6))]; + lpScreen[pScn + 5] = MMU.BGPAL[pBGPAL + ((c2 >> 2) & 3)]; + lpScreen[pScn + 2] = MMU.BGPAL[pBGPAL + ((c1 >> 4) & 3)]; + lpScreen[pScn + 6] = MMU.BGPAL[pBGPAL + (c1 & 3)]; + lpScreen[pScn + 3] = MMU.BGPAL[pBGPAL + ((c2 >> 4) & 3)]; + lpScreen[pScn + 7] = MMU.BGPAL[pBGPAL + (c2 & 3)]; + } + } + else + { + lpScreen[pScn + 0] = lpScreen[pScn - 8]; + lpScreen[pScn + 0 + 1] = lpScreen[pScn - 8 + 1]; + lpScreen[pScn + 0 + 2] = lpScreen[pScn - 8 + 2]; + lpScreen[pScn + 0 + 3] = lpScreen[pScn - 8 + 3]; + + lpScreen[pScn + 4] = lpScreen[pScn - 4]; + lpScreen[pScn + 4 + 1] = lpScreen[pScn - 4 + 1]; + lpScreen[pScn + 4 + 2] = lpScreen[pScn - 4 + 2]; + lpScreen[pScn + 4 + 3] = lpScreen[pScn - 4 + 3]; + + BGwrite[pBGw + 0] = BGwrite[pBGw - 1]; + } + pScn += 8; + pBGw++; + + if (++ntbl_x == 32) + { + ntbl_x = 0; + ntbladr ^= 0x41F; + } + else + { + ntbladr++; + } + } + } + } + if ((MMU.PPUREG[1] & PPU_BGCLIP_BIT) == 0 && bLeftClip) + { + pScn = lpScanline + 8; + for (int i = 0; i < 8; i++) + { + lpScreen[i] = MMU.BGPAL[0]; + } + } + } + + // Render sprites + var temp = ~PPU_SPMAX_FLAG; + MMU.PPUREG[2] = (byte)(MMU.PPUREG[2] & temp); + + // 昞帵婜娫奜偱偁傟偽僉儍儞僙儖 + if (scanline > 239) + return; + + if ((MMU.PPUREG[1] & PPU_SPDISP_BIT) == 0) + { + return; + } + + int spmax = 0; + int spraddr = 0, sp_y = 0, sp_h = 0; + chr_h = chr_l = 0; + + + pBGw = 0; + int pSPw = 0; + int pBit2Rev = 0; + + MemoryUtility.ZEROMEMORY(SPwrite, SPwrite.Length); + + spmax = 0; + Sprite sp = new Sprite(MMU.SPRAM, 0); + sp_h = (MMU.PPUREG[0] & PPU_SP16_BIT) != 0 ? 15 : 7; + + // Left clip + if (bLeftClip && ((MMU.PPUREG[1] & PPU_SPCLIP_BIT) == 0)) + { + SPwrite[0] = 0xFF; + } + + for (int i = 0; i < 64; i++, sp.AddOffset(1)) + { + sp_y = scanline - (sp.y + 1); + // 僗僉儍儞儔僀儞撪偵SPRITE偑懚嵼偡傞偐傪僠僃僢僋 + if (sp_y != (sp_y & sp_h)) + continue; + + if ((MMU.PPUREG[0] & PPU_SP16_BIT) == 0) + { + // 8x8 Sprite + spraddr = ((MMU.PPUREG[0] & PPU_SPTBL_BIT) << 9) + (sp.tile << 4); + if ((sp.attr & SP_VMIRROR_BIT) == 0) + spraddr += sp_y; + else + spraddr += 7 - sp_y; + } + else + { + // 8x16 Sprite + spraddr = ((sp.tile & 1) << 12) + ((sp.tile & 0xFE) << 4); + if ((sp.attr & SP_VMIRROR_BIT) == 0) + spraddr += ((sp_y & 8) << 1) + (sp_y & 7); + else + spraddr += ((~sp_y & 8) << 1) + (7 - (sp_y & 7)); + } + // Character pattern + chr_l = MMU.PPU_MEM_BANK[spraddr >> 10][spraddr & 0x3FF]; + chr_h = MMU.PPU_MEM_BANK[spraddr >> 10][(spraddr & 0x3FF) + 8]; + + // Character latch(For MMC2/MMC4) + if (bChrLatch) + { + nes.mapper.PPU_ChrLatch((ushort)spraddr); + } + + // pattern mask + if ((sp.attr & SP_HMIRROR_BIT) != 0) + { + chr_l = Bit2Rev[pBit2Rev + chr_l]; + chr_h = Bit2Rev[pBit2Rev + chr_h]; + } + byte SPpat = (byte)(chr_l | chr_h); + + // Sprite hitcheck + if (i == 0 && (MMU.PPUREG[2] & PPU_SPHIT_FLAG) == 0) + { + int BGpos = ((sp.x & 0xF8) + ((loopy_shift + (sp.x & 7)) & 8)) >> 3; + int BGsft = 8 - ((loopy_shift + sp.x) & 7); + + var temp1 = BGwrite[pBGw + BGpos + 0] << 8; + var temp2 = BGwrite[pBGw + BGpos + 1]; + byte BGmsk = (byte)((temp1 | temp2) >> BGsft); + + if ((SPpat & BGmsk) != 0) + { + MMU.PPUREG[2] |= PPU_SPHIT_FLAG; + } + } + + // Sprite mask + int SPpos = sp.x / 8; + int SPsft = 8 - (sp.x & 7); + byte SPmsk = (byte)((SPwrite[pSPw + SPpos + 0] << 8 | SPwrite[pSPw + SPpos + 1]) >> SPsft); + ushort SPwrt = (ushort)(SPpat << SPsft); + SPwrite[pSPw + SPpos + 0] = (byte)(SPwrite[pSPw + SPpos + 0] | SPwrt >> 8); + SPwrite[pSPw + SPpos + 1] = (byte)(SPwrite[pSPw + SPpos + 1] | SPwrt & 0xFF); + SPpat = (byte)(SPpat & ~SPmsk); + + if ((sp.attr & SP_PRIORITY_BIT) != 0) + { + // BG > SP priority + int BGpos = ((sp.x & 0xF8) + ((loopy_shift + (sp.x & 7)) & 8)) >> 3; + int BGsft = 8 - ((loopy_shift + sp.x) & 7); + byte BGmsk = (byte)(((BGwrite[pBGw + BGpos + 0] << 8) | BGwrite[pBGw + BGpos + 1]) >> BGsft); + + SPpat = (byte)(SPpat & ~BGmsk); + } + + // Attribute + int pSPPAL = (sp.attr & SP_COLOR_BIT) << 2; + // Ptr + pScn = lpScanline + sp.x + 8; + + if (!bExtMono) + { + int c1 = ((chr_l >> 1) & 0x55) | (chr_h & 0xAA); + int c2 = (chr_l & 0x55) | ((chr_h << 1) & 0xAA); + if ((SPpat & 0x80) != 0) lpScreen[pScn + 0] = MMU.SPPAL[pSPPAL + (c1 >> 6)]; + if ((SPpat & 0x08) != 0) lpScreen[pScn + 4] = MMU.SPPAL[pSPPAL + ((c1 >> 2) & 3)]; + if ((SPpat & 0x40) != 0) lpScreen[pScn + 1] = MMU.SPPAL[pSPPAL + ((c2 >> 6))]; + if ((SPpat & 0x04) != 0) lpScreen[pScn + 5] = MMU.SPPAL[pSPPAL + ((c2 >> 2) & 3)]; + if ((SPpat & 0x20) != 0) lpScreen[pScn + 2] = MMU.SPPAL[pSPPAL + ((c1 >> 4) & 3)]; + if ((SPpat & 0x02) != 0) lpScreen[pScn + 6] = MMU.SPPAL[pSPPAL + (c1 & 3)]; + if ((SPpat & 0x10) != 0) lpScreen[pScn + 3] = MMU.SPPAL[pSPPAL + ((c2 >> 4) & 3)]; + if ((SPpat & 0x01) != 0) lpScreen[pScn + 7] = MMU.SPPAL[pSPPAL + (c2 & 3)]; + } + else + { + // Monocrome effect (for Final Fantasy) + byte mono = BGmono[((sp.x & 0xF8) + ((loopy_shift + (sp.x & 7)) & 8)) >> 3]; + + int c1 = ((chr_l >> 1) & 0x55) | (chr_h & 0xAA); + int c2 = (chr_l & 0x55) | ((chr_h << 1) & 0xAA); + if ((SPpat & 0x80) != 0) lpScreen[pScn + 0] = (byte)(MMU.SPPAL[pSPPAL + (c1 >> 6)] | mono); + if ((SPpat & 0x08) != 0) lpScreen[pScn + 4] = (byte)(MMU.SPPAL[pSPPAL + ((c1 >> 2) & 3)] | mono); + if ((SPpat & 0x40) != 0) lpScreen[pScn + 1] = (byte)(MMU.SPPAL[pSPPAL + (c2 >> 6)] | mono); + if ((SPpat & 0x04) != 0) lpScreen[pScn + 5] = (byte)(MMU.SPPAL[pSPPAL + ((c2 >> 2) & 3)] | mono); + if ((SPpat & 0x20) != 0) lpScreen[pScn + 2] = (byte)(MMU.SPPAL[pSPPAL + ((c1 >> 4) & 3)] | mono); + if ((SPpat & 0x02) != 0) lpScreen[pScn + 6] = (byte)(MMU.SPPAL[pSPPAL + (c1 & 3)] | mono); + if ((SPpat & 0x10) != 0) lpScreen[pScn + 3] = (byte)(MMU.SPPAL[pSPPAL + ((c2 >> 4) & 3)] | mono); + if ((SPpat & 0x01) != 0) lpScreen[pScn + 7] = (byte)(MMU.SPPAL[pSPPAL + (c2 & 3)] | mono); + } + + if (++spmax > 8 - 1) + { + if (!bMax) + break; + } + } + if (spmax > 8 - 1) + { + MMU.PPUREG[2] |= PPU_SPMAX_FLAG; + } + } + + internal bool IsSprite0(int scanline) + { + // 僗僾儔僀僩orBG旕昞帵偼僉儍儞僙儖(僸僢僩偟側偄) + if ((MMU.PPUREG[1] & (PPU_SPDISP_BIT | PPU_BGDISP_BIT)) != (PPU_SPDISP_BIT | PPU_BGDISP_BIT)) + return false; + + // 婛偵僸僢僩偟偰偄偨傜僉儍儞僙儖 + if ((MMU.PPUREG[2] & PPU_SPHIT_FLAG) != 0) + return false; + + if ((MMU.PPUREG[0] & PPU_SP16_BIT) == 0) + { + // 8x8 + if ((scanline < MMU.SPRAM[0] + 1) || (scanline > (MMU.SPRAM[0] + 7 + 1))) + return false; + } + else + { + // 8x16 + if ((scanline < MMU.SPRAM[0] + 1) || (scanline > (MMU.SPRAM[0] + 15 + 1))) + return false; + } + + return true; + } + + internal void DummyScanline(int scanline) + { + int i; + int spmax; + int sp_h; + + MMU.PPUREG[2] = (byte)(MMU.PPUREG[2] & ~PPU_SPMAX_FLAG); + + // 僗僾儔僀僩旕昞帵偼僉儍儞僙儖 + if ((MMU.PPUREG[1] & PPU_SPDISP_BIT) == 0) + return; + + // 昞帵婜娫奜偱偁傟偽僉儍儞僙儖 + if (scanline < 0 || scanline > 239) + return; + + Sprite sp = new Sprite(MMU.SPRAM, 0); + sp_h = (MMU.PPUREG[0] & PPU_SP16_BIT) != 0 ? 15 : 7; + + spmax = 0; + // Sprite Max check + for (i = 0; i < 64; i++, sp.AddOffset(1)) + { + // 僗僉儍儞儔僀儞撪偵SPRITE偑懚嵼偡傞偐傪僠僃僢僋 + if ((scanline < sp.y + 1) || (scanline > (sp.y + sp_h + 1))) + { + continue; + } + + if (++spmax > 8 - 1) + { + MMU.PPUREG[2] |= PPU_SPMAX_FLAG; + break; + } + } + } + + internal void VBlankEnd() + { + MMU.PPUREG[2] = (byte)(MMU.PPUREG[2] & ~PPU_VBLANK_FLAG); + // VBlank扙弌帪偵僋儕傾偝傟傞 + // 僄僉僒僀僩僶僀僋偱廳梫 + MMU.PPUREG[2] = (byte)(MMU.PPUREG[2] & ~PPU_SPHIT_FLAG); + } + + internal void VBlankStart() + { + MMU.PPUREG[2] |= PPU_VBLANK_FLAG; + } + + public byte[] GetScreenPtr() + { + return lpScreen; + } + + public byte[] GetLineColorMode() + { + return lpColormode; + } + + internal void SetScreenPtr(byte[] screenBuffer, byte[] colormode) + { + lpScreen = screenBuffer; + lpColormode = colormode; + } + + + internal bool IsDispON() + { + return (MMU.PPUREG[1] & (PPU_BGDISP_BIT | PPU_SPDISP_BIT)) != 0; + } + + public struct Sprite + { + public byte y + { + get => raw[offset + 0]; + set => raw[offset + 0] = value; + } + + public byte tile + { + get => raw[offset + 1]; + set => raw[offset + 1] = value; + } + public byte attr + { + get => raw[offset + 2]; + set => raw[offset + 2] = value; + } + public byte x + { + get => raw[offset + 3]; + set => raw[offset + 3] = value; + } + + private byte[] raw; + private int offset; + + public Sprite(byte[] raw, int offset) + { + this.raw = raw; + this.offset = offset * 4; + } + + public void AddOffset(int offset) + { + this.offset += offset * 4; + } } } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ROM.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ROM.cs index 51b6a87b..d6cdd268 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ROM.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/ROM.cs @@ -218,7 +218,7 @@ namespace VirtualNes.Core } Supporter.GetFilePathInfo(fname, out fullpath, out path); - + name = Path.GetFileNameWithoutExtension(fullpath); if (!bNSF) { mapper = (header.control1 >> 4) | (header.control2 & 0xF0); @@ -347,12 +347,12 @@ namespace VirtualNes.Core return diskno; } - internal ulong GetGameID() + internal uint GetGameID() { return fdsgameID; } - internal ulong GetMakerID() + internal uint GetMakerID() { return fdsmakerID; } @@ -396,6 +396,11 @@ namespace VirtualNes.Core { return nsfheader; } + + internal string GetRomPath() + { + return path; + } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgGraphics.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgGraphics.cs index 21851f87..d3e1f640 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgGraphics.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgGraphics.cs @@ -2,5 +2,38 @@ { public class CfgGraphics { + public bool bAspect = false; + public bool bAllSprite = true; + public bool bAllLine = false; + public bool bFPSDisp = false; + public bool bTVFrame = false; + public bool bScanline = false; + public int nScanlineColor = 75; + public bool bSyncDraw = false; + public bool bFitZoom = false; + + public bool bLeftClip = true; + + public bool bWindowVSync = false; + + public bool bSyncNoSleep = false; + + public bool bDiskAccessLamp = false; + + public bool bDoubleSize = false; + public bool bSystemMemory = false; + public bool bUseHEL = false; + + public bool bNoSquareList = false; + + public int nGraphicsFilter = 0; + + public uint dwDisplayWidth = 640; + public uint dwDisplayHeight = 480; + public uint dwDisplayDepth = 16; + public uint dwDisplayRate = 0; + + public bool bPaletteFile = false; + public char[] szPaletteFile = new char[260]; } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgMovie.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgMovie.cs index d8d718cf..0e0dcbf5 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgMovie.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgMovie.cs @@ -1,6 +1,14 @@ -namespace VirtualNes.Core +using System; + +namespace VirtualNes.Core { public class CfgMovie { + public byte[] bUsePlayer = new byte[4] { 0xFF, 0x00, 0x00, 0x00 }; + public bool bRerecord = true; + public bool bLoopPlay = false; + public bool bResetRec = false; + public bool bPadDisplay = false; + public bool bTimeDisplay = false; } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgPath.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgPath.cs index a89aa6b9..6a282593 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgPath.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/CfgPath.cs @@ -1,6 +1,25 @@ -namespace VirtualNes.Core +using System; + +namespace VirtualNes.Core { public class CfgPath { + public bool bRomPath = true; + public bool bSavePath = true; + public bool bStatePath = true; + public bool bSnapshotPath = true; + public bool bMoviePath = true; + public bool bWavePath = true; + public bool bCheatPath = true; + public bool bIpsPath = true; + + public string szRomPath = "roms"; + public string szSavePath = "save"; + public string szStatePath = "state"; + public string szSnapshotPath = "snapshot"; + public string szMoviePath = "movie"; + public string szWavePath = "wave"; + public string szCheatPath = "cheatcode"; + public string szIpsPath = "ips"; } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/EmulatorConfig.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/EmulatorConfig.cs index 961e389b..b24afe0a 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/EmulatorConfig.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/EmulatorConfig/EmulatorConfig.cs @@ -17,4 +17,35 @@ public CfgExtraSound extsound { get; private set; } = new CfgExtraSound(); public CfgNetPlay netplay { get; private set; } = new CfgNetPlay(); } + + public static class GameOption + { + // Default保存 + public static int defRenderMethod; + public static int defIRQtype; + public static bool defFrameIRQ; + public static bool defVideoMode; + + // データ + public static int nRenderMethod; + public static int nIRQtype; + public static bool bFrameIRQ; + public static bool bVideoMode; + + public static void Load(uint crc) + { + nRenderMethod = defRenderMethod; + nIRQtype = defIRQtype; + bFrameIRQ = defFrameIRQ; + bVideoMode = defVideoMode; + } + + public static void Load(uint gid, uint mid) + { + nRenderMethod = defRenderMethod; + nIRQtype = defIRQtype; + bFrameIRQ = defFrameIRQ; + bVideoMode = defVideoMode; + } + } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/Supporter.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/Supporter.cs index cc417af9..6f6d40ec 100644 --- a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/Supporter.cs +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/Supporter/Supporter.cs @@ -35,6 +35,20 @@ namespace VirtualNes.Core s_support.SaveDISKToFile(diskFileContent, romName); } + public static void PrepareDirectory(string directPath) + { + s_support.PrepareDirectory(directPath); + } + + public static void SaveFile(byte[] fileData, string directPath, string fileName) + { + s_support.SaveFile(fileData, directPath, fileName); + } + public static Stream OpenFile(string directPath, string fileName) + { + return s_support.OpenFile(directPath, fileName); + } + public static EmulatorConfig Config => s_support.Config; } @@ -46,5 +60,9 @@ namespace VirtualNes.Core void SaveSRAMToFile(byte[] sramContent, string romName); void SaveDISKToFile(byte[] diskFileContent, string romName); EmulatorConfig Config { get; } + + void PrepareDirectory(string directPath); + void SaveFile(byte[] fileData, string directPath, string fileName); + Stream OpenFile(string directPath, string fileName); } } diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/VsUnisystem.cs b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/VsUnisystem.cs new file mode 100644 index 00000000..18f995cb --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/VsUnisystem.cs @@ -0,0 +1,49 @@ +namespace VirtualNes.Core +{ + public class VSDIPSWITCH + { + public string name; + public ushort value; + } + + + public static class VsUnisystem + { + public static VSDIPSWITCH[] vsdip_default = new VSDIPSWITCH[] + { + new VSDIPSWITCH{name="Unknown", value= 0x0100}, + new VSDIPSWITCH{name="Off", value= 0x00}, + new VSDIPSWITCH{name="On", value= 0x01}, + new VSDIPSWITCH{name=null, value= 0xFF}, + new VSDIPSWITCH{name="Unknown", value= 0x0200}, + new VSDIPSWITCH{name="Off", value= 0x00}, + new VSDIPSWITCH{name="On", value= 0x02}, + new VSDIPSWITCH{name=null, value= 0xFF}, + new VSDIPSWITCH{name="Unknown", value= 0x0400}, + new VSDIPSWITCH{name="Off", value= 0x00}, + new VSDIPSWITCH{name="On", value= 0x04}, + new VSDIPSWITCH{name=null, value= 0xFF}, + new VSDIPSWITCH{name="Unknown", value= 0x0800}, + new VSDIPSWITCH{name="Off", value= 0x00}, + new VSDIPSWITCH{name="On", value= 0x08}, + new VSDIPSWITCH{name=null, value= 0xFF}, + new VSDIPSWITCH{name="Unknown", value= 0x1000}, + new VSDIPSWITCH{name="Off", value= 0x00}, + new VSDIPSWITCH{name="On", value= 0x10}, + new VSDIPSWITCH{name=null, value= 0xFF}, + new VSDIPSWITCH{name="Unknown", value= 0x2000}, + new VSDIPSWITCH{name="Off", value= 0x00}, + new VSDIPSWITCH{name="On", value= 0x20}, + new VSDIPSWITCH{name=null, value= 0xFF}, + new VSDIPSWITCH{name="Unknown", value= 0x4000}, + new VSDIPSWITCH{name="Off", value= 0x00}, + new VSDIPSWITCH{name="On", value= 0x40}, + new VSDIPSWITCH{name=null, value= 0xFF}, + new VSDIPSWITCH{name="Unknown", value= 0x8000}, + new VSDIPSWITCH{name="Off", value= 0x00}, + new VSDIPSWITCH{name="On", value= 0x80}, + new VSDIPSWITCH{name=null, value= 0xFF}, + new VSDIPSWITCH{name=null, value= 0 }, + }; + } +} diff --git a/AxibugEmuOnline.Client/Assets/VirtualNes.Core/VsUnisystem.cs.meta b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/VsUnisystem.cs.meta new file mode 100644 index 00000000..3d06276d --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/VirtualNes.Core/VsUnisystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db82d3b2d60f2c14fa3c5582acc439c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/virtuanessrc097-master/.gitignore b/virtuanessrc097-master/.gitignore new file mode 100644 index 00000000..7d002f6b --- /dev/null +++ b/virtuanessrc097-master/.gitignore @@ -0,0 +1,167 @@ +VirtuaNES.exe +VirtuaNES.ini + +################# +## Eclipse +################# +.vs/ +debug/ +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.vspscc +.builds +*.dotCover + +## TODO: If you have NuGet Package Restore enabled, uncomment this +#packages/ + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp + +# ReSharper is a .NET coding add-in +_ReSharper* + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Others +[Bb]in +[Oo]bj +sql +TestResults +*.Cache +ClientBin +stylecop.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + + + +############ +## Windows +############ + +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# Mac crap +.DS_Store diff --git a/virtuanessrc097-master/AboutDlg.cpp b/virtuanessrc097-master/AboutDlg.cpp new file mode 100644 index 00000000..fff98b8f Binary files /dev/null and b/virtuanessrc097-master/AboutDlg.cpp differ diff --git a/virtuanessrc097-master/AboutDlg.h b/virtuanessrc097-master/AboutDlg.h new file mode 100644 index 00000000..7f593543 Binary files /dev/null and b/virtuanessrc097-master/AboutDlg.h differ diff --git a/virtuanessrc097-master/App.cpp b/virtuanessrc097-master/App.cpp new file mode 100644 index 00000000..4db97f86 Binary files /dev/null and b/virtuanessrc097-master/App.cpp differ diff --git a/virtuanessrc097-master/App.h b/virtuanessrc097-master/App.h new file mode 100644 index 00000000..71a71a93 Binary files /dev/null and b/virtuanessrc097-master/App.h differ diff --git a/virtuanessrc097-master/Archive.cpp b/virtuanessrc097-master/Archive.cpp new file mode 100644 index 00000000..16472715 Binary files /dev/null and b/virtuanessrc097-master/Archive.cpp differ diff --git a/virtuanessrc097-master/Archive.h b/virtuanessrc097-master/Archive.h new file mode 100644 index 00000000..c018f85f Binary files /dev/null and b/virtuanessrc097-master/Archive.h differ diff --git a/virtuanessrc097-master/AviConvDlg.cpp b/virtuanessrc097-master/AviConvDlg.cpp new file mode 100644 index 00000000..5dba4e19 Binary files /dev/null and b/virtuanessrc097-master/AviConvDlg.cpp differ diff --git a/virtuanessrc097-master/AviConvDlg.h b/virtuanessrc097-master/AviConvDlg.h new file mode 100644 index 00000000..f1244ea2 Binary files /dev/null and b/virtuanessrc097-master/AviConvDlg.h differ diff --git a/virtuanessrc097-master/AviWriter.cpp b/virtuanessrc097-master/AviWriter.cpp new file mode 100644 index 00000000..d6e92a30 Binary files /dev/null and b/virtuanessrc097-master/AviWriter.cpp differ diff --git a/virtuanessrc097-master/AviWriter.h b/virtuanessrc097-master/AviWriter.h new file mode 100644 index 00000000..715b1d65 Binary files /dev/null and b/virtuanessrc097-master/AviWriter.h differ diff --git a/virtuanessrc097-master/CHyperLink.h b/virtuanessrc097-master/CHyperLink.h new file mode 100644 index 00000000..5465a700 Binary files /dev/null and b/virtuanessrc097-master/CHyperLink.h differ diff --git a/virtuanessrc097-master/ChatDlg.cpp b/virtuanessrc097-master/ChatDlg.cpp new file mode 100644 index 00000000..2bfe5d30 Binary files /dev/null and b/virtuanessrc097-master/ChatDlg.cpp differ diff --git a/virtuanessrc097-master/ChatDlg.h b/virtuanessrc097-master/ChatDlg.h new file mode 100644 index 00000000..1e97d6a7 Binary files /dev/null and b/virtuanessrc097-master/ChatDlg.h differ diff --git a/virtuanessrc097-master/CheatDlg.cpp b/virtuanessrc097-master/CheatDlg.cpp new file mode 100644 index 00000000..b1592666 Binary files /dev/null and b/virtuanessrc097-master/CheatDlg.cpp differ diff --git a/virtuanessrc097-master/CheatDlg.h b/virtuanessrc097-master/CheatDlg.h new file mode 100644 index 00000000..ff3b7ee9 Binary files /dev/null and b/virtuanessrc097-master/CheatDlg.h differ diff --git a/virtuanessrc097-master/Com.cpp b/virtuanessrc097-master/Com.cpp new file mode 100644 index 00000000..6756f272 Binary files /dev/null and b/virtuanessrc097-master/Com.cpp differ diff --git a/virtuanessrc097-master/Com.h b/virtuanessrc097-master/Com.h new file mode 100644 index 00000000..a4edd86e Binary files /dev/null and b/virtuanessrc097-master/Com.h differ diff --git a/virtuanessrc097-master/Config.cpp b/virtuanessrc097-master/Config.cpp new file mode 100644 index 00000000..5ce1c58e Binary files /dev/null and b/virtuanessrc097-master/Config.cpp differ diff --git a/virtuanessrc097-master/Config.h b/virtuanessrc097-master/Config.h new file mode 100644 index 00000000..22cbbab0 Binary files /dev/null and b/virtuanessrc097-master/Config.h differ diff --git a/virtuanessrc097-master/ControllerDlg.cpp b/virtuanessrc097-master/ControllerDlg.cpp new file mode 100644 index 00000000..bb0fd9a5 Binary files /dev/null and b/virtuanessrc097-master/ControllerDlg.cpp differ diff --git a/virtuanessrc097-master/ControllerDlg.h b/virtuanessrc097-master/ControllerDlg.h new file mode 100644 index 00000000..86bb4da7 Binary files /dev/null and b/virtuanessrc097-master/ControllerDlg.h differ diff --git a/virtuanessrc097-master/Crclib.cpp b/virtuanessrc097-master/Crclib.cpp new file mode 100644 index 00000000..3587caa6 Binary files /dev/null and b/virtuanessrc097-master/Crclib.cpp differ diff --git a/virtuanessrc097-master/Crclib.h b/virtuanessrc097-master/Crclib.h new file mode 100644 index 00000000..558aa9fa Binary files /dev/null and b/virtuanessrc097-master/Crclib.h differ diff --git a/virtuanessrc097-master/DatachBarcodeDlg.cpp b/virtuanessrc097-master/DatachBarcodeDlg.cpp new file mode 100644 index 00000000..3a1c4b58 Binary files /dev/null and b/virtuanessrc097-master/DatachBarcodeDlg.cpp differ diff --git a/virtuanessrc097-master/DatachBarcodeDlg.h b/virtuanessrc097-master/DatachBarcodeDlg.h new file mode 100644 index 00000000..816ae73d Binary files /dev/null and b/virtuanessrc097-master/DatachBarcodeDlg.h differ diff --git a/virtuanessrc097-master/DebugOut.cpp b/virtuanessrc097-master/DebugOut.cpp new file mode 100644 index 00000000..65fab740 Binary files /dev/null and b/virtuanessrc097-master/DebugOut.cpp differ diff --git a/virtuanessrc097-master/DebugOut.h b/virtuanessrc097-master/DebugOut.h new file mode 100644 index 00000000..9bf1db34 Binary files /dev/null and b/virtuanessrc097-master/DebugOut.h differ diff --git a/virtuanessrc097-master/DipSwitchDlg.cpp b/virtuanessrc097-master/DipSwitchDlg.cpp new file mode 100644 index 00000000..f2eeb2ed Binary files /dev/null and b/virtuanessrc097-master/DipSwitchDlg.cpp differ diff --git a/virtuanessrc097-master/DipSwitchDlg.h b/virtuanessrc097-master/DipSwitchDlg.h new file mode 100644 index 00000000..6d23e343 Binary files /dev/null and b/virtuanessrc097-master/DipSwitchDlg.h differ diff --git a/virtuanessrc097-master/DirectDraw.cpp b/virtuanessrc097-master/DirectDraw.cpp new file mode 100644 index 00000000..cfe9093c Binary files /dev/null and b/virtuanessrc097-master/DirectDraw.cpp differ diff --git a/virtuanessrc097-master/DirectDraw.h b/virtuanessrc097-master/DirectDraw.h new file mode 100644 index 00000000..834141a0 Binary files /dev/null and b/virtuanessrc097-master/DirectDraw.h differ diff --git a/virtuanessrc097-master/DirectInput.cpp b/virtuanessrc097-master/DirectInput.cpp new file mode 100644 index 00000000..870dcddd Binary files /dev/null and b/virtuanessrc097-master/DirectInput.cpp differ diff --git a/virtuanessrc097-master/DirectInput.h b/virtuanessrc097-master/DirectInput.h new file mode 100644 index 00000000..ee4d7ad6 Binary files /dev/null and b/virtuanessrc097-master/DirectInput.h differ diff --git a/virtuanessrc097-master/DirectSound.cpp b/virtuanessrc097-master/DirectSound.cpp new file mode 100644 index 00000000..cd01df0b Binary files /dev/null and b/virtuanessrc097-master/DirectSound.cpp differ diff --git a/virtuanessrc097-master/DirectSound.h b/virtuanessrc097-master/DirectSound.h new file mode 100644 index 00000000..56324a6e Binary files /dev/null and b/virtuanessrc097-master/DirectSound.h differ diff --git a/virtuanessrc097-master/Doc/Copying.txt b/virtuanessrc097-master/Doc/Copying.txt new file mode 100644 index 00000000..47a5504c Binary files /dev/null and b/virtuanessrc097-master/Doc/Copying.txt differ diff --git a/virtuanessrc097-master/Doc/ReadmeSrc.txt b/virtuanessrc097-master/Doc/ReadmeSrc.txt new file mode 100644 index 00000000..b1c1ad59 Binary files /dev/null and b/virtuanessrc097-master/Doc/ReadmeSrc.txt differ diff --git a/virtuanessrc097-master/EmuThread.cpp b/virtuanessrc097-master/EmuThread.cpp new file mode 100644 index 00000000..50f0bd4b Binary files /dev/null and b/virtuanessrc097-master/EmuThread.cpp differ diff --git a/virtuanessrc097-master/EmuThread.h b/virtuanessrc097-master/EmuThread.h new file mode 100644 index 00000000..ad51812e Binary files /dev/null and b/virtuanessrc097-master/EmuThread.h differ diff --git a/virtuanessrc097-master/EmulatorDlg.cpp b/virtuanessrc097-master/EmulatorDlg.cpp new file mode 100644 index 00000000..f20382df Binary files /dev/null and b/virtuanessrc097-master/EmulatorDlg.cpp differ diff --git a/virtuanessrc097-master/EmulatorDlg.h b/virtuanessrc097-master/EmulatorDlg.h new file mode 100644 index 00000000..5963471b Binary files /dev/null and b/virtuanessrc097-master/EmulatorDlg.h differ diff --git a/virtuanessrc097-master/English.vlp b/virtuanessrc097-master/English.vlp new file mode 100644 index 00000000..868a8af3 Binary files /dev/null and b/virtuanessrc097-master/English.vlp differ diff --git a/virtuanessrc097-master/ExtSoundFile.h b/virtuanessrc097-master/ExtSoundFile.h new file mode 100644 index 00000000..49847cdd Binary files /dev/null and b/virtuanessrc097-master/ExtSoundFile.h differ diff --git a/virtuanessrc097-master/FolderDlg.cpp b/virtuanessrc097-master/FolderDlg.cpp new file mode 100644 index 00000000..f58b913f Binary files /dev/null and b/virtuanessrc097-master/FolderDlg.cpp differ diff --git a/virtuanessrc097-master/FolderDlg.h b/virtuanessrc097-master/FolderDlg.h new file mode 100644 index 00000000..d16e7831 Binary files /dev/null and b/virtuanessrc097-master/FolderDlg.h differ diff --git a/virtuanessrc097-master/GameOptionDlg.cpp b/virtuanessrc097-master/GameOptionDlg.cpp new file mode 100644 index 00000000..acc5e40d Binary files /dev/null and b/virtuanessrc097-master/GameOptionDlg.cpp differ diff --git a/virtuanessrc097-master/GameOptionDlg.h b/virtuanessrc097-master/GameOptionDlg.h new file mode 100644 index 00000000..514e6201 Binary files /dev/null and b/virtuanessrc097-master/GameOptionDlg.h differ diff --git a/virtuanessrc097-master/GraphicsDlg.cpp b/virtuanessrc097-master/GraphicsDlg.cpp new file mode 100644 index 00000000..08b4f3cb Binary files /dev/null and b/virtuanessrc097-master/GraphicsDlg.cpp differ diff --git a/virtuanessrc097-master/GraphicsDlg.h b/virtuanessrc097-master/GraphicsDlg.h new file mode 100644 index 00000000..7c992613 Binary files /dev/null and b/virtuanessrc097-master/GraphicsDlg.h differ diff --git a/virtuanessrc097-master/JoyAxisDlg.cpp b/virtuanessrc097-master/JoyAxisDlg.cpp new file mode 100644 index 00000000..fd41cc33 Binary files /dev/null and b/virtuanessrc097-master/JoyAxisDlg.cpp differ diff --git a/virtuanessrc097-master/JoyAxisDlg.h b/virtuanessrc097-master/JoyAxisDlg.h new file mode 100644 index 00000000..6548adc5 Binary files /dev/null and b/virtuanessrc097-master/JoyAxisDlg.h differ diff --git a/virtuanessrc097-master/LanguageDlg.cpp b/virtuanessrc097-master/LanguageDlg.cpp new file mode 100644 index 00000000..57e626d7 Binary files /dev/null and b/virtuanessrc097-master/LanguageDlg.cpp differ diff --git a/virtuanessrc097-master/LanguageDlg.h b/virtuanessrc097-master/LanguageDlg.h new file mode 100644 index 00000000..21805b61 Binary files /dev/null and b/virtuanessrc097-master/LanguageDlg.h differ diff --git a/virtuanessrc097-master/LauncherDlg.cpp b/virtuanessrc097-master/LauncherDlg.cpp new file mode 100644 index 00000000..a8ac3fe6 Binary files /dev/null and b/virtuanessrc097-master/LauncherDlg.cpp differ diff --git a/virtuanessrc097-master/LauncherDlg.h b/virtuanessrc097-master/LauncherDlg.h new file mode 100644 index 00000000..9643a897 Binary files /dev/null and b/virtuanessrc097-master/LauncherDlg.h differ diff --git a/virtuanessrc097-master/MMTimer.cpp b/virtuanessrc097-master/MMTimer.cpp new file mode 100644 index 00000000..25f21349 Binary files /dev/null and b/virtuanessrc097-master/MMTimer.cpp differ diff --git a/virtuanessrc097-master/MMTimer.h b/virtuanessrc097-master/MMTimer.h new file mode 100644 index 00000000..b6b22a5f Binary files /dev/null and b/virtuanessrc097-master/MMTimer.h differ diff --git a/virtuanessrc097-master/Macro.h b/virtuanessrc097-master/Macro.h new file mode 100644 index 00000000..2145b808 Binary files /dev/null and b/virtuanessrc097-master/Macro.h differ diff --git a/virtuanessrc097-master/MainFrame.cpp b/virtuanessrc097-master/MainFrame.cpp new file mode 100644 index 00000000..1076d0c1 Binary files /dev/null and b/virtuanessrc097-master/MainFrame.cpp differ diff --git a/virtuanessrc097-master/MainFrame.h b/virtuanessrc097-master/MainFrame.h new file mode 100644 index 00000000..2fb17ae6 Binary files /dev/null and b/virtuanessrc097-master/MainFrame.h differ diff --git a/virtuanessrc097-master/MemoryView.cpp b/virtuanessrc097-master/MemoryView.cpp new file mode 100644 index 00000000..27a21156 Binary files /dev/null and b/virtuanessrc097-master/MemoryView.cpp differ diff --git a/virtuanessrc097-master/MemoryView.h b/virtuanessrc097-master/MemoryView.h new file mode 100644 index 00000000..9cc093f6 Binary files /dev/null and b/virtuanessrc097-master/MemoryView.h differ diff --git a/virtuanessrc097-master/MovieDlg.cpp b/virtuanessrc097-master/MovieDlg.cpp new file mode 100644 index 00000000..167bcb48 Binary files /dev/null and b/virtuanessrc097-master/MovieDlg.cpp differ diff --git a/virtuanessrc097-master/MovieDlg.h b/virtuanessrc097-master/MovieDlg.h new file mode 100644 index 00000000..d7aaf7e8 Binary files /dev/null and b/virtuanessrc097-master/MovieDlg.h differ diff --git a/virtuanessrc097-master/MovieInfoDlg.cpp b/virtuanessrc097-master/MovieInfoDlg.cpp new file mode 100644 index 00000000..4b18542a Binary files /dev/null and b/virtuanessrc097-master/MovieInfoDlg.cpp differ diff --git a/virtuanessrc097-master/MovieInfoDlg.h b/virtuanessrc097-master/MovieInfoDlg.h new file mode 100644 index 00000000..4bdf6561 Binary files /dev/null and b/virtuanessrc097-master/MovieInfoDlg.h differ diff --git a/virtuanessrc097-master/NES/APU.cpp b/virtuanessrc097-master/NES/APU.cpp new file mode 100644 index 00000000..4366b223 Binary files /dev/null and b/virtuanessrc097-master/NES/APU.cpp differ diff --git a/virtuanessrc097-master/NES/APU.h b/virtuanessrc097-master/NES/APU.h new file mode 100644 index 00000000..938d8e60 Binary files /dev/null and b/virtuanessrc097-master/NES/APU.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_FDS.cpp b/virtuanessrc097-master/NES/ApuEX/APU_FDS.cpp new file mode 100644 index 00000000..5481c2a0 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_FDS.cpp differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_FDS.h b/virtuanessrc097-master/NES/ApuEX/APU_FDS.h new file mode 100644 index 00000000..d1d8bec6 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_FDS.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_FME7.cpp b/virtuanessrc097-master/NES/ApuEX/APU_FME7.cpp new file mode 100644 index 00000000..85ca987c Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_FME7.cpp differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_FME7.h b/virtuanessrc097-master/NES/ApuEX/APU_FME7.h new file mode 100644 index 00000000..a49008da Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_FME7.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_INTERFACE.h b/virtuanessrc097-master/NES/ApuEX/APU_INTERFACE.h new file mode 100644 index 00000000..abe78eec Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_INTERFACE.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_INTERNAL.cpp b/virtuanessrc097-master/NES/ApuEX/APU_INTERNAL.cpp new file mode 100644 index 00000000..5f2eb072 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_INTERNAL.cpp differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_INTERNAL.h b/virtuanessrc097-master/NES/ApuEX/APU_INTERNAL.h new file mode 100644 index 00000000..a4add6c4 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_INTERNAL.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_MMC5.cpp b/virtuanessrc097-master/NES/ApuEX/APU_MMC5.cpp new file mode 100644 index 00000000..2b2e3781 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_MMC5.cpp differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_MMC5.h b/virtuanessrc097-master/NES/ApuEX/APU_MMC5.h new file mode 100644 index 00000000..c6224bb6 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_MMC5.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_N106.cpp b/virtuanessrc097-master/NES/ApuEX/APU_N106.cpp new file mode 100644 index 00000000..a9a2c06c Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_N106.cpp differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_N106.h b/virtuanessrc097-master/NES/ApuEX/APU_N106.h new file mode 100644 index 00000000..3e98e5b6 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_N106.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_VRC6.cpp b/virtuanessrc097-master/NES/ApuEX/APU_VRC6.cpp new file mode 100644 index 00000000..615bf26a Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_VRC6.cpp differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_VRC6.h b/virtuanessrc097-master/NES/ApuEX/APU_VRC6.h new file mode 100644 index 00000000..995c8023 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_VRC6.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_VRC7.cpp b/virtuanessrc097-master/NES/ApuEX/APU_VRC7.cpp new file mode 100644 index 00000000..aa8ec451 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_VRC7.cpp differ diff --git a/virtuanessrc097-master/NES/ApuEX/APU_VRC7.h b/virtuanessrc097-master/NES/ApuEX/APU_VRC7.h new file mode 100644 index 00000000..527485a1 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/APU_VRC7.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/emu2413/2413tone.h b/virtuanessrc097-master/NES/ApuEX/emu2413/2413tone.h new file mode 100644 index 00000000..0e6bd913 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/emu2413/2413tone.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/emu2413/emu2413.c b/virtuanessrc097-master/NES/ApuEX/emu2413/emu2413.c new file mode 100644 index 00000000..b11fecb7 --- /dev/null +++ b/virtuanessrc097-master/NES/ApuEX/emu2413/emu2413.c @@ -0,0 +1,1545 @@ +/*********************************************************************************** + + emu2413.c -- YM2413 emulator written by Mitsutaka Okazaki 2001 + + 2001 01-08 : Version 0.10 -- 1st version. + 2001 01-15 : Version 0.20 -- semi-public version. + 2001 01-16 : Version 0.30 -- 1st public version. + 2001 01-17 : Version 0.31 -- Fixed bassdrum problem. + : Version 0.32 -- LPF implemented. + 2001 01-18 : Version 0.33 -- Fixed the drum problem, refine the mix-down method. + -- Fixed the LFO bug. + 2001 01-24 : Version 0.35 -- Fixed the drum problem, + support undocumented EG behavior. + 2001 02-02 : Version 0.38 -- Improved the performance. + Fixed the hi-hat and cymbal model. + Fixed the default percussive datas. + Noise reduction. + Fixed the feedback problem. + 2001 03-03 : Version 0.39 -- Fixed some drum bugs. + Improved the performance. + 2001 03-04 : Version 0.40 -- Improved the feedback. + Change the default table size. + Clock and Rate can be changed during play. + 2001 06-24 : Version 0.50 -- Improved the hi-hat and the cymbal tone. + Added VRC7 patch (OPLL_reset_patch is changed). + Fix OPLL_reset() bug. + Added OPLL_setMask, OPLL_getMask and OPLL_toggleMask. + Added OPLL_writeIO. + + References: + fmopl.c -- 1999,2000 written by Tatsuyuki Satoh (MAME development). + s_opl.c -- 2001 written by mamiya (NEZplug development). + fmgen.cpp -- 1999,2000 written by cisc. + fmpac.ill -- 2000 created by NARUTO. + MSX-Datapack + YMU757 data sheet + YM2143 data sheet + +**************************************************************************************/ +#include +#include +#include +#include +#include "emu2413.h" + +#if defined(_MSC_VER) +#define INLINE __inline +#elif defined(__GNUC__) +#define INLINE __inline__ +#else +#define INLINE +#endif + +#define OPLL_TONE_NUM 2 +static unsigned char default_inst[OPLL_TONE_NUM][(16+3)*16]= +{ + { +#include "2413tone.h" + }, + { +#include "vrc7tone.h" + } +}; + +/* Size of Sintable ( 1 -- 18 can be used, but 7 -- 14 recommended.)*/ +#define PG_BITS 9 +#define PG_WIDTH (1<>(b)) + +/* Leave the lower b bit(s). */ +#define LOWBITS(c,b) ((c)&((1<<(b))-1)) + +/* Expand x which is s bits to d bits. */ +#define EXPAND_BITS(x,s,d) ((x)<<((d)-(s))) + +/* Expand x which is s bits to d bits and fill expanded bits '1' */ +#define EXPAND_BITS_X(x,s,d) (((x)<<((d)-(s)))|((1<<((d)-(s)))-1)) + +/* Adjust envelope speed which depends on sampling rate. */ +#define rate_adjust(x) (uint32)((double)(x)*clk/72/rate + 0.5) /* +0.5 to round */ + +#define MOD(x) ch[x]->mod +#define CAR(x) ch[x]->car + +/* Sampling rate */ +static uint32 rate ; +/* Input clock */ +static uint32 clk ; + +/* WaveTable for each envelope amp */ +static uint32 fullsintable[PG_WIDTH] ; +static uint32 halfsintable[PG_WIDTH] ; +static uint32 snaretable[PG_WIDTH] ; + +static int32 noiseAtable[64] = { + -1,1,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0, + -1,1,0,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0,-1,1,0,0 +} ; + +static int32 noiseBtable[8] = { + -1,1,-1,1,0,0,0,0 +} ; + +static uint32 *waveform[5] = {fullsintable,halfsintable,snaretable} ; + +/* LFO Table */ +static int32 pmtable[PM_PG_WIDTH] ; +static int32 amtable[AM_PG_WIDTH] ; + +/* Noise and LFO */ +static uint32 pm_dphase ; +static uint32 am_dphase ; + +/* dB to Liner table */ +static int32 DB2LIN_TABLE[(DB_MUTE + DB_MUTE)*2] ; + +/* Liner to Log curve conversion table (for Attack rate). */ +static uint32 AR_ADJUST_TABLE[1<=DB_MUTE) DB2LIN_TABLE[i] = 0 ; + DB2LIN_TABLE[i+ DB_MUTE + DB_MUTE] = -DB2LIN_TABLE[i] ; + } +} + +/* Liner(+0.0 - +1.0) to dB((1<0) noiseAtable[i] = DB_POS(0) ; + else if(noiseAtable[i]<0) noiseAtable[i] = DB_NEG(0) ; + else noiseAtable[i] = DB_MUTE - 1 ; + } + + for( i = 0 ; i < 8 ; i++ ) + { + if(noiseBtable[i]>0) noiseBtable[i] = DB_POS(0) ; + else if(noiseBtable[i]<0) noiseBtable[i] = DB_NEG(0) ; + else noiseBtable[i] = DB_MUTE - 1 ; + } + +} + +/* Table for Pitch Modulator */ +static void makePmTable(void) +{ + int i ; + + for(i = 0 ; i < PM_PG_WIDTH ; i++ ) + pmtable[i] = (int32)((double)PM_AMP * pow(2,(double)PM_DEPTH*sin(2.0*PI*i/PM_PG_WIDTH)/1200)) ; +} + +/* Table for Amp Modulator */ +static void makeAmTable(void) +{ + int i ; + + for(i = 0 ; i < AM_PG_WIDTH ; i++ ) + amtable[i] = (int32)((double)AM_DEPTH/2/DB_STEP * (1.0 + sin(2.0*PI*i/PM_PG_WIDTH))) ; +} + +/* Phase increment counter table */ +static void makeDphaseTable(void) +{ + uint32 fnum, block , ML ; + uint32 mltable[16]={ 1,1*2,2*2,3*2,4*2,5*2,6*2,7*2,8*2,9*2,10*2,10*2,12*2,12*2,15*2,15*2 } ; + + for(fnum=0; fnum<512; fnum++) + for(block=0; block<8; block++) + for(ML=0; ML<16; ML++) + dphaseTable[fnum][block][ML] = rate_adjust(((fnum * mltable[ML])<>(20-DP_BITS)) ; +} + +static void makeTllTable(void) +{ +#define dB2(x) (uint32)((x)*2) + + static uint32 kltable[16] = { + dB2( 0.000),dB2( 9.000),dB2(12.000),dB2(13.875),dB2(15.000),dB2(16.125),dB2(16.875),dB2(17.625), + dB2(18.000),dB2(18.750),dB2(19.125),dB2(19.500),dB2(19.875),dB2(20.250),dB2(20.625),dB2(21.000) + } ; + + int32 tmp ; + int fnum, block ,TL , KL ; + + for(fnum=0; fnum<16; fnum++) + for(block=0; block<8; block++) + for(TL=0; TL<64; TL++) + for(KL=0; KL<4; KL++) + { + if(KL==0) + { + tllTable[fnum][block][TL][KL] = TL2EG(TL) ; + } + else + { + tmp = kltable[fnum] - dB2(3.000) * (7 - block) ; + if(tmp <= 0) + tllTable[fnum][block][TL][KL] = TL2EG(TL) ; + else + tllTable[fnum][block][TL][KL] = (uint32)((tmp>>(3-KL))/EG_STEP) + TL2EG(TL) ; + } + } +} + +/* Rate Table for Attack */ +static void makeDphaseARTable(void) +{ + int AR,Rks,RM,RL ; + + for(AR=0; AR<16; AR++) + for(Rks=0; Rks<16; Rks++) + { + RM = AR + (Rks>>2) ; + if(RM>15) RM = 15 ; + RL = Rks&3 ; + switch(AR) + { + case 0: + dphaseARTable[AR][Rks] = 0 ; + break ; + case 15: + dphaseARTable[AR][Rks] = EG_DP_WIDTH ; + break ; + default: + dphaseARTable[AR][Rks] = rate_adjust(( 3 * (RL + 4) << (RM + 1))) ; + break ; + } + } +} + +/* Rate Table for Decay */ +static void makeDphaseDRTable(void) +{ + int DR,Rks,RM,RL ; + + for(DR=0; DR<16; DR++) + for(Rks=0; Rks<16; Rks++) + { + RM = DR + (Rks>>2) ; + RL = Rks&3 ; + if(RM>15) RM = 15 ; + switch(DR) + { + case 0: + dphaseDRTable[DR][Rks] = 0 ; + break ; + default: + dphaseDRTable[DR][Rks] = rate_adjust((RL + 4) << (RM - 1)); + break ; + } + } +} + +static void makeRksTable(void) +{ + + int fnum8, block, KR ; + + for(fnum8 = 0 ; fnum8 < 2 ; fnum8++) + for(block = 0 ; block < 8 ; block++) + for(KR = 0; KR < 2 ; KR++) + { + if(KR!=0) + rksTable[fnum8][block][KR] = ( block << 1 ) + fnum8 ; + else + rksTable[fnum8][block][KR] = block >> 1 ; + } +} + + +void dump2patch(unsigned char *dump, OPLL_PATCH *patch) +{ + patch[0].AM = (dump[0]>>7)&1 ; + patch[1].AM = (dump[1]>>7)&1 ; + patch[0].PM = (dump[0]>>6)&1 ; + patch[1].PM = (dump[1]>>6)&1 ; + patch[0].EG = (dump[0]>>5)&1 ; + patch[1].EG = (dump[1]>>5)&1 ; + patch[0].KR = (dump[0]>>4)&1 ; + patch[1].KR = (dump[1]>>4)&1 ; + patch[0].ML = (dump[0])&15 ; + patch[1].ML = (dump[1])&15 ; + patch[0].KL = (dump[2]>>6)&3 ; + patch[1].KL = (dump[3]>>6)&3 ; + patch[0].TL = (dump[2])&63 ; + patch[0].FB = (dump[3])&7 ; + patch[0].WF = (dump[3]>>3)&1 ; + patch[1].WF = (dump[3]>>4)&1 ; + patch[0].AR = (dump[4]>>4)&15 ; + patch[1].AR = (dump[5]>>4)&15 ; + patch[0].DR = (dump[4])&15 ; + patch[1].DR = (dump[5])&15 ; + patch[0].SL = (dump[6]>>4)&15 ; + patch[1].SL = (dump[7]>>4)&15 ; + patch[0].RR = (dump[6])&15 ; + patch[1].RR = (dump[7])&15 ; +} + +static void makeDefaultPatch() +{ + int i, j ; + + for(i=0;ieg_mode) + { + case ATTACK: + return dphaseARTable[slot->patch->AR][slot->rks] ; + + case DECAY: + return dphaseDRTable[slot->patch->DR][slot->rks] ; + + case SUSHOLD: + return 0 ; + + case SUSTINE: + return dphaseDRTable[slot->patch->RR][slot->rks] ; + + case RELEASE: + if(slot->sustine) + return dphaseDRTable[5][slot->rks] ; + else if(slot->patch->EG) + return dphaseDRTable[slot->patch->RR][slot->rks] ; + else + return dphaseDRTable[7][slot->rks] ; + + case FINISH: + return 0 ; + + default: + return 0 ; + } +} + +/************************************************************* + + OPLL internal interfaces + +*************************************************************/ +#define SLOT_BD1 12 +#define SLOT_BD2 13 +#define SLOT_HH 14 +#define SLOT_SD 15 +#define SLOT_TOM 16 +#define SLOT_CYM 17 + +#define UPDATE_PG(S) (S)->dphase = dphaseTable[(S)->fnum][(S)->block][(S)->patch->ML] +#define UPDATE_TLL(S)\ +(((S)->type==0)?\ +((S)->tll = tllTable[((S)->fnum)>>5][(S)->block][(S)->patch->TL][(S)->patch->KL]):\ +((S)->tll = tllTable[((S)->fnum)>>5][(S)->block][(S)->volume][(S)->patch->KL])) +#define UPDATE_RKS(S) (S)->rks = rksTable[((S)->fnum)>>8][(S)->block][(S)->patch->KR] +#define UPDATE_WF(S) (S)->sintbl = waveform[(S)->patch->WF] +#define UPDATE_EG(S) (S)->eg_dphase = calc_eg_dphase(S) +#define UPDATE_ALL(S)\ + UPDATE_PG(S);\ + UPDATE_TLL(S);\ + UPDATE_RKS(S);\ + UPDATE_WF(S); \ + UPDATE_EG(S) /* EG should be last */ + +/* Force Refresh (When external program changes some parameters). */ +void OPLL_forceRefresh(OPLL *opll) +{ + int i ; + + if(opll==NULL) return ; + + for(i=0; i<18 ;i++) + { + UPDATE_PG(opll->slot[i]) ; + UPDATE_RKS(opll->slot[i]) ; + UPDATE_TLL(opll->slot[i]) ; + UPDATE_WF(opll->slot[i]) ; + UPDATE_EG(opll->slot[i]) ; + } +} + +/* Slot key on */ +INLINE static void slotOn(OPLL_SLOT *slot) +{ + slot->eg_mode = ATTACK ; + slot->phase = 0 ; + slot->eg_phase = 0 ; +} + +/* Slot key off */ +INLINE static void slotOff(OPLL_SLOT *slot) +{ + if(slot->eg_mode == ATTACK) + slot->eg_phase = EXPAND_BITS(AR_ADJUST_TABLE[HIGHBITS(slot->eg_phase,EG_DP_BITS-EG_BITS)],EG_BITS,EG_DP_BITS) ; + slot->eg_mode = RELEASE ; +} + +/* Channel key on */ +INLINE static void keyOn(OPLL *opll, int i) +{ + if(!opll->slot_on_flag[i*2]) slotOn(opll->MOD(i)) ; + if(!opll->slot_on_flag[i*2+1]) slotOn(opll->CAR(i)) ; + opll->ch[i]->key_status = 1 ; +} + +/* Channel key off */ +INLINE static void keyOff(OPLL *opll, int i) +{ + if(opll->slot_on_flag[i*2+1]) slotOff(opll->CAR(i)) ; + opll->ch[i]->key_status = 0 ; +} + +INLINE static void keyOn_BD(OPLL *opll){ keyOn(opll,6) ; } +INLINE static void keyOn_SD(OPLL *opll){ if(!opll->slot_on_flag[SLOT_SD]) slotOn(opll->CAR(7)) ; } +INLINE static void keyOn_TOM(OPLL *opll){ if(!opll->slot_on_flag[SLOT_TOM]) slotOn(opll->MOD(8)) ; } +INLINE static void keyOn_HH(OPLL *opll){ if(!opll->slot_on_flag[SLOT_HH]) slotOn(opll->MOD(7)) ; } +INLINE static void keyOn_CYM(OPLL *opll){ if(!opll->slot_on_flag[SLOT_CYM]) slotOn(opll->CAR(8)) ; } + +/* Drum key off */ +INLINE static void keyOff_BD(OPLL *opll){ keyOff(opll,6) ; } +INLINE static void keyOff_SD(OPLL *opll){ if(opll->slot_on_flag[SLOT_SD]) slotOff(opll->CAR(7)) ; } +INLINE static void keyOff_TOM(OPLL *opll){ if(opll->slot_on_flag[SLOT_TOM]) slotOff(opll->MOD(8)) ; } +INLINE static void keyOff_HH(OPLL *opll){ if(opll->slot_on_flag[SLOT_HH]) slotOff(opll->MOD(7)) ; } +INLINE static void keyOff_CYM(OPLL *opll){ if(opll->slot_on_flag[SLOT_CYM]) slotOff(opll->CAR(8)) ; } + +/* Change a voice */ +INLINE static void setPatch(OPLL *opll, int i, int num) +{ + opll->ch[i]->patch_number = num ; + opll->MOD(i)->patch = opll->patch[num*2+0] ; + opll->CAR(i)->patch = opll->patch[num*2+1] ; +} + +/* Change a rythm voice */ +INLINE static void setSlotPatch(OPLL_SLOT *slot, OPLL_PATCH *patch) +{ + slot->patch = patch ; +} + +/* Set sustine parameter */ +INLINE static void setSustine(OPLL *opll, int c, int sustine) +{ + opll->CAR(c)->sustine = sustine ; + if(opll->MOD(c)->type) opll->MOD(c)->sustine = sustine ; +} + +/* Volume : 6bit ( Volume register << 2 ) */ +INLINE static void setVolume(OPLL *opll, int c, int volume) +{ + opll->CAR(c)->volume = volume ; +} + +INLINE static void setSlotVolume(OPLL_SLOT *slot, int volume) +{ + slot->volume = volume ; +} + +/* Set F-Number ( fnum : 9bit ) */ +INLINE static void setFnumber(OPLL *opll, int c, int fnum) +{ + opll->CAR(c)->fnum = fnum ; + opll->MOD(c)->fnum = fnum ; +} + +/* Set Block data (block : 3bit ) */ +INLINE static void setBlock(OPLL *opll, int c, int block) +{ + opll->CAR(c)->block = block ; + opll->MOD(c)->block = block ; +} + +/* Change Rythm Mode */ +INLINE static void setRythmMode(OPLL *opll, int mode) +{ + opll->rythm_mode = mode ; + + if(mode) + { + opll->ch[6]->patch_number = 16 ; + opll->ch[7]->patch_number = 17 ; + opll->ch[8]->patch_number = 18 ; + setSlotPatch(opll->slot[SLOT_BD1], opll->patch[16*2+0]) ; + setSlotPatch(opll->slot[SLOT_BD2], opll->patch[16*2+1]) ; + setSlotPatch(opll->slot[SLOT_HH], opll->patch[17*2+0]) ; + setSlotPatch(opll->slot[SLOT_SD], opll->patch[17*2+1]) ; + opll->slot[SLOT_HH]->type = 1 ; + setSlotPatch(opll->slot[SLOT_TOM], opll->patch[18*2+0]) ; + setSlotPatch(opll->slot[SLOT_CYM], opll->patch[18*2+1]) ; + opll->slot[SLOT_TOM]->type = 1 ; + } + else + { + setPatch(opll, 6, opll->reg[0x36]>>4) ; + setPatch(opll, 7, opll->reg[0x37]>>4) ; + opll->slot[SLOT_HH]->type = 0 ; + setPatch(opll, 8, opll->reg[0x38]>>4) ; + opll->slot[SLOT_TOM]->type = 0 ; + } + + if(!opll->slot_on_flag[SLOT_BD1]) + opll->slot[SLOT_BD1]->eg_mode = FINISH ; + if(!opll->slot_on_flag[SLOT_BD2]) + opll->slot[SLOT_BD2]->eg_mode = FINISH ; + if(!opll->slot_on_flag[SLOT_HH]) + opll->slot[SLOT_HH]->eg_mode = FINISH ; + if(!opll->slot_on_flag[SLOT_SD]) + opll->slot[SLOT_SD]->eg_mode = FINISH ; + if(!opll->slot_on_flag[SLOT_TOM]) + opll->slot[SLOT_TOM]->eg_mode = FINISH ; + if(!opll->slot_on_flag[SLOT_CYM]) + opll->slot[SLOT_CYM]->eg_mode = FINISH ; + +} + +void OPLL_copyPatch(OPLL *opll, int num, OPLL_PATCH *patch) +{ + memcpy(opll->patch[num],patch,sizeof(OPLL_PATCH)) ; +} + +/*********************************************************** + + Initializing + +***********************************************************/ + +static void OPLL_SLOT_reset(OPLL_SLOT *slot) +{ + slot->sintbl = waveform[0] ; + slot->phase = 0 ; + slot->dphase = 0 ; + slot->output[0] = 0 ; + slot->output[1] = 0 ; + slot->feedback = 0 ; + slot->eg_mode = SETTLE ; + slot->eg_phase = EG_DP_WIDTH ; + slot->eg_dphase = 0 ; + slot->rks = 0 ; + slot->tll = 0 ; + slot->sustine = 0 ; + slot->fnum = 0 ; + slot->block = 0 ; + slot->volume = 0 ; + slot->pgout = 0 ; + slot->egout = 0 ; + slot->patch = &null_patch ; +} + +static OPLL_SLOT *OPLL_SLOT_new(void) +{ + OPLL_SLOT *slot ; + + slot = malloc(sizeof(OPLL_SLOT)) ; + if(slot == NULL) return NULL ; + + return slot ; +} + +static void OPLL_SLOT_delete(OPLL_SLOT *slot) +{ + free(slot) ; +} + +static void OPLL_CH_reset(OPLL_CH *ch) +{ + if(ch->mod!=NULL) OPLL_SLOT_reset(ch->mod) ; + if(ch->car!=NULL) OPLL_SLOT_reset(ch->car) ; + ch->key_status = 0 ; +} + +static OPLL_CH *OPLL_CH_new(void) +{ + OPLL_CH *ch ; + OPLL_SLOT *mod, *car ; + + mod = OPLL_SLOT_new() ; + if(mod == NULL) return NULL ; + + car = OPLL_SLOT_new() ; + if(car == NULL) + { + OPLL_SLOT_delete(mod) ; + return NULL ; + } + + ch = malloc(sizeof(OPLL_CH)) ; + if(ch == NULL) + { + OPLL_SLOT_delete(mod) ; + OPLL_SLOT_delete(car) ; + return NULL ; + } + + mod->type = 0 ; + car->type = 1 ; + ch->mod = mod ; + ch->car = car ; + + return ch ; +} + + +static void OPLL_CH_delete(OPLL_CH *ch) +{ + OPLL_SLOT_delete(ch->mod) ; + OPLL_SLOT_delete(ch->car) ; + free(ch) ; +} + +OPLL *OPLL_new(void) +{ + OPLL *opll ; + OPLL_CH *ch[9] ; + OPLL_PATCH *patch[19*2] ; + int i, j ; + + for( i = 0 ; i < 19*2 ; i++ ) + { + patch[i] = calloc(sizeof(OPLL_PATCH),1) ; + if(patch[i] == NULL) + { + for ( j = i ; i > 0 ; i++ ) free(patch[j-1]) ; + return NULL ; + } + } + + for( i = 0 ; i < 9 ; i++ ) + { + ch[i] = OPLL_CH_new() ; + if(ch[i]==NULL) + { + for ( j = i ; i > 0 ; i++ ) OPLL_CH_delete(ch[j-1]) ; + for ( j = 0 ; j < 19*2 ; j++ ) free(patch[j]) ; + return NULL ; + } + } + + opll = malloc(sizeof(OPLL)) ; + if(opll == NULL) return NULL ; + + + for ( i = 0 ; i < 19*2 ; i++ ) + + opll->patch[i] = patch[i] ; + + + for ( i = 0 ; i <9 ; i++) + { + opll->ch[i] = ch[i] ; + opll->slot[i*2+0] = opll->ch[i]->mod ; + opll->slot[i*2+1] = opll->ch[i]->car ; + } + + for ( i = 0 ; i < 18 ; i++) + { + opll->slot[i]->plfo_am = &opll->lfo_am ; + opll->slot[i]->plfo_pm = &opll->lfo_pm ; + } + + opll->mask = 0 ; + + OPLL_reset(opll) ; + OPLL_reset_patch(opll,0) ; + + opll->masterVolume = 32 ; + + return opll ; + +} + +void OPLL_delete(OPLL *opll) +{ + int i ; + + for ( i = 0 ; i < 9 ; i++ ) + OPLL_CH_delete(opll->ch[i]) ; + + for ( i = 0 ; i < 19*2 ; i++ ) + free(opll->patch[i]) ; + + free(opll) ; +} + +/* Reset patch datas by system default. */ +void OPLL_reset_patch(OPLL *opll, int type) +{ + int i ; + + for ( i = 0 ; i < 19*2 ; i++ ) + OPLL_copyPatch(opll, i, &default_patch[type%OPLL_TONE_NUM][i]) ; +} + +/* Reset whole of OPLL except patch datas. */ +void OPLL_reset(OPLL *opll) +{ + int i ; + + if(!opll) return ; + + opll->adr = 0 ; + + opll->output[0] = 0 ; + opll->output[1] = 0 ; + + opll->pm_phase = 0 ; + opll->am_phase = 0 ; + + opll->noise_seed =0xffff ; + opll->noiseA = 0 ; + opll->noiseB = 0 ; + opll->noiseA_phase = 0 ; + opll->noiseB_phase = 0 ; + opll->noiseA_dphase = 0 ; + opll->noiseB_dphase = 0 ; + opll->noiseA_idx = 0 ; + opll->noiseB_idx = 0 ; + + for(i = 0; i < 9 ; i++) + { + OPLL_CH_reset(opll->ch[i]) ; + setPatch(opll,i,0) ; + } + + for ( i = 0 ; i < 0x40 ; i++ ) OPLL_writeReg(opll, i, 0) ; + +} + +void OPLL_setClock(uint32 c, uint32 r) +{ + clk = c ; + rate = r ; + makeDphaseTable() ; + makeDphaseARTable() ; + makeDphaseDRTable() ; + pm_dphase = (uint32)rate_adjust(PM_SPEED * PM_DP_WIDTH / (clk/72) ) ; + am_dphase = (uint32)rate_adjust(AM_SPEED * AM_DP_WIDTH / (clk/72) ) ; +} + +void OPLL_init(uint32 c, uint32 r) +{ + makePmTable() ; + makeAmTable() ; + makeDB2LinTable() ; + makeAdjustTable() ; + makeTllTable() ; + makeRksTable() ; + makeSinTable() ; + makeDefaultPatch() ; + OPLL_setClock(c,r) ; +} + +void OPLL_close(void) +{ +} + +/********************************************************* + + Generate wave data + +*********************************************************/ +/* Convert Amp(0 to EG_HEIGHT) to Phase(0 to 2PI). */ +#if ( SLOT_AMP_BITS - PG_BITS ) > 0 +#define wave2_2pi(e) ( (e) >> ( SLOT_AMP_BITS - PG_BITS )) +#else +#define wave2_2pi(e) ( (e) << ( PG_BITS - SLOT_AMP_BITS )) +#endif + +/* Convert Amp(0 to EG_HEIGHT) to Phase(0 to 4PI). */ +#if ( SLOT_AMP_BITS - PG_BITS - 1 ) == 0 +#define wave2_4pi(e) (e) +#elif ( SLOT_AMP_BITS - PG_BITS - 1 ) > 0 +#define wave2_4pi(e) ( (e) >> ( SLOT_AMP_BITS - PG_BITS - 1 )) +#else +#define wave2_4pi(e) ( (e) << ( 1 + PG_BITS - SLOT_AMP_BITS )) +#endif + +/* Convert Amp(0 to EG_HEIGHT) to Phase(0 to 8PI). */ +#if ( SLOT_AMP_BITS - PG_BITS - 2 ) == 0 +#define wave2_8pi(e) (e) +#elif ( SLOT_AMP_BITS - PG_BITS - 2 ) > 0 +#define wave2_8pi(e) ( (e) >> ( SLOT_AMP_BITS - PG_BITS - 2 )) +#else +#define wave2_8pi(e) ( (e) << ( 2 + PG_BITS - SLOT_AMP_BITS )) +#endif + +/* 16bit rand */ +INLINE static uint32 mrand(uint32 seed) +{ + return ((seed>>15)^((seed>>12)&1)) | ((seed<<1)&0xffff) ; +} + +INLINE static uint32 DEC(uint32 db) +{ + if(dbnoise_seed = mrand(opll->noise_seed) ; + opll->whitenoise = opll->noise_seed & 1 ; + + opll->noiseA_phase = (opll->noiseA_phase + opll->noiseA_dphase) ; + opll->noiseB_phase = (opll->noiseB_phase + opll->noiseB_dphase) ; + + if(opll->noiseA_phase<(1<<11)) + { + if(opll->noiseA_phase>16) opll->noiseA = DB_MUTE - 1 ; + } + else + { + opll->noiseA_phase &= (1<<11)-1 ; + opll->noiseA_idx = (opll->noiseA_idx+1)&63 ; + opll->noiseA = noiseAtable[opll->noiseA_idx] ; + } + + if(opll->noiseB_phase<(1<<12)) + { + if(opll->noiseB_phase>16) opll->noiseB = DB_MUTE - 1 ; + } + else + { + opll->noiseB_phase &= (1<<12)-1 ; + opll->noiseB_idx = (opll->noiseB_idx+1)&7 ; + opll->noiseB = noiseBtable[opll->noiseB_idx] ; + } + +} + +/* Update AM, PM unit */ +INLINE static void update_ampm(OPLL *opll) +{ + opll->pm_phase = (opll->pm_phase + pm_dphase)&(PM_DP_WIDTH - 1) ; + opll->am_phase = (opll->am_phase + am_dphase)&(AM_DP_WIDTH - 1) ; + opll->lfo_am = amtable[HIGHBITS(opll->am_phase, AM_DP_BITS - AM_PG_BITS)] ; + opll->lfo_pm = pmtable[HIGHBITS(opll->pm_phase, PM_DP_BITS - PM_PG_BITS)] ; +} + +/* PG */ +INLINE static uint32 calc_phase(OPLL_SLOT *slot) +{ + if(slot->patch->PM) + slot->phase += (slot->dphase * (*(slot->plfo_pm))) >> PM_AMP_BITS ; + else + slot->phase += slot->dphase ; + + slot->phase &= (DP_WIDTH - 1) ; + + return HIGHBITS(slot->phase, DP_BASE_BITS) ; +} + +/* EG */ +INLINE static uint32 calc_envelope(OPLL_SLOT *slot) +{ + #define S2E(x) (SL2EG((int)(x/SL_STEP))<<(EG_DP_BITS-EG_BITS)) + static uint32 SL[16] = { + S2E( 0), S2E( 3), S2E( 6), S2E( 9), S2E(12), S2E(15), S2E(18), S2E(21), + S2E(24), S2E(27), S2E(30), S2E(33), S2E(36), S2E(39), S2E(42), S2E(48) + } ; + + uint32 egout ; + + switch(slot->eg_mode) + { + + case ATTACK: + slot->eg_phase += slot->eg_dphase ; + if(EG_DP_WIDTH & slot->eg_phase) + { + egout = 0 ; + slot->eg_phase= 0 ; + slot->eg_mode = DECAY ; + UPDATE_EG(slot) ; + } + else + { + egout = AR_ADJUST_TABLE[HIGHBITS(slot->eg_phase, EG_DP_BITS - EG_BITS)] ; + } + break; + + case DECAY: + slot->eg_phase += slot->eg_dphase ; + egout = HIGHBITS(slot->eg_phase, EG_DP_BITS - EG_BITS) ; + if(slot->eg_phase >= SL[slot->patch->SL]) + { + if(slot->patch->EG) + { + slot->eg_phase = SL[slot->patch->SL] ; + slot->eg_mode = SUSHOLD ; + UPDATE_EG(slot) ; + } + else + { + slot->eg_phase = SL[slot->patch->SL] ; + slot->eg_mode = SUSTINE ; + UPDATE_EG(slot) ; + } + egout = HIGHBITS(slot->eg_phase, EG_DP_BITS - EG_BITS) ; + } + break; + + case SUSHOLD: + egout = HIGHBITS(slot->eg_phase, EG_DP_BITS - EG_BITS) ; + if(slot->patch->EG == 0) + { + slot->eg_mode = SUSTINE ; + UPDATE_EG(slot) ; + } + break; + + case SUSTINE: + case RELEASE: + slot->eg_phase += slot->eg_dphase ; + egout = HIGHBITS(slot->eg_phase, EG_DP_BITS - EG_BITS) ; + if(egout >= (1<eg_mode = FINISH ; + egout = (1<patch->AM) egout = EG2DB(egout+slot->tll) + *(slot->plfo_am) ; + else egout = EG2DB(egout+slot->tll) ; + + if(egout >= DB_MUTE) egout = DB_MUTE-1; + return egout ; + +} + +INLINE static int32 calc_slot_car(OPLL_SLOT *slot, int32 fm) +{ + slot->egout = calc_envelope(slot) ; + slot->pgout = calc_phase(slot) ; + if(slot->egout>=(DB_MUTE-1)) return 0 ; + + return DB2LIN_TABLE[slot->sintbl[(slot->pgout+wave2_8pi(fm))&(PG_WIDTH-1)] + slot->egout] ; +} + + +INLINE static int32 calc_slot_mod(OPLL_SLOT *slot) +{ + int32 fm ; + + slot->output[1] = slot->output[0] ; + slot->egout = calc_envelope(slot) ; + slot->pgout = calc_phase(slot) ; + + if(slot->egout>=(DB_MUTE-1)) + { + slot->output[0] = 0 ; + } + else if(slot->patch->FB!=0) + { + fm = wave2_4pi(slot->feedback) >> (7 - slot->patch->FB) ; + slot->output[0] = DB2LIN_TABLE[slot->sintbl[(slot->pgout+fm)&(PG_WIDTH-1)] + slot->egout] ; + } + else + { + slot->output[0] = DB2LIN_TABLE[slot->sintbl[slot->pgout] + slot->egout] ; + } + + slot->feedback = (slot->output[1] + slot->output[0])>>1 ; + + return slot->feedback ; + +} + +INLINE static int32 calc_slot_tom(OPLL_SLOT *slot) +{ + + slot->egout = calc_envelope(slot) ; + slot->pgout = calc_phase(slot) ; + if(slot->egout>=(DB_MUTE-1)) return 0 ; + + return DB2LIN_TABLE[slot->sintbl[slot->pgout] + slot->egout] ; + +} + +/* calc SNARE slot */ +INLINE static int32 calc_slot_snare(OPLL_SLOT *slot, uint32 whitenoise) +{ + slot->egout = calc_envelope(slot) ; + slot->pgout = calc_phase(slot) ; + if(slot->egout>=(DB_MUTE-1)) return 0 ; + + if(whitenoise) + return DB2LIN_TABLE[snaretable[slot->pgout] + slot->egout] + DB2LIN_TABLE[slot->egout + 6] ; + else + return DB2LIN_TABLE[snaretable[slot->pgout] + slot->egout] ; +} + +INLINE static int32 calc_slot_cym(OPLL_SLOT *slot, int32 a, int32 b, int32 c) +{ + slot->egout = calc_envelope(slot) ; + if(slot->egout>=(DB_MUTE-1)) return 0 ; + + return DB2LIN_TABLE[slot->egout+a] + + (( DB2LIN_TABLE[slot->egout+b] + DB2LIN_TABLE[slot->egout+c] ) >> 2 ); +} + +INLINE static int32 calc_slot_hat(OPLL_SLOT *slot, int32 a, int32 b, int32 c, uint32 whitenoise) +{ + slot->egout = calc_envelope(slot) ; + if(slot->egout>=(DB_MUTE-1)) return 0 ; + + if(whitenoise) + { + return DB2LIN_TABLE[slot->egout+a] + + (( DB2LIN_TABLE[slot->egout+b] + DB2LIN_TABLE[slot->egout+c] ) >> 2 ); + } + else + { + return 0 ; + } +} + +int16 OPLL_calc(OPLL *opll) +{ + int32 inst = 0 , perc = 0 , out = 0 ; + int32 rythmC = 0, rythmH = 0; + int i ; + + update_ampm(opll) ; + update_noise(opll) ; + + for(i = 0 ; i < 6 ; i++) + if(!(opll->mask&OPLL_MASK_CH(i))&&(opll->CAR(i)->eg_mode!=FINISH)) + inst += calc_slot_car(opll->CAR(i),calc_slot_mod(opll->MOD(i))) ; + + if(!opll->rythm_mode) + { + for(i = 6 ; i < 9 ; i++) + if(!(opll->mask&OPLL_MASK_CH(i))&&(opll->CAR(i)->eg_mode!=FINISH)) + inst += calc_slot_car(opll->CAR(i),calc_slot_mod(opll->MOD(i))) ; + } + else + { + opll->MOD(7)->pgout = calc_phase(opll->MOD(7)) ; + opll->CAR(8)->pgout = calc_phase(opll->CAR(8)) ; + if(opll->MOD(7)->phase<256) rythmH = DB_NEG(12.0) ; else rythmH = DB_MUTE - 1 ; + if(opll->CAR(8)->phase<256) rythmC = DB_NEG(12.0) ; else rythmC = DB_MUTE - 1 ; + + if(!(opll->mask&OPLL_MASK_BD)&&(opll->CAR(6)->eg_mode!=FINISH)) + perc += calc_slot_car(opll->CAR(6),calc_slot_mod(opll->MOD(6))) ; + + if(!(opll->mask&OPLL_MASK_HH)&&(opll->MOD(7)->eg_mode!=FINISH)) + perc += calc_slot_hat(opll->MOD(7), opll->noiseA, opll->noiseB, rythmH, opll->whitenoise) ; + + if(!(opll->mask&OPLL_MASK_SD)&&(opll->CAR(7)->eg_mode!=FINISH)) + perc += calc_slot_snare(opll->CAR(7), opll->whitenoise) ; + + if(!(opll->mask&OPLL_MASK_TOM)&&(opll->MOD(8)->eg_mode!=FINISH)) + perc += calc_slot_tom(opll->MOD(8)) ; + + if(!(opll->mask&OPLL_MASK_CYM)&&(opll->CAR(8)->eg_mode!=FINISH)) + perc += calc_slot_cym(opll->CAR(8), opll->noiseA, opll->noiseB, rythmC) ; + } + +#if SLOT_AMP_BITS > 8 + inst = (inst >> (SLOT_AMP_BITS - 8)) ; + perc = (perc >> (SLOT_AMP_BITS - 9)) ; +#else + inst = (inst << (8 - SLOT_AMP_BITS)) ; + perc = (perc << (9 - SLOT_AMP_BITS)) ; +#endif + + out = ((inst + perc) * opll->masterVolume ) >> 2 ; + + if(out>32767) return 32767 ; + if(out<-32768) return -32768 ; + + return (int16)out ; + +} + +uint32 OPLL_setMask(OPLL *opll, uint32 mask) +{ + uint32 ret ; + + if(opll) + { + ret = opll->mask ; + opll->mask = mask ; + return ret ; + } + else return 0 ; +} + +uint32 OPLL_toggleMask(OPLL *opll, uint32 mask) +{ + uint32 ret ; + + if(opll) + { + ret = opll->mask ; + opll->mask ^= mask ; + return ret ; + } + else return 0 ; +} + +/**************************************************** + + Interfaces + +*****************************************************/ + +void OPLL_writeReg(OPLL *opll, uint32 reg, uint32 data){ + + int i,v,ch ; + + data = data&0xff ; + reg = reg&0x3f ; + + switch(reg) + { + case 0x00: + opll->patch[0]->AM = (data>>7)&1 ; + opll->patch[0]->PM = (data>>6)&1 ; + opll->patch[0]->EG = (data>>5)&1 ; + opll->patch[0]->KR = (data>>4)&1 ; + opll->patch[0]->ML = (data)&15 ; + for(i=0;i<9;i++) + { + if(opll->ch[i]->patch_number==0) + { + UPDATE_PG(opll->MOD(i)) ; + UPDATE_RKS(opll->MOD(i)) ; + UPDATE_EG(opll->MOD(i)) ; + } + } + break ; + + case 0x01: + opll->patch[1]->AM = (data>>7)&1 ; + opll->patch[1]->PM = (data>>6)&1 ; + opll->patch[1]->EG = (data>>5)&1 ; + opll->patch[1]->KR = (data>>4)&1 ; + opll->patch[1]->ML = (data)&15 ; + for(i=0;i<9;i++) + { + if(opll->ch[i]->patch_number==0) + { + UPDATE_PG(opll->CAR(i)) ; + UPDATE_RKS(opll->CAR(i)) ; + UPDATE_EG(opll->CAR(i)) ; + } + } + break; + + case 0x02: + opll->patch[0]->KL = (data>>6)&3 ; + opll->patch[0]->TL = (data)&63 ; + for(i=0;i<9;i++) + { + if(opll->ch[i]->patch_number==0) + { + UPDATE_TLL(opll->MOD(i)) ; + } + } + break ; + + case 0x03: + opll->patch[1]->KL = (data>>6)&3 ; + opll->patch[1]->WF = (data>>4)&1 ; + opll->patch[0]->WF = (data>>3)&1 ; + opll->patch[0]->FB = (data)&7 ; + for(i=0;i<9;i++) + { + if(opll->ch[i]->patch_number==0) + { + UPDATE_WF(opll->MOD(i)) ; + UPDATE_WF(opll->CAR(i)) ; + } + } + break ; + + case 0x04: + opll->patch[0]->AR = (data>>4)&15 ; + opll->patch[0]->DR = (data)&15 ; + for(i=0;i<9;i++) + { + if(opll->ch[i]->patch_number==0) + { + UPDATE_EG(opll->MOD(i)) ; + } + } + break ; + + case 0x05: + opll->patch[1]->AR = (data>>4)&15 ; + opll->patch[1]->DR = (data)&15 ; + for(i=0;i<9;i++) + { + if(opll->ch[i]->patch_number==0) + { + UPDATE_EG(opll->CAR(i)) ; + } + } + break ; + + case 0x06: + opll->patch[0]->SL = (data>>4)&15 ; + opll->patch[0]->RR = (data)&15 ; + for(i=0;i<9;i++) + { + if(opll->ch[i]->patch_number==0) + { + UPDATE_EG(opll->MOD(i)) ; + } + } + break ; + + case 0x07: + opll->patch[1]->SL = (data>>4)&15 ; + opll->patch[1]->RR = (data)&15 ; + for(i=0;i<9;i++) + { + if(opll->ch[i]->patch_number==0) + { + UPDATE_EG(opll->CAR(i)) ; + } + } + break ; + + case 0x0e: + + if(opll->rythm_mode) + { + opll->slot_on_flag[SLOT_BD1] = (opll->reg[0x0e]&0x10) | (opll->reg[0x26]&0x10) ; + opll->slot_on_flag[SLOT_BD2] = (opll->reg[0x0e]&0x10) | (opll->reg[0x26]&0x10) ; + opll->slot_on_flag[SLOT_SD] = (opll->reg[0x0e]&0x08) | (opll->reg[0x27]&0x10) ; + opll->slot_on_flag[SLOT_HH] = (opll->reg[0x0e]&0x01) | (opll->reg[0x27]&0x10) ; + opll->slot_on_flag[SLOT_TOM] = (opll->reg[0x0e]&0x04) | (opll->reg[0x28]&0x10) ; + opll->slot_on_flag[SLOT_CYM] = (opll->reg[0x0e]&0x02) | (opll->reg[0x28]&0x10) ; + } + else + { + opll->slot_on_flag[SLOT_BD1] = (opll->reg[0x26]&0x10) ; + opll->slot_on_flag[SLOT_BD2] = (opll->reg[0x26]&0x10) ; + opll->slot_on_flag[SLOT_SD] = (opll->reg[0x27]&0x10) ; + opll->slot_on_flag[SLOT_HH] = (opll->reg[0x27]&0x10) ; + opll->slot_on_flag[SLOT_TOM] = (opll->reg[0x28]&0x10) ; + opll->slot_on_flag[SLOT_CYM] = (opll->reg[0x28]&0x10) ; + } + + if(((data>>5)&1)^(opll->rythm_mode)) + { + setRythmMode(opll,(data&32)>>5) ; + } + + if(opll->rythm_mode) + { + if(data&0x10) keyOn_BD(opll) ; else keyOff_BD(opll) ; + if(data&0x8) keyOn_SD(opll) ; else keyOff_SD(opll) ; + if(data&0x4) keyOn_TOM(opll) ; else keyOff_TOM(opll) ; + if(data&0x2) keyOn_CYM(opll) ; else keyOff_CYM(opll) ; + if(data&0x1) keyOn_HH(opll) ; else keyOff_HH(opll) ; + } + + UPDATE_ALL(opll->MOD(6)) ; + UPDATE_ALL(opll->CAR(6)) ; + UPDATE_ALL(opll->MOD(7)) ; + UPDATE_ALL(opll->CAR(7)) ; + UPDATE_ALL(opll->MOD(8)) ; + UPDATE_ALL(opll->CAR(8)) ; + break ; + + case 0x0f: + break ; + + case 0x10: case 0x11: case 0x12: case 0x13: + case 0x14: case 0x15: case 0x16: case 0x17: + case 0x18: + ch = reg-0x10 ; + setFnumber(opll, ch, data + ((opll->reg[0x20+ch]&1)<<8)) ; + UPDATE_ALL(opll->MOD(ch)); + UPDATE_ALL(opll->CAR(ch)); + switch(reg) + { + case 0x17: + opll->noiseA_dphase = (data + ((opll->reg[0x27]&1)<<8)) << ((opll->reg[0x27]>>1)&7) ; + break ; + case 0x18: + opll->noiseB_dphase = (data + ((opll->reg[0x28]&1)<<8)) << ((opll->reg[0x28]>>1)&7) ; + break; + default: + break ; + } + break ; + + case 0x20: case 0x21: case 0x22: case 0x23: + case 0x24: case 0x25: case 0x26: case 0x27: + case 0x28: + + ch = reg - 0x20 ; + setFnumber(opll, ch, ((data&1)<<8) + opll->reg[0x10+ch]) ; + setBlock(opll, ch, (data>>1)&7 ) ; + opll->slot_on_flag[ch*2] = opll->slot_on_flag[ch*2+1] = (opll->reg[reg])&0x10 ; + + if(opll->rythm_mode) + { + switch(reg) + { + case 0x26: + opll->slot_on_flag[SLOT_BD1] |= (opll->reg[0x0e])&0x10 ; + opll->slot_on_flag[SLOT_BD2] |= (opll->reg[0x0e])&0x10 ; + break ; + + case 0x27: + opll->noiseA_dphase = (((data&1)<<8) + opll->reg[0x17] ) << ((data>>1)&7) ; + opll->slot_on_flag[SLOT_SD] |= (opll->reg[0x0e])&0x08 ; + opll->slot_on_flag[SLOT_HH] |= (opll->reg[0x0e])&0x01 ; + break; + + case 0x28: + opll->noiseB_dphase = (((data&1)<<8) + opll->reg[0x18] ) << ((data>>1)&7); + opll->slot_on_flag[SLOT_TOM] |= (opll->reg[0x0e])&0x04 ; + opll->slot_on_flag[SLOT_CYM] |= (opll->reg[0x0e])&0x02 ; + break ; + + default: + break ; + } + } + + if((opll->reg[reg]^data)&0x20) setSustine(opll, ch, (data>>5)&1) ; + if(data&0x10) keyOn(opll, ch) ; else keyOff(opll, ch) ; + UPDATE_ALL(opll->MOD(ch)) ; + UPDATE_ALL(opll->CAR(ch)) ; + break ; + + case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: + case 0x35: case 0x36: case 0x37: case 0x38: + i = (data>>4)&15 ; + v = data&15 ; + if((opll->rythm_mode)&&(reg>=0x36)) + { + switch(reg) + { + case 0x37 : + setSlotVolume(opll->MOD(7), i<<2) ; + break ; + case 0x38 : + setSlotVolume(opll->MOD(8), i<<2) ; + break ; + } + } + else + { + setPatch(opll, reg-0x30, i) ; + } + + setVolume(opll, reg-0x30, v<<2) ; + UPDATE_ALL(opll->MOD(reg-0x30)) ; + UPDATE_ALL(opll->CAR(reg-0x30)) ; + break ; + + default: + break ; + + } + + opll->reg[reg] = (unsigned char)data ; + +} + +void OPLL_writeIO(OPLL *opll, uint32 adr, uint32 val) +{ + adr &= 0xff ; + if(adr == 0x7C) opll->adr = val ; + else if(adr == 0x7D) OPLL_writeReg(opll, opll->adr, val) ; +} diff --git a/virtuanessrc097-master/NES/ApuEX/emu2413/emu2413.h b/virtuanessrc097-master/NES/ApuEX/emu2413/emu2413.h new file mode 100644 index 00000000..c10558b7 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/emu2413/emu2413.h differ diff --git a/virtuanessrc097-master/NES/ApuEX/emu2413/vrc7tone.h b/virtuanessrc097-master/NES/ApuEX/emu2413/vrc7tone.h new file mode 100644 index 00000000..9060a759 Binary files /dev/null and b/virtuanessrc097-master/NES/ApuEX/emu2413/vrc7tone.h differ diff --git a/virtuanessrc097-master/NES/CPU.h b/virtuanessrc097-master/NES/CPU.h new file mode 100644 index 00000000..52971de2 Binary files /dev/null and b/virtuanessrc097-master/NES/CPU.h differ diff --git a/virtuanessrc097-master/NES/Cheat.h b/virtuanessrc097-master/NES/Cheat.h new file mode 100644 index 00000000..8d7b6e06 Binary files /dev/null and b/virtuanessrc097-master/NES/Cheat.h differ diff --git a/virtuanessrc097-master/NES/Cpu.cpp b/virtuanessrc097-master/NES/Cpu.cpp new file mode 100644 index 00000000..2c598ef0 Binary files /dev/null and b/virtuanessrc097-master/NES/Cpu.cpp differ diff --git a/virtuanessrc097-master/NES/IPS.cpp b/virtuanessrc097-master/NES/IPS.cpp new file mode 100644 index 00000000..da24781d Binary files /dev/null and b/virtuanessrc097-master/NES/IPS.cpp differ diff --git a/virtuanessrc097-master/NES/IPS.h b/virtuanessrc097-master/NES/IPS.h new file mode 100644 index 00000000..67ca52d1 Binary files /dev/null and b/virtuanessrc097-master/NES/IPS.h differ diff --git a/virtuanessrc097-master/NES/MMU.cpp b/virtuanessrc097-master/NES/MMU.cpp new file mode 100644 index 00000000..33d429b7 Binary files /dev/null and b/virtuanessrc097-master/NES/MMU.cpp differ diff --git a/virtuanessrc097-master/NES/MMU.h b/virtuanessrc097-master/NES/MMU.h new file mode 100644 index 00000000..c9049a46 Binary files /dev/null and b/virtuanessrc097-master/NES/MMU.h differ diff --git a/virtuanessrc097-master/NES/Mapper/EEPROM.h b/virtuanessrc097-master/NES/Mapper/EEPROM.h new file mode 100644 index 00000000..c48c2a51 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/EEPROM.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper.cpp b/virtuanessrc097-master/NES/Mapper/Mapper.cpp new file mode 100644 index 00000000..5d1042ea Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper.h b/virtuanessrc097-master/NES/Mapper/Mapper.h new file mode 100644 index 00000000..5d7ae6b2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper000.cpp b/virtuanessrc097-master/NES/Mapper/Mapper000.cpp new file mode 100644 index 00000000..1a06af68 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper000.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper000.h b/virtuanessrc097-master/NES/Mapper/Mapper000.h new file mode 100644 index 00000000..c1966ec3 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper000.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper001.cpp b/virtuanessrc097-master/NES/Mapper/Mapper001.cpp new file mode 100644 index 00000000..9c182f9c Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper001.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper001.h b/virtuanessrc097-master/NES/Mapper/Mapper001.h new file mode 100644 index 00000000..dbca37af Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper001.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper002.cpp b/virtuanessrc097-master/NES/Mapper/Mapper002.cpp new file mode 100644 index 00000000..a2330186 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper002.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper002.h b/virtuanessrc097-master/NES/Mapper/Mapper002.h new file mode 100644 index 00000000..0f8f402f Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper002.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper003.cpp b/virtuanessrc097-master/NES/Mapper/Mapper003.cpp new file mode 100644 index 00000000..0ef3c78d Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper003.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper003.h b/virtuanessrc097-master/NES/Mapper/Mapper003.h new file mode 100644 index 00000000..b5072b56 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper003.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper004.cpp b/virtuanessrc097-master/NES/Mapper/Mapper004.cpp new file mode 100644 index 00000000..6c09e75a Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper004.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper004.h b/virtuanessrc097-master/NES/Mapper/Mapper004.h new file mode 100644 index 00000000..f0273462 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper004.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper005.cpp b/virtuanessrc097-master/NES/Mapper/Mapper005.cpp new file mode 100644 index 00000000..190f0b52 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper005.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper005.h b/virtuanessrc097-master/NES/Mapper/Mapper005.h new file mode 100644 index 00000000..8f663936 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper005.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper006.cpp b/virtuanessrc097-master/NES/Mapper/Mapper006.cpp new file mode 100644 index 00000000..97f92e41 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper006.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper006.h b/virtuanessrc097-master/NES/Mapper/Mapper006.h new file mode 100644 index 00000000..0b500bf6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper006.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper007.cpp b/virtuanessrc097-master/NES/Mapper/Mapper007.cpp new file mode 100644 index 00000000..f974e42c Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper007.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper007.h b/virtuanessrc097-master/NES/Mapper/Mapper007.h new file mode 100644 index 00000000..21a69fd5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper007.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper008.cpp b/virtuanessrc097-master/NES/Mapper/Mapper008.cpp new file mode 100644 index 00000000..dd1f4ccb Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper008.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper008.h b/virtuanessrc097-master/NES/Mapper/Mapper008.h new file mode 100644 index 00000000..a87c7cea Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper008.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper009.cpp b/virtuanessrc097-master/NES/Mapper/Mapper009.cpp new file mode 100644 index 00000000..76c18de9 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper009.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper009.h b/virtuanessrc097-master/NES/Mapper/Mapper009.h new file mode 100644 index 00000000..faf91f54 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper009.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper010.cpp b/virtuanessrc097-master/NES/Mapper/Mapper010.cpp new file mode 100644 index 00000000..7d047169 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper010.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper010.h b/virtuanessrc097-master/NES/Mapper/Mapper010.h new file mode 100644 index 00000000..673b0fbd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper010.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper011.cpp b/virtuanessrc097-master/NES/Mapper/Mapper011.cpp new file mode 100644 index 00000000..56ac98fc Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper011.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper011.h b/virtuanessrc097-master/NES/Mapper/Mapper011.h new file mode 100644 index 00000000..70a7dd1a Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper011.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper012.cpp b/virtuanessrc097-master/NES/Mapper/Mapper012.cpp new file mode 100644 index 00000000..058cc9ae Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper012.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper012.h b/virtuanessrc097-master/NES/Mapper/Mapper012.h new file mode 100644 index 00000000..950a4074 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper012.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper013.cpp b/virtuanessrc097-master/NES/Mapper/Mapper013.cpp new file mode 100644 index 00000000..4244f2cd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper013.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper013.h b/virtuanessrc097-master/NES/Mapper/Mapper013.h new file mode 100644 index 00000000..0ead83a4 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper013.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper015.cpp b/virtuanessrc097-master/NES/Mapper/Mapper015.cpp new file mode 100644 index 00000000..8c9e32a5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper015.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper015.h b/virtuanessrc097-master/NES/Mapper/Mapper015.h new file mode 100644 index 00000000..5a79a8fd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper015.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper016.cpp b/virtuanessrc097-master/NES/Mapper/Mapper016.cpp new file mode 100644 index 00000000..71e1d432 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper016.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper016.h b/virtuanessrc097-master/NES/Mapper/Mapper016.h new file mode 100644 index 00000000..b09f70d9 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper016.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper017.cpp b/virtuanessrc097-master/NES/Mapper/Mapper017.cpp new file mode 100644 index 00000000..a354172b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper017.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper017.h b/virtuanessrc097-master/NES/Mapper/Mapper017.h new file mode 100644 index 00000000..57fd2b1d Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper017.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper018.cpp b/virtuanessrc097-master/NES/Mapper/Mapper018.cpp new file mode 100644 index 00000000..4451d6d6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper018.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper018.h b/virtuanessrc097-master/NES/Mapper/Mapper018.h new file mode 100644 index 00000000..c872a3a5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper018.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper019.cpp b/virtuanessrc097-master/NES/Mapper/Mapper019.cpp new file mode 100644 index 00000000..b1984379 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper019.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper019.h b/virtuanessrc097-master/NES/Mapper/Mapper019.h new file mode 100644 index 00000000..9f53be25 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper019.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper021.cpp b/virtuanessrc097-master/NES/Mapper/Mapper021.cpp new file mode 100644 index 00000000..70547eba Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper021.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper021.h b/virtuanessrc097-master/NES/Mapper/Mapper021.h new file mode 100644 index 00000000..9630c951 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper021.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper022.cpp b/virtuanessrc097-master/NES/Mapper/Mapper022.cpp new file mode 100644 index 00000000..e539aa4e Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper022.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper022.h b/virtuanessrc097-master/NES/Mapper/Mapper022.h new file mode 100644 index 00000000..455b6acc Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper022.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper023.cpp b/virtuanessrc097-master/NES/Mapper/Mapper023.cpp new file mode 100644 index 00000000..c7ff8ba1 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper023.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper023.h b/virtuanessrc097-master/NES/Mapper/Mapper023.h new file mode 100644 index 00000000..d1e84a66 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper023.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper024.cpp b/virtuanessrc097-master/NES/Mapper/Mapper024.cpp new file mode 100644 index 00000000..3d2b83df Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper024.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper024.h b/virtuanessrc097-master/NES/Mapper/Mapper024.h new file mode 100644 index 00000000..6807a6fb Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper024.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper025.cpp b/virtuanessrc097-master/NES/Mapper/Mapper025.cpp new file mode 100644 index 00000000..3340ccd5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper025.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper025.h b/virtuanessrc097-master/NES/Mapper/Mapper025.h new file mode 100644 index 00000000..6eb1d09a Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper025.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper026.cpp b/virtuanessrc097-master/NES/Mapper/Mapper026.cpp new file mode 100644 index 00000000..29d85216 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper026.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper026.h b/virtuanessrc097-master/NES/Mapper/Mapper026.h new file mode 100644 index 00000000..82d60938 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper026.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper027.cpp b/virtuanessrc097-master/NES/Mapper/Mapper027.cpp new file mode 100644 index 00000000..5b44c619 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper027.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper027.h b/virtuanessrc097-master/NES/Mapper/Mapper027.h new file mode 100644 index 00000000..34a5ae7d Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper027.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper032.cpp b/virtuanessrc097-master/NES/Mapper/Mapper032.cpp new file mode 100644 index 00000000..ca26dc46 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper032.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper032.h b/virtuanessrc097-master/NES/Mapper/Mapper032.h new file mode 100644 index 00000000..8e645d13 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper032.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper033.cpp b/virtuanessrc097-master/NES/Mapper/Mapper033.cpp new file mode 100644 index 00000000..b4a6a18a Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper033.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper033.h b/virtuanessrc097-master/NES/Mapper/Mapper033.h new file mode 100644 index 00000000..9e8efe2c Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper033.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper034.cpp b/virtuanessrc097-master/NES/Mapper/Mapper034.cpp new file mode 100644 index 00000000..7746ff44 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper034.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper034.h b/virtuanessrc097-master/NES/Mapper/Mapper034.h new file mode 100644 index 00000000..e985f3e2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper034.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper040.cpp b/virtuanessrc097-master/NES/Mapper/Mapper040.cpp new file mode 100644 index 00000000..ed8b98f9 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper040.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper040.h b/virtuanessrc097-master/NES/Mapper/Mapper040.h new file mode 100644 index 00000000..4043b5f0 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper040.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper041.cpp b/virtuanessrc097-master/NES/Mapper/Mapper041.cpp new file mode 100644 index 00000000..fb91edb4 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper041.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper041.h b/virtuanessrc097-master/NES/Mapper/Mapper041.h new file mode 100644 index 00000000..69b0e7f7 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper041.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper042.cpp b/virtuanessrc097-master/NES/Mapper/Mapper042.cpp new file mode 100644 index 00000000..90ea3f38 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper042.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper042.h b/virtuanessrc097-master/NES/Mapper/Mapper042.h new file mode 100644 index 00000000..2462611a Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper042.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper043.cpp b/virtuanessrc097-master/NES/Mapper/Mapper043.cpp new file mode 100644 index 00000000..78e36fa3 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper043.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper043.h b/virtuanessrc097-master/NES/Mapper/Mapper043.h new file mode 100644 index 00000000..d0888dac Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper043.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper044.cpp b/virtuanessrc097-master/NES/Mapper/Mapper044.cpp new file mode 100644 index 00000000..9bfd6e47 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper044.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper044.h b/virtuanessrc097-master/NES/Mapper/Mapper044.h new file mode 100644 index 00000000..d8c5aba6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper044.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper045.cpp b/virtuanessrc097-master/NES/Mapper/Mapper045.cpp new file mode 100644 index 00000000..98e6f066 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper045.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper045.h b/virtuanessrc097-master/NES/Mapper/Mapper045.h new file mode 100644 index 00000000..7069ad79 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper045.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper046.cpp b/virtuanessrc097-master/NES/Mapper/Mapper046.cpp new file mode 100644 index 00000000..3cc543b6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper046.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper046.h b/virtuanessrc097-master/NES/Mapper/Mapper046.h new file mode 100644 index 00000000..a1eef065 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper046.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper047.cpp b/virtuanessrc097-master/NES/Mapper/Mapper047.cpp new file mode 100644 index 00000000..fac36ce7 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper047.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper047.h b/virtuanessrc097-master/NES/Mapper/Mapper047.h new file mode 100644 index 00000000..4dfad0b6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper047.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper048.cpp b/virtuanessrc097-master/NES/Mapper/Mapper048.cpp new file mode 100644 index 00000000..bf8b6183 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper048.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper048.h b/virtuanessrc097-master/NES/Mapper/Mapper048.h new file mode 100644 index 00000000..c277e264 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper048.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper050.cpp b/virtuanessrc097-master/NES/Mapper/Mapper050.cpp new file mode 100644 index 00000000..b4af6c66 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper050.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper050.h b/virtuanessrc097-master/NES/Mapper/Mapper050.h new file mode 100644 index 00000000..bbf697cf Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper050.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper051.cpp b/virtuanessrc097-master/NES/Mapper/Mapper051.cpp new file mode 100644 index 00000000..3ae50aa5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper051.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper051.h b/virtuanessrc097-master/NES/Mapper/Mapper051.h new file mode 100644 index 00000000..0e611e6b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper051.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper057.cpp b/virtuanessrc097-master/NES/Mapper/Mapper057.cpp new file mode 100644 index 00000000..ccf84825 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper057.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper057.h b/virtuanessrc097-master/NES/Mapper/Mapper057.h new file mode 100644 index 00000000..50fd44a4 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper057.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper058.cpp b/virtuanessrc097-master/NES/Mapper/Mapper058.cpp new file mode 100644 index 00000000..01c04d4d Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper058.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper058.h b/virtuanessrc097-master/NES/Mapper/Mapper058.h new file mode 100644 index 00000000..f3a1425f Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper058.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper060.cpp b/virtuanessrc097-master/NES/Mapper/Mapper060.cpp new file mode 100644 index 00000000..57710a7e Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper060.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper060.h b/virtuanessrc097-master/NES/Mapper/Mapper060.h new file mode 100644 index 00000000..ea7703d4 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper060.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper061.cpp b/virtuanessrc097-master/NES/Mapper/Mapper061.cpp new file mode 100644 index 00000000..c934f6ca Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper061.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper061.h b/virtuanessrc097-master/NES/Mapper/Mapper061.h new file mode 100644 index 00000000..04078c02 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper061.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper062.cpp b/virtuanessrc097-master/NES/Mapper/Mapper062.cpp new file mode 100644 index 00000000..ba6ffdd3 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper062.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper062.h b/virtuanessrc097-master/NES/Mapper/Mapper062.h new file mode 100644 index 00000000..e417d0f0 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper062.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper064.cpp b/virtuanessrc097-master/NES/Mapper/Mapper064.cpp new file mode 100644 index 00000000..bdc3f1b9 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper064.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper064.h b/virtuanessrc097-master/NES/Mapper/Mapper064.h new file mode 100644 index 00000000..da7831dc Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper064.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper065.cpp b/virtuanessrc097-master/NES/Mapper/Mapper065.cpp new file mode 100644 index 00000000..9e5e100c Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper065.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper065.h b/virtuanessrc097-master/NES/Mapper/Mapper065.h new file mode 100644 index 00000000..f4dc23c8 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper065.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper066.cpp b/virtuanessrc097-master/NES/Mapper/Mapper066.cpp new file mode 100644 index 00000000..76f52927 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper066.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper066.h b/virtuanessrc097-master/NES/Mapper/Mapper066.h new file mode 100644 index 00000000..4c7c704e Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper066.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper067.cpp b/virtuanessrc097-master/NES/Mapper/Mapper067.cpp new file mode 100644 index 00000000..d0e1c25b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper067.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper067.h b/virtuanessrc097-master/NES/Mapper/Mapper067.h new file mode 100644 index 00000000..90ead440 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper067.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper068.cpp b/virtuanessrc097-master/NES/Mapper/Mapper068.cpp new file mode 100644 index 00000000..19aaa923 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper068.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper068.h b/virtuanessrc097-master/NES/Mapper/Mapper068.h new file mode 100644 index 00000000..e65078bd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper068.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper069.cpp b/virtuanessrc097-master/NES/Mapper/Mapper069.cpp new file mode 100644 index 00000000..a10df19c Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper069.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper069.h b/virtuanessrc097-master/NES/Mapper/Mapper069.h new file mode 100644 index 00000000..9b0b86d5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper069.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper070.cpp b/virtuanessrc097-master/NES/Mapper/Mapper070.cpp new file mode 100644 index 00000000..160c78c6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper070.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper070.h b/virtuanessrc097-master/NES/Mapper/Mapper070.h new file mode 100644 index 00000000..17d6ef3c Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper070.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper071.cpp b/virtuanessrc097-master/NES/Mapper/Mapper071.cpp new file mode 100644 index 00000000..8b5bd8d7 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper071.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper071.h b/virtuanessrc097-master/NES/Mapper/Mapper071.h new file mode 100644 index 00000000..76e1aebf Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper071.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper072.cpp b/virtuanessrc097-master/NES/Mapper/Mapper072.cpp new file mode 100644 index 00000000..71119648 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper072.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper072.h b/virtuanessrc097-master/NES/Mapper/Mapper072.h new file mode 100644 index 00000000..bbebd914 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper072.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper073.cpp b/virtuanessrc097-master/NES/Mapper/Mapper073.cpp new file mode 100644 index 00000000..4c05d7d6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper073.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper073.h b/virtuanessrc097-master/NES/Mapper/Mapper073.h new file mode 100644 index 00000000..6b241959 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper073.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper074.cpp b/virtuanessrc097-master/NES/Mapper/Mapper074.cpp new file mode 100644 index 00000000..57760681 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper074.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper074.h b/virtuanessrc097-master/NES/Mapper/Mapper074.h new file mode 100644 index 00000000..821b9260 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper074.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper075.cpp b/virtuanessrc097-master/NES/Mapper/Mapper075.cpp new file mode 100644 index 00000000..e327ac43 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper075.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper075.h b/virtuanessrc097-master/NES/Mapper/Mapper075.h new file mode 100644 index 00000000..b18a7c59 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper075.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper076.cpp b/virtuanessrc097-master/NES/Mapper/Mapper076.cpp new file mode 100644 index 00000000..2458baa3 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper076.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper076.h b/virtuanessrc097-master/NES/Mapper/Mapper076.h new file mode 100644 index 00000000..21c29e09 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper076.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper077.cpp b/virtuanessrc097-master/NES/Mapper/Mapper077.cpp new file mode 100644 index 00000000..a523ee20 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper077.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper077.h b/virtuanessrc097-master/NES/Mapper/Mapper077.h new file mode 100644 index 00000000..ba97fcd2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper077.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper078.cpp b/virtuanessrc097-master/NES/Mapper/Mapper078.cpp new file mode 100644 index 00000000..867ee965 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper078.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper078.h b/virtuanessrc097-master/NES/Mapper/Mapper078.h new file mode 100644 index 00000000..a97c1f14 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper078.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper079.cpp b/virtuanessrc097-master/NES/Mapper/Mapper079.cpp new file mode 100644 index 00000000..9edec562 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper079.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper079.h b/virtuanessrc097-master/NES/Mapper/Mapper079.h new file mode 100644 index 00000000..ff744378 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper079.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper080.cpp b/virtuanessrc097-master/NES/Mapper/Mapper080.cpp new file mode 100644 index 00000000..ff746bf1 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper080.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper080.h b/virtuanessrc097-master/NES/Mapper/Mapper080.h new file mode 100644 index 00000000..d412d7cd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper080.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper082.cpp b/virtuanessrc097-master/NES/Mapper/Mapper082.cpp new file mode 100644 index 00000000..b90b0b68 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper082.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper082.h b/virtuanessrc097-master/NES/Mapper/Mapper082.h new file mode 100644 index 00000000..e9088eaa Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper082.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper083.cpp b/virtuanessrc097-master/NES/Mapper/Mapper083.cpp new file mode 100644 index 00000000..7caa7479 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper083.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper083.h b/virtuanessrc097-master/NES/Mapper/Mapper083.h new file mode 100644 index 00000000..d4fe2b47 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper083.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper085.cpp b/virtuanessrc097-master/NES/Mapper/Mapper085.cpp new file mode 100644 index 00000000..32537135 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper085.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper085.h b/virtuanessrc097-master/NES/Mapper/Mapper085.h new file mode 100644 index 00000000..59928c43 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper085.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper086.cpp b/virtuanessrc097-master/NES/Mapper/Mapper086.cpp new file mode 100644 index 00000000..2ca596e1 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper086.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper086.h b/virtuanessrc097-master/NES/Mapper/Mapper086.h new file mode 100644 index 00000000..8c837f19 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper086.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper087.cpp b/virtuanessrc097-master/NES/Mapper/Mapper087.cpp new file mode 100644 index 00000000..0edcd138 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper087.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper087.h b/virtuanessrc097-master/NES/Mapper/Mapper087.h new file mode 100644 index 00000000..a6e36ed7 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper087.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper088.cpp b/virtuanessrc097-master/NES/Mapper/Mapper088.cpp new file mode 100644 index 00000000..251bc5f0 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper088.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper088.h b/virtuanessrc097-master/NES/Mapper/Mapper088.h new file mode 100644 index 00000000..8a36d983 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper088.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper089.cpp b/virtuanessrc097-master/NES/Mapper/Mapper089.cpp new file mode 100644 index 00000000..36fd6040 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper089.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper089.h b/virtuanessrc097-master/NES/Mapper/Mapper089.h new file mode 100644 index 00000000..564bb406 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper089.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper090.cpp b/virtuanessrc097-master/NES/Mapper/Mapper090.cpp new file mode 100644 index 00000000..688389a2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper090.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper090.h b/virtuanessrc097-master/NES/Mapper/Mapper090.h new file mode 100644 index 00000000..0e9e883b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper090.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper091.cpp b/virtuanessrc097-master/NES/Mapper/Mapper091.cpp new file mode 100644 index 00000000..2b6e7602 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper091.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper091.h b/virtuanessrc097-master/NES/Mapper/Mapper091.h new file mode 100644 index 00000000..74008189 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper091.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper092.cpp b/virtuanessrc097-master/NES/Mapper/Mapper092.cpp new file mode 100644 index 00000000..6e54e364 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper092.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper092.h b/virtuanessrc097-master/NES/Mapper/Mapper092.h new file mode 100644 index 00000000..3ddb21f5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper092.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper093.cpp b/virtuanessrc097-master/NES/Mapper/Mapper093.cpp new file mode 100644 index 00000000..2e0c0389 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper093.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper093.h b/virtuanessrc097-master/NES/Mapper/Mapper093.h new file mode 100644 index 00000000..4037b3cc Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper093.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper094.cpp b/virtuanessrc097-master/NES/Mapper/Mapper094.cpp new file mode 100644 index 00000000..277256e2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper094.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper094.h b/virtuanessrc097-master/NES/Mapper/Mapper094.h new file mode 100644 index 00000000..0ba086dd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper094.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper095.cpp b/virtuanessrc097-master/NES/Mapper/Mapper095.cpp new file mode 100644 index 00000000..2112e5f4 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper095.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper095.h b/virtuanessrc097-master/NES/Mapper/Mapper095.h new file mode 100644 index 00000000..e93f56e6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper095.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper096.cpp b/virtuanessrc097-master/NES/Mapper/Mapper096.cpp new file mode 100644 index 00000000..48c9dbe3 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper096.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper096.h b/virtuanessrc097-master/NES/Mapper/Mapper096.h new file mode 100644 index 00000000..fffc0f66 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper096.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper097.cpp b/virtuanessrc097-master/NES/Mapper/Mapper097.cpp new file mode 100644 index 00000000..a6131b11 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper097.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper097.h b/virtuanessrc097-master/NES/Mapper/Mapper097.h new file mode 100644 index 00000000..12268809 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper097.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper099.cpp b/virtuanessrc097-master/NES/Mapper/Mapper099.cpp new file mode 100644 index 00000000..16b7b438 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper099.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper099.h b/virtuanessrc097-master/NES/Mapper/Mapper099.h new file mode 100644 index 00000000..90667bd2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper099.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper100.cpp b/virtuanessrc097-master/NES/Mapper/Mapper100.cpp new file mode 100644 index 00000000..29a64604 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper100.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper100.h b/virtuanessrc097-master/NES/Mapper/Mapper100.h new file mode 100644 index 00000000..03e1704a Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper100.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper101.cpp b/virtuanessrc097-master/NES/Mapper/Mapper101.cpp new file mode 100644 index 00000000..0e7d39c2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper101.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper101.h b/virtuanessrc097-master/NES/Mapper/Mapper101.h new file mode 100644 index 00000000..668878e6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper101.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper105.cpp b/virtuanessrc097-master/NES/Mapper/Mapper105.cpp new file mode 100644 index 00000000..1d0bfd10 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper105.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper105.h b/virtuanessrc097-master/NES/Mapper/Mapper105.h new file mode 100644 index 00000000..1a537801 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper105.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper107.cpp b/virtuanessrc097-master/NES/Mapper/Mapper107.cpp new file mode 100644 index 00000000..7a64b8d2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper107.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper107.h b/virtuanessrc097-master/NES/Mapper/Mapper107.h new file mode 100644 index 00000000..5313a12b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper107.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper108.cpp b/virtuanessrc097-master/NES/Mapper/Mapper108.cpp new file mode 100644 index 00000000..28f12ac8 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper108.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper108.h b/virtuanessrc097-master/NES/Mapper/Mapper108.h new file mode 100644 index 00000000..9d4f0bff Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper108.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper109.cpp b/virtuanessrc097-master/NES/Mapper/Mapper109.cpp new file mode 100644 index 00000000..ebf47e03 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper109.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper109.h b/virtuanessrc097-master/NES/Mapper/Mapper109.h new file mode 100644 index 00000000..c00da590 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper109.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper110.cpp b/virtuanessrc097-master/NES/Mapper/Mapper110.cpp new file mode 100644 index 00000000..8586a435 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper110.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper110.h b/virtuanessrc097-master/NES/Mapper/Mapper110.h new file mode 100644 index 00000000..2d745885 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper110.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper112.cpp b/virtuanessrc097-master/NES/Mapper/Mapper112.cpp new file mode 100644 index 00000000..d7f08483 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper112.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper112.h b/virtuanessrc097-master/NES/Mapper/Mapper112.h new file mode 100644 index 00000000..0a9d6f29 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper112.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper113.cpp b/virtuanessrc097-master/NES/Mapper/Mapper113.cpp new file mode 100644 index 00000000..f058d1c6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper113.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper113.h b/virtuanessrc097-master/NES/Mapper/Mapper113.h new file mode 100644 index 00000000..18d755fb Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper113.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper114.cpp b/virtuanessrc097-master/NES/Mapper/Mapper114.cpp new file mode 100644 index 00000000..da476c6c Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper114.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper114.h b/virtuanessrc097-master/NES/Mapper/Mapper114.h new file mode 100644 index 00000000..8b5c8f67 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper114.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper115.cpp b/virtuanessrc097-master/NES/Mapper/Mapper115.cpp new file mode 100644 index 00000000..b0f0724c Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper115.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper115.h b/virtuanessrc097-master/NES/Mapper/Mapper115.h new file mode 100644 index 00000000..23d6f037 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper115.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper116.cpp b/virtuanessrc097-master/NES/Mapper/Mapper116.cpp new file mode 100644 index 00000000..d1119f65 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper116.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper116.h b/virtuanessrc097-master/NES/Mapper/Mapper116.h new file mode 100644 index 00000000..6a3adaf2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper116.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper117.cpp b/virtuanessrc097-master/NES/Mapper/Mapper117.cpp new file mode 100644 index 00000000..b1de9762 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper117.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper117.h b/virtuanessrc097-master/NES/Mapper/Mapper117.h new file mode 100644 index 00000000..d9cf7f66 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper117.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper118.cpp b/virtuanessrc097-master/NES/Mapper/Mapper118.cpp new file mode 100644 index 00000000..b417e776 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper118.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper118.h b/virtuanessrc097-master/NES/Mapper/Mapper118.h new file mode 100644 index 00000000..bd5b7baf Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper118.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper119.cpp b/virtuanessrc097-master/NES/Mapper/Mapper119.cpp new file mode 100644 index 00000000..6600a0ee Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper119.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper119.h b/virtuanessrc097-master/NES/Mapper/Mapper119.h new file mode 100644 index 00000000..196f6a68 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper119.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper122.cpp b/virtuanessrc097-master/NES/Mapper/Mapper122.cpp new file mode 100644 index 00000000..513ec8cd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper122.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper122.h b/virtuanessrc097-master/NES/Mapper/Mapper122.h new file mode 100644 index 00000000..af2b1213 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper122.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper133.cpp b/virtuanessrc097-master/NES/Mapper/Mapper133.cpp new file mode 100644 index 00000000..84a20549 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper133.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper133.h b/virtuanessrc097-master/NES/Mapper/Mapper133.h new file mode 100644 index 00000000..9ed88282 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper133.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper134.cpp b/virtuanessrc097-master/NES/Mapper/Mapper134.cpp new file mode 100644 index 00000000..8df1c6aa Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper134.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper134.h b/virtuanessrc097-master/NES/Mapper/Mapper134.h new file mode 100644 index 00000000..aeeb145e Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper134.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper135.cpp b/virtuanessrc097-master/NES/Mapper/Mapper135.cpp new file mode 100644 index 00000000..0f229170 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper135.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper135.h b/virtuanessrc097-master/NES/Mapper/Mapper135.h new file mode 100644 index 00000000..efe5f0ce Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper135.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper140.cpp b/virtuanessrc097-master/NES/Mapper/Mapper140.cpp new file mode 100644 index 00000000..e8bbec92 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper140.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper140.h b/virtuanessrc097-master/NES/Mapper/Mapper140.h new file mode 100644 index 00000000..b15c772b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper140.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper142.cpp b/virtuanessrc097-master/NES/Mapper/Mapper142.cpp new file mode 100644 index 00000000..d348d3b0 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper142.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper142.h b/virtuanessrc097-master/NES/Mapper/Mapper142.h new file mode 100644 index 00000000..38152d47 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper142.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper151.cpp b/virtuanessrc097-master/NES/Mapper/Mapper151.cpp new file mode 100644 index 00000000..8c63e5bd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper151.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper151.h b/virtuanessrc097-master/NES/Mapper/Mapper151.h new file mode 100644 index 00000000..0bb6b1cd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper151.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper160.cpp b/virtuanessrc097-master/NES/Mapper/Mapper160.cpp new file mode 100644 index 00000000..04459fbf Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper160.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper160.h b/virtuanessrc097-master/NES/Mapper/Mapper160.h new file mode 100644 index 00000000..2ddc77b8 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper160.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper164.cpp b/virtuanessrc097-master/NES/Mapper/Mapper164.cpp new file mode 100644 index 00000000..ac77aaf8 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper164.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper164.h b/virtuanessrc097-master/NES/Mapper/Mapper164.h new file mode 100644 index 00000000..03fb9594 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper164.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper165.cpp b/virtuanessrc097-master/NES/Mapper/Mapper165.cpp new file mode 100644 index 00000000..70e7e9b9 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper165.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper165.h b/virtuanessrc097-master/NES/Mapper/Mapper165.h new file mode 100644 index 00000000..a146d022 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper165.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper167.cpp b/virtuanessrc097-master/NES/Mapper/Mapper167.cpp new file mode 100644 index 00000000..8a91abf9 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper167.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper167.h b/virtuanessrc097-master/NES/Mapper/Mapper167.h new file mode 100644 index 00000000..1221ca01 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper167.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper180.cpp b/virtuanessrc097-master/NES/Mapper/Mapper180.cpp new file mode 100644 index 00000000..1160a3bd Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper180.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper180.h b/virtuanessrc097-master/NES/Mapper/Mapper180.h new file mode 100644 index 00000000..01b3ac49 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper180.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper181.cpp b/virtuanessrc097-master/NES/Mapper/Mapper181.cpp new file mode 100644 index 00000000..d7f21b53 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper181.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper181.h b/virtuanessrc097-master/NES/Mapper/Mapper181.h new file mode 100644 index 00000000..4550016c Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper181.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper182.cpp b/virtuanessrc097-master/NES/Mapper/Mapper182.cpp new file mode 100644 index 00000000..9abe2448 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper182.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper182.h b/virtuanessrc097-master/NES/Mapper/Mapper182.h new file mode 100644 index 00000000..59d2d784 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper182.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper183.cpp b/virtuanessrc097-master/NES/Mapper/Mapper183.cpp new file mode 100644 index 00000000..28e53217 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper183.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper183.h b/virtuanessrc097-master/NES/Mapper/Mapper183.h new file mode 100644 index 00000000..ff192227 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper183.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper185.cpp b/virtuanessrc097-master/NES/Mapper/Mapper185.cpp new file mode 100644 index 00000000..cb39766b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper185.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper185.h b/virtuanessrc097-master/NES/Mapper/Mapper185.h new file mode 100644 index 00000000..0c8fed21 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper185.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper187.cpp b/virtuanessrc097-master/NES/Mapper/Mapper187.cpp new file mode 100644 index 00000000..b0e5aeb8 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper187.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper187.h b/virtuanessrc097-master/NES/Mapper/Mapper187.h new file mode 100644 index 00000000..65df9546 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper187.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper188.cpp b/virtuanessrc097-master/NES/Mapper/Mapper188.cpp new file mode 100644 index 00000000..d0821457 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper188.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper188.h b/virtuanessrc097-master/NES/Mapper/Mapper188.h new file mode 100644 index 00000000..1f97b843 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper188.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper189.cpp b/virtuanessrc097-master/NES/Mapper/Mapper189.cpp new file mode 100644 index 00000000..ee8917b8 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper189.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper189.h b/virtuanessrc097-master/NES/Mapper/Mapper189.h new file mode 100644 index 00000000..a13de7fc Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper189.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper190.cpp b/virtuanessrc097-master/NES/Mapper/Mapper190.cpp new file mode 100644 index 00000000..3061eb5b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper190.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper190.h b/virtuanessrc097-master/NES/Mapper/Mapper190.h new file mode 100644 index 00000000..6e1b733e Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper190.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper191.cpp b/virtuanessrc097-master/NES/Mapper/Mapper191.cpp new file mode 100644 index 00000000..166ba3eb Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper191.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper191.h b/virtuanessrc097-master/NES/Mapper/Mapper191.h new file mode 100644 index 00000000..d62675a6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper191.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper193.cpp b/virtuanessrc097-master/NES/Mapper/Mapper193.cpp new file mode 100644 index 00000000..538aaa64 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper193.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper193.h b/virtuanessrc097-master/NES/Mapper/Mapper193.h new file mode 100644 index 00000000..6156b0b0 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper193.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper194.cpp b/virtuanessrc097-master/NES/Mapper/Mapper194.cpp new file mode 100644 index 00000000..49f9ca15 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper194.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper194.h b/virtuanessrc097-master/NES/Mapper/Mapper194.h new file mode 100644 index 00000000..856331c3 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper194.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper198.cpp b/virtuanessrc097-master/NES/Mapper/Mapper198.cpp new file mode 100644 index 00000000..2c28c069 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper198.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper198.h b/virtuanessrc097-master/NES/Mapper/Mapper198.h new file mode 100644 index 00000000..4ec47a32 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper198.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper200.cpp b/virtuanessrc097-master/NES/Mapper/Mapper200.cpp new file mode 100644 index 00000000..53c187ed Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper200.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper200.h b/virtuanessrc097-master/NES/Mapper/Mapper200.h new file mode 100644 index 00000000..27ccb112 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper200.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper201.cpp b/virtuanessrc097-master/NES/Mapper/Mapper201.cpp new file mode 100644 index 00000000..a1697a09 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper201.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper201.h b/virtuanessrc097-master/NES/Mapper/Mapper201.h new file mode 100644 index 00000000..06f54d10 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper201.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper202.cpp b/virtuanessrc097-master/NES/Mapper/Mapper202.cpp new file mode 100644 index 00000000..644ff277 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper202.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper202.h b/virtuanessrc097-master/NES/Mapper/Mapper202.h new file mode 100644 index 00000000..43c8ae0d Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper202.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper222.cpp b/virtuanessrc097-master/NES/Mapper/Mapper222.cpp new file mode 100644 index 00000000..2f773ef8 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper222.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper222.h b/virtuanessrc097-master/NES/Mapper/Mapper222.h new file mode 100644 index 00000000..9c581812 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper222.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper225.cpp b/virtuanessrc097-master/NES/Mapper/Mapper225.cpp new file mode 100644 index 00000000..f1755eea Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper225.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper225.h b/virtuanessrc097-master/NES/Mapper/Mapper225.h new file mode 100644 index 00000000..1bcaff77 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper225.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper226.cpp b/virtuanessrc097-master/NES/Mapper/Mapper226.cpp new file mode 100644 index 00000000..298db315 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper226.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper226.h b/virtuanessrc097-master/NES/Mapper/Mapper226.h new file mode 100644 index 00000000..c17f212d Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper226.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper227.cpp b/virtuanessrc097-master/NES/Mapper/Mapper227.cpp new file mode 100644 index 00000000..e748a493 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper227.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper227.h b/virtuanessrc097-master/NES/Mapper/Mapper227.h new file mode 100644 index 00000000..2e59dcec Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper227.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper228.cpp b/virtuanessrc097-master/NES/Mapper/Mapper228.cpp new file mode 100644 index 00000000..558224d2 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper228.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper228.h b/virtuanessrc097-master/NES/Mapper/Mapper228.h new file mode 100644 index 00000000..0e720f47 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper228.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper229.cpp b/virtuanessrc097-master/NES/Mapper/Mapper229.cpp new file mode 100644 index 00000000..da91ce55 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper229.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper229.h b/virtuanessrc097-master/NES/Mapper/Mapper229.h new file mode 100644 index 00000000..d124fbd4 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper229.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper230.cpp b/virtuanessrc097-master/NES/Mapper/Mapper230.cpp new file mode 100644 index 00000000..93ff7037 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper230.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper230.h b/virtuanessrc097-master/NES/Mapper/Mapper230.h new file mode 100644 index 00000000..a79f4711 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper230.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper231.cpp b/virtuanessrc097-master/NES/Mapper/Mapper231.cpp new file mode 100644 index 00000000..f4096136 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper231.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper231.h b/virtuanessrc097-master/NES/Mapper/Mapper231.h new file mode 100644 index 00000000..95cb9761 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper231.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper232.cpp b/virtuanessrc097-master/NES/Mapper/Mapper232.cpp new file mode 100644 index 00000000..5db96744 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper232.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper232.h b/virtuanessrc097-master/NES/Mapper/Mapper232.h new file mode 100644 index 00000000..25bcb50a Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper232.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper233.cpp b/virtuanessrc097-master/NES/Mapper/Mapper233.cpp new file mode 100644 index 00000000..6947de06 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper233.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper233.h b/virtuanessrc097-master/NES/Mapper/Mapper233.h new file mode 100644 index 00000000..eb0b77c5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper233.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper234.cpp b/virtuanessrc097-master/NES/Mapper/Mapper234.cpp new file mode 100644 index 00000000..73e60d0a Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper234.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper234.h b/virtuanessrc097-master/NES/Mapper/Mapper234.h new file mode 100644 index 00000000..bdea659f Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper234.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper235.cpp b/virtuanessrc097-master/NES/Mapper/Mapper235.cpp new file mode 100644 index 00000000..a6c520ee Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper235.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper235.h b/virtuanessrc097-master/NES/Mapper/Mapper235.h new file mode 100644 index 00000000..12ae6336 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper235.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper236.cpp b/virtuanessrc097-master/NES/Mapper/Mapper236.cpp new file mode 100644 index 00000000..e773c4fa Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper236.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper236.h b/virtuanessrc097-master/NES/Mapper/Mapper236.h new file mode 100644 index 00000000..cb644f83 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper236.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper240.cpp b/virtuanessrc097-master/NES/Mapper/Mapper240.cpp new file mode 100644 index 00000000..d191dbb1 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper240.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper240.h b/virtuanessrc097-master/NES/Mapper/Mapper240.h new file mode 100644 index 00000000..29917e0b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper240.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper241.cpp b/virtuanessrc097-master/NES/Mapper/Mapper241.cpp new file mode 100644 index 00000000..12361c39 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper241.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper241.h b/virtuanessrc097-master/NES/Mapper/Mapper241.h new file mode 100644 index 00000000..baa70ea0 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper241.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper242.cpp b/virtuanessrc097-master/NES/Mapper/Mapper242.cpp new file mode 100644 index 00000000..1677b05b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper242.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper242.h b/virtuanessrc097-master/NES/Mapper/Mapper242.h new file mode 100644 index 00000000..5ea26012 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper242.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper243.cpp b/virtuanessrc097-master/NES/Mapper/Mapper243.cpp new file mode 100644 index 00000000..131c3537 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper243.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper243.h b/virtuanessrc097-master/NES/Mapper/Mapper243.h new file mode 100644 index 00000000..18a06200 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper243.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper244.cpp b/virtuanessrc097-master/NES/Mapper/Mapper244.cpp new file mode 100644 index 00000000..735de6f3 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper244.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper244.h b/virtuanessrc097-master/NES/Mapper/Mapper244.h new file mode 100644 index 00000000..012f0fd8 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper244.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper245.cpp b/virtuanessrc097-master/NES/Mapper/Mapper245.cpp new file mode 100644 index 00000000..7967c98d Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper245.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper245.h b/virtuanessrc097-master/NES/Mapper/Mapper245.h new file mode 100644 index 00000000..10e2f321 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper245.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper246.cpp b/virtuanessrc097-master/NES/Mapper/Mapper246.cpp new file mode 100644 index 00000000..f389f3a1 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper246.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper246.h b/virtuanessrc097-master/NES/Mapper/Mapper246.h new file mode 100644 index 00000000..0213914e Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper246.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper248.cpp b/virtuanessrc097-master/NES/Mapper/Mapper248.cpp new file mode 100644 index 00000000..a7351bfc Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper248.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper248.h b/virtuanessrc097-master/NES/Mapper/Mapper248.h new file mode 100644 index 00000000..17807e55 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper248.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper249.cpp b/virtuanessrc097-master/NES/Mapper/Mapper249.cpp new file mode 100644 index 00000000..32fea76b Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper249.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper249.h b/virtuanessrc097-master/NES/Mapper/Mapper249.h new file mode 100644 index 00000000..831d0f89 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper249.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper251.cpp b/virtuanessrc097-master/NES/Mapper/Mapper251.cpp new file mode 100644 index 00000000..75861559 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper251.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper251.h b/virtuanessrc097-master/NES/Mapper/Mapper251.h new file mode 100644 index 00000000..919e0aa5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper251.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper252.cpp b/virtuanessrc097-master/NES/Mapper/Mapper252.cpp new file mode 100644 index 00000000..48b3536e Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper252.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper252.h b/virtuanessrc097-master/NES/Mapper/Mapper252.h new file mode 100644 index 00000000..1375dc84 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper252.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper254.cpp b/virtuanessrc097-master/NES/Mapper/Mapper254.cpp new file mode 100644 index 00000000..672f9cea Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper254.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper254.h b/virtuanessrc097-master/NES/Mapper/Mapper254.h new file mode 100644 index 00000000..e175c921 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper254.h differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper255.cpp b/virtuanessrc097-master/NES/Mapper/Mapper255.cpp new file mode 100644 index 00000000..7d189bbe Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper255.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/Mapper255.h b/virtuanessrc097-master/NES/Mapper/Mapper255.h new file mode 100644 index 00000000..c69315f5 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/Mapper255.h differ diff --git a/virtuanessrc097-master/NES/Mapper/MapperFDS.cpp b/virtuanessrc097-master/NES/Mapper/MapperFDS.cpp new file mode 100644 index 00000000..46993124 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/MapperFDS.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/MapperFDS.h b/virtuanessrc097-master/NES/Mapper/MapperFDS.h new file mode 100644 index 00000000..55c2cf0e Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/MapperFDS.h differ diff --git a/virtuanessrc097-master/NES/Mapper/MapperFactory.cpp b/virtuanessrc097-master/NES/Mapper/MapperFactory.cpp new file mode 100644 index 00000000..23104b93 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/MapperFactory.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/MapperNSF.cpp b/virtuanessrc097-master/NES/Mapper/MapperNSF.cpp new file mode 100644 index 00000000..c672ea10 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/MapperNSF.cpp differ diff --git a/virtuanessrc097-master/NES/Mapper/MapperNSF.h b/virtuanessrc097-master/NES/Mapper/MapperNSF.h new file mode 100644 index 00000000..8def35b6 Binary files /dev/null and b/virtuanessrc097-master/NES/Mapper/MapperNSF.h differ diff --git a/virtuanessrc097-master/NES/Nes.cpp b/virtuanessrc097-master/NES/Nes.cpp new file mode 100644 index 00000000..5da99b57 Binary files /dev/null and b/virtuanessrc097-master/NES/Nes.cpp differ diff --git a/virtuanessrc097-master/NES/Nes.h b/virtuanessrc097-master/NES/Nes.h new file mode 100644 index 00000000..90acdbdd Binary files /dev/null and b/virtuanessrc097-master/NES/Nes.h differ diff --git a/virtuanessrc097-master/NES/PAD.cpp b/virtuanessrc097-master/NES/PAD.cpp new file mode 100644 index 00000000..4712b1cd Binary files /dev/null and b/virtuanessrc097-master/NES/PAD.cpp differ diff --git a/virtuanessrc097-master/NES/PAD.h b/virtuanessrc097-master/NES/PAD.h new file mode 100644 index 00000000..015423bc Binary files /dev/null and b/virtuanessrc097-master/NES/PAD.h differ diff --git a/virtuanessrc097-master/NES/PPU.cpp b/virtuanessrc097-master/NES/PPU.cpp new file mode 100644 index 00000000..978540e5 Binary files /dev/null and b/virtuanessrc097-master/NES/PPU.cpp differ diff --git a/virtuanessrc097-master/NES/PPU.h b/virtuanessrc097-master/NES/PPU.h new file mode 100644 index 00000000..a5f6d3e9 Binary files /dev/null and b/virtuanessrc097-master/NES/PPU.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD.h b/virtuanessrc097-master/NES/PadEX/EXPAD.h new file mode 100644 index 00000000..0276cd33 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_CrazyClimber.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_CrazyClimber.cpp new file mode 100644 index 00000000..fdc3d207 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_CrazyClimber.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_CrazyClimber.h b/virtuanessrc097-master/NES/PadEX/EXPAD_CrazyClimber.h new file mode 100644 index 00000000..1f2fd80e Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_CrazyClimber.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_ExcitingBoxing.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_ExcitingBoxing.cpp new file mode 100644 index 00000000..09dfdcb8 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_ExcitingBoxing.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_ExcitingBoxing.h b/virtuanessrc097-master/NES/PadEX/EXPAD_ExcitingBoxing.h new file mode 100644 index 00000000..1dcc0105 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_ExcitingBoxing.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_FamlyTrainer.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_FamlyTrainer.cpp new file mode 100644 index 00000000..9ba78255 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_FamlyTrainer.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_FamlyTrainer.h b/virtuanessrc097-master/NES/PadEX/EXPAD_FamlyTrainer.h new file mode 100644 index 00000000..ceb7d329 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_FamlyTrainer.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Gyromite.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_Gyromite.cpp new file mode 100644 index 00000000..caac0058 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Gyromite.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Gyromite.h b/virtuanessrc097-master/NES/PadEX/EXPAD_Gyromite.h new file mode 100644 index 00000000..21940097 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Gyromite.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_HyperShot.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_HyperShot.cpp new file mode 100644 index 00000000..23d7e696 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_HyperShot.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_HyperShot.h b/virtuanessrc097-master/NES/PadEX/EXPAD_HyperShot.h new file mode 100644 index 00000000..20fff03a Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_HyperShot.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Keyboard.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_Keyboard.cpp new file mode 100644 index 00000000..f4189ae8 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Keyboard.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Keyboard.h b/virtuanessrc097-master/NES/PadEX/EXPAD_Keyboard.h new file mode 100644 index 00000000..5bd3dc8a Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Keyboard.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Mahjang.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_Mahjang.cpp new file mode 100644 index 00000000..223118cf Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Mahjang.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Mahjang.h b/virtuanessrc097-master/NES/PadEX/EXPAD_Mahjang.h new file mode 100644 index 00000000..a4eb056d Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Mahjang.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_OekakidsTablet.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_OekakidsTablet.cpp new file mode 100644 index 00000000..1a9d8654 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_OekakidsTablet.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_OekakidsTablet.h b/virtuanessrc097-master/NES/PadEX/EXPAD_OekakidsTablet.h new file mode 100644 index 00000000..24a8c05d Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_OekakidsTablet.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Paddle.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_Paddle.cpp new file mode 100644 index 00000000..58448219 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Paddle.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Paddle.h b/virtuanessrc097-master/NES/PadEX/EXPAD_Paddle.h new file mode 100644 index 00000000..8f7e2f5a Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Paddle.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_SpaceShadowGun.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_SpaceShadowGun.cpp new file mode 100644 index 00000000..3c20940e Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_SpaceShadowGun.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_SpaceShadowGun.h b/virtuanessrc097-master/NES/PadEX/EXPAD_SpaceShadowGun.h new file mode 100644 index 00000000..0b679c76 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_SpaceShadowGun.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Supor_Keyboard.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_Supor_Keyboard.cpp new file mode 100644 index 00000000..2161bd29 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Supor_Keyboard.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Supor_Keyboard.h b/virtuanessrc097-master/NES/PadEX/EXPAD_Supor_Keyboard.h new file mode 100644 index 00000000..cbcb9286 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Supor_Keyboard.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Toprider.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_Toprider.cpp new file mode 100644 index 00000000..295bea55 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Toprider.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Toprider.h b/virtuanessrc097-master/NES/PadEX/EXPAD_Toprider.h new file mode 100644 index 00000000..aae7862f Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Toprider.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_TurboFile.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_TurboFile.cpp new file mode 100644 index 00000000..fbb1146b Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_TurboFile.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_TurboFile.h b/virtuanessrc097-master/NES/PadEX/EXPAD_TurboFile.h new file mode 100644 index 00000000..bcc15d4b Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_TurboFile.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_VSUnisystem.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_VSUnisystem.cpp new file mode 100644 index 00000000..eec0da85 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_VSUnisystem.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_VSUnisystem.h b/virtuanessrc097-master/NES/PadEX/EXPAD_VSUnisystem.h new file mode 100644 index 00000000..fcd074bc Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_VSUnisystem.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_VSZapper.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_VSZapper.cpp new file mode 100644 index 00000000..81c8bb2a Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_VSZapper.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_VSZapper.h b/virtuanessrc097-master/NES/PadEX/EXPAD_VSZapper.h new file mode 100644 index 00000000..2952ef80 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_VSZapper.h differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Zapper.cpp b/virtuanessrc097-master/NES/PadEX/EXPAD_Zapper.cpp new file mode 100644 index 00000000..2c7537d3 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Zapper.cpp differ diff --git a/virtuanessrc097-master/NES/PadEX/EXPAD_Zapper.h b/virtuanessrc097-master/NES/PadEX/EXPAD_Zapper.h new file mode 100644 index 00000000..47ece1d4 Binary files /dev/null and b/virtuanessrc097-master/NES/PadEX/EXPAD_Zapper.h differ diff --git a/virtuanessrc097-master/NES/ROM.cpp b/virtuanessrc097-master/NES/ROM.cpp new file mode 100644 index 00000000..c603afb4 Binary files /dev/null and b/virtuanessrc097-master/NES/ROM.cpp differ diff --git a/virtuanessrc097-master/NES/ROM.h b/virtuanessrc097-master/NES/ROM.h new file mode 100644 index 00000000..9e9e771d Binary files /dev/null and b/virtuanessrc097-master/NES/ROM.h differ diff --git a/virtuanessrc097-master/NES/ROMDB.cpp b/virtuanessrc097-master/NES/ROMDB.cpp new file mode 100644 index 00000000..2e8e6aaf Binary files /dev/null and b/virtuanessrc097-master/NES/ROMDB.cpp differ diff --git a/virtuanessrc097-master/NES/ROMDB.h b/virtuanessrc097-master/NES/ROMDB.h new file mode 100644 index 00000000..e87c1fe1 Binary files /dev/null and b/virtuanessrc097-master/NES/ROMDB.h differ diff --git a/virtuanessrc097-master/NES/ROM_Patch.cpp b/virtuanessrc097-master/NES/ROM_Patch.cpp new file mode 100644 index 00000000..cee120f4 Binary files /dev/null and b/virtuanessrc097-master/NES/ROM_Patch.cpp differ diff --git a/virtuanessrc097-master/NES/State.h b/virtuanessrc097-master/NES/State.h new file mode 100644 index 00000000..a806226a Binary files /dev/null and b/virtuanessrc097-master/NES/State.h differ diff --git a/virtuanessrc097-master/NES/VS_Setting.h b/virtuanessrc097-master/NES/VS_Setting.h new file mode 100644 index 00000000..63a9fd37 Binary files /dev/null and b/virtuanessrc097-master/NES/VS_Setting.h differ diff --git a/virtuanessrc097-master/NES/VsUnisystem.cpp b/virtuanessrc097-master/NES/VsUnisystem.cpp new file mode 100644 index 00000000..637a14f5 Binary files /dev/null and b/virtuanessrc097-master/NES/VsUnisystem.cpp differ diff --git a/virtuanessrc097-master/NES/VsUnisystem.h b/virtuanessrc097-master/NES/VsUnisystem.h new file mode 100644 index 00000000..38d3a2e9 Binary files /dev/null and b/virtuanessrc097-master/NES/VsUnisystem.h differ diff --git a/virtuanessrc097-master/NameTableView.cpp b/virtuanessrc097-master/NameTableView.cpp new file mode 100644 index 00000000..b8c891a6 Binary files /dev/null and b/virtuanessrc097-master/NameTableView.cpp differ diff --git a/virtuanessrc097-master/NameTableView.h b/virtuanessrc097-master/NameTableView.h new file mode 100644 index 00000000..eba86405 Binary files /dev/null and b/virtuanessrc097-master/NameTableView.h differ diff --git a/virtuanessrc097-master/NetPlay.cpp b/virtuanessrc097-master/NetPlay.cpp new file mode 100644 index 00000000..7cd03f45 Binary files /dev/null and b/virtuanessrc097-master/NetPlay.cpp differ diff --git a/virtuanessrc097-master/NetPlay.h b/virtuanessrc097-master/NetPlay.h new file mode 100644 index 00000000..aa7a7bc5 Binary files /dev/null and b/virtuanessrc097-master/NetPlay.h differ diff --git a/virtuanessrc097-master/NetPlayDlg.cpp b/virtuanessrc097-master/NetPlayDlg.cpp new file mode 100644 index 00000000..551bc32b Binary files /dev/null and b/virtuanessrc097-master/NetPlayDlg.cpp differ diff --git a/virtuanessrc097-master/NetPlayDlg.h b/virtuanessrc097-master/NetPlayDlg.h new file mode 100644 index 00000000..f549dba7 Binary files /dev/null and b/virtuanessrc097-master/NetPlayDlg.h differ diff --git a/virtuanessrc097-master/PaletteEdit.cpp b/virtuanessrc097-master/PaletteEdit.cpp new file mode 100644 index 00000000..bbf67301 Binary files /dev/null and b/virtuanessrc097-master/PaletteEdit.cpp differ diff --git a/virtuanessrc097-master/PaletteEdit.h b/virtuanessrc097-master/PaletteEdit.h new file mode 100644 index 00000000..c07ee135 Binary files /dev/null and b/virtuanessrc097-master/PaletteEdit.h differ diff --git a/virtuanessrc097-master/PaletteView.cpp b/virtuanessrc097-master/PaletteView.cpp new file mode 100644 index 00000000..51c7d792 Binary files /dev/null and b/virtuanessrc097-master/PaletteView.cpp differ diff --git a/virtuanessrc097-master/PaletteView.h b/virtuanessrc097-master/PaletteView.h new file mode 100644 index 00000000..c0c866c0 Binary files /dev/null and b/virtuanessrc097-master/PaletteView.h differ diff --git a/virtuanessrc097-master/Pathlib.cpp b/virtuanessrc097-master/Pathlib.cpp new file mode 100644 index 00000000..9774ab1e Binary files /dev/null and b/virtuanessrc097-master/Pathlib.cpp differ diff --git a/virtuanessrc097-master/Pathlib.h b/virtuanessrc097-master/Pathlib.h new file mode 100644 index 00000000..86359b34 Binary files /dev/null and b/virtuanessrc097-master/Pathlib.h differ diff --git a/virtuanessrc097-master/PatternView.cpp b/virtuanessrc097-master/PatternView.cpp new file mode 100644 index 00000000..20f076e4 Binary files /dev/null and b/virtuanessrc097-master/PatternView.cpp differ diff --git a/virtuanessrc097-master/PatternView.h b/virtuanessrc097-master/PatternView.h new file mode 100644 index 00000000..40c233bf Binary files /dev/null and b/virtuanessrc097-master/PatternView.h differ diff --git a/virtuanessrc097-master/Plugin.cpp b/virtuanessrc097-master/Plugin.cpp new file mode 100644 index 00000000..1a4670e6 Binary files /dev/null and b/virtuanessrc097-master/Plugin.cpp differ diff --git a/virtuanessrc097-master/Plugin.h b/virtuanessrc097-master/Plugin.h new file mode 100644 index 00000000..ff1a3e0d Binary files /dev/null and b/virtuanessrc097-master/Plugin.h differ diff --git a/virtuanessrc097-master/Pngwrite.h b/virtuanessrc097-master/Pngwrite.h new file mode 100644 index 00000000..ecd27d2c Binary files /dev/null and b/virtuanessrc097-master/Pngwrite.h differ diff --git a/virtuanessrc097-master/Recent.cpp b/virtuanessrc097-master/Recent.cpp new file mode 100644 index 00000000..220656b3 Binary files /dev/null and b/virtuanessrc097-master/Recent.cpp differ diff --git a/virtuanessrc097-master/Recent.h b/virtuanessrc097-master/Recent.h new file mode 100644 index 00000000..b043689d Binary files /dev/null and b/virtuanessrc097-master/Recent.h differ diff --git a/virtuanessrc097-master/Registry.cpp b/virtuanessrc097-master/Registry.cpp new file mode 100644 index 00000000..0255c828 Binary files /dev/null and b/virtuanessrc097-master/Registry.cpp differ diff --git a/virtuanessrc097-master/Registry.h b/virtuanessrc097-master/Registry.h new file mode 100644 index 00000000..fc098648 Binary files /dev/null and b/virtuanessrc097-master/Registry.h differ diff --git a/virtuanessrc097-master/Render.h b/virtuanessrc097-master/Render.h new file mode 100644 index 00000000..13c2b82f Binary files /dev/null and b/virtuanessrc097-master/Render.h differ diff --git a/virtuanessrc097-master/Render16bpp.h b/virtuanessrc097-master/Render16bpp.h new file mode 100644 index 00000000..5fdbb00a Binary files /dev/null and b/virtuanessrc097-master/Render16bpp.h differ diff --git a/virtuanessrc097-master/Render24bpp.h b/virtuanessrc097-master/Render24bpp.h new file mode 100644 index 00000000..b9a78635 Binary files /dev/null and b/virtuanessrc097-master/Render24bpp.h differ diff --git a/virtuanessrc097-master/Render32bpp.h b/virtuanessrc097-master/Render32bpp.h new file mode 100644 index 00000000..9ecb5b6e Binary files /dev/null and b/virtuanessrc097-master/Render32bpp.h differ diff --git a/virtuanessrc097-master/Render8bpp.h b/virtuanessrc097-master/Render8bpp.h new file mode 100644 index 00000000..7a859b45 Binary files /dev/null and b/virtuanessrc097-master/Render8bpp.h differ diff --git a/virtuanessrc097-master/RomInfoDlg.cpp b/virtuanessrc097-master/RomInfoDlg.cpp new file mode 100644 index 00000000..5775a464 Binary files /dev/null and b/virtuanessrc097-master/RomInfoDlg.cpp differ diff --git a/virtuanessrc097-master/RomInfoDlg.h b/virtuanessrc097-master/RomInfoDlg.h new file mode 100644 index 00000000..a7bf6dbb Binary files /dev/null and b/virtuanessrc097-master/RomInfoDlg.h differ diff --git a/virtuanessrc097-master/ShortcutDlg.cpp b/virtuanessrc097-master/ShortcutDlg.cpp new file mode 100644 index 00000000..80cab5d3 Binary files /dev/null and b/virtuanessrc097-master/ShortcutDlg.cpp differ diff --git a/virtuanessrc097-master/ShortcutDlg.h b/virtuanessrc097-master/ShortcutDlg.h new file mode 100644 index 00000000..9b010fcf Binary files /dev/null and b/virtuanessrc097-master/ShortcutDlg.h differ diff --git a/virtuanessrc097-master/SimpleVirusChecker.c b/virtuanessrc097-master/SimpleVirusChecker.c new file mode 100644 index 00000000..e0440459 --- /dev/null +++ b/virtuanessrc097-master/SimpleVirusChecker.c @@ -0,0 +1,227 @@ +/* + + SimpleVirusChecker + version 1.13 + programmed by Norix + + Copyright Note + source code: SimpleVirusChecker.c,SimpleVirusChecker.h + + Please use this program freely. + An author isn't concerned on a loss at having used this program at all. + An author prays for virus software disappearing from a PC in the world. + + --Attention-- + Because an author doesn't have a PC infected with a virus program, can't + guarantee it whether you were able to completely check it. + + Histroy: + v1.1 add WORM_FIZZER + add WORM_PALYH + add WORM_LOVGATE + add WORM_OPASERV + v1.11 add WORM_SOBIG.F + v1.12 add WORM_MYDOOM.A + v1.121 fixed WORM_MYDOOM.A checker + v1.13 add WORM_NETSKY.Q +*/ +#include "SimpleVirusChecker.h" +#include + +#define KEYTYPE_1 (1<<0) /* Windows startup registry */ +#define KEYTYPE_2 (1<<1) /* Windows Servece registry(NT only) */ + +typedef struct { + TCHAR* keyname; + int type; /* type */ + int length; /* use strncmp length (0 is use strcmp) */ +} VIRUSKEYTBL; + +static VIRUSKEYTBL viruskeytbl[] = { +/* KEY KEYTYPE LENGTH */ + _T("Wink"), KEYTYPE_1|KEYTYPE_2, 4, /* Klez */ + _T("WindowsMGM"), KEYTYPE_1|KEYTYPE_2, 0, /* Sobig */ + _T("Avril Lavigne - Muse"), KEYTYPE_1, 0, /* Lirva */ + _T("SystemInit"), KEYTYPE_1, 0, /* Fizzer */ + _T("System Tray"), KEYTYPE_1, 0, /* Palyh */ + _T("WinGate initialize"), KEYTYPE_1, 0, /* Lovgate */ + _T("ScrSvr"), KEYTYPE_1, 0, /* Opaserv */ + _T("SSK Service"), KEYTYPE_1, 0, /* Sobig.E */ + _T("TrayX"), KEYTYPE_1, 0, /* Sobig.F */ + _T("SysMonXP"), KEYTYPE_1, 0, /* NetSky.P */ + NULL, 0, 0 /* term */ +}; + +/* WindowsNT? */ +static int IsNT( void ) +{ + OSVERSIONINFO osvi; + osvi.dwOSVersionInfoSize = sizeof(osvi); + if( !GetVersionEx(&osvi) ) + return 0; + + if( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT ) + return 1; + + if( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) + return 0; + + /* unknown */ + return -1; +} + +/* A check of a type to be infected with *.exe activation (representative example:SIRCAM) */ +static int ExeRegistryCheck( void ) +{ + HKEY hKey; + LONG lResult; + DWORD dwCount; + + if( RegOpenKeyEx( HKEY_CLASSES_ROOT, _T("exefile\\shell\\open\\command"), + 0, KEY_READ, &hKey ) != ERROR_SUCCESS ) { + return -1; + } + + lResult = RegQueryValueEx( hKey, _T(""), NULL, NULL, NULL, &dwCount ); + RegCloseKey( hKey ); + if( lResult != ERROR_SUCCESS ) { + return -1; + } + /* + Check it whether a parameter is different from a default parameter. + May think that this is originally infected when it is only '"%1" %*' + and has length more than it. + */ + if( dwCount > 8 ) { + return 1; + } + /* OK */ + return 0; +} + +/* A check of a type to be infected with *.exe activation (representative example:SIRCAM) */ +static int SpecialRegistryCheck( void ) +{ + HKEY hKey; + LONG lResult; + TCHAR szKeyName[1024]; + BYTE KeyValue[1024]; + DWORD dwKeyType, dwKeyBufferSize; + + DWORD dwIndex, dwCount; + + // WORM_MYDOOM.A ? + if( RegOpenKeyEx( HKEY_CLASSES_ROOT, _T("CLSID\\{E6FB5E20-DE35-11CF-9C87-00AA005127ED}\\InProcServer32"), + 0, KEY_READ, &hKey ) != ERROR_SUCCESS ) { + RegCloseKey( hKey ); + return 0; // not found key + } + + dwIndex = 0; + while( 1 ) { + dwCount = sizeof(szKeyName)/sizeof(TCHAR); + dwKeyBufferSize = sizeof(KeyValue); + + lResult = RegEnumValue( hKey, dwIndex, szKeyName, &dwCount, 0, &dwKeyType, KeyValue, &dwKeyBufferSize ); + if( lResult != ERROR_SUCCESS ) { + break; + } + + if( StrStrI( KeyValue, "shimgapi.dll" ) != NULL ) + return 1; // Found!! + + dwIndex++; + } + RegCloseKey( hKey ); + + /* OK */ + return 0; +} + +/* Character string comparison */ +static int KlezTypeCheckSub( const char* name, int mask ) +{ + VIRUSKEYTBL* tbl = viruskeytbl; + + while( tbl->keyname ) { + if( tbl->type & mask ) { + if( !tbl->length ) { + if( StrCmpI( name, tbl->keyname ) == 0 ) + return 1; + } else { + if( StrCmpNI( name, tbl->keyname, tbl->length ) == 0 ) + return 1; + } + } + tbl++; + } + return 0; +} + +/* A check of the registry which a virus uses */ +static int KlezTypeCheck( void ) +{ + HKEY hKey; + LONG lResult; + TCHAR szKeyName[1024]; + DWORD dwIndex, dwCount; + FILETIME ft; + int viruscount = 0; + + /* Search a thing registered with Windows Startup */ + if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), + 0, KEY_READ, &hKey ) != ERROR_SUCCESS ) { + return -1; + } + dwIndex = 0; + while( 1 ) { + dwCount = sizeof(szKeyName)/sizeof(TCHAR); + lResult = RegEnumValue( hKey, dwIndex, szKeyName, &dwCount, 0, NULL, NULL, NULL ); + if( lResult != ERROR_SUCCESS ) { + break; + } + viruscount += KlezTypeCheckSub( szKeyName, KEYTYPE_1 ); + dwIndex++; + } + RegCloseKey( hKey ); + + if( !IsNT() ) { + return viruscount; + } + + /* Search a thing registered with WindowsNT Service */ + if( RegOpenKeyEx( HKEY_LOCAL_MACHINE, _T("System\\CurrentControlSet\\Services"), + 0, KEY_READ, &hKey ) != ERROR_SUCCESS ) { + return -1; + } + dwIndex = 0; + while( 1 ) { + dwCount = sizeof(szKeyName)/sizeof(TCHAR); + lResult = RegEnumKeyEx( hKey, dwIndex, szKeyName, &dwCount, 0, NULL, NULL, &ft ); + if( lResult != ERROR_SUCCESS ) { + break; + } + viruscount += KlezTypeCheckSub( szKeyName, KEYTYPE_2 ); + dwIndex++; + } + RegCloseKey( hKey ); + + return viruscount; +} + +int SimpleVirusChecker(void) +{ + int viruscount = 0; + + if( IsNT() < 0 ) + return -1; + + if( ExeRegistryCheck() > 0 ) + viruscount++; + + viruscount += SpecialRegistryCheck(); + viruscount += KlezTypeCheck(); + + return viruscount; +} + diff --git a/virtuanessrc097-master/SimpleVirusChecker.h b/virtuanessrc097-master/SimpleVirusChecker.h new file mode 100644 index 00000000..c3fa900b Binary files /dev/null and b/virtuanessrc097-master/SimpleVirusChecker.h differ diff --git a/virtuanessrc097-master/SoundDlg.cpp b/virtuanessrc097-master/SoundDlg.cpp new file mode 100644 index 00000000..9b45e74f Binary files /dev/null and b/virtuanessrc097-master/SoundDlg.cpp differ diff --git a/virtuanessrc097-master/SoundDlg.h b/virtuanessrc097-master/SoundDlg.h new file mode 100644 index 00000000..96707722 Binary files /dev/null and b/virtuanessrc097-master/SoundDlg.h differ diff --git a/virtuanessrc097-master/Typedef.h b/virtuanessrc097-master/Typedef.h new file mode 100644 index 00000000..521fc619 Binary files /dev/null and b/virtuanessrc097-master/Typedef.h differ diff --git a/virtuanessrc097-master/VirtuaNES.dsp b/virtuanessrc097-master/VirtuaNES.dsp new file mode 100644 index 00000000..3701f265 --- /dev/null +++ b/virtuanessrc097-master/VirtuaNES.dsp @@ -0,0 +1,5871 @@ +# Microsoft Developer Studio Project File - Name="VirtuaNES" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** ҏWȂł ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=VirtuaNES - Win32 Debug +!MESSAGE ͗LҲ̧قł͂܂B ۼުĂނ邽߂ɂ NMAKE gpĂB +!MESSAGE [Ҳ̧ق̴߰] ނgpĎsĂ +!MESSAGE +!MESSAGE NMAKE /f "VirtuaNES.mak". +!MESSAGE +!MESSAGE NMAKE ̎sɍ\wł܂ +!MESSAGE ײݏϸۂ̐ݒ`܂B: +!MESSAGE +!MESSAGE NMAKE /f "VirtuaNES.mak" CFG="VirtuaNES - Win32 Debug" +!MESSAGE +!MESSAGE I”\ Ӱ: +!MESSAGE +!MESSAGE "VirtuaNES - Win32 Release" ("Win32 (x86) Application" p) +!MESSAGE "VirtuaNES - Win32 Debug" ("Win32 (x86) Application" p) +!MESSAGE "VirtuaNES - Win32 Profile" ("Win32 (x86) Application" p) +!MESSAGE "VirtuaNES - Win32 Release_Debugout" ("Win32 (x86) Application" p) +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /O2 /I "Zlib" /I "." /I "NES" /I "NES\Mapper" /I "NES\ApuEx" /I "NES\ApuEx\emu2413" /I "NES\PadEx" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x411 /d "NDEBUG" +# ADD RSC /l 0x411 /i "res" /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib comctl32.lib imm32.lib dinput.lib shlwapi.lib /nologo /subsystem:windows /map /machine:I386 +# SUBTRACT LINK32 /nodefaultlib + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MT /W3 /Gm /GX /ZI /Od /I "." /I "NES" /I "NES\Mapper" /I "NES\ApuEx" /I "NES\ApuEx\emu2413" /I "NES\PadEx" /I "Zlib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x411 /d "_DEBUG" +# ADD RSC /l 0x411 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib comctl32.lib imm32.lib dinput.lib shlwapi.lib libcmtd.lib /nologo /subsystem:windows /map /debug /machine:I386 /pdbtype:sept +# SUBTRACT LINK32 /nodefaultlib + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "VirtuaNES___Win32_Profile" +# PROP BASE Intermediate_Dir "VirtuaNES___Win32_Profile" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "" +# PROP Intermediate_Dir "Profile" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "." /I "NES" /I "NES\Mapper" /I "NES\ApuEx" /I "NES\PadEx" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /Z7 /O2 /I "." /I "NES" /I "NES\Mapper" /I "NES\ApuEx" /I "NES\ApuEx\emu2413" /I "NES\PadEx" /I "Zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x411 /d "NDEBUG" +# ADD RSC /l 0x411 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib comctl32.lib imm32.lib dinput.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib comctl32.lib imm32.lib dinput.lib shlwapi.lib /nologo /subsystem:windows /profile /map:"VirtuaNES.map" /debug /machine:I386 +# SUBTRACT LINK32 /nodefaultlib + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "VirtuaNES___Win32_Release_Debugout" +# PROP BASE Intermediate_Dir "VirtuaNES___Win32_Release_Debugout" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "" +# PROP Intermediate_Dir "Release_Debugout" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "." /I "NES" /I "NES\Mapper" /I "NES\ApuEx" /I "NES\PadEx" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_DEBUGOUT" /YX /FD /c +# ADD CPP /nologo /MT /W3 /GX /Z7 /O2 /I "." /I "NES" /I "NES\Mapper" /I "NES\ApuEx" /I "NES\ApuEx\emu2413" /I "NES\PadEx" /I "Zlib" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_DEBUGOUT" /YX /FD /c +# SUBTRACT CPP /Fr +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x411 /d "NDEBUG" +# ADD RSC /l 0x411 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib comctl32.lib imm32.lib dinput.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib comctl32.lib imm32.lib dinput.lib shlwapi.lib /nologo /subsystem:windows /map /debug /machine:I386 +# SUBTRACT LINK32 /nodefaultlib + +!ENDIF + +# Begin Target + +# Name "VirtuaNES - Win32 Release" +# Name "VirtuaNES - Win32 Debug" +# Name "VirtuaNES - Win32 Profile" +# Name "VirtuaNES - Win32 Release_Debugout" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\AboutDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\App.cpp +# End Source File +# Begin Source File + +SOURCE=.\Archive.cpp +# End Source File +# Begin Source File + +SOURCE=.\AviConvDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\AviWriter.cpp +# End Source File +# Begin Source File + +SOURCE=.\ChatDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\CheatDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Com.cpp +# End Source File +# Begin Source File + +SOURCE=.\Config.cpp +# End Source File +# Begin Source File + +SOURCE=.\ControllerDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\Crclib.cpp +# End Source File +# Begin Source File + +SOURCE=.\DatachBarcodeDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\DebugOut.cpp +# End Source File +# Begin Source File + +SOURCE=.\DipSwitchDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\DirectDraw.cpp +# End Source File +# Begin Source File + +SOURCE=.\DirectInput.cpp +# End Source File +# Begin Source File + +SOURCE=.\DirectSound.cpp +# End Source File +# Begin Source File + +SOURCE=.\EmulatorDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\EmuThread.cpp +# End Source File +# Begin Source File + +SOURCE=.\FolderDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\GameOptionDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\GraphicsDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\JoyAxisDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\LanguageDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\LauncherDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\MainFrame.cpp +# End Source File +# Begin Source File + +SOURCE=.\MemoryView.cpp +# End Source File +# Begin Source File + +SOURCE=.\MMTimer.cpp +# End Source File +# Begin Source File + +SOURCE=.\MovieDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\MovieInfoDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\NameTableView.cpp +# End Source File +# Begin Source File + +SOURCE=.\NetPlay.cpp +# End Source File +# Begin Source File + +SOURCE=.\NetPlayDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\PaletteEdit.cpp +# End Source File +# Begin Source File + +SOURCE=.\PaletteView.cpp +# End Source File +# Begin Source File + +SOURCE=.\Pathlib.cpp +# End Source File +# Begin Source File + +SOURCE=.\PatternView.cpp +# End Source File +# Begin Source File + +SOURCE=.\Plugin.cpp +# End Source File +# Begin Source File + +SOURCE=.\Recent.cpp +# End Source File +# Begin Source File + +SOURCE=.\Registry.cpp +# End Source File +# Begin Source File + +SOURCE=.\RomInfoDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\ShortcutDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\SimpleVirusChecker.c +# End Source File +# Begin Source File + +SOURCE=.\SoundDlg.cpp +# End Source File +# Begin Source File + +SOURCE=.\VirtuaNES.rc +# End Source File +# Begin Source File + +SOURCE=.\WaveRec.cpp +# End Source File +# Begin Source File + +SOURCE=.\WinMain.cpp +# End Source File +# Begin Source File + +SOURCE=.\Wnd.cpp +# End Source File +# Begin Source File + +SOURCE=.\WndHook.cpp +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=.\AboutDlg.h +# End Source File +# Begin Source File + +SOURCE=.\App.h +# End Source File +# Begin Source File + +SOURCE=.\Archive.h +# End Source File +# Begin Source File + +SOURCE=.\AviConvDlg.h +# End Source File +# Begin Source File + +SOURCE=.\AviWriter.h +# End Source File +# Begin Source File + +SOURCE=.\ChatDlg.h +# End Source File +# Begin Source File + +SOURCE=.\CheatDlg.h +# End Source File +# Begin Source File + +SOURCE=.\CHyperLink.h +# End Source File +# Begin Source File + +SOURCE=.\Com.h +# End Source File +# Begin Source File + +SOURCE=.\Config.h +# End Source File +# Begin Source File + +SOURCE=.\ControllerDlg.h +# End Source File +# Begin Source File + +SOURCE=.\Crclib.h +# End Source File +# Begin Source File + +SOURCE=.\DatachBarcodeDlg.h +# End Source File +# Begin Source File + +SOURCE=.\DebugOut.h +# End Source File +# Begin Source File + +SOURCE=.\DipSwitchDlg.h +# End Source File +# Begin Source File + +SOURCE=.\DirectDraw.h +# End Source File +# Begin Source File + +SOURCE=.\DirectInput.h +# End Source File +# Begin Source File + +SOURCE=.\DirectSound.h +# End Source File +# Begin Source File + +SOURCE=.\EmulatorDlg.h +# End Source File +# Begin Source File + +SOURCE=.\EmuThread.h +# End Source File +# Begin Source File + +SOURCE=.\FolderDlg.h +# End Source File +# Begin Source File + +SOURCE=.\GameOptionDlg.h +# End Source File +# Begin Source File + +SOURCE=.\GraphicsDlg.h +# End Source File +# Begin Source File + +SOURCE=.\hq2x.h +# End Source File +# Begin Source File + +SOURCE=.\interp.h +# End Source File +# Begin Source File + +SOURCE=.\JoyAxisDlg.h +# End Source File +# Begin Source File + +SOURCE=.\LanguageDlg.h +# End Source File +# Begin Source File + +SOURCE=.\LauncherDlg.h +# End Source File +# Begin Source File + +SOURCE=.\lq2x.h +# End Source File +# Begin Source File + +SOURCE=.\lzAscii.h +# End Source File +# Begin Source File + +SOURCE=.\lzSight.h +# End Source File +# Begin Source File + +SOURCE=.\lzTVlayer.h +# End Source File +# Begin Source File + +SOURCE=.\Macro.h +# End Source File +# Begin Source File + +SOURCE=.\MainFrame.h +# End Source File +# Begin Source File + +SOURCE=.\MemoryView.h +# End Source File +# Begin Source File + +SOURCE=.\MMTimer.h +# End Source File +# Begin Source File + +SOURCE=.\MovieDlg.h +# End Source File +# Begin Source File + +SOURCE=.\MovieInfoDlg.h +# End Source File +# Begin Source File + +SOURCE=.\NameTableView.h +# End Source File +# Begin Source File + +SOURCE=.\NetPlay.h +# End Source File +# Begin Source File + +SOURCE=.\NetPlayDlg.h +# End Source File +# Begin Source File + +SOURCE=.\nx_2xSaI.h +# End Source File +# Begin Source File + +SOURCE=.\nx_hq2x.h +# End Source File +# Begin Source File + +SOURCE=.\nx_Scale2x.h +# End Source File +# Begin Source File + +SOURCE=.\nx_Super2xSaI.h +# End Source File +# Begin Source File + +SOURCE=.\nx_Super2xSaI_32bpp_mmx.h +# End Source File +# Begin Source File + +SOURCE=.\nx_SuperEagle.h +# End Source File +# Begin Source File + +SOURCE=.\PaletteEdit.h +# End Source File +# Begin Source File + +SOURCE=.\PaletteView.h +# End Source File +# Begin Source File + +SOURCE=.\Pathlib.h +# End Source File +# Begin Source File + +SOURCE=.\PatternView.h +# End Source File +# Begin Source File + +SOURCE=.\Plugin.h +# End Source File +# Begin Source File + +SOURCE=.\Pngwrite.h +# End Source File +# Begin Source File + +SOURCE=.\Recent.h +# End Source File +# Begin Source File + +SOURCE=.\Registry.h +# End Source File +# Begin Source File + +SOURCE=.\Render.h +# End Source File +# Begin Source File + +SOURCE=.\Render16bpp.h +# End Source File +# Begin Source File + +SOURCE=.\Render24bpp.h +# End Source File +# Begin Source File + +SOURCE=.\Render32bpp.h +# End Source File +# Begin Source File + +SOURCE=.\Render8bpp.h +# End Source File +# Begin Source File + +SOURCE=.\resource.h +# End Source File +# Begin Source File + +SOURCE=.\RomInfoDlg.h +# End Source File +# Begin Source File + +SOURCE=.\ShortcutDlg.h +# End Source File +# Begin Source File + +SOURCE=.\SimpleVirusChecker.h +# End Source File +# Begin Source File + +SOURCE=.\SoundDlg.h +# End Source File +# Begin Source File + +SOURCE=.\Typedef.h +# End Source File +# Begin Source File + +SOURCE=.\VirtuaNESres.h +# End Source File +# Begin Source File + +SOURCE=.\WaveRec.h +# End Source File +# Begin Source File + +SOURCE=.\Wnd.h +# End Source File +# Begin Source File + +SOURCE=.\WndHook.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# Begin Source File + +SOURCE=.\CheatImageList.bmp +# End Source File +# Begin Source File + +SOURCE=.\res\header_down.ico +# End Source File +# Begin Source File + +SOURCE=.\res\header_up.ico +# End Source File +# Begin Source File + +SOURCE=.\LauncherImageList.bmp +# End Source File +# Begin Source File + +SOURCE=.\res\VirtuaNES.exe.manifest +# End Source File +# Begin Source File + +SOURCE=.\res\VirtuaNES.ico +# End Source File +# End Group +# Begin Group "NES" + +# PROP Default_Filter "" +# Begin Group "Mapper" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\NES\Mapper\EEPROM.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper.h +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper000.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper000.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper001.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper001.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper002.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper002.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper003.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper003.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper004.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper004.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper005.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper005.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper006.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper006.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper007.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper007.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper008.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper008.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper009.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper009.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper010.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper010.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper011.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper011.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper012.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper012.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper013.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper013.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper015.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper015.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper016.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper016.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper017.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper017.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper018.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper018.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper019.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper019.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper021.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper021.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper022.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper022.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper023.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper023.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper024.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper024.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper025.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper025.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper026.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper026.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper027.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper027.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper032.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper032.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper033.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper033.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper034.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper034.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper040.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper040.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper041.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper041.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper042.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper042.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper043.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper043.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper044.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper044.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper045.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper045.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper046.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper046.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper047.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper047.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper048.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper048.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper050.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper050.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper051.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper051.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper057.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper057.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper058.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper058.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper060.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper060.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper061.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper061.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper062.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper062.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper064.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper064.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper065.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper065.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper066.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper066.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper067.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper067.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper068.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper068.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper069.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper069.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper070.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper070.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper071.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper071.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper072.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper072.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper073.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper073.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper074.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper074.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper075.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper075.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper076.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper076.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper077.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper077.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper078.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper078.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper079.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper079.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper080.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper080.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper082.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper082.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper083.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper083.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper085.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper085.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper086.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper086.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper087.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper087.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper088.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper088.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper089.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper089.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper090.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper090.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper091.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper091.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper092.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper092.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper093.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper093.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper094.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper094.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper095.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper095.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper096.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper096.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper097.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper097.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper099.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper099.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper100.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper100.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper101.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper101.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper105.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper105.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper107.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper107.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper108.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper108.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper109.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper109.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper110.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper110.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper112.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper112.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper113.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper113.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper114.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper114.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper115.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper115.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper116.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper116.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper117.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper117.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper118.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper118.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper119.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper119.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper122.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper122.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper133.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper133.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper134.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper134.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper135.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper135.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper140.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper140.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper142.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper142.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper151.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper151.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper160.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper160.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper164.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper164.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper165.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper165.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper167.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper167.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper180.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper180.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper181.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper181.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper182.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper182.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper183.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper183.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper185.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper185.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper187.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper187.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper188.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper188.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper189.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper189.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper190.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper190.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper191.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper191.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper193.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper193.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper194.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper194.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper198.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper198.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper200.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper200.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper201.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper201.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper202.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper202.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper222.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper222.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper225.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper225.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper226.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper226.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper227.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper227.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper228.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper228.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper229.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper229.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper230.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper230.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper231.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper231.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper232.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper232.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper233.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper233.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper234.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper234.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper235.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper235.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper236.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper236.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper240.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper240.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper241.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper241.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper242.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper242.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper243.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper243.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper244.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper244.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper245.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper245.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper246.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper246.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper248.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper248.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper249.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper249.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper251.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper251.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper252.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper252.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper254.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper254.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper255.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\Mapper255.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\MapperFactory.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\MapperFDS.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\MapperFDS.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\MapperNSF.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\Mapper\MapperNSF.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# End Group +# Begin Group "ApuEx" + +# PROP Default_Filter "" +# Begin Group "emu2413" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\NES\ApuEX\emu2413\2413tone.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\emu2413\emu2413.c +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\emu2413\emu2413.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\emu2413\vrc7tone.h +# End Source File +# End Group +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_FDS.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_FDS.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_FME7.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_FME7.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_INTERFACE.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_INTERNAL.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_INTERNAL.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_MMC5.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_MMC5.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_N106.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_N106.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_VRC6.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_VRC6.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_VRC7.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\ApuEX\APU_VRC7.h +# End Source File +# End Group +# Begin Group "PadEx" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_CrazyClimber.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_CrazyClimber.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_ExcitingBoxing.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_ExcitingBoxing.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_FamlyTrainer.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_FamlyTrainer.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Gyromite.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Gyromite.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_HyperShot.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_HyperShot.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Keyboard.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Keyboard.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Mahjang.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Mahjang.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_OekakidsTablet.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_OekakidsTablet.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Paddle.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Paddle.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_SpaceShadowGun.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_SpaceShadowGun.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Supor_Keyboard.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Supor_Keyboard.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Toprider.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Toprider.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_TurboFile.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_TurboFile.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_VSUnisystem.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_VSUnisystem.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_VSZapper.cpp +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_VSZapper.h +# PROP Exclude_From_Build 1 +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Zapper.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\PadEX\EXPAD_Zapper.h + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# End Group +# Begin Source File + +SOURCE=.\NES\APU.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\APU.h +# End Source File +# Begin Source File + +SOURCE=.\NES\Cheat.h +# End Source File +# Begin Source File + +SOURCE=.\NES\Cpu.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\CPU.h +# End Source File +# Begin Source File + +SOURCE=.\NES\IPS.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\IPS.h +# End Source File +# Begin Source File + +SOURCE=.\NES\MMU.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\MMU.h +# End Source File +# Begin Source File + +SOURCE=.\NES\Nes.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\Nes.h +# End Source File +# Begin Source File + +SOURCE=.\NES\PAD.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\PAD.h +# End Source File +# Begin Source File + +SOURCE=.\NES\PPU.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\PPU.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ROM.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\ROM.h +# End Source File +# Begin Source File + +SOURCE=.\NES\ROM_Patch.cpp + +!IF "$(CFG)" == "VirtuaNES - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Profile" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "VirtuaNES - Win32 Release_Debugout" + +# PROP BASE Exclude_From_Build 1 +# PROP Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\NES\ROMDB.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\ROMDB.h +# End Source File +# Begin Source File + +SOURCE=.\NES\State.h +# End Source File +# Begin Source File + +SOURCE=.\NES\VS_Setting.h +# End Source File +# Begin Source File + +SOURCE=.\NES\VsUnisystem.cpp +# End Source File +# Begin Source File + +SOURCE=.\NES\VsUnisystem.h +# End Source File +# End Group +# Begin Group "Zlib" + +# PROP Default_Filter "*.c *.cpp *.h" +# Begin Source File + +SOURCE=.\zlib\unzip.c +# End Source File +# Begin Source File + +SOURCE=.\zlib\unzip.h +# End Source File +# Begin Source File + +SOURCE=.\zlib\zconf.h +# End Source File +# Begin Source File + +SOURCE=.\zlib\zlib.h +# End Source File +# Begin Source File + +SOURCE=.\zlib\zlib.lib +# End Source File +# End Group +# End Target +# End Project diff --git a/virtuanessrc097-master/VirtuaNES.dsw b/virtuanessrc097-master/VirtuaNES.dsw new file mode 100644 index 00000000..23a7e333 --- /dev/null +++ b/virtuanessrc097-master/VirtuaNES.dsw @@ -0,0 +1,29 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00 +# x: ܰ߰ ̧ ҏW܂͍폜Ȃł! + +############################################################################### + +Project: "VirtuaNES"=.\VirtuaNES.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/virtuanessrc097-master/VirtuaNES.opt b/virtuanessrc097-master/VirtuaNES.opt new file mode 100644 index 00000000..0670752d Binary files /dev/null and b/virtuanessrc097-master/VirtuaNES.opt differ diff --git a/virtuanessrc097-master/VirtuaNES.rc b/virtuanessrc097-master/VirtuaNES.rc new file mode 100644 index 00000000..0774a99f --- /dev/null +++ b/virtuanessrc097-master/VirtuaNES.rc @@ -0,0 +1,120 @@ +//Microsoft Developer Studio generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" +#include "virtuanesres.h" +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// { resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN) +#ifdef _WIN32 +LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT +#pragma code_page(932) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#include ""winres.h""\r\n" + "#include ""virtuanesres.h""\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST ""res\\\\VirtuaNES.exe.manifest""\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_ICON ICON DISCARDABLE "res\VirtuaNES.ico" +IDI_SORT_DOWN ICON DISCARDABLE "res\header_down.ico" +IDI_SORT_UP ICON DISCARDABLE "res\header_up.ico" + +#ifndef _MAC +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 0,0,9,5 + PRODUCTVERSION 0,0,9,5 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x1L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "041104b0" + BEGIN + VALUE "FileDescription", "VirtuaNES NES emulator for Win32\0" + VALUE "FileVersion", "0.95\0" + VALUE "InternalName", "VirtuaNES\0" + VALUE "LegalCopyright", "Copyright (C) 2001-2007 Norix\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x411, 1200 + END +END + +#endif // !_MAC + + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_CHEATIMAGELIST BITMAP DISCARDABLE "res\CheatImageList.bmp" +IDB_LAUNCHERIMAGELIST BITMAP DISCARDABLE "res\LauncherImageList.bmp" +#endif // { resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res\\VirtuaNES.exe.manifest" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/virtuanessrc097-master/VirtuaNES.sln b/virtuanessrc097-master/VirtuaNES.sln new file mode 100644 index 00000000..3389f87d --- /dev/null +++ b/virtuanessrc097-master/VirtuaNES.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VirtuaNES", "VirtuaNES.vcxproj", "{788F7F02-C4F5-4477-8429-CB02507855EA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Profile|Win32 = Profile|Win32 + Release_Debugout|Win32 = Release_Debugout|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {788F7F02-C4F5-4477-8429-CB02507855EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {788F7F02-C4F5-4477-8429-CB02507855EA}.Debug|Win32.Build.0 = Debug|Win32 + {788F7F02-C4F5-4477-8429-CB02507855EA}.Profile|Win32.ActiveCfg = Profile|Win32 + {788F7F02-C4F5-4477-8429-CB02507855EA}.Profile|Win32.Build.0 = Profile|Win32 + {788F7F02-C4F5-4477-8429-CB02507855EA}.Release_Debugout|Win32.ActiveCfg = Release_Debugout|Win32 + {788F7F02-C4F5-4477-8429-CB02507855EA}.Release_Debugout|Win32.Build.0 = Release_Debugout|Win32 + {788F7F02-C4F5-4477-8429-CB02507855EA}.Release|Win32.ActiveCfg = Release|Win32 + {788F7F02-C4F5-4477-8429-CB02507855EA}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/virtuanessrc097-master/VirtuaNES.vcxproj b/virtuanessrc097-master/VirtuaNES.vcxproj new file mode 100644 index 00000000..1fbde566 --- /dev/null +++ b/virtuanessrc097-master/VirtuaNES.vcxproj @@ -0,0 +1,2426 @@ + + + + + Debug + Win32 + + + Profile + Win32 + + + Release_Debugout + Win32 + + + Release + Win32 + + + + + + {788F7F02-C4F5-4477-8429-CB02507855EA} + 10.0 + + + + Application + v110 + false + MultiByte + + + Application + v110 + false + MultiByte + + + Application + v143 + false + MultiByte + + + Application + v110 + false + MultiByte + + + + + + + + + + + + + + + + + + + + + + + .\ + .\Profile\ + false + + + .\ + .\Debug\ + true + + + .\ + .\Release\ + false + + + .\ + .\Release_Debugout\ + false + + + + MultiThreaded + Default + true + true + MaxSpeed + true + Level3 + OldStyle + .;NES;NES\Mapper;NES\ApuEx;NES\ApuEx\emu2413;NES\PadEx;Zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + .\Profile\ + .\Profile\VirtuaNES.pch + .\Profile\ + .\Profile\ + + + true + NDEBUG;%(PreprocessorDefinitions) + .\VirtuaNES.tlb + true + Win32 + + + 0x0411 + NDEBUG;%(PreprocessorDefinitions) + + + true + .\VirtuaNES.bsc + + + true + true + Windows + false + .\VirtuaNES.exe + odbc32.lib;odbccp32.lib;winmm.lib;comctl32.lib;imm32.lib;dinput8.lib;shlwapi.lib;%(AdditionalDependencies) + + + + + MultiThreadedDebugDLL + Default + false + Disabled + true + Level3 + true + ProgramDatabase + .;NES;NES\Mapper;NES\ApuEx;NES\ApuEx\emu2413;NES\PadEx;Zlib;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + .\Debug\ + .\Debug\VirtuaNES.pch + .\Debug\ + .\Debug\ + EnableFastChecks + /ZI- %(AdditionalOptions) + + + true + _DEBUG;%(PreprocessorDefinitions) + .\VirtuaNES.tlb + true + Win32 + + + 0x0411 + _DEBUG;%(PreprocessorDefinitions) + + + true + .\VirtuaNES.bsc + + + true + true + Windows + false + .\VirtuaNES.exe + odbc32.lib;odbccp32.lib;winmm.lib;comctl32.lib;imm32.lib;dinput8.lib;shlwapi.lib;%(AdditionalDependencies) + false + + + + + MultiThreaded + Default + true + true + MaxSpeed + true + Level3 + Zlib;.;NES;NES\Mapper;NES\ApuEx;NES\ApuEx\emu2413;NES\PadEx;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + .\Release\ + .\Release\VirtuaNES.pch + .\Release\ + .\Release\ + + + true + NDEBUG;%(PreprocessorDefinitions) + .\VirtuaNES.tlb + true + Win32 + + + 0x0411 + res;%(AdditionalIncludeDirectories) + NDEBUG;%(PreprocessorDefinitions) + + + true + .\VirtuaNES.bsc + + + true + Windows + false + .\VirtuaNES.exe + odbc32.lib;odbccp32.lib;winmm.lib;comctl32.lib;imm32.lib;dinput8.lib;shlwapi.lib;%(AdditionalDependencies) + + + + + MultiThreaded + Default + true + true + MaxSpeed + true + Level3 + OldStyle + .;NES;NES\Mapper;NES\ApuEx;NES\ApuEx\emu2413;NES\PadEx;Zlib;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_DEBUGOUT;%(PreprocessorDefinitions) + .\Release_Debugout\ + .\Release_Debugout\VirtuaNES.pch + .\Release_Debugout\ + .\Release_Debugout\ + + + true + NDEBUG;%(PreprocessorDefinitions) + .\VirtuaNES.tlb + true + Win32 + + + 0x0411 + NDEBUG;%(PreprocessorDefinitions) + + + true + .\VirtuaNES.bsc + + + true + true + Windows + false + .\VirtuaNES.exe + odbc32.lib;odbccp32.lib;winmm.lib;comctl32.lib;imm32.lib;dinput8.lib;shlwapi.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + + + true + true + true + + + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + + true + true + true + true + + + true + true + true + true + + + + + + + + + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + + + + + + + + + true + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + true + true + true + + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + + + true + true + true + + + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + + + + + + + + + + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + true + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/virtuanessrc097-master/VirtuaNES.vcxproj.filters b/virtuanessrc097-master/VirtuaNES.vcxproj.filters new file mode 100644 index 00000000..8be61672 --- /dev/null +++ b/virtuanessrc097-master/VirtuaNES.vcxproj.filters @@ -0,0 +1,1565 @@ + + + + + {838e2a92-2af0-4988-bfc6-aeb761e74092} + cpp;c;cxx;rc;def;r;odl;idl;hpj;bat + + + {fa211b91-695f-494c-a6e4-ab261099e7fb} + h;hpp;hxx;hm;inl + + + {3bc77606-806d-4a5d-8f1b-e9942058e1f7} + ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + {8d8c1a1f-0fb2-4a32-a7b1-e8a0c8d8f7b6} + + + {039fef49-90d4-4d8f-8939-7549f680ee2e} + + + {98caa730-39c5-4a07-a91e-634a37b87045} + + + {ac6b7630-911f-4b5b-b42d-dcbbc3f761aa} + + + {1fecdf47-2af5-4bbf-acb6-a4d40709f6dc} + + + {bc932c3f-9d44-4b6d-82ab-cf162aadc0cd} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\ApuEx\emu2413 + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + Zlib + + + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\Mapper + + + NES\ApuEx\emu2413 + + + NES\ApuEx\emu2413 + + + NES\ApuEx\emu2413 + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\ApuEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES\PadEx + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + NES + + + Zlib + + + Zlib + + + Zlib + + + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + Resource Files + + + + + Resource Files + + + + + Zlib + + + \ No newline at end of file diff --git a/virtuanessrc097-master/VirtuaNESres.h b/virtuanessrc097-master/VirtuaNESres.h new file mode 100644 index 00000000..f0873f26 Binary files /dev/null and b/virtuanessrc097-master/VirtuaNESres.h differ diff --git a/virtuanessrc097-master/WaveRec.cpp b/virtuanessrc097-master/WaveRec.cpp new file mode 100644 index 00000000..11241a6d Binary files /dev/null and b/virtuanessrc097-master/WaveRec.cpp differ diff --git a/virtuanessrc097-master/WaveRec.h b/virtuanessrc097-master/WaveRec.h new file mode 100644 index 00000000..ed7ff0f0 Binary files /dev/null and b/virtuanessrc097-master/WaveRec.h differ diff --git a/virtuanessrc097-master/WinMain.cpp b/virtuanessrc097-master/WinMain.cpp new file mode 100644 index 00000000..8c4042b8 Binary files /dev/null and b/virtuanessrc097-master/WinMain.cpp differ diff --git a/virtuanessrc097-master/Wnd.cpp b/virtuanessrc097-master/Wnd.cpp new file mode 100644 index 00000000..38836a49 Binary files /dev/null and b/virtuanessrc097-master/Wnd.cpp differ diff --git a/virtuanessrc097-master/Wnd.h b/virtuanessrc097-master/Wnd.h new file mode 100644 index 00000000..195b58a9 Binary files /dev/null and b/virtuanessrc097-master/Wnd.h differ diff --git a/virtuanessrc097-master/WndHook.cpp b/virtuanessrc097-master/WndHook.cpp new file mode 100644 index 00000000..24257b1e Binary files /dev/null and b/virtuanessrc097-master/WndHook.cpp differ diff --git a/virtuanessrc097-master/WndHook.h b/virtuanessrc097-master/WndHook.h new file mode 100644 index 00000000..abeb11a9 Binary files /dev/null and b/virtuanessrc097-master/WndHook.h differ diff --git a/virtuanessrc097-master/hq2x.h b/virtuanessrc097-master/hq2x.h new file mode 100644 index 00000000..7c628f56 Binary files /dev/null and b/virtuanessrc097-master/hq2x.h differ diff --git a/virtuanessrc097-master/interp.h b/virtuanessrc097-master/interp.h new file mode 100644 index 00000000..7893d7e7 Binary files /dev/null and b/virtuanessrc097-master/interp.h differ diff --git a/virtuanessrc097-master/lq2x.h b/virtuanessrc097-master/lq2x.h new file mode 100644 index 00000000..bf9a74ca Binary files /dev/null and b/virtuanessrc097-master/lq2x.h differ diff --git a/virtuanessrc097-master/lzAscii.h b/virtuanessrc097-master/lzAscii.h new file mode 100644 index 00000000..12ed19dc Binary files /dev/null and b/virtuanessrc097-master/lzAscii.h differ diff --git a/virtuanessrc097-master/lzSight.h b/virtuanessrc097-master/lzSight.h new file mode 100644 index 00000000..b5d04eb1 Binary files /dev/null and b/virtuanessrc097-master/lzSight.h differ diff --git a/virtuanessrc097-master/lzTVlayer.h b/virtuanessrc097-master/lzTVlayer.h new file mode 100644 index 00000000..c540afac Binary files /dev/null and b/virtuanessrc097-master/lzTVlayer.h differ diff --git a/virtuanessrc097-master/nx_2xSaI.h b/virtuanessrc097-master/nx_2xSaI.h new file mode 100644 index 00000000..818ad57f Binary files /dev/null and b/virtuanessrc097-master/nx_2xSaI.h differ diff --git a/virtuanessrc097-master/nx_Scale2x.h b/virtuanessrc097-master/nx_Scale2x.h new file mode 100644 index 00000000..cfbeb852 Binary files /dev/null and b/virtuanessrc097-master/nx_Scale2x.h differ diff --git a/virtuanessrc097-master/nx_Super2xSaI.h b/virtuanessrc097-master/nx_Super2xSaI.h new file mode 100644 index 00000000..cefb7150 Binary files /dev/null and b/virtuanessrc097-master/nx_Super2xSaI.h differ diff --git a/virtuanessrc097-master/nx_SuperEagle.h b/virtuanessrc097-master/nx_SuperEagle.h new file mode 100644 index 00000000..17a9b3d4 Binary files /dev/null and b/virtuanessrc097-master/nx_SuperEagle.h differ diff --git a/virtuanessrc097-master/nx_hq2x.h b/virtuanessrc097-master/nx_hq2x.h new file mode 100644 index 00000000..79154c8c Binary files /dev/null and b/virtuanessrc097-master/nx_hq2x.h differ diff --git a/virtuanessrc097-master/res/CheatImageList.bmp b/virtuanessrc097-master/res/CheatImageList.bmp new file mode 100644 index 00000000..5def99ee Binary files /dev/null and b/virtuanessrc097-master/res/CheatImageList.bmp differ diff --git a/virtuanessrc097-master/res/LauncherImageList.bmp b/virtuanessrc097-master/res/LauncherImageList.bmp new file mode 100644 index 00000000..d8102bd2 Binary files /dev/null and b/virtuanessrc097-master/res/LauncherImageList.bmp differ diff --git a/virtuanessrc097-master/res/VirtuaNES.exe.manifest b/virtuanessrc097-master/res/VirtuaNES.exe.manifest new file mode 100644 index 00000000..0803f351 --- /dev/null +++ b/virtuanessrc097-master/res/VirtuaNES.exe.manifest @@ -0,0 +1,24 @@ + + + + + VirtuaNES Application + + + + + + + diff --git a/virtuanessrc097-master/res/VirtuaNES.ico b/virtuanessrc097-master/res/VirtuaNES.ico new file mode 100644 index 00000000..6d8e88da Binary files /dev/null and b/virtuanessrc097-master/res/VirtuaNES.ico differ diff --git a/virtuanessrc097-master/res/header_down.ico b/virtuanessrc097-master/res/header_down.ico new file mode 100644 index 00000000..31a8c39c Binary files /dev/null and b/virtuanessrc097-master/res/header_down.ico differ diff --git a/virtuanessrc097-master/res/header_up.ico b/virtuanessrc097-master/res/header_up.ico new file mode 100644 index 00000000..ad96699c Binary files /dev/null and b/virtuanessrc097-master/res/header_up.ico differ diff --git a/virtuanessrc097-master/resource.h b/virtuanessrc097-master/resource.h new file mode 100644 index 00000000..e5c51065 Binary files /dev/null and b/virtuanessrc097-master/resource.h differ diff --git a/virtuanessrc097-master/zlib/unzip.c b/virtuanessrc097-master/zlib/unzip.c new file mode 100644 index 00000000..ff71a474 --- /dev/null +++ b/virtuanessrc097-master/zlib/unzip.c @@ -0,0 +1,1294 @@ +/* unzip.c -- IO on .zip files using zlib + Version 0.15 beta, Mar 19th, 1998, + + Read unzip.h for more info +*/ + + +#include +#include +#include +#include "zlib.h" +#include "unzip.h" + +#ifdef STDC +# include +# include +# include +#endif +#ifdef NO_ERRNO_H + extern int errno; +#else +# include +#endif + + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + + + +#if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) && \ + !defined(CASESENSITIVITYDEFAULT_NO) +#define CASESENSITIVITYDEFAULT_NO +#endif + + +#ifndef UNZ_BUFSIZE +#define UNZ_BUFSIZE (16384) +#endif + +#ifndef UNZ_MAXFILENAMEINZIP +#define UNZ_MAXFILENAMEINZIP (256) +#endif + +#ifndef ALLOC +# define ALLOC(size) (malloc(size)) +#endif +#ifndef TRYFREE +# define TRYFREE(p) {if (p) free(p);} +#endif + +#define SIZECENTRALDIRITEM (0x2e) +#define SIZEZIPLOCALHEADER (0x1e) + + +/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ + +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif + +#ifndef SEEK_END +#define SEEK_END 2 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + +const char unz_copyright[] = + " unzip 0.15 Copyright 1998 Gilles Vollant "; + +/* unz_file_info_interntal contain internal info about a file in zipfile*/ +typedef struct unz_file_info_internal_s +{ + uLong offset_curfile;/* relative offset of local header 4 bytes */ +} unz_file_info_internal; + + +/* file_in_zip_read_info_s contain internal information about a file in zipfile, + when reading and decompress it */ +typedef struct +{ + char *read_buffer; /* internal buffer for compressed data */ + z_stream stream; /* zLib stream structure for inflate */ + + uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ + uLong stream_initialised; /* flag set if stream structure is initialised*/ + + uLong offset_local_extrafield;/* offset of the local extra field */ + uInt size_local_extrafield;/* size of the local extra field */ + uLong pos_local_extrafield; /* position in the local extra field in read*/ + + uLong crc32; /* crc32 of all data uncompressed */ + uLong crc32_wait; /* crc32 we must obtain after decompress all */ + uLong rest_read_compressed; /* number of byte to be decompressed */ + uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ + FILE* file; /* io structore of the zipfile */ + uLong compression_method; /* compression method (0==store) */ + uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ +} file_in_zip_read_info_s; + + +/* unz_s contain internal information about the zipfile +*/ +typedef struct +{ + FILE* file; /* io structore of the zipfile */ + unz_global_info gi; /* public global information */ + uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + uLong num_file; /* number of the current file in the zipfile*/ + uLong pos_in_central_dir; /* pos of the current file in the central dir*/ + uLong current_file_ok; /* flag about the usability of the current file*/ + uLong central_pos; /* position of the beginning of the central dir*/ + + uLong size_central_dir; /* size of the central directory */ + uLong offset_central_dir; /* offset of start of central directory with + respect to the starting disk number */ + + unz_file_info cur_file_info; /* public info about the current file in zip*/ + unz_file_info_internal cur_file_info_internal; /* private info about it*/ + file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current + file if we are decompressing it */ +} unz_s; + + +/* =========================================================================== + Read a byte from a gz_stream; update next_in and avail_in. Return EOF + for end of file. + IN assertion: the stream s has been sucessfully opened for reading. +*/ + + +local int unzlocal_getByte(fin,pi) + FILE *fin; + int *pi; +{ + unsigned char c; + int err = fread(&c, 1, 1, fin); + if (err==1) + { + *pi = (int)c; + return UNZ_OK; + } + else + { + if (ferror(fin)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } +} + + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets +*/ +local int unzlocal_getShort (fin,pX) + FILE* fin; + uLong *pX; +{ + uLong x ; + int i; + int err; + + err = unzlocal_getByte(fin,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unzlocal_getByte(fin,&i); + x += ((uLong)i)<<8; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + +local int unzlocal_getLong (fin,pX) + FILE* fin; + uLong *pX; +{ + uLong x ; + int i; + int err; + + err = unzlocal_getByte(fin,&i); + x = (uLong)i; + + if (err==UNZ_OK) + err = unzlocal_getByte(fin,&i); + x += ((uLong)i)<<8; + + if (err==UNZ_OK) + err = unzlocal_getByte(fin,&i); + x += ((uLong)i)<<16; + + if (err==UNZ_OK) + err = unzlocal_getByte(fin,&i); + x += ((uLong)i)<<24; + + if (err==UNZ_OK) + *pX = x; + else + *pX = 0; + return err; +} + + +/* My own strcmpi / strcasecmp */ +local int strcmpcasenosensitive_internal (fileName1,fileName2) + const char* fileName1; + const char* fileName2; +{ + for (;;) + { + char c1=*(fileName1++); + char c2=*(fileName2++); + if ((c1>='a') && (c1<='z')) + c1 -= 0x20; + if ((c2>='a') && (c2<='z')) + c2 -= 0x20; + if (c1=='\0') + return ((c2=='\0') ? 0 : -1); + if (c2=='\0') + return 1; + if (c1c2) + return 1; + } +} + + +#ifdef CASESENSITIVITYDEFAULT_NO +#define CASESENSITIVITYDEFAULTVALUE 2 +#else +#define CASESENSITIVITYDEFAULTVALUE 1 +#endif + +#ifndef STRCMPCASENOSENTIVEFUNCTION +#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal +#endif + +/* + Compare two filename (fileName1,fileName2). + If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) + If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + or strcasecmp) + If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + (like 1 on Unix, 2 on Windows) + +*/ +extern int ZEXPORT unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity) + const char* fileName1; + const char* fileName2; + int iCaseSensitivity; +{ + if (iCaseSensitivity==0) + iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; + + if (iCaseSensitivity==1) + return strcmp(fileName1,fileName2); + + return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); +} + +#define BUFREADCOMMENT (0x400) + +/* + Locate the Central directory of a zipfile (at the end, just before + the global comment) +*/ +local uLong unzlocal_SearchCentralDir(fin) + FILE *fin; +{ + unsigned char* buf; + uLong uSizeFile; + uLong uBackRead; + uLong uMaxBack=0xffff; /* maximum size of global comment */ + uLong uPosFound=0; + + if (fseek(fin,0,SEEK_END) != 0) + return 0; + + + uSizeFile = ftell( fin ); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); + if (fseek(fin,uReadPos,SEEK_SET)!=0) + break; + + if (fread(buf,(uInt)uReadSize,1,fin)!=1) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + { + uPosFound = uReadPos+i; + break; + } + + if (uPosFound!=0) + break; + } + TRYFREE(buf); + return uPosFound; +} + +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows NT computer "c:\\test\\zlib109.zip" or on an Unix computer + "zlib/zlib109.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. +*/ +extern unzFile ZEXPORT unzOpen (path) + const char *path; +{ + unz_s us; + unz_s *s; + uLong central_pos,uL; + FILE * fin ; + + uLong number_disk; /* number of the current dist, used for + spaning ZIP, unsupported, always 0*/ + uLong number_disk_with_CD; /* number the the disk with central dir, used + for spaning ZIP, unsupported, always 0*/ + uLong number_entry_CD; /* total number of entries in + the central dir + (same than number_entry on nospan) */ + + int err=UNZ_OK; + + if (unz_copyright[0]!=' ') + return NULL; + + fin=fopen(path,"rb"); + if (fin==NULL) + return NULL; + + central_pos = unzlocal_SearchCentralDir(fin); + if (central_pos==0) + err=UNZ_ERRNO; + + if (fseek(fin,central_pos,SEEK_SET)!=0) + err=UNZ_ERRNO; + + /* the signature, already checked */ + if (unzlocal_getLong(fin,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of this disk */ + if (unzlocal_getShort(fin,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unzlocal_getShort(fin,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir on this disk */ + if (unzlocal_getShort(fin,&us.gi.number_entry)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir */ + if (unzlocal_getShort(fin,&number_entry_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unzlocal_getLong(fin,&us.size_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* offset of start of central directory with respect to the + starting disk number */ + if (unzlocal_getLong(fin,&us.offset_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* zipfile comment length */ + if (unzlocal_getShort(fin,&us.gi.size_comment)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((central_pospfile_in_zip_read!=NULL) + unzCloseCurrentFile(file); + + fclose(s->file); + TRYFREE(s); + return UNZ_OK; +} + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ +extern int ZEXPORT unzGetGlobalInfo (file,pglobal_info) + unzFile file; + unz_global_info *pglobal_info; +{ + unz_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + *pglobal_info=s->gi; + return UNZ_OK; +} + + +/* + Translate date/time from Dos format to tm_unz (readable more easilty) +*/ +local void unzlocal_DosDateToTmuDate (ulDosDate, ptm) + uLong ulDosDate; + tm_unz* ptm; +{ + uLong uDate; + uDate = (uLong)(ulDosDate>>16); + ptm->tm_mday = (uInt)(uDate&0x1f) ; + ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; + ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; + + ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); + ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; + ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; +} + +/* + Get Info about the current file in the zipfile, with internal only info +*/ +local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, + unz_file_info *pfile_info, + unz_file_info_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize)); + +local int unzlocal_GetCurrentFileInfoInternal (file, + pfile_info, + pfile_info_internal, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) + unzFile file; + unz_file_info *pfile_info; + unz_file_info_internal *pfile_info_internal; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; +{ + unz_s* s; + unz_file_info file_info; + unz_file_info_internal file_info_internal; + int err=UNZ_OK; + uLong uMagic; + long lSeek=0; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (fseek(s->file,s->pos_in_central_dir+s->byte_before_the_zipfile,SEEK_SET)!=0) + err=UNZ_ERRNO; + + + /* we check the magic */ + if (err==UNZ_OK) + if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x02014b50) + err=UNZ_BADZIPFILE; + + if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.version_needed) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.flag) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.compression_method) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info.dosDate) != UNZ_OK) + err=UNZ_ERRNO; + + unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + + if (unzlocal_getLong(s->file,&file_info.crc) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info.compressed_size) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info.uncompressed_size) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.size_filename) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.size_file_extra) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.size_file_comment) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.disk_num_start) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&file_info.internal_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info.external_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&file_info_internal.offset_curfile) != UNZ_OK) + err=UNZ_ERRNO; + + lSeek+=file_info.size_filename; + if ((err==UNZ_OK) && (szFileName!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_filename0) && (fileNameBufferSize>0)) + if (fread(szFileName,(uInt)uSizeRead,1,s->file)!=1) + err=UNZ_ERRNO; + lSeek -= uSizeRead; + } + + + if ((err==UNZ_OK) && (extraField!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_extrafile,lSeek,SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) + if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1) + err=UNZ_ERRNO; + lSeek += file_info.size_file_extra - uSizeRead; + } + else + lSeek+=file_info.size_file_extra; + + + if ((err==UNZ_OK) && (szComment!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_commentfile,lSeek,SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + if ((file_info.size_file_comment>0) && (commentBufferSize>0)) + if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1) + err=UNZ_ERRNO; + lSeek+=file_info.size_file_comment - uSizeRead; + } + else + lSeek+=file_info.size_file_comment; + + if ((err==UNZ_OK) && (pfile_info!=NULL)) + *pfile_info=file_info; + + if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) + *pfile_info_internal=file_info_internal; + + return err; +} + + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. +*/ +extern int ZEXPORT unzGetCurrentFileInfo (file, + pfile_info, + szFileName, fileNameBufferSize, + extraField, extraFieldBufferSize, + szComment, commentBufferSize) + unzFile file; + unz_file_info *pfile_info; + char *szFileName; + uLong fileNameBufferSize; + void *extraField; + uLong extraFieldBufferSize; + char *szComment; + uLong commentBufferSize; +{ + return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); +} + +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ +extern int ZEXPORT unzGoToFirstFile (file) + unzFile file; +{ + int err=UNZ_OK; + unz_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + s->pos_in_central_dir=s->offset_central_dir; + s->num_file=0; + err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + + +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ +extern int ZEXPORT unzGoToNextFile (file) + unzFile file; +{ + unz_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + if (s->num_file+1==s->gi.number_entry) + return UNZ_END_OF_LIST_OF_FILE; + + s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; + s->num_file++; + err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + + +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzipStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ +extern int ZEXPORT unzLocateFile (file, szFileName, iCaseSensitivity) + unzFile file; + const char *szFileName; + int iCaseSensitivity; +{ + unz_s* s; + int err; + + + uLong num_fileSaved; + uLong pos_in_central_dirSaved; + + + if (file==NULL) + return UNZ_PARAMERROR; + + if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) + return UNZ_PARAMERROR; + + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + num_fileSaved = s->num_file; + pos_in_central_dirSaved = s->pos_in_central_dir; + + err = unzGoToFirstFile(file); + + while (err == UNZ_OK) + { + char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; + unzGetCurrentFileInfo(file,NULL, + szCurrentFileName,sizeof(szCurrentFileName)-1, + NULL,0,NULL,0); + if (unzStringFileNameCompare(szCurrentFileName, + szFileName,iCaseSensitivity)==0) + return UNZ_OK; + err = unzGoToNextFile(file); + } + + s->num_file = num_fileSaved ; + s->pos_in_central_dir = pos_in_central_dirSaved ; + return err; +} + + +/* + Read the local header of the current zipfile + Check the coherency of the local header and info in the end of central + directory about this file + store in *piSizeVar the size of extra info in local header + (filename and size of extra field data) +*/ +local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, + poffset_local_extrafield, + psize_local_extrafield) + unz_s* s; + uInt* piSizeVar; + uLong *poffset_local_extrafield; + uInt *psize_local_extrafield; +{ + uLong uMagic,uData,uFlags; + uLong size_filename; + uLong size_extra_field; + int err=UNZ_OK; + + *piSizeVar = 0; + *poffset_local_extrafield = 0; + *psize_local_extrafield = 0; + + if (fseek(s->file,s->cur_file_info_internal.offset_curfile + + s->byte_before_the_zipfile,SEEK_SET)!=0) + return UNZ_ERRNO; + + + if (err==UNZ_OK) + if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x04034b50) + err=UNZ_BADZIPFILE; + + if (unzlocal_getShort(s->file,&uData) != UNZ_OK) + err=UNZ_ERRNO; +/* + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) + err=UNZ_BADZIPFILE; +*/ + if (unzlocal_getShort(s->file,&uFlags) != UNZ_OK) + err=UNZ_ERRNO; + + if (unzlocal_getShort(s->file,&uData) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) + err=UNZ_BADZIPFILE; + + if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* date/time */ + err=UNZ_ERRNO; + + if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* crc */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size compr */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unzlocal_getLong(s->file,&uData) != UNZ_OK) /* size uncompr */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && + ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + + if (unzlocal_getShort(s->file,&size_filename) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) + err=UNZ_BADZIPFILE; + + *piSizeVar += (uInt)size_filename; + + if (unzlocal_getShort(s->file,&size_extra_field) != UNZ_OK) + err=UNZ_ERRNO; + *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + + SIZEZIPLOCALHEADER + size_filename; + *psize_local_extrafield = (uInt)size_extra_field; + + *piSizeVar += (uInt)size_extra_field; + + return err; +} + +/* + Open for reading data the current file in the zipfile. + If there is no error and the file is opened, the return value is UNZ_OK. +*/ +extern int ZEXPORT unzOpenCurrentFile (file) + unzFile file; +{ + int err=UNZ_OK; + int Store; + uInt iSizeVar; + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + uLong offset_local_extrafield; /* offset of the local extra field */ + uInt size_local_extrafield; /* size of the local extra field */ + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + if (!s->current_file_ok) + return UNZ_PARAMERROR; + + if (s->pfile_in_zip_read != NULL) + unzCloseCurrentFile(file); + + if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, + &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + return UNZ_BADZIPFILE; + + pfile_in_zip_read_info = (file_in_zip_read_info_s*) + ALLOC(sizeof(file_in_zip_read_info_s)); + if (pfile_in_zip_read_info==NULL) + return UNZ_INTERNALERROR; + + pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); + pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; + pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; + pfile_in_zip_read_info->pos_local_extrafield=0; + + if (pfile_in_zip_read_info->read_buffer==NULL) + { + TRYFREE(pfile_in_zip_read_info); + return UNZ_INTERNALERROR; + } + + pfile_in_zip_read_info->stream_initialised=0; + + if ((s->cur_file_info.compression_method!=0) && + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + Store = s->cur_file_info.compression_method==0; + + pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; + pfile_in_zip_read_info->crc32=0; + pfile_in_zip_read_info->compression_method = + s->cur_file_info.compression_method; + pfile_in_zip_read_info->file=s->file; + pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; + + pfile_in_zip_read_info->stream.total_out = 0; + + if (!Store) + { + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidpf)0; + + err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised=1; + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. + * In unzip, i don't wait absolutely Z_STREAM_END because I known the + * size of both compressed and uncompressed data + */ + } + pfile_in_zip_read_info->rest_read_compressed = + s->cur_file_info.compressed_size ; + pfile_in_zip_read_info->rest_read_uncompressed = + s->cur_file_info.uncompressed_size ; + + + pfile_in_zip_read_info->pos_in_zipfile = + s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + + iSizeVar; + + pfile_in_zip_read_info->stream.avail_in = (uInt)0; + + + s->pfile_in_zip_read = pfile_in_zip_read_info; + return UNZ_OK; +} + + +/* + Read bytes from the current file. + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if somes bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ +extern int ZEXPORT unzReadCurrentFile (file, buf, len) + unzFile file; + voidp buf; + unsigned len; +{ + int err=UNZ_OK; + uInt iRead = 0; + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if ((pfile_in_zip_read_info->read_buffer == NULL)) + return UNZ_END_OF_LIST_OF_FILE; + if (len==0) + return 0; + + pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; + + pfile_in_zip_read_info->stream.avail_out = (uInt)len; + + if (len>pfile_in_zip_read_info->rest_read_uncompressed) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_uncompressed; + + while (pfile_in_zip_read_info->stream.avail_out>0) + { + if ((pfile_in_zip_read_info->stream.avail_in==0) && + (pfile_in_zip_read_info->rest_read_compressed>0)) + { + uInt uReadThis = UNZ_BUFSIZE; + if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; + if (uReadThis == 0) + return UNZ_EOF; + if (fseek(pfile_in_zip_read_info->file, + pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile,SEEK_SET)!=0) + return UNZ_ERRNO; + if (fread(pfile_in_zip_read_info->read_buffer,uReadThis,1, + pfile_in_zip_read_info->file)!=1) + return UNZ_ERRNO; + pfile_in_zip_read_info->pos_in_zipfile += uReadThis; + + pfile_in_zip_read_info->rest_read_compressed-=uReadThis; + + pfile_in_zip_read_info->stream.next_in = + (Bytef*)pfile_in_zip_read_info->read_buffer; + pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; + } + + if (pfile_in_zip_read_info->compression_method==0) + { + uInt uDoCopy,i ; + if (pfile_in_zip_read_info->stream.avail_out < + pfile_in_zip_read_info->stream.avail_in) + uDoCopy = pfile_in_zip_read_info->stream.avail_out ; + else + uDoCopy = pfile_in_zip_read_info->stream.avail_in ; + + for (i=0;istream.next_out+i) = + *(pfile_in_zip_read_info->stream.next_in+i); + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, + pfile_in_zip_read_info->stream.next_out, + uDoCopy); + pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; + pfile_in_zip_read_info->stream.avail_in -= uDoCopy; + pfile_in_zip_read_info->stream.avail_out -= uDoCopy; + pfile_in_zip_read_info->stream.next_out += uDoCopy; + pfile_in_zip_read_info->stream.next_in += uDoCopy; + pfile_in_zip_read_info->stream.total_out += uDoCopy; + iRead += uDoCopy; + } + else + { + uLong uTotalOutBefore,uTotalOutAfter; + const Bytef *bufBefore; + uLong uOutThis; + int flush=Z_SYNC_FLUSH; + + uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; + bufBefore = pfile_in_zip_read_info->stream.next_out; + + /* + if ((pfile_in_zip_read_info->rest_read_uncompressed == + pfile_in_zip_read_info->stream.avail_out) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + flush = Z_FINISH; + */ + err=inflate(&pfile_in_zip_read_info->stream,flush); + + uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; + uOutThis = uTotalOutAfter-uTotalOutBefore; + + pfile_in_zip_read_info->crc32 = + crc32(pfile_in_zip_read_info->crc32,bufBefore, + (uInt)(uOutThis)); + + pfile_in_zip_read_info->rest_read_uncompressed -= + uOutThis; + + iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + if (err==Z_STREAM_END) + return (iRead==0) ? UNZ_EOF : iRead; + if (err!=Z_OK) + break; + } + } + + if (err==Z_OK) + return iRead; + return err; +} + + +/* + Give the current position in uncompressed data +*/ +extern z_off_t ZEXPORT unztell (file) + unzFile file; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + return (z_off_t)pfile_in_zip_read_info->stream.total_out; +} + + +/* + return 1 if the end of file was reached, 0 elsewhere +*/ +extern int ZEXPORT unzeof (file) + unzFile file; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + return 1; + else + return 0; +} + + + +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field that can be read + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ +extern int ZEXPORT unzGetLocalExtrafield (file,buf,len) + unzFile file; + voidp buf; + unsigned len; +{ + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + uInt read_now; + uLong size_to_read; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + size_to_read = (pfile_in_zip_read_info->size_local_extrafield - + pfile_in_zip_read_info->pos_local_extrafield); + + if (buf==NULL) + return (int)size_to_read; + + if (len>size_to_read) + read_now = (uInt)size_to_read; + else + read_now = (uInt)len ; + + if (read_now==0) + return 0; + + if (fseek(pfile_in_zip_read_info->file, + pfile_in_zip_read_info->offset_local_extrafield + + pfile_in_zip_read_info->pos_local_extrafield,SEEK_SET)!=0) + return UNZ_ERRNO; + + if (fread(buf,(uInt)size_to_read,1,pfile_in_zip_read_info->file)!=1) + return UNZ_ERRNO; + + return (int)read_now; +} + +/* + Close the file in zip opened with unzipOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ +extern int ZEXPORT unzCloseCurrentFile (file) + unzFile file; +{ + int err=UNZ_OK; + + unz_s* s; + file_in_zip_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + { + if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) + err=UNZ_CRCERROR; + } + + + TRYFREE(pfile_in_zip_read_info->read_buffer); + pfile_in_zip_read_info->read_buffer = NULL; + if (pfile_in_zip_read_info->stream_initialised) + inflateEnd(&pfile_in_zip_read_info->stream); + + pfile_in_zip_read_info->stream_initialised = 0; + TRYFREE(pfile_in_zip_read_info); + + s->pfile_in_zip_read=NULL; + + return err; +} + + +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ +extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) + unzFile file; + char *szComment; + uLong uSizeBuf; +{ + int err=UNZ_OK; + unz_s* s; + uLong uReadThis ; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz_s*)file; + + uReadThis = uSizeBuf; + if (uReadThis>s->gi.size_comment) + uReadThis = s->gi.size_comment; + + if (fseek(s->file,s->central_pos+22,SEEK_SET)!=0) + return UNZ_ERRNO; + + if (uReadThis>0) + { + *szComment='\0'; + if (fread(szComment,(uInt)uReadThis,1,s->file)!=1) + return UNZ_ERRNO; + } + + if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) + *(szComment+s->gi.size_comment)='\0'; + return (int)uReadThis; +} diff --git a/virtuanessrc097-master/zlib/unzip.h b/virtuanessrc097-master/zlib/unzip.h new file mode 100644 index 00000000..6c947a94 Binary files /dev/null and b/virtuanessrc097-master/zlib/unzip.h differ diff --git a/virtuanessrc097-master/zlib/zconf.h b/virtuanessrc097-master/zlib/zconf.h new file mode 100644 index 00000000..c37cb669 Binary files /dev/null and b/virtuanessrc097-master/zlib/zconf.h differ diff --git a/virtuanessrc097-master/zlib/zlib.h b/virtuanessrc097-master/zlib/zlib.h new file mode 100644 index 00000000..68a250e4 Binary files /dev/null and b/virtuanessrc097-master/zlib/zlib.h differ