diff options
author | Paul Oliver <contact@pauloliver.dev> | 2024-02-29 02:29:14 +0100 |
---|---|---|
committer | Paul Oliver <contact@pauloliver.dev> | 2024-02-29 02:29:14 +0100 |
commit | 6b1444aa3918382aba127c16c671f045a3586e53 (patch) | |
tree | 08b6b1e55383d63ba4e5824071620a35f737925c /include | |
parent | 2250b4db92bd272dbb1fd717eb791e293c17e37a (diff) |
Common pipe replaced with sender/receiver functors.
[#27] C library now only takes care of relaying data to/from functors,
which must be provided by the wrapping application (in this case, a
new python module named 'common.py').
Diffstat (limited to 'include')
-rw-r--r-- | include/common.h | 27 | ||||
-rw-r--r-- | include/instset.h | 4 | ||||
-rw-r--r-- | include/salis.h | 6 |
3 files changed, 26 insertions, 11 deletions
diff --git a/include/common.h b/include/common.h index 7386a34..50ac563 100644 --- a/include/common.h +++ b/include/common.h @@ -2,17 +2,34 @@ * @file common.h * @author Paul Oliver * -* This module controls the 'common pipe', which is the FIFO file through which +* This module controls the common sender and receiver functors, through which * communication between different simulations can occur. By calling SEND, -* processes may output local instructions through the pipe. These instructions -* may then be read by processes running on a different simulation instance. +* processes may output local instructions through a network. These instructions +* may then be read by processes running on a different simulation somewhere +* else. */ #ifndef SALIS_COMMON_H #define SALIS_COMMON_H -void _sal_comm_init(string pipe); -void _sal_comm_quit(void); +/* Typedef sender functor type for easy python parsing. +*/ +typedef void (*Sender)(uint8 inst); + +/* Typedef receiver functor type for easy python parsing. +*/ +typedef uint8 (*Receiver)(void); + +/* Set sender functor. When unset, SEND instruction does nothing. +* @param sender Sender functor +*/ +SALIS_API void sal_comm_set_sender(Sender sender); + +/* Set receiver functor. When unset, RCVE instruction does nothing. +* @param receiver Receiver functor +*/ +SALIS_API void sal_comm_set_receiver(Receiver receiver); + void _sal_comm_send(uint8 inst); uint8 _sal_comm_receive(void); diff --git a/include/instset.h b/include/instset.h index eeb4600..a7f4773 100644 --- a/include/instset.h +++ b/include/instset.h @@ -44,8 +44,8 @@ enum { SALIS_INST DIVN, /**< / Divide two registers */ SALIS_INST LOAD, /**< L Load instruction from memory */ SALIS_INST WRTE, /**< W Write instruction into memory */ - SALIS_INST SEND, /**< S Send instruction to common pipe */ - SALIS_INST RECV, /**< R Receive instruction from common pipe */ + SALIS_INST SEND, /**< S Send instruction to common sender */ + SALIS_INST RECV, /**< R Receive instruction from common receiver */ SALIS_INST PSHN, /**< # Push value to stack */ SALIS_INST POPN /**< ~ Pop value from stack */ }; diff --git a/include/salis.h b/include/salis.h index 8b261b1..75ef9dd 100644 --- a/include/salis.h +++ b/include/salis.h @@ -22,9 +22,8 @@ /** Initialize Salis simulation. * @param order Order of memory (memory_size == 1 << order) -* @param pipe Desired path and file name of common pipe */ -SALIS_API void sal_main_init(uint32 order, string pipe); +SALIS_API void sal_main_init(uint32 order); /** Free resources and quit Salis. */ @@ -32,9 +31,8 @@ SALIS_API void sal_main_quit(void); /** Load existing Salis simulation from saved file. * @param file_name Path of the save file to be loaded -* @param pipe Desired path and file name of common pipe */ -SALIS_API void sal_main_load(string file_name, string pipe); +SALIS_API void sal_main_load(string file_name); /** Save Salis simulation to a file. * @param file_name Path of the save file to be created |