예제 #1
0
        // -------------------------------------------------------------------------------------------------
        // Updates the register
        //
        // \param   e
        // Key event information.
        // \param   s
        // The string.
        // \param   reg
        // The register.
        // -------------------------------------------------------------------------------------------------
        private void UpdateRegister(KeyEventArgs e, string s, Z80Register reg)
        {
            if (e.KeyCode == Keys.Enter)
            {
                int addr = 0;
                if (MainForm.ParseExpression(s, ref addr))
                {
                    registerData[(int)reg].Value = addr;

                    SetRegister(addr, reg);

                    Program.serialport.SendRegisters(
                        delegate(byte[] response, int tag)
                    {
                        Invoke((MethodInvoker) delegate { Program.myMainForm.UpdateAllWindows(true); });
                    }
                        );



                    //Program.telnetConnection.SendCommand("set-register "+assign+""+addr, RegChangeCallback);

                    UIUpdate();
                }
            }
        }
예제 #2
0
        // -------------------------------------------------------------------------------------------------
        // Regcallback, called when the register
        //
        // \param   response    The response.
        // \param   tag         The tag.
        // -------------------------------------------------------------------------------------------------
        public void regcallback(byte[] response, int tag)
        {
            int index = 3;

            registerData[(int)Z80Register.f_e].SetValue(Serial.Get8Bit(ref response, ref index));
            registerData[(int)Z80Register.a_e].SetValue(Serial.Get8Bit(ref response, ref index));
            registerData[(int)Z80Register.r].SetValue(Serial.Get8Bit(ref response, ref index));
            registerData[(int)Z80Register.i].SetValue(Serial.Get8Bit(ref response, ref index));
            registerData[(int)Z80Register.f].SetValue(Serial.Get8Bit(ref response, ref index));
            registerData[(int)Z80Register.a].SetValue(Serial.Get8Bit(ref response, ref index));

            registerData[(int)Z80Register.iy].SetValue(Serial.Get16Bit(ref response, ref index));
            registerData[(int)Z80Register.ix].SetValue(Serial.Get16Bit(ref response, ref index));
            registerData[(int)Z80Register.bc_e].SetValue(Serial.Get16Bit(ref response, ref index));
            registerData[(int)Z80Register.de_e].SetValue(Serial.Get16Bit(ref response, ref index));
            registerData[(int)Z80Register.hl_e].SetValue(Serial.Get16Bit(ref response, ref index));
            registerData[(int)Z80Register.bc].SetValue(Serial.Get16Bit(ref response, ref index));
            registerData[(int)Z80Register.de].SetValue(Serial.Get16Bit(ref response, ref index));
            registerData[(int)Z80Register.hl].SetValue(Serial.Get16Bit(ref response, ref index));
            registerData[(int)Z80Register.pc].SetValue(Serial.Get16Bit(ref response, ref index));
            registerData[(int)Z80Register.sp].SetValue(Serial.Get16Bit(ref response, ref index) + 2);   //plus 2 because comms has return address on stack.

            for (int i = (int)Z80Register.MACHINE_ID_00; i <= (int)Z80Register.TILEMAP_GFX_ADR_6F; i++)
            {
                Z80Register reg = (Z80Register)i;
                registerData[(int)reg].SetValue(Serial.Get8Bit(ref response, ref index));
            }
            //grab the current debugging mode
            int mode = Serial.Get8Bit(ref response, ref index);

            //grab thr stacl data
            stackdata[0] = Serial.Get16Bit(ref response, ref index);
            stackdata[1] = Serial.Get16Bit(ref response, ref index);
            stackdata[2] = Serial.Get16Bit(ref response, ref index);
            stackdata[3] = Serial.Get16Bit(ref response, ref index);


            //not in step mode be device is! then breakpoint has happened
            MainForm.mySourceWindow.UpdatePauseStatus(mode);



            //copy bank data from data
            for (int i = 0; i < MainForm.banks.Length; i++)
            {
                MainForm.banks[i] = registerData[(int)(Z80Register.MMU0_0000_50 + i)].Value;
            }


            if (InvokeRequired)
            {
                Invoke((MethodInvoker) delegate { UIUpdate(); });
            }
            else
            {
                UIUpdate();
            }
        }
예제 #3
0
        // -------------------------------------------------------------------------------------------------
        // Initialises the register
        //
        // \param   name
        // The name.
        // \param   display
        // The display.
        // \param   index
        // Zero-based index of the.
        // \param   UiTextBox
        // The text box control.
        // \param   DF
        // The df.
        // -------------------------------------------------------------------------------------------------
        void InitialiseRegister(string name, string display, Z80Register index, TextBox UiTextBox, DisplayFunctionCallback DF)
        {
            RegisterItem reg = new RegisterItem()
            {
                Value = 0, DisplayString = display, uiTextBox = UiTextBox, GetString = DF
            };

            registerData[(int)index] = reg;
        }
예제 #4
0
        void InitialiseRegister(string name, string display, string regex, Z80Register index, TextBox UiTextBox)
        {
            RegisterItem reg = new RegisterItem()
            {
                RegisterName = name, Value = 0, regex = new Regex(regex), DisplayString = display, uiTextBox = UiTextBox, reg = index
            };

            registerData[(int)index] = reg;

            //registerData.Add(new RegisterItem() { RegisterName = name, Value = 0 ,regex = new Regex(regex), DisplayString = display });
            //nameMap.Add(name, registerData.Count - 1);
        }
