コード例 #1
0
ファイル: Hook.cs プロジェクト: oathgg/GameSharp
        private void FillMemoryPointer(MemoryPointer memoryPointer, byte[] function)
        {
            MemoryPatch = new MemoryPatch(memoryPointer, function);

            byte[] retToMemoryPtr = MemoryPatch.PatchAddress.CreateFunctionCall();

            HookPatch = new MemoryPatch(TargetFuncPtr, retToMemoryPtr);
        }
コード例 #2
0
ファイル: MemoryPatchTests.cs プロジェクト: jsm174/wpc-emu-cs
        public void ShouldNotReturnValue()
        {
            TestContext.WriteLine("memoryPatch, should not return a value");

            var memoryPatch = MemoryPatch.getInstance();
            var result      = memoryPatch.hasPatch(0);

            Assert.That(result, Is.EqualTo(null));
        }
コード例 #3
0
ファイル: AddonProject.cs プロジェクト: wren4777/nfsw-server
        public AddonProject()
        {
            projectLocation = null;

            catalog     = new Catalog();
            accent      = new Accent();
            theme       = new Theme();
            language    = new Language();
            memoryPatch = new MemoryPatch();
        }
コード例 #4
0
ファイル: MemoryPatchTests.cs プロジェクト: jsm174/wpc-emu-cs
        public void ShouldAddVolatilePatch()
        {
            TestContext.WriteLine("memoryPatch, should add a volatile patch");

            var memoryPatch = MemoryPatch.getInstance();

            memoryPatch.addPatch(0x50, 20, true);
            var result = memoryPatch.hasPatch(0x50);

            Assert.That(result?.value, Is.EqualTo(20));
        }
コード例 #5
0
ファイル: MemoryPatchTests.cs プロジェクト: jsm174/wpc-emu-cs
        public void ShouldReturnPatchedValue()
        {
            TestContext.WriteLine("memoryPatch, should return a patched value");

            var memoryPatch = MemoryPatch.getInstance();

            memoryPatch.addPatch(0x50, 20);
            var result = memoryPatch.hasPatch(0x50);

            Assert.That(result?.value, Is.EqualTo(20));
        }
コード例 #6
0
        public void ShouldReturnPatchedGameId()
        {
            TestContext.WriteLine("MemoryPatchSkipBootCheck, should return a patched game id");

            var memoryPatch = MemoryPatch.getInstance();

            MemoryPatchSkipBootCheck.run(memoryPatch);
            var checkLo = memoryPatch.hasPatch(0xFFEC);
            var checkHi = memoryPatch.hasPatch(0xFFED);

            Assert.That(checkLo?.value, Is.EqualTo(0x00));
            Assert.That(checkHi?.value, Is.EqualTo(0xFF));
        }
コード例 #7
0
        public void ShouldReturnPatchedGameId()
        {
            TestContext.WriteLine("MemoryPatchGameId, should return a patched game id");

            var memoryPatch = MemoryPatch.getInstance();

            MemoryPatchGameId.run(memoryPatch, 0x50);
            var gameIdLo = memoryPatch.hasPatch(0x50);
            var gameIdHi = memoryPatch.hasPatch(0x51);

            Assert.That(gameIdLo?.value, Is.EqualTo(20));
            Assert.That(gameIdHi?.value, Is.EqualTo(99));
        }
