Esempio n. 1
0
        private void InitializeEmulator(string fileName, bool debug)
        {
            emulatorThread = new Thread(() =>
            {
                emulator = new Emulator {
                    Debug = debug
                };
                emulator.Run(fileName);
            });
            emulatorThread.Start();

            //Wait for the emulator to be available
            while (emulator?.IsRunning != true)
            {
                Thread.Sleep(5);
            }

            //Build the UI to display the debug data
            InitializeDebugDataGrid(ref RegistersGrid, ref registersValues, ref emulator.Chip8.V);
            InitializeDebugDataGrid(ref MemoryGrid, ref memoryValues, ref emulator.Chip8.Memory);
            InitializeDebugDataGrid(ref KeysGrid, ref keyValues, ref emulator.Chip8.Keys);
            InitializeDebugDataGrid(ref StackGrid, ref stackValues, ref emulator.Chip8.Stack);

            //Hook the events
            KeyDown             += emulator.OnKeyPressed;
            KeyUp               += emulator.OnKeyReleased;
            emulator.OnNewFrame += OnImageChanged;
            emulator.OnUiTick   += OnRefreshDebugGrids;

            //Initialize the dissasembler
            var disassembler = new Disassembler.Disassembler(emulator.ProgramCode);

            FormatDissasembledCode(disassembler.Dissasemble());
        }
Esempio n. 2
0
        private void GenerateASMFile()
        {
            //Output($"Creating ASM File");

            var map = new Dictionary <ulong, List <string> >();

            foreach (var symbol in Linker.Symbols)
            {
                if (!map.TryGetValue(symbol.VirtualAddress, out List <string> list))
                {
                    list = new List <string>();
                    map.Add(symbol.VirtualAddress, list);
                }

                list.Add(symbol.Name);
            }

            var textSection     = Linker.Sections[(int)SectionKind.Text];
            var startingAddress = textSection.VirtualAddress + MultibootHeaderLength;
            var fileOffset      = Linker.BaseFileOffset + MultibootHeaderLength;
            var length          = textSection.Size;

            var code2 = File.ReadAllBytes(LauncherSettings.OutputFile);

            var code = new byte[code2.Length];

            for (ulong i = fileOffset; i < (ulong)code2.Length; i++)
            {
                code[i - fileOffset] = code2[i];
            }

            var disassembler = new Disassembler.Disassembler(LauncherSettings.Platform);

            disassembler.SetMemory(code, startingAddress);

            using (var dest = File.CreateText(LauncherSettings.AsmFile))
            {
                foreach (var instruction in disassembler.Decode())
                {
                    if (map.TryGetValue(instruction.Address, out List <string> list))
                    {
                        foreach (var entry in list)
                        {
                            dest.WriteLine($"; {entry}");
                        }
                    }

                    dest.WriteLine(instruction.Full);

                    if (instruction.Address > startingAddress + length)
                    {
                        break;
                    }
                }
            }

            //Output($"ASM File Created");
        }
Esempio n. 3
0
 static void Main(string[] args)
 {
     using (var dialog = new OpenFileDialog())
     {
         if (dialog.ShowDialog() != DialogResult.OK)
         {
             return;
         }
         var disassembler = new Disassembler.Disassembler(new BaseResolver(false, Game.Ghosts), dialog.FileName);
         var path         = Path.Combine(Path.GetDirectoryName(dialog.FileName), Path.GetFileNameWithoutExtension(dialog.FileName));
         using (var writer = new StreamWriter(path + ".txt"))
         {
             foreach (var function in disassembler.Disassemble())
             {
                 writer.Write(function.ToString());
             }
         }
     }
 }