RLCA() public method

public RLCA ( ) : void
return void
Example #1
0
        // ***	データ ヨミコミ ルーチン(2 BYTE) ***
        //	IN	: HL<= TEXT ADR
        // EXIT	: DE<= DATA : HL<= NEXT TEXT ADR
        //		: NON DATA ナラ SET CARRYシテ Aニ ツギ ノ モジレツ
        //		: ERROR...A=1 : NON ERROR...A=0
        // exam	: c16 ナラ 16 ヲ ヨンデ DE ニ カエス

        public void REDATA()
        {
            Mem.stack.Push(Z80.BC);
            Mem.stack.Push(Z80.HL);
            //Z80.HL = SCORE;
            //Z80.DE = SCORE + 1;
            //Mem.LD_8(Z80.HL, 0);
            //Z80.BC = 5;
            //Z80.LDIR();// INIT SCORE
            for (int i = 0; i < SCORE.Length; i++)
            {
                SCORE[i] = 0;
            }
            Z80.HL = Mem.stack.Pop();
            Z80.B  = 5;  // 5ケタ マデ

            Z80.A ^= Z80.A;
            Mem.LD_8(HEXFG, Z80.A);
            Mem.LD_8(MINUSF, Z80.A);
READ0:      // FIRST CHECK
            Z80.A = Mem.LD_8(Z80.HL);
            if (Z80.A - 0x20 == 0)
            {
                goto RE01;
            }
            if (Z80.A - 0x24 == 0)//0x24 = '$'
            {
                goto READH;
            }
            if (Z80.A - 0x2d == 0)//0x2d = '-'
            {
                goto READ9;
            }
            if (Z80.A - 0x30 < 0)  //0x30 = '0'
            {
                goto READE;        //0イジョウ ノ キャラクタナラ ツギ
            }
            if (Z80.A - 0x3A >= 0) //0x3A = ':' :は9の次に定義されている文字
            {
                goto READE;        //9イカナラ ツギ
            }
            goto READ7;

RE01:
            Z80.HL++;
            goto READ0;
READH:
            Z80.HL++;
            Z80.A = 1;
            Mem.LD_8(HEXFG, Z80.A);
            goto READ7;
READ9:      // MINUS CHECK
            Z80.HL++;
            Z80.A = Mem.LD_8(Z80.HL);

            if (Z80.A - 0x30 < 0)  //0x30 = '0'
            {
                goto READE;        //0イジョウ ノ キャラクタナラ ツギ
            }
            if (Z80.A - 0x3A >= 0) //0x3A = ':' :は9の次に定義されている文字
            {
                goto READE;        //9イカナラ ツギ
            }

            Z80.A = 1;
            Mem.LD_8(MINUSF, Z80.A);    // SET MINUS FLAG
READ7:
            do
            {
                Z80.A    = Mem.LD_8(Z80.HL);    // SECOND CHECK
                Z80.D    = Z80.A;
                Z80.A    = Mem.LD_8(HEXFG);
                Z80.A   |= Z80.A;
                Z80.Zero = (Z80.A == 0);
                Z80.A    = Z80.D;
                if (Z80.Zero)
                {
                    goto READC;
                }
                if (Z80.A - 0x61 < 0)//0x61 = 'a'
                {
                    goto READG;
                }
                if (Z80.A - 0x67 >= 0)//0x67 = 'g'
                {
                    goto READG;
                }
                Z80.A -= 32;
READG:
                if (Z80.A - 0x41 < 0)//0x61 = 'A'
                {
                    goto READC;
                }
                if (Z80.A - 0x47 >= 0)//0x67 = 'G'
                {
                    goto READC;
                }
                Z80.A -= 7;
                goto READF;
READC:
                if (Z80.A - 0x30 < 0)  //0x30 = '0'
                {
                    goto READ1;        //0イジョウ ノ キャラクタナラ ツギ
                }
                if (Z80.A - 0x3A >= 0) //0x3A = ':' :は9の次に定義されている文字
                {
                    goto READ1;        //9イカナラ ツギ
                }
READF:
                Mem.stack.Push(Z80.HL);
                Mem.stack.Push(Z80.BC);
                //Z80.HL = SCORE + 1;
                //Z80.DE = SCORE;
                //Z80.BC = 5;
                //Z80.LDIR();
                SCORE[0] = SCORE[1];
                SCORE[1] = SCORE[2];
                SCORE[2] = SCORE[3];
                SCORE[3] = SCORE[4];
                SCORE[4] = SCORE[5];
                Z80.BC   = Mem.stack.Pop();
                Z80.HL   = Mem.stack.Pop();
                Z80.A   -= 0x30;// A= 0 - 9
                //Mem.LD_8(SCORE + 4, Z80.A);
                SCORE[4] = Z80.A;
                Z80.HL++;   // NEXT TEXT
                Z80.B--;
            } while (Z80.B != 0);
            Z80.A = Mem.LD_8(Z80.HL); // THIRD CHECK
            if (Z80.A - 0x30 < 0)     //0x30 = '0'
            {
                goto READ1;           //0イジョウ ノ キャラクタナラ ツギ
            }
            if (Z80.A - 0x3A >= 0)    //0x3A = ':' :は9の次に定義されている文字
            {
                goto READ1;           //9イカナラ ツギ
            }
            //READ8:
            Z80.A &= Z80.A; // CY=0
            Z80.A  = 1;     // ERROR SIGN
            Z80.BC = Mem.stack.Pop();
            return;         //RET	; 7ケタイジョウ ハ エラー

READ1:
            Z80.A  = Mem.LD_8(HEXFG);
            Z80.A |= Z80.A;
            if (Z80.A == 0)
            {
                goto READD;
            }
            //Z80.A = Mem.LD_8(SCORE + 1);
            Z80.A = SCORE[1];
            Z80.RLCA();
            Z80.RLCA();
            Z80.RLCA();
            Z80.RLCA();
            Z80.D = Z80.A;
            //Z80.A = Mem.LD_8(SCORE + 2);
            Z80.A  = SCORE[2];
            Z80.A |= Z80.D;
            Z80.D  = Z80.A;
            //Z80.A = Mem.LD_8(SCORE + 3);
            Z80.A = SCORE[3];
            Z80.RLCA();
            Z80.RLCA();
            Z80.RLCA();
            Z80.RLCA();
            Z80.E = Z80.A;
            //Z80.A = Mem.LD_8(SCORE + 4);
            Z80.A  = SCORE[4];
            Z80.A |= Z80.E;
            Z80.E  = Z80.A;
            goto READA;
READD:
            Mem.stack.Push(Z80.HL);
            Z80.HL = 0;
            Z80.DE = 10000; // 10000 ノ ケタ
            //Z80.A = Mem.LD_8(SCORE);
            Z80.A  = SCORE[0];
            Z80.A |= Z80.A;
            if (Z80.A == 0)
            {
                goto READSEN;
            }
            Z80.B = Z80.A;
            //READMAN:
            do
            {
                Z80.HL += Z80.DE;
                Z80.B--;
            } while (Z80.B != 0);
READSEN:
            Z80.DE = 1000;
            //Z80.A = Mem.LD_8(SCORE + 1);// 1000 ノ ケタ
            Z80.A  = SCORE[1];// 1000 ノ ケタ
            Z80.A |= Z80.A;
            if (Z80.A == 0)
            {
                goto READHYAKU;
            }
            Z80.B = Z80.A;
            //READSEN2:
            do
            {
                Z80.HL += Z80.DE;
                Z80.B--;
            } while (Z80.B != 0);
READHYAKU:
            Z80.DE = 100;
            //Z80.A = Mem.LD_8(SCORE + 2);// 100 ノ ケタ
            Z80.A  = SCORE[2];// 100 ノ ケタ
            Z80.A |= Z80.A;
            if (Z80.A == 0)
            {
                goto READ4;
            }
            Z80.B = Z80.A;
            //READ2:
            do
            {
                Z80.HL += Z80.DE;
                Z80.B--;
            } while (Z80.B != 0);
READ4:
            //Z80.A = Mem.LD_8(SCORE + 3);// 10 ノ ケタ
            Z80.A  = SCORE[3];// 10 ノ ケタ
            Z80.A |= Z80.A;
            if (Z80.A == 0)
            {
                goto READ5;
            }
            Z80.B = Z80.A;
            Z80.A = 0;
            Z80.C = 10;
            //READ3:
            do
            {
                Z80.A += Z80.C;
                Z80.B--;
            } while (Z80.B != 0);
            Z80.C = Z80.A;
            goto READ6;
READ5:
            Z80.C = 0;
READ6:
            //Z80.A = Mem.LD_8(SCORE + 4);// 1 ノ ケタ
            Z80.A     = SCORE[4];// 1 ノ ケタ
            Z80.A    += Z80.C;
            Z80.Carry = (Z80.A + Z80.L > 0xff);
            Z80.A    += Z80.L;
            Z80.L     = Z80.A;
            Z80.A    += (byte)(Z80.H + (Z80.Carry ? 1 : 0));
            Z80.A    -= Z80.L;
            Z80.H     = Z80.A;
            Z80.EX_DE_HL();
            Z80.HL = Mem.stack.Pop();
            Z80.A  = Mem.LD_8(MINUSF);// CHECK MINUS FLAG
            Z80.A |= Z80.A;
            if (Z80.A == 0)
            {
                goto READA;// NON MINUS
            }
            Mem.stack.Push(Z80.HL);
            Z80.A  ^= Z80.A;  // CY=0
            Z80.HL  = 0;
            Z80.HL -= Z80.DE; // DE ノ ホスウ ヲ トル
            Z80.EX_DE_HL();
            Z80.HL = Mem.stack.Pop();
READA:
            Z80.A    ^= Z80.A; //CY=0
            Z80.Carry = false;
            Z80.BC    = Mem.stack.Pop();
            return;//    RET

READE:
            Mem.LD_8(SECCOM, Z80.A);
            Z80.Carry = true; // NON DATA
            Z80.BC    = Mem.stack.Pop();
            //    RET
        }