Пример #1
0
        private void MakeTrace(ushort pc)
        {
            int[] s = new int[10];
            LibSameboy.sameboy_getregs(SameboyState, s);

            Tracer.Put(new(
                           disassembly: LR35902.Disassemble(
                               pc,
                               addr => LibSameboy.sameboy_cpuread(SameboyState, addr),
                               _settings.UseRGBDSSyntax,
                               out _).PadRight(36),
                           registerInfo: string.Format(
                               "A:{0:x2} F:{1:x2} B:{2:x2} C:{3:x2} D:{4:x2} E:{5:x2} H:{6:x2} L:{7:x2} SP:{8:x4} LY:{9:x2} Cy:{10}",
                               s[1] & 0xFF,
                               s[2] & 0xFF,
                               s[3] & 0xFF,
                               s[4] & 0xFF,
                               s[5] & 0xFF,
                               s[6] & 0xFF,
                               s[7] & 0xFF,
                               s[8] & 0xFF,
                               s[9] & 0xFFFF,
                               LibSameboy.sameboy_cpuread(SameboyState, 0xFF44),
                               CycleCount
                               )));
        }
Пример #2
0
        private void FrameAdvancePost()
        {
            if (IsLagFrame)
            {
                LagCount++;
            }

            Frame++;

            if (_scanlinecbline == -1)
            {
                _scanlinecb?.Invoke(LibSameboy.sameboy_cpuread(SameboyState, 0xFF40));
            }
        }
Пример #3
0
        private void InitMemoryDomains()
        {
            CreateMemoryDomain(LibSameboy.MemoryAreas.ROM, "ROM");
            CreateMemoryDomain(LibSameboy.MemoryAreas.RAM, "WRAM");
            CreateMemoryDomain(LibSameboy.MemoryAreas.CART_RAM, "CartRAM");
            CreateMemoryDomain(LibSameboy.MemoryAreas.VRAM, "VRAM");
            CreateMemoryDomain(LibSameboy.MemoryAreas.HRAM, "HRAM");
            CreateMemoryDomain(LibSameboy.MemoryAreas.IO, "MMIO");
            CreateMemoryDomain(LibSameboy.MemoryAreas.BOOTROM, "BIOS");
            CreateMemoryDomain(LibSameboy.MemoryAreas.OAM, "OAM");
            CreateMemoryDomain(LibSameboy.MemoryAreas.BGP, "BGP");
            CreateMemoryDomain(LibSameboy.MemoryAreas.OBP, "OBP");
            CreateMemoryDomain(LibSameboy.MemoryAreas.IE, "IE");

            // also add a special memory domain for the system bus, where calls get sent directly to the core each time
            _memoryDomains.Add(new MemoryDomainDelegate("System Bus", 65536, MemoryDomain.Endian.Little,
                                                        delegate(long addr)
            {
                if (addr < 0 || addr >= 65536)
                {
                    throw new ArgumentOutOfRangeException();
                }

                return(LibSameboy.sameboy_cpuread(SameboyState, (ushort)addr));
            },
                                                        delegate(long addr, byte val)
            {
                if (addr < 0 || addr >= 65536)
                {
                    throw new ArgumentOutOfRangeException();
                }

                LibSameboy.sameboy_cpuwrite(SameboyState, (ushort)addr, val);
            }, 1));

            MemoryDomains = new MemoryDomainList(_memoryDomains);
            _serviceProvider.Register(MemoryDomains);
        }