예제 #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 setMemoryOwner(int pos, int id)
        {
            int calcIndex = ALifeConsts.calcIndex(pos, memorySize);

            memoryUse[calcIndex] = id;
            // if (id<0){
            //drawPixel(calcIndex, id < 0 ? Color.Black : Color.Red, false);
            // }
        }
예제 #3
0
        private void DrawOwner(IOrganismo o, int cor)
        {
            int ini  = o.sp();
            int size = o.getMemorySize();

            for (int i = ini; i < ini + size; i++)
            {
                int calcIndex = ALifeConsts.calcIndex(i, memorySize);
                DrawPixel(calcIndex, 255, false);
            }
        }
예제 #4
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);
        }
예제 #5
0
        public void setMemory(int pos, int v)
        {
            int calcIndex = ALifeConsts.calcIndex(pos, memorySize);

            if (calcIndex < 0)
            {
                return;
            }
            memory[calcIndex] = v;

            DrawPixel(calcIndex, v, true);
        }
예제 #6
0
 public override String getDescription(IOrganismo o, int ip)
 {
     return(comment(name + " " + ALifeConsts.getLetter(o.getMemory(ip + 1)), ALifeConsts.getLetter(o.getMemory(ip + 1)) + " <- pop()"));
 }
예제 #7
0
 public override String getDescription(IOrganismo o, int ip)
 {
     return(comment(name + " " + ALifeConsts.getLetter(o.getMemory(ip + 1)) + "," + ALifeConsts.getLetter(o.getMemory(ip + 2)), "Allocate " + ALifeConsts.getLetter(o.getMemory(ip + 1)) + " Bytes; store position in " + ALifeConsts.getLetter(o.getMemory(ip + 2))));
 }
예제 #8
0
 public override String getDescription(IOrganismo o, int ip)
 {
     return(comment(name + " " + ALifeConsts.getLetter(o.getMemory(ip + 1)) + "," + ALifeConsts.getLetter(o.getMemory(ip + 2)), "if " + ALifeConsts.getLetter(o.getMemory(ip + 1)) + " < " + ALifeConsts.getLetter(o.getMemory(ip + 2)) + " then:"));
 }
예제 #9
0
 public override String getDescription(IOrganismo o, int ip)
 {
     return(comment(name + " " + ALifeConsts.getLetter(o.getMemory(ip + 1)), "push(ip); ip <- " + o.getMemory(ip + 1) + ";"));
 }
예제 #10
0
 public int getMemoryOwner(int pos)
 {
     return(memoryUse[ALifeConsts.calcIndex(pos, memorySize)]);
 }
예제 #11
0
 public override String getDescription(IOrganismo o, int ip)
 {
     return(comment(name + " " + ALifeConsts.getLetter(o.getMemory(ip + 1)), ALifeConsts.getLetter(o.getMemory(ip + 1)) + " <- templatePosition" + (this.bwd ? "  BACK " : "") + (this.fwd ? " FWD " : "")));
 }