Пример #1
0
        public override void executa(IOrganismo o)
        {
            int memSize = o.getReg(getByteOrganismo(o, 1));

            if (o.child != null)
            {
                mundo.dealloc(o.child);
                o.clearChild();
                o.fatalError();
                return;
            }
            memSize = ALifeConsts.validateMemorySize(o, memSize);
            if (memSize == 0)
            {
                o.fatalError();
                return;
            }
            IOrganismo child = mundo.alloc(memSize, o);

            if (child.isAlive())
            {
                o.addFitness();
                o.setChild(child);
                o.setReg(getByteOrganismo(o, 2), child.sp());
            }
            else
            {
                o.error();
                o.setReg(getByteOrganismo(o, 2), 0);
            }
        }
Пример #2
0
        public void TestIterativo()
        {
            startP = 1000;
            InitWorldTierra();
            cpu = world.cpu() as CPU;
            cpu.lastDeallocate = startP;
            IOrganismo org = world.criaOrganismo("ancestor_test.txt");

            Assert.IsTrue(org.getMemorySize() == ORG_SIZE, org.getMemorySize() + " <> " + ORG_SIZE);

            org.setReg(R_C, 10);
            org.setReg(R_A, 15);
            Assert.IsTrue(org.getReg(R_C) == 10);
            Assert.IsTrue(org.getReg(R_A) == 15);

            int ip = startP;

            IList <string> instrunctionsRun = new List <string>();

            //jmp depois do divide
            while (org.ip != 1050)
            {
                ip = org.ip - startP;
                PreTests(ip, org);
                Instruction inst = org.run();
                instrunctionsRun.Add(ip + " :: " + inst.getDescription(org, startP + ip));

                PostTests(ip, org);
            }
        }
        public override void executa(IOrganismo o)
        {
            int a = o.getReg(getByteOrganismo(o, 1));
            int b = o.getReg(getByteOrganismo(o, 2));

            o.setReg(getByteOrganismo(o, 2), a);
            o.setReg(getByteOrganismo(o, 1), b);
        }
Пример #4
0
        public override void executa(IOrganismo o)
        {
            int inst = getByteOrganismo(o, 1);

            inst = mundo.getMutation().mutateInstruction(inst, o);
            o.setReg(getByteOrganismo(o, 2), inst);
        }
Пример #5
0
        public override void executa(IOrganismo o)
        {
            int v = o.getReg(getByteOrganismo(o, 1));

            v ^= 1;
            o.setReg(getByteOrganismo(o, 1), v);
        }
Пример #6
0
 public static void loadRegs(string line, IOrganismo o)
 {
     if (line == null)
     {
         return;
     }
     if (line.StartsWith("#REGS: "))
     {
         string[] pars = line.Split(' ');
         for (int i = 0; i < pars.Length; i++)
         {
             string par = pars[i].Trim();
             if (par.Contains("["))
             {
                 par = par.Substring(0, par.IndexOf("[")).Trim();
             }
             if (par.Contains("X:"))
             {
                 string letter = par.Substring(0, 1);
                 string val    = par.Substring(par.IndexOf(":") + 1);
                 o.setReg(ALifeConsts.getLetterNumber(letter.ToCharArray()[0]), int.Parse(val));
             }
             if (par.Contains("SP:"))
             {
                 string val = par.Substring(par.IndexOf(":") + 1);
                 o.setStartPoint(int.Parse(val));
             }
             if (par.Contains("IP:"))
             {
                 string val = par.Substring(par.IndexOf(":") + 1);
                 o.ip = int.Parse(val) + 1;
             }
         }
     }
 }
Пример #7
0
 private void returnPos(IOrganismo o, int pos)
 {
     if (pos >= 0)
     {
         o.setReg(getByteOrganismo(o, 1), pos);
     }
     else
     {
         o.error();
     }
 }
Пример #8
0
        public override void executa(IOrganismo o)
        {
            int r1   = getByteOrganismo(o, 1);
            int v1   = o.getReg(r1);
            int r2   = getByteOrganismo(o, 2);
            int v2   = o.getReg(r2);
            int rPos = getByteOrganismo(o, 3);
            int vPos = o.getReg(rPos);

            v1 = ALifeConsts.setBit(v1, vPos, v2);
            o.setReg(r1, v1);
        }
        public override void executa(IOrganismo o)
        {
            int fromPos = o.getReg(getByteOrganismo(o, 2));
            int inst    = o.getMemory(fromPos);

            inst = mundo.getMutation().mutateInstruction(inst, o);

            /*if (!mundo.isValidInstruction(inst)){
             *  o.fatalError();
             *  return;
             * }*/
            o.setReg(getByteOrganismo(o, 1), inst);
        }
Пример #10
0
        public override void executa(IOrganismo o)
        {
            o.fillTemplate(getStep());
            if (o.sizeBuffer == 0)
            {
                o.error();
                return;
            }
            int posF = -1;
            int posB = -1;

            if (fwd && bwd)
            {
                posF = o.searchTemplateFwd();
                posB = o.searchTemplateBwd();
                if (posB < 0)
                {
                    returnPos(o, posF);
                    return;
                }
                if (posF < 0)
                {
                    returnPos(o, posB);
                    return;
                }
                int difF = posF - o.ip;
                int difB = o.ip - posB;
                o.setReg(getByteOrganismo(o, 1), difF < difB ? posF : posB);
            }
            else
            {
                if (fwd)
                {
                    posF = o.searchTemplateFwd();
                    returnPos(o, posF);
                }
                if (bwd)
                {
                    posB = o.searchTemplateBwd();
                    returnPos(o, posB);
                }
            }
        }
Пример #11
0
 public override void executa(IOrganismo o)
 {
     o.setReg(getByteOrganismo(o, 1), o.pop());
 }
Пример #12
0
        public void TestOrganismoPassoAPasso()
        {
            startP = 1000;
            InitWorldTierra();
            cpu = world.cpu() as CPU;
            cpu.lastDeallocate = startP;
            IOrganismo org = world.criaOrganismo("ancestor_test.txt");

            Assert.IsTrue(org.getMemorySize() == ORG_SIZE, org.getMemorySize() + " <> " + ORG_SIZE);

            int ipExpected = startP;

            org.setReg(R_C, 10);
            org.setReg(R_A, 15);
            Assert.IsTrue(org.getReg(R_C) == 10);
            Assert.IsTrue(org.getReg(R_A) == 15);

            int tmp = 0;

            //#jAvida Size: 110

            //0=NOP_1
            org.run();
            ipExpected++;
            Assert.IsTrue(org.ip == ipExpected);

            //1=NOP_1
            org.run();
            ipExpected++;
            Assert.IsTrue(org.ip == ipExpected);

            //2=NOP_1
            org.run();
            ipExpected++;
            Assert.IsTrue(org.ip == ipExpected);

            //3=NOP_1
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //4=ZERO C
            org.run();
            ipExpected += 2;
            Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(org.getReg(R_C) == 0);

            //6=OR C
            org.run();
            ipExpected += 2;
            Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(org.getReg(R_C) == 1);

            //8=SHL C
            org.run();
            ipExpected += 2;
            Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(org.getReg(R_C) == 2);

            //10=SHL C
            org.run();
            ipExpected += 2; Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(org.getReg(R_C) == 4);

            //12=ADRB A
            org.run();
            ipExpected += 2; Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(org.getReg(R_A) == startP + 4);

            //14=NOP_0
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //15=NOP_0
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //16=NOP_0
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //17=NOP_0
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //18=SUB A,C,A
            org.run();
            ipExpected += 4; Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(org.getReg(R_A) == startP + 0, org.getReg(R_A) + "<>" + startP + 0);

            //22=MOV A,B
            org.run();
            ipExpected += 3; Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(org.getReg(R_A) == org.getReg(R_B), org.getReg(R_A) + "<>" + org.getReg(R_B));

            //25=ADRF A
            org.run();
            ipExpected += 2; Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(org.getReg(R_A) == startP + 109);

            //27=NOP_0
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //28=NOP_0
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //29=NOP_0
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //30=NOP_1
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //31=INC A
            tmp = org.getReg(R_A);
            org.run();
            ipExpected += 2; Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(tmp + 1 == org.getReg(R_A));

            //33=SUB A,B,C
            org.run();
            ipExpected += 4; Assert.IsTrue(org.ip == ipExpected);
            Assert.IsTrue(org.getReg(R_C) == (org.getReg(R_A) - org.getReg(R_B)));

            //37=NOP_1
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //38=NOP_1
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //39=NOP_0
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //40=NOP_1
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == ipExpected);

            //41=MAL C,A
            org.run();
            ipExpected += 3; Assert.IsTrue(org.ip == ipExpected);

            //44=CALL
            org.run();
            ipExpected++; Assert.IsTrue(org.ip == startP + 61);

            //45=NOP_0

            //46=NOP_0

            //47=NOP_1

            //48=NOP_1

            //49=DIVIDE

            //50=JMP

            //51=NOP_0

            //52=NOP_0

            //53=NOP_1

            //54=NOP_0

            //55=IFZ C

            //57=NOP_1

            //58=NOP_1

            //59=NOP_0

            //60=NOP_0

            //61=PUSH A

            //63=PUSH B

            //65=PUSH C

            //67=NOP_1

            //47=NOP_0

            //48=NOP_1

            //49=NOP_0

            //50=MOVI B,A

            //51=DEC C

            //52=IFZ C

            //53=JMP

            //54=NOP_0

            //55=NOP_1

            //56=NOP_0

            //57=NOP_0

            //58=INC A

            //59=INC B

            //60=JMPB

            //61=NOP_0

            //62=NOP_1

            //63=NOP_0

            //64=NOP_1

            //65=IFZ C

            //66=NOP_1

            //67=NOP_0

            //68=NOP_1

            //69=NOP_1

            //70=POP C

            //71=POP B

            //72=POP A

            //73=RET

            //74=NOP_1

            //75=NOP_1

            //76=NOP_1

            //77=NOP_0

            //78=IFZ C
        }
Пример #13
0
        public override void executa(IOrganismo o)
        {
            int reg = o.getReg(getByteOrganismo(o, 1));

            o.setReg(getByteOrganismo(o, 1), reg >> 1);
        }