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); } }
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); }
public override void executa(IOrganismo o) { int inst = getByteOrganismo(o, 1); inst = mundo.getMutation().mutateInstruction(inst, o); o.setReg(getByteOrganismo(o, 2), inst); }
public override void executa(IOrganismo o) { int v = o.getReg(getByteOrganismo(o, 1)); v ^= 1; o.setReg(getByteOrganismo(o, 1), v); }
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; } } } }
private void returnPos(IOrganismo o, int pos) { if (pos >= 0) { o.setReg(getByteOrganismo(o, 1), pos); } else { o.error(); } }
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); }
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); } } }
public override void executa(IOrganismo o) { o.setReg(getByteOrganismo(o, 1), o.pop()); }
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 }
public override void executa(IOrganismo o) { int reg = o.getReg(getByteOrganismo(o, 1)); o.setReg(getByteOrganismo(o, 1), reg >> 1); }