Пример #1
0
        public static IEnumerable <bool> INCREMENT_REG(Memory mem, Registers reg)
        {
            byte val;

            switch (mem[reg.PC])
            {
            case 0x04:
                val    = reg.B;
                reg.B += 1;
                Debug.Log("INC B");
                break;

            case 0x0C:
                val    = reg.C;
                reg.C += 1;
                Debug.Log("INC C");
                break;

            case 0x24:
                val    = reg.H;
                reg.H += 1;
                Debug.Log("INC H");
                break;

            default:
                throw new InvalidOperationException("Increment instruction has not been implemented yet!");
            }
            reg.fZ  = (reg.C == 0) ? true : false;
            reg.fN  = false;
            reg.fH  = ZMath.CheckHalfCarry(val, 1);
            reg.PC += 1;

            yield break;
        }
Пример #2
0
        public static IEnumerable <bool> DECREMENT_REG(Memory mem, Registers reg)
        {
            byte val = 0;

            switch (mem[reg.PC])
            {
            case 0x05:
                val    = reg.B;
                reg.B -= 1;
                Debug.Log("DEC B");
                break;

            case 0x15:
                val    = reg.D;
                reg.D -= 1;
                Debug.Log("DEC D");
                break;

            case 0x0D:
                val    = reg.C;
                reg.C -= 1;
                Debug.Log("DEC C");
                break;

            case 0x1D:
                val    = reg.E;
                reg.E -= 1;
                Debug.Log("DEC E");
                break;

            case 0x3D:
                val    = reg.A;
                reg.A -= 1;
                Debug.Log("DEC A");
                break;
            }
            reg.fZ = (val - 1) == 0;
            reg.fN = true;
            reg.fH = ZMath.CheckHalfBorrow(val, 1);

            reg.PC += 1;

            yield break;
        }
Пример #3
0
        public static IEnumerable <bool> COMPARE(Memory mem, Registers reg)
        {
            byte val = 0;

            switch (mem[reg.PC])
            {
            case 0xFE:
                val = mem[reg.PC + 1];
                Debug.Log("CP d8");
                yield return(true);

                break;
            }
            reg.fZ = reg.A == val;
            reg.fN = true;
            reg.fH = !ZMath.CheckHalfBorrow(reg.A, val);
            reg.fC = reg.A < val;

            reg.PC += 2;

            yield break;
        }
Пример #4
0
        public static IEnumerable <bool> SUB(Memory mem, Registers reg)
        {
            byte val = reg.A;

            switch (mem[reg.PC])
            {
            case 0x90:
                val = reg.B;
                Debug.Log("SUB B");
                break;

            default:
                throw new InvalidOperationException("Subtraction instruction has not been implemented yet!");
            }
            reg.fZ = reg.A - val == 0;
            reg.fN = true;
            reg.fH = !ZMath.CheckHalfBorrow(reg.A, val);
            reg.fC = reg.A > val;
            reg.A -= val;

            reg.PC += 1;
            yield break;
        }
Пример #5
0
        private void button2_Click(object sender, EventArgs e)
        {
            double           L0  = 0;//(double)numericUpDown1.Value;//中央经线
            List <PointPair> pts = dataGridView1.DataSource as List <PointPair>;

            List <PointPair> DealData = new List <PointPair>();

            for (int i = 0; i < pts.Count; i++)
            {
                PointPair pt = pts[i];
                double    b1 = pt.X1;
                double    l1 = pt.Y1;
                double    h1 = pt.Z1;

                double bb1 = ZMath.RADtoDMS(new Angle(b1).ToRadian().Rad);
                double ll1 = ZMath.RADtoDMS(new Angle(l1).ToRadian().Rad);

                //转换成空间直角坐标
                double X, Y, Z;
                ZMath.BLHtoXYZ(ZMath.a84, ZMath.e284, bb1, ll1, h1, out X, out Y, out Z);

                double x2 = pt.X2;
                double y2 = pt.Y2;
                double z2 = pt.Z2;
                double a0, a2, a4, a6, a8;
                ZMath.Cal_a(ZMath.a54, ZMath.e254, out a0, out a2, out a4, out a6, out a8);
                double bf = ZMath.Bf(x2, a0, a2, a4, a6, a8);//底点坐标
                Angle  angle = new Angle(L0);
                double bfRadian = angle.ToRadian().Rad;
                double B, L;
                y2 = y2 - 500000;
                ZMath.Cal_BL(bf, y2, bfRadian, ZMath.a54, ZMath.e254, ZMath.e2254, out B, out L);

                //Radian rad = new Radian(B);
                double b2 = ZMath.RADtoDMS(B);
                //Radian rad2 = new Radian(L);
                double l2 = ZMath.RADtoDMS(L);

                double XX, YY, ZZ;
                //转换成空间直角坐标
                ZMath.BLHtoXYZ(ZMath.a54, ZMath.e254, b2, l2, z2, out XX, out YY, out ZZ);
                PointPair pt22 = new PointPair();
                pt22.ID = pt.ID;
                pt22.X1 = X;
                pt22.Y1 = Y;
                pt22.Z1 = Z;
                pt22.X2 = XX;
                pt22.Y2 = YY;
                pt22.Z2 = ZZ;
                DealData.Add(pt22);
            }

            double dx;
            double dy;
            double dz;
            double k;
            double ex;
            double ey;
            double ez;

            ZMath.Cal7Parameter(DealData, out dx, out dy, out dz, out k, out ex, out ey, out ez);
            string res = string.Format("七参数结果如下:\nDx:{0}\nDy:{1}\nDz:{2}\nex:{3}\ney:{4}\nez:{5}\nk:{6}", dx, dy, dz, ex, ey, ez, k);

            richTextBox1.Text = res;
        }