Example #1
0
 private void Start()
 {
     Clock.Init();
     _controller = new Emu8051(65536, 65536, 128);
     _controller.PortsUpdated += Tick;
     _controller.LoadIhex(Program.text);
     _controller.Clock = Clock;
     _debugger         = new Emu8051Dbg(_controller, UTerm);
     _debugger.Clock   = Clock; // to be able to control clock speed
 }
Example #2
0
 private void Start()
 {
     Clock.Init();
     _controller = new Emu8051(65536, 65536, 128);
     _controller.LoadIhex(Prog.text);
     _controller.Clock     = Clock;
     LedDisplay.Controller = _controller;
     _debugger             = new Emu8051Dbg(_controller, Term);
     _debugger.Clock       = Clock;
 }
Example #3
0
        private void Start()
        {
            foreach (SetPinBtn btn in Buttons)
            {
                btn.OnActivate = (n) => _controller[0, n] = 1;
            }

            Clock.Init();
            _controller = new Emu8051(65536, 65536, 128);
            _controller.LoadIhex(Prog.text);
            _controller.Clock = Clock;
            _debugger         = new Emu8051Dbg(_controller, Term);
            _debugger.Clock   = Clock;
        }
Example #4
0
        public Emu8051Dbg(Emu8051 emu, ITerminal term)
        {
            _emu8051  = emu;
            _terminal = term;

            // Create data grids

            _dataelements.Add("memgrid", new ByteHexGrid(1, 6, 8, 8, ' '));
            _dataelements.Add("memgrid_addr", new ByteHexGrid(1, 1, 8, 2, (char)0x00));
            _dataelements.Add("ports", new ByteHexGrid(6, 39, 1, 7, ' '));
            _dataelements.Add("ports_h", new ByteHexGrid(1, 39, 5, 7, ' '));
            _dataelements.Add("common_regs", new ByteHexGrid(22, 44, 1, 10, ' '));
            _dataelements.Add("common_regs_h", new ByteHexGrid(17, 44, 5, 10, ' '));
            _dataelements.Add("data_pointer", new ByteHexGrid(22, 74, 1, 2, (char)0x00));
            _dataelements.Add("data_pointer_h", new ByteHexGrid(17, 74, 5, 2, (char)0x00));
            _dataelements.Add("control_regs", new ByteHexGrid(14, 39, 1, 8, (char)0x00));
            _dataelements.Add("control_regs_h", new ByteHexGrid(9, 39, 5, 8, (char)0x00));
            _dataelements["control_regs"].LineOutputFormat       =
                _dataelements["control_regs_h"].LineOutputFormat =
                    "{0}   {1}    {2}  {3}   {4}  {5}   {6}   {7}";
            _dataelements.Add("machine_status", new ByteHexGrid(6, 63, 1, 8, ' '));
            _dataelements.Add("machine_status_h", new ByteHexGrid(1, 63, 5, 8, ' '));
            _dataelements["machine_status"].DataOutputFormat = _dataelements["machine_status_h"].DataOutputFormat = "DEC";
            _dataelements.Add("stack", new ByteHexGrid(1, 33, 14, 1, (char)0x00));
            _dataelements["stack"].LineOutputFormat = "{0:X2}";
            _dataelements.Add("ascii", new ByteHexGrid(25, 51, 4, 27, (char)0x00));
            _dataelements["ascii"].Hidden           = true;
            _dataelements["ascii"].DataOutputFormat = "STR";
            _dataelements.Add("addr_input", new ByteHexGrid(29, 6, 1, 2, (char)0x00));
            _dataelements.Add("code", new ByteHexGrid(22, 2, 1, 38, (char)0x00));
            _dataelements.Add("code_h", new ByteHexGrid(17, 2, 5, 38, (char)0x00));
            _dataelements["code"].DataOutputFormat = _dataelements["code_h"].DataOutputFormat = "STR";
            InitCodeFrame();

            // Create frames

            _frames.Add("memframe", new Frame(0, 0, "m)", 10, 31));
            _frames.Add("stackframe", new Frame(0, 31, "stck", 16, 6));
            _frames["stackframe"][8, 0] = ASCIICoDec.CodeASCII('>');
            _frames["stackframe"][8, 5] = ASCIICoDec.CodeASCII('<');
            _frames.Add("stateframe", new Frame(10, 0, "", 6, 31));
            _frames.Add("codeframe", new Frame(16, 0, "─PC────Opcodes───Assembly", 8, 42));
            _frames["codeframe"][6, 0]  = (byte)'>';
            _frames["codeframe"][6, 41] = (byte)'<';
            _frames.Add("portsframe", new Frame(0, 37, "─SP─P0─P1─P2─P3─IP─IE", 8, 24));
            _frames["portsframe"][6, 0]  = ASCIICoDec.CodeASCII('>');
            _frames["portsframe"][6, 23] = ASCIICoDec.CodeASCII('<');
            _frames.Add("commonregsframe", new Frame(16, 42, "─A──R0─R1─R2─R3─R4─R5─R6─R7─B──DPTR", 8, 38));
            _frames["commonregsframe"][6, 0]  = ASCIICoDec.CodeASCII('>');
            _frames["commonregsframe"][6, 37] = ASCIICoDec.CodeASCII('<');
            _frames.Add("controlregsframe", new Frame(8, 37, "─TMOD─TCON──TH0─TH1──TL0─TL1──SCON─PCON", 8, 43));
            _frames["controlregsframe"][6, 0]  = ASCIICoDec.CodeASCII('>');
            _frames["controlregsframe"][6, 42] = ASCIICoDec.CodeASCII('<');
            _frames.Add("pswframe", new Frame(0, 61, "─C─ACF0R1R0Ov──P", 8, 19));
            _frames["pswframe"][6, 0]  = ASCIICoDec.CodeASCII('>');
            _frames["pswframe"][6, 18] = ASCIICoDec.CodeASCII('<');
            _frames.Add("asciiframe", new Frame(24, 49, "ASCII──[t]", 7, 31));

            // emulator init
            _emu8051.BreakpointCallback += () => ShowMessage("Breakpoint reached");
            // terminal init
            _terminal.InputEnabled = false;
            // debugger init
            _focusedElement = _dataelements["memgrid"];
            SwitchMemType();
        }