LDIR() публичный Метод

public LDIR ( ) : void
Результат void
Пример #1
0
        // ***   40 BYTE => 25 BYTE***

        public void CONVERT()
        {
            // IN:HL<=VOICEADR(40BYTE)
            // OUT:6000Hヨリ 26BYTE
            Z80.DE = PARAM;
            Z80.B  = 4;
            //CV1:
            do
            {
                Mem.stack.Push(Z80.BC);
                Mem.stack.Push(Z80.DE);
                Z80.B = 9;
                //CV2:
                do
                {
                    Z80.A = Mem.LD_8(Z80.HL);
                    Z80.HL++;
                    Mem.LD_8(Z80.DE, Z80.A);
                    Z80.A     = 4;
                    Z80.Carry = (Z80.A + Z80.E > 0xff);
                    Z80.A    += Z80.E;
                    Z80.E     = Z80.A;
                    Z80.A    += (byte)(Z80.D + (Z80.Carry ? 1 : 0));
                    Z80.A    -= Z80.E;
                    Z80.D     = Z80.A;
                    Z80.B--;
                } while (Z80.B != 0);
                Z80.DE = Mem.stack.Pop();
                Z80.DE++;
                Z80.BC = Mem.stack.Pop();
                Z80.B--;
            } while (Z80.B != 0);
            Z80.A = Mem.LD_8(Z80.HL);
            Mem.LD_8((PARAM + 36), Z80.A);
            Z80.HL++;
            Z80.A = Mem.LD_8(Z80.HL);
            Mem.LD_8((PARAM + 38), Z80.A);
            GETPARA();
            Z80.HL = OTOWK;
            Z80.DE = 0x6000;
            Z80.BC = 32;
            Z80.LDIR();
            Z80.HL = 0x6001;
            //    RET
        }
Пример #2
0
 public void MADR()
 {
     Mem.stack.Push(Z80.IY);
     Mem.stack.Push(Z80.HL);
     Mem.stack.Push(Z80.DE);
     Mem.stack.Push(Z80.BC);
     Z80.L = Z80.C;
     Z80.H = Z80.B;
     HEXPRT();
     Z80.HL = MOJIBUF;
     Z80.DE = 0x0F3C8 + 36;
     Z80.BC = 4;
     Z80.LDIR();
     Z80.BC = Mem.stack.Pop();
     Z80.DE = Mem.stack.Pop();
     Z80.HL = Mem.stack.Pop();
     Z80.IY = Mem.stack.Pop();
     //    RET
 }
Пример #3
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;
        }