コード例 #8
0
ファイル: CpuBoard.cs プロジェクト: jsm174/wpc-emu-cs
        public WpcCpuBoard(RomObject romObject)
        {
            ram         = Enumerable.Repeat((byte)0, memoryMapper.MEMORY_ADDR_HARDWARE).ToArray();
            romSizeMBit = romObject.romSizeMBit;
            systemRom   = romObject.systemRom;
            romFileName = romObject.fileName;
            gameRom     = romObject.gameRom;
            memoryPatch = MemoryPatch.getInstance();
            if (romObject.gameIdMemoryLocation != null)
            {
                MemoryPatchGameId.run(memoryPatch, (ushort)romObject.gameIdMemoryLocation);
            }
            if (romObject.skipWpcRomCheck)
            {
                Debug.Print("skipWpcRomCheck TRUE");
                MemoryPatchSkipBootCheck.run(memoryPatch);
            }
            memoryWriteHandler = MemoryHandler.getInstance(romObject.memoryPosition, ram);

            cpu = Cpu6809.getInstance(_write8, _read8);

            InterruptCallbackData interruptCallback = new InterruptCallbackData
            {
                irq         = cpu.irq,
                firqFromDmd = () =>
                {
                    cpu.firq();
                    asic.firqSourceDmd(true);
                },
                reset = cpu.reset
            };

            InitObject initObject = new InitObject
            {
                interruptCallback = interruptCallback,
                romSizeMBit       = romSizeMBit,
                romObject         = romObject,
                ram = ram,
                hasAlphanumericDisplay = romObject.hasAlphanumericDisplay
            };

            hasAlphaNumbericDisplay = romObject.hasAlphanumericDisplay;
            asic         = CpuBoardAsic.getInstance(initObject);
            soundBoard   = SoundBoard.getInstance(initObject);
            displayBoard = DisplayBoard.getInstance(initObject);
            externalIo   = ExternalIo.getInstance();

            ticksIrq = 0;
            protectedMemoryWriteAttempts = 0;
            memoryWrites = 0;
        }
コード例 #9
0
ファイル: MemoryPatchTests.cs プロジェクト: jsm174/wpc-emu-cs
        public void ShouldApplyPatchesToExposedMemory()
        {
            TestContext.WriteLine("memoryPatch, should applyPatchesToExposedMemory");

            var ram         = Enumerable.Repeat((byte)0x00, 20).ToArray();
            var memoryPatch = MemoryPatch.getInstance();

            memoryPatch.addPatch(10, 20, true);
            memoryPatch.addPatch(11, 21, true);

            var result = memoryPatch.applyPatchesToExposedMemory(ram);

            Assert.That(result[0], Is.EqualTo(0));
            Assert.That(result[10], Is.EqualTo(20));
            Assert.That(result[11], Is.EqualTo(21));
        }
コード例 #10
0
        private void InitializeAntiCheatHook()
        {
            byte[]       bytes  = HookPtr.GetReturnToPtr();
            MemoryModule module = TargetFuncPtr.GetMyModule();

            if (module == null)
            {
                throw new NullReferenceException("Cannot find a module which belongs to the specified pointer.");
            }

            MemoryAddress codeCave = module.FindCodeCaveInModule((uint)bytes.Length);

            CodeCavePatch = new MemoryPatch(codeCave, bytes);

            byte[] retToCodeCave = CodeCavePatch.PatchAddress.GetReturnToPtr();

            HookPatch = new MemoryPatch(TargetFuncPtr, retToCodeCave);
        }
コード例 #11
0
ファイル: MemoryPatchTests.cs プロジェクト: jsm174/wpc-emu-cs
        public void ShouldCleanupVolatilePatches()
        {
            TestContext.WriteLine("memoryPatch, should cleanup volatile patches");

            var memoryPatch = MemoryPatch.getInstance();

            memoryPatch.addPatch(0x50, 20, true);
            memoryPatch.addPatch(0x70, 21, true);
            memoryPatch.addPatch(0x90, 23);

            memoryPatch.removeVolatileEntries();
            var result1 = memoryPatch.hasPatch(0x50);
            var result2 = memoryPatch.hasPatch(0x70);
            var result3 = memoryPatch.hasPatch(0x90);

            Assert.That(result1, Is.EqualTo(null));
            Assert.That(result2, Is.EqualTo(null));
            Assert.That(result3?.value, Is.EqualTo(23));
        }
コード例 #12
0
ファイル: Hook.cs プロジェクト: oathgg/GameSharp
 public void Enable()
 {
     MemoryPatch.Enable();
     HookPatch.Enable();
 }
コード例 #13
0
ファイル: Hook.cs プロジェクト: oathgg/GameSharp
 public void Disable()
 {
     MemoryPatch.Disable();
     HookPatch.Disable();
 }
コード例 #14
0
        public AddonProject()
        {
            projectLocation = null;

            catalog = new Catalog();
            accent = new Accent();
            theme = new Theme();
            language = new Language();
            memoryPatch = new MemoryPatch();
        }