예제 #5
0
        private void UpdateRegister(KeyEventArgs e, string s, Z80Register reg)
        {
            if (e.KeyCode == Keys.Enter)
            {
                int addr = 0;
                if (MainForm.ParseExpression(s, ref addr))
                {
                    registerData[(int)reg].Value = addr;

                    SetRegister(addr, reg);

                    //Program.telnetConnection.SendCommand("set-register "+assign+""+addr, RegChangeCallback);

                    UIUpdate();
                }
            }
        }
예제 #6
0
 // -------------------------------------------------------------------------------------------------
 // Sets a register
 //
 // \param   value
 // The value.
 // \param   reg
 // The register.
 // -------------------------------------------------------------------------------------------------
 public void SetRegister(int value, Z80Register reg)
 {
     registerData[(int)reg].Value = value;
 }
예제 #7
0
 // -------------------------------------------------------------------------------------------------
 // Gets register label string
 //
 // \param   reg
 // The register.
 //
 // \return  The register label string.
 // -------------------------------------------------------------------------------------------------
 public string GetRegisterLabelString(Z80Register reg)
 {
     return(registerData[(int)reg].labelstring);
 }
예제 #8
0
 /// -------------------------------------------------------------------------------------------------
 /// <summary> Gets register valueint. </summary>
 ///
 /// <remarks> 07/09/2018. </remarks>
 ///
 /// <param name="reg"> The register. </param>
 ///
 /// <returns> The register valueint. </returns>
 /// -------------------------------------------------------------------------------------------------
 public int GetRegisterValueint(Z80Register reg)
 {
     return(registerData[(int)reg].Value);
 }
예제 #9
0
        // -------------------------------------------------------------------------------------------------
        // Constructor
        //
        // \param   name        The name.
        // \param   viewname    The viewname.
        // -------------------------------------------------------------------------------------------------
        public Registers(string name, string viewname)
        {
            InitializeComponent();
            registerData = new RegisterItem[(int)Z80Register.numRegisters];



            InitialiseRegister("A", "X2", Z80Register.a, RegA, DisplaySimpleRegister);
            InitialiseRegister("HL", "X4", Z80Register.hl, RegHL, DisplaySimpleRegister);
            InitialiseRegister("BC", "X4", Z80Register.bc, RegBC, DisplaySimpleRegister);
            InitialiseRegister("DE", "X4", Z80Register.de, RegDE, DisplaySimpleRegister);


            InitialiseRegister("A'", "X2", Z80Register.a_e, RegExA, DisplaySimpleRegister);
            InitialiseRegister("HL'", "X4", Z80Register.hl_e, RegExHL, DisplaySimpleRegister);
            InitialiseRegister("BC'", "X4", Z80Register.bc_e, RegExBC, DisplaySimpleRegister);
            InitialiseRegister("DE'", "X4", Z80Register.de_e, RegExDE, DisplaySimpleRegister);

            InitialiseRegister("IX", "X4", Z80Register.ix, RegIX, DisplaySimpleRegister);
            InitialiseRegister("IY", "X4", Z80Register.iy, RegIY, DisplaySimpleRegister);

            InitialiseRegister("SP", "X4", Z80Register.sp, RegSP, DisplaySimpleRegister);
            InitialiseRegister("PC", "X4", Z80Register.pc, RegPC, DisplaySimpleRegister);

            InitialiseRegister("I", "X2", Z80Register.i, RegI, DisplaySimpleRegister);
            InitialiseRegister("R", "X2", Z80Register.r, RegR, DisplaySimpleRegister);

            InitialiseRegister("F", "X2", Z80Register.f, RegF, DisplaySimpleRegister);
            InitialiseRegister("F'", "X2", Z80Register.f_e, RegExF, DisplaySimpleRegister);



            InitialiseRegister("F'", "X2", Z80Register.MACHINE_ID_00, RegExF, DisplaySimpleRegister);

            int y = 7;

            for (int i = (int)Z80Register.MACHINE_ID_00; i <= (int)Z80Register.TILEMAP_GFX_ADR_6F; i++)
            {
                Z80Register reg = (Z80Register)i;


                Label lb = new System.Windows.Forms.Label();

                lb.AutoSize  = true;
                lb.Location  = new System.Drawing.Point(6, y);
                lb.Name      = "";
                lb.Size      = new System.Drawing.Size(37, 13);
                lb.TabIndex  = 67;
                lb.Text      = reg.ToString();
                lb.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
                lb.Font      = new System.Drawing.Font("Consolas", 8.0F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));


                TextBox HW = new System.Windows.Forms.TextBox();

                HW.Font        = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                HW.Location    = new System.Drawing.Point(180, y);
                HW.Name        = "RegA";
                HW.Size        = new System.Drawing.Size(210, 23);
                HW.TabIndex    = 32;
                HW.Text        = "$00 / 256";
                HW.ReadOnly    = false;
                HW.BorderStyle = BorderStyle.None;

                this.hwpanel.Controls.Add(lb);
                this.hwpanel.Controls.Add(HW);


                y += 25;


                InitialiseRegister(reg.ToString(), "X2", reg, HW, DisplaySimpleRegister);
            }
        }
예제 #10
0
 public void SetRegister(int value, Z80Register reg)
 {
     registerData[(int)reg].Value = value;
     Program.telnetConnection.SendCommand("set-register " + registerData[(int)reg].RegisterName + "=" + value, RegChangeCallback);
 }