[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