EXX() public method

public EXX ( ) : void
return void
Esempio n. 1
0
        // **	REPLACE PROCESS MAIN**
        //ON:DE<= TEXT ADR
        public void REP2()
        {
            ushort stDE = Z80.DE;

            // --	ヘンカンスルモノト ヘンカンサレルモノノ モジスウノ サ	--

            Z80.HL = EDBUF + 1;
            Z80.C  = 1;
            //REP21:
            do
            {
                Z80.DE--;
                Z80.A = Mem.LD_8(Z80.HL);
                //Z80.A |= Z80.A;
                if (Z80.A == 0)
                {
                    break;
                }

                Z80.HL++;
                Z80.C++;
            } while (true);

            //REP22:
            //Mem.LD_16(HENTOP, Z80.DE);
            HENTOP = Z80.DE;
            Z80.HL = EDBUF + 32;
            Z80.B  = 0;

            //REP23:
            do
            {
                Z80.A = Mem.LD_8(Z80.HL);
                //Z80.A |= Z80.A;
                if (Z80.A == 0)
                {
                    break;
                }

                Z80.B++;
                Z80.HL++;
            } while (true);

            //REP24:
            Z80.A = Z80.B;
            //Z80.A |= Z80.A;
            if (Z80.A != 0)
            {
                goto REP25;
            }

            Mem.LD_8(EDBUF + 33, Z80.A);
            Z80.A = 0x20;
            Mem.LD_8(EDBUF + 32, Z80.A);
            Z80.A = 1;

REP25:
            //Mem.LD_8(HENCO, Z80.A);
            HENCO     = Z80.A;
            Z80.Carry = (Z80.A < Z80.C);
            Z80.A    -= Z80.C;
            if (!Z80.Carry)
            {
                goto REPB1;            //ヘンカンサレルガワガ オオキイトキハ REPB1ヘ
            }
            //REPS1:

            Z80.DE = stDE;
            stDE   = Z80.DE;

            ushort dmy = Z80.DE;

            Z80.DE = Z80.HL;
            Z80.HL = dmy;

            Z80.E   = Z80.A;
            Z80.D   = 0x0FF;
            Z80.HL += Z80.DE;

            ushort stHL = Z80.HL;

            //Z80.HL = Mem.LD_16(LINKPT);
            Z80.HL  = LINKPT;
            Z80.HL += Z80.DE;
            //Mem.LD_16(LINKPT, Z80.HL);
            LINKPT = Z80.HL;
            Z80.HL = stHL;
            dmy    = Z80.DE;
            Z80.DE = Z80.HL;
            Z80.HL = dmy;
            Z80.HL = stDE;

            stHL = Z80.HL;
            Z80.EXX();
            Z80.HL = Mem.LD_16(TXTEND);
            Z80.DE = stHL;

            //Z80.A &= Z80.A;
            Z80.HL -= Z80.DE;
            Z80.C   = Z80.L;
            Z80.B   = Z80.H;
            ushort stBC = Z80.BC;

            Z80.EXX();
            Z80.BC = stBC;
            stDE   = Z80.DE;
            //    DI
            msub.RAM();
            Z80.LDIR();

            //Z80.DE = Mem.LD_16(HENTOP);
            Z80.DE = HENTOP;
            Z80.HL = EDBUF + 32;
            //Z80.A = Mem.LD_8(HENCO);
            Z80.A = HENCO;
            Z80.C = Z80.A;
            Z80.B = 0;
            Z80.LDIR();

REPS2:
            msub.ROM();
            //    EI
            PC88.CALL(LNKSET);

            Z80.HL++;
            PC88.CALL(CHGWA);
            Mem.LD_16(TXTEND, Z80.HL);
            Z80.DE = stDE;
            return;

REPB1:
            //Z80.A |= Z80.A;
            if (Z80.A == 0)
            {
                goto REPB3;
            }
            //Z80.HL = Mem.LD_16(LINKPT);
            Z80.HL  = LINKPT;
            Z80.E   = Z80.A;
            Z80.D   = 0;
            Z80.HL += Z80.DE;
            //Mem.LD_16(LINKPT, Z80.HL);
            LINKPT = Z80.HL;
            Z80.HL = Mem.LD_16(TXTEND);

            Z80.DE = stDE;
            stDE   = Z80.DE;
            stHL   = Z80.HL;
            //Z80.A &= Z80.A;
            Z80.HL -= Z80.DE;
            Z80.HL++;
            Z80.C   = Z80.L;
            Z80.B   = Z80.H;
            Z80.HL  = stHL;
            stHL    = Z80.HL;
            Z80.E   = Z80.A;
            Z80.D   = 0;
            Z80.HL += Z80.DE;
            dmy     = Z80.DE;
            Z80.DE  = Z80.HL;
            Z80.HL  = dmy;
            Z80.HL  = stHL;
            //    DI
            msub.RAM();
            do//	LDDR
            {
                Mem.LD_8(Z80.DE, Mem.LD_8(Z80.HL));
                Z80.DE--;
                Z80.HL--;
                Z80.BC--;
            } while (Z80.BC != 0);

REPB3:
            //	DI
            msub.RAM();
            Z80.DE = stDE;
            //Z80.DE = Mem.LD_16(HENTOP);
            Z80.DE = HENTOP;
            Z80.HL = EDBUF + 32;
            //Z80.A = Mem.LD_8(HENCO);
            Z80.A = HENCO;
            Z80.C = Z80.A;
            Z80.B = 0;
            Z80.LDIR();
            stDE = Z80.DE;
            goto REPS2;
        }