RRCA() public method

public RRCA ( ) : void
return void
Ejemplo n.º 1
0
        public void HEXPRT2()
        {
            Z80.C  = Z80.A;
            Z80.A &= 0b1111_0000;
            Z80.RRCA();
            Z80.RRCA();
            Z80.RRCA();
            Z80.RRCA();

            MOJISAVE();
            Mem.LD_8(Z80.IY, Z80.A);
            Z80.IY++;
            Z80.A  = Z80.C;
            Z80.A &= 0b0000_1111;
            MOJISAVE();
            Mem.LD_8(Z80.IY, Z80.A);
            Z80.IY++;

            //RET
        }
Ejemplo n.º 2
0
        //    JP PRNWK
        //    JP PRNWKI
        //    JP CONVERT
        //    JP CONVERT2
        //    JP GETPARA
        //    JP OPEX

        public void PRNWK()
        {
            byte[] buf = Encoding.UTF8.GetBytes(CHCHR);

            Z80.B = 11;
            Z80.A = 0x41;// 'A';
            //Mem.LD_8(CHCHR, Z80.A);
            CHCHR = "A";
            Z80.A = 1;
            //Mem.LD_8(CHNUM, Z80.A);
            CHNUM  = 1;
            Z80.HL = 0x104;
            Mem.LD_16(XY, Z80.HL);
PRNWK2:
            Mem.stack.Push(Z80.BC);
            Z80.HL = Mem.LD_16(XY);
            PC88.CALL(0x429D);
            Z80.EX_DE_HL();
            Z80.HL = 0;// CHCHR;
            Z80.LDI(buf);
            Z80.HL--;
            //Mem.LD_8(Z80.HL, (byte)(Mem.LD_8(Z80.HL) + 1));
            buf[0]++;
            Z80.A = Mem.LD_8(CHNUM);
            Z80.B = Z80.A;
            PC88.CALL(WKGET);
            Z80.A = 3;
            LOC();
            Z80.Zero = (Mem.LD_8((ushort)(Z80.IX + 31)) & 0x08) == 0;
            ONOFF();
            Z80.C = Mem.LD_8((ushort)(Z80.IX + 6));
            Z80.A = Mem.LD_8(CHNUM);
            if (Z80.A - 7 == 0)
            {
                goto PRNW4;
            }
            if (Z80.A - 11 == 0)
            {
                goto PRNW4;
            }
            Z80.A -= 4;
            if (Z80.A - 3 < 0)
            {
                goto PRNW3;
            }
            Z80.A  = Z80.C;
            Z80.A -= 4;
            Z80.C  = Z80.A;
            goto PRNW4;
PRNW3:
            Z80.A  = Z80.C;
            Z80.A &= 0b0000_1111;
            Z80.C  = Z80.A;
PRNW4:
            Z80.A = 7;
            LOC();
            Z80.EX_DE_HL();
            Z80.L = Z80.C;
            PRNSUB();
            Z80.A = 36;
            LOC();
            Z80.EX_DE_HL();
            Z80.L = Mem.LD_8((ushort)(Z80.IX + 18));
            PRNSUB();
            Z80.A = 11;
            LOC();
            Z80.EX_DE_HL();
            Z80.L = Mem.LD_8((ushort)(Z80.IX + 9));
            Z80.H = Mem.LD_8((ushort)(Z80.IX + 10));
            PRNS1();
            Z80.A = 17;
            LOC();
            Z80.EX_DE_HL();
            Z80.L = Mem.LD_8((ushort)(Z80.IX + 2));
            Z80.H = Mem.LD_8((ushort)(Z80.IX + 3));
            PRNS2();
            Z80.A = Mem.LD_8((ushort)(Z80.IX + 32));
            Mem.stack.Push(Z80.AF);
            Z80.A &= 0x0F0;
            Z80.RRCA();
            Z80.RRCA();
            Z80.RRCA();
            Z80.RRCA();
            Z80.A++;
            Z80.A += 0x30;
            Mem.stack.Push(Z80.AF);
            Z80.A = 22;
            LOC();
            PC88.CALL(0x429D);
            Z80.AF = Mem.stack.Pop();
            Mem.LD_8(Z80.HL, Z80.A);
            Z80.AF  = Mem.stack.Pop();
            Z80.A  &= 0x0F;
            Z80.HL  = 0;// KEYD;
            Z80.A  += Z80.A;
            Z80.D   = 0;
            Z80.E   = Z80.A;
            Z80.HL += Z80.DE;
            Mem.stack.Push(Z80.HL);
            Z80.A = 23;
            LOC();
            PC88.CALL(0x429D);
            Z80.EX_DE_HL();
            Z80.HL = Mem.stack.Pop();
            byte[] buf1 = Encoding.UTF8.GetBytes(KEYD[Z80.HL / 2]);
            Z80.HL = 0;
            Z80.LDI();
            Z80.LDI();
            Z80.A = 26;
            LOC();
            Z80.Zero = (Mem.LD_8((ushort)(Z80.IX + 31)) & 0x80) == 0;
            ONOFF();
            Z80.A = 30;
            LOC();
            Z80.Zero = (Mem.LD_8((ushort)(Z80.IX + 33)) & 0x20) == 0;
            ONOFF();
            Z80.B = 1;
            PC88.CALL(WKGET);
            Mem.stack.Push(Z80.IX);
            Z80.HL  = Mem.stack.Pop();
            Z80.DE  = 8;
            Z80.A  &= Z80.A;
            Z80.HL -= Z80.DE;// L/R DATA AREA
            Z80.A   = Mem.LD_8(CHNUM);
            Z80.A--;
            if (Z80.A - 3 < 0)
            {
                goto PRNW5;
            }
            Z80.A -= 3;
            if (Z80.A - 4 < 0)
            {
                goto PRNW6;
            }
            Z80.A -= 4;
            Z80.A += 4;
PRNW5:
            Z80.E   = Z80.A;
            Z80.D   = 0;
            Z80.HL += Z80.DE;
            Z80.A   = Mem.LD_8(CHNUM);
            if (Z80.A - 11 != 0)
            {
                goto PRNW50;
            }
            Z80.A = Mem.LD_8(Z80.HL);
            Z80.RRCA();
            Z80.RRCA();
            goto PRNW51;
PRNW50:
            Z80.A = Mem.LD_8(Z80.HL);
PRNW51:
            Z80.A &= 0b1100_0000;
            if (Z80.A == 0)
            {
                goto PRNW6;
            }
            if (Z80.A - 0xc0 == 0)
            {
                goto PRNW6;
            }
            Z80.Zero = (Z80.A & 0x80) == 0;
            if (!Z80.Zero)
            {
                goto PRNW52;
            }
            Z80.A = 0x52;// 'R';
            goto PRNW7;
PRNW52:
            Z80.A = 0x4c;// 'L';
            goto PRNW7;
PRNW6:
            Z80.A = 0x43;// 'C';
PRNW7:
            Mem.stack.Push(Z80.AF);
            Z80.A = 34;
            LOC();
            PC88.CALL(0x429D);
            Z80.AF = Mem.stack.Pop();
            Mem.LD_8(Z80.HL, Z80.A);

            // --	MUTE CHECK	--

            Z80.BC = 0;
            //Z80.HL = BEFK;
            expand.KEYCHK(ref BEFK[0]);// PC88.CALL(KEYCHK);
            if (!Z80.Zero)
            {
                goto PRNW71;
            }
            Z80.BC = 0xf801;
            //Z80.HL = BEFK + 1;
            expand.KEYCHK(ref BEFK[1]); //PC88.CALL(KEYCHK);
            if (Z80.Zero)
            {
                goto PRNW9;
            }
            Z80.C = 9;
            goto PRNW72;
PRNW71:
            Z80.C = 1;
PRNW72:
            Z80.B = 8;
            //PRNW73:
            do
            {
                Z80.RRCA();
                if (!Z80.Carry)
                {
                    goto PRNW74;
                }
                Z80.C++;
                Z80.B--;
            } while (Z80.B != 0);
            goto PRNW9;
PRNW74:
            Z80.B = Z80.C;
            PC88.CALL(WKGET);
            Z80.Zero = (Mem.LD_8((ushort)(Z80.IX + 31)) & 0x08) == 0;
            if (!Z80.Zero)
            {
                goto PRNW8;
            }
            Mem.LD_8((ushort)(Z80.IX + 31), (byte)(Mem.LD_8((ushort)(Z80.IX + 31)) | 0x08));
            goto PRNW9;
PRNW8:
            Mem.LD_8((ushort)(Z80.IX + 31), (byte)(Mem.LD_8((ushort)(Z80.IX + 31)) & 0xf7));
PRNW9:
            Z80.DE = Mem.LD_16(XY);
            Z80.E++;
            Mem.LD_16(XY, Z80.DE);
            Z80.A = Mem.LD_8(CHNUM);
            Z80.A++;
            Mem.LD_8(CHNUM, Z80.A);
            Z80.BC = Mem.stack.Pop();
            Z80.B--;
            if (Z80.B != 0)
            {
                goto PRNWK2;
            }

            // --	RETKEY CHCEK	--

            Z80.HL = RETK;
            Z80.BC = 0x7f01;
            PC88.CALL(KEYCHK);
            if (Z80.Zero)
            {
                goto PRNWA;
            }
            Z80.Zero = (Z80.A & 0x08) == 0;
            if (!Z80.Zero)
            {
                goto PRNWA;
            }
            //    DI
            PC88.CALL(DRIVE);
            //    EI

            // --	F5 CHECK	--

PRNWA:
            Z80.HL = F5K;
            Z80.BC = 0xdf09;
            PC88.CALL(KEYCHK);
            if (Z80.Zero)
            {
                goto PRNWB;
            }
            Z80.Zero = (Z80.A & 0x20) == 0;
            if (!Z80.Zero)
            {
                goto PRNWB;
            }
            Z80.A ^= Z80.A;
            PC88.CALL(MSTART);
PRNWB:
            FMPUT();

            // --	オンショクナンバー ヒョウジ	--

            Z80.A  = 1;
            Z80.B  = 6;
            Z80.DE = 6 * 256 + 17;
            //OPUT0:
            do
            {
                Mem.stack.Push(Z80.BC);
                Mem.stack.Push(Z80.AF);
                if (Z80.A - 4 != 0)
                {
                    goto OPUT1;
                }
                Z80.AF = Mem.stack.Pop();
                Z80.A += 4;
                Mem.stack.Push(Z80.AF);
OPUT1:
                Z80.B = Z80.A;
                PC88.CALL(WKGET);
                Z80.C = Mem.LD_8((ushort)(Z80.IX + 1));
                // Z80.C--;
                Z80.B   = 0;
                Z80.HL  = DEFVOICE;
                Z80.HL += Z80.BC;
                Z80.L   = Mem.LD_8(Z80.HL);
                Z80.L--;
                Mem.stack.Push(Z80.DE);
                PRNSUB();
                Z80.DE = Mem.stack.Pop();
                Z80.A  = Z80.D;
                Z80.A += 13;
                Z80.D  = Z80.A;
                Z80.AF = Mem.stack.Pop();
                Z80.A++;
                Z80.BC = Mem.stack.Pop();
                Z80.B--;
            } while (Z80.B != 0);
            //    RET
        }