[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