[Avida-SVN] r3155 - in branches/interrupt/source: cpu main

beckma24 at myxo.css.msu.edu beckma24 at myxo.css.msu.edu
Sun Feb 22 17:17:15 PST 2009


Author: beckma24
Date: 2009-02-22 20:17:15 -0500 (Sun, 22 Feb 2009)
New Revision: 3155

Modified:
   branches/interrupt/source/cpu/cHardwareCPU.cc
   branches/interrupt/source/cpu/cHardwareCPU.h
   branches/interrupt/source/main/cOrgMessage.cc
   branches/interrupt/source/main/cOrgMessage.h
Log:
added type field to cOrgMessage.  Also added 8 send-msg-type# instructions

Modified: branches/interrupt/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/interrupt/source/cpu/cHardwareCPU.cc	2009-02-23 00:49:21 UTC (rev 3154)
+++ branches/interrupt/source/cpu/cHardwareCPU.cc	2009-02-23 01:17:15 UTC (rev 3155)
@@ -615,6 +615,14 @@
 		
     // Messaging
     tInstLibEntry<tMethod>("send-msg", &cHardwareCPU::Inst_SendMessage, nInstFlag::STALL),
+    tInstLibEntry<tMethod>("send-msg-type0", &cHardwareCPU::Inst_SendMessageType0, nInstFlag::STALL),
+    tInstLibEntry<tMethod>("send-msg-type1", &cHardwareCPU::Inst_SendMessageType1, nInstFlag::STALL),
+    tInstLibEntry<tMethod>("send-msg-type2", &cHardwareCPU::Inst_SendMessageType2, nInstFlag::STALL),
+    tInstLibEntry<tMethod>("send-msg-type3", &cHardwareCPU::Inst_SendMessageType3, nInstFlag::STALL),
+    tInstLibEntry<tMethod>("send-msg-type4", &cHardwareCPU::Inst_SendMessageType4, nInstFlag::STALL),
+    tInstLibEntry<tMethod>("send-msg-type5", &cHardwareCPU::Inst_SendMessageType5, nInstFlag::STALL),
+    tInstLibEntry<tMethod>("send-msg-type6", &cHardwareCPU::Inst_SendMessageType6, nInstFlag::STALL),
+    tInstLibEntry<tMethod>("send-msg-type7", &cHardwareCPU::Inst_SendMessageType7, nInstFlag::STALL),
     tInstLibEntry<tMethod>("retrieve-msg", &cHardwareCPU::Inst_RetrieveMessage, nInstFlag::STALL),
 		
     // Alarms
@@ -6011,19 +6019,64 @@
 
 //// End copied from cHardwareExperimental
 
+bool cHardwareCPU::Inst_SendMessage(cAvidaContext& ctx)
+{
+	return Inst_SendMessageBase(ctx);
+}
 
+// send message for type 0 to faced neighbor
+bool cHardwareCPU::Inst_SendMessageType0(cAvidaContext& ctx) {
+	return Inst_SendMessageBase(ctx, 0);
+}
+
+// send message for type 1 to faced neighbor
+bool cHardwareCPU::Inst_SendMessageType1(cAvidaContext& ctx) {
+	return Inst_SendMessageBase(ctx, 1);
+}
+
+// send message for type 2 to faced neighbor
+bool cHardwareCPU::Inst_SendMessageType2(cAvidaContext& ctx) {
+	return Inst_SendMessageBase(ctx, 2);
+}
+
+// send message for type 3 to faced neighbor
+bool cHardwareCPU::Inst_SendMessageType3(cAvidaContext& ctx) {
+	return Inst_SendMessageBase(ctx, 3);
+}
+
+// send message for type 4 to faced neighbor
+bool cHardwareCPU::Inst_SendMessageType4(cAvidaContext& ctx) {
+	return Inst_SendMessageBase(ctx, 4);
+}
+
+// send message for type 5 to faced neighbor
+bool cHardwareCPU::Inst_SendMessageType5(cAvidaContext& ctx) {
+	return Inst_SendMessageBase(ctx, 5);
+}
+
+// send message for type 6 to faced neighbor
+bool cHardwareCPU::Inst_SendMessageType6(cAvidaContext& ctx) {
+	return Inst_SendMessageBase(ctx, 6);
+}
+
+// send message for type 7 to faced neighbor
+bool cHardwareCPU::Inst_SendMessageType7(cAvidaContext& ctx) {
+	return Inst_SendMessageBase(ctx, 7);
+}
+
+
 /*! Send a message to the organism that is currently faced by this cell,
  where the label field of sent message is from register ?BX?, and the data field
  is from register ~?BX?.
  */
 // If INTERRUPT_ENABLED then with function will cause the MSG receiver to jump inside its interrupt handler, 
 //     and call Inst_RetrieveMessage which eats a NOP if one exists
-bool cHardwareCPU::Inst_SendMessage(cAvidaContext& ctx)
-{
-  const int label_reg = FindModifiedRegister(REG_BX);
+/* basic message sending functionallity  */
+bool cHardwareCPU::Inst_SendMessageBase(cAvidaContext& ctx, int messageType) {
+	const int label_reg = FindModifiedRegister(REG_BX);
   const int data_reg = FindNextRegister(label_reg);
   
-  cOrgMessage msg = cOrgMessage(m_organism);
+  cOrgMessage msg = cOrgMessage(m_organism, messageType);
   msg.SetLabel(GetRegister(label_reg));
   msg.SetData(GetRegister(data_reg));
   return m_organism->SendMessage(ctx, msg);

Modified: branches/interrupt/source/cpu/cHardwareCPU.h
===================================================================
--- branches/interrupt/source/cpu/cHardwareCPU.h	2009-02-23 00:49:21 UTC (rev 3154)
+++ branches/interrupt/source/cpu/cHardwareCPU.h	2009-02-23 01:17:15 UTC (rev 3155)
@@ -687,6 +687,16 @@
   
   //// Messaging ////
   bool Inst_SendMessage(cAvidaContext& ctx);
+  bool Inst_SendMessageBase(cAvidaContext& ctx, int messageType = -1);
+  bool Inst_SendMessageType0(cAvidaContext& ctx);
+  bool Inst_SendMessageType1(cAvidaContext& ctx);
+  bool Inst_SendMessageType2(cAvidaContext& ctx);
+  bool Inst_SendMessageType3(cAvidaContext& ctx);
+  bool Inst_SendMessageType4(cAvidaContext& ctx);
+  bool Inst_SendMessageType5(cAvidaContext& ctx);
+  bool Inst_SendMessageType6(cAvidaContext& ctx);
+  bool Inst_SendMessageType7(cAvidaContext& ctx);
+
 public:
   bool Inst_RetrieveMessage(cAvidaContext& ctx);
 private:

Modified: branches/interrupt/source/main/cOrgMessage.cc
===================================================================
--- branches/interrupt/source/main/cOrgMessage.cc	2009-02-23 00:49:21 UTC (rev 3154)
+++ branches/interrupt/source/main/cOrgMessage.cc	2009-02-23 01:17:15 UTC (rev 3155)
@@ -25,8 +25,8 @@
 #include "cOrgMessage.h"
 #include "cOrganism.h"
 
-cOrgMessage::cOrgMessage(cOrganism* sender) 
-	: m_pSender(sender), m_pReceiver(0), m_data(0), m_label(0),
+cOrgMessage::cOrgMessage(cOrganism* sender, int messageType) 
+	: m_pSender(sender), m_pReceiver(0), m_data(0), m_label(0), m_messageType(messageType),
 	m_receiverOrgID(0), m_receiverCellID(0)
 {
     assert(m_pSender);

Modified: branches/interrupt/source/main/cOrgMessage.h
===================================================================
--- branches/interrupt/source/main/cOrgMessage.h	2009-02-23 00:49:21 UTC (rev 3154)
+++ branches/interrupt/source/main/cOrgMessage.h	2009-02-23 01:17:15 UTC (rev 3155)
@@ -38,7 +38,7 @@
 {
 public:
   //! Constructor that takes a pointer to the sending organism.
-  cOrgMessage(cOrganism* sender);
+  cOrgMessage(cOrganism* sender, int messageType = -1);
   
   cOrganism* GetSender() const { return m_pSender; }
   cOrganism* GetReceiver() const { return m_pReceiver; }
@@ -50,6 +50,8 @@
   void SetData(unsigned int data) { m_data = data; }
   void SetLabel(unsigned int label) { m_label = label; }
 
+	int GetMessageType() const { return m_messageType; }
+	
   int GetSenderCellID() const { return m_senderCellID; }
   int GetSenderOrgID() const { return m_senderOrgID; }
 
@@ -58,8 +60,8 @@
 
 private:
   //! Default constructor is only used internally, to support message predicates.
-  cOrgMessage() : m_pSender(0), m_pReceiver(0), m_data(0), m_label(0), m_senderOrgID(0),
-	  m_senderCellID(0), m_receiverOrgID(0), m_receiverCellID(0)
+  cOrgMessage() : m_pSender(0), m_pReceiver(0), m_data(0), m_label(0), m_messageType(-1),
+		m_senderOrgID(0), m_senderCellID(0), m_receiverOrgID(0), m_receiverCellID(0)
   {
   }
   
@@ -67,6 +69,7 @@
   cOrganism* m_pReceiver;
   unsigned int m_data;
   unsigned int m_label;
+	int m_messageType; // type of message sent, -1 denotes no type (default).  Supports active messages.
 
   //! ID of the organism that sent this message
   int m_senderOrgID;




More information about the Avida-cvs mailing list