[Avida-SVN] r2776 - development/source/cpu

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Fri Sep 12 11:14:36 PDT 2008


Author: brysonda
Date: 2008-09-12 14:14:35 -0400 (Fri, 12 Sep 2008)
New Revision: 2776

Modified:
   development/source/cpu/cHardwareExperimental.cc
   development/source/cpu/cHardwareExperimental.h
Log:
Add h-divide-sex to Experimental CPU.

Modified: development/source/cpu/cHardwareExperimental.cc
===================================================================
--- development/source/cpu/cHardwareExperimental.cc	2008-09-12 15:53:00 UTC (rev 2775)
+++ development/source/cpu/cHardwareExperimental.cc	2008-09-12 18:14:35 UTC (rev 2776)
@@ -147,6 +147,7 @@
     // Replication Instructions
     tInstLibEntry<tMethod>("h-alloc", &cHardwareExperimental::Inst_HeadAlloc, nInstFlag::DEFAULT, "Allocate maximum allowed space"),
     tInstLibEntry<tMethod>("h-divide", &cHardwareExperimental::Inst_HeadDivide, (nInstFlag::DEFAULT | nInstFlag::STALL), "Divide code between read and write heads."),
+    tInstLibEntry<tMethod>("h-divide-sex", &cHardwareExperimental::Inst_HeadDivideSex, (nInstFlag::DEFAULT | nInstFlag::STALL), "Divide code between read and write heads."),
     tInstLibEntry<tMethod>("h-copy", &cHardwareExperimental::Inst_HeadCopy, nInstFlag::DEFAULT, "Copy from read-head to write-head; advance both"),
     tInstLibEntry<tMethod>("if-label", &cHardwareExperimental::Inst_IfLabel, nInstFlag::DEFAULT, "Execute next if we copied complement of attached label"),
 
@@ -1341,8 +1342,12 @@
   return true;
 }
 
+
 bool cHardwareExperimental::Inst_HeadDivide(cAvidaContext& ctx)
 {
+  organism->GetPhenotype().SetDivideSex(false);
+  organism->GetPhenotype().SetCrossNum(0);
+
   AdjustHeads();
   const int divide_pos = GetHead(nHardware::HEAD_READ).GetPosition();
   int child_end =  GetHead(nHardware::HEAD_WRITE).GetPosition();
@@ -1355,6 +1360,23 @@
 }
 
 
+bool cHardwareExperimental::Inst_HeadDivideSex(cAvidaContext& ctx)  
+{ 
+  organism->GetPhenotype().SetDivideSex(true);
+  organism->GetPhenotype().SetCrossNum(1);
+  
+  AdjustHeads();
+  const int divide_pos = GetHead(nHardware::HEAD_READ).GetPosition();
+  int child_end =  GetHead(nHardware::HEAD_WRITE).GetPosition();
+  if (child_end == 0) child_end = m_memory.GetSize();
+  const int extra_lines = m_memory.GetSize() - child_end;
+  bool ret_val = Divide_Main(ctx, divide_pos, extra_lines, 1.0);
+  // Re-adjust heads.
+  AdjustHeads();
+  return ret_val; 
+}
+
+
 bool cHardwareExperimental::Inst_HeadRead(cAvidaContext& ctx)
 {
   const int dst = FindModifiedRegister(REG_BX);

Modified: development/source/cpu/cHardwareExperimental.h
===================================================================
--- development/source/cpu/cHardwareExperimental.h	2008-09-12 15:53:00 UTC (rev 2775)
+++ development/source/cpu/cHardwareExperimental.h	2008-09-12 18:14:35 UTC (rev 2776)
@@ -400,6 +400,7 @@
   bool Inst_GetHead(cAvidaContext& ctx);
   bool Inst_IfLabel(cAvidaContext& ctx);
   bool Inst_HeadDivide(cAvidaContext& ctx);
+  bool Inst_HeadDivideSex(cAvidaContext& ctx);
   bool Inst_HeadRead(cAvidaContext& ctx);
   bool Inst_HeadWrite(cAvidaContext& ctx);
   bool Inst_HeadCopy(cAvidaContext& ctx);




More information about the Avida-cvs mailing list