An example class is included into the project. This class handles output to the console by printing out everything written to address 49152. The declaration can be used for further extensions:
#include "Memory.hpp" namespace Interpreter { class IOTtyOut : public Memory { public: // Con and Destructor: IOTtyOut(const unsigned int start = 0); IOTtyOut(const IOTtyOut &); virtual ~IOTtyOut(); // The read and write functions reimplemented for IOTtyOut virtual bool write(const unsigned int addr, const short val); virtual bool read(const unsigned int addr, short &) const; }; }
The implementation is very simple:
#include "IOTtyOut.hpp" namespace Interpreter { // IOTtyOut::IOTtyOut(int) // Initializes the IOTtyOut. The content of the IOTtyOut is undefined. IOTtyOut::IOTtyOut(const unsigned int start) : Memory(1, start) { } // IOTtyOut::IOTtyOut(const IOTtyOut &) // Copies the memory. The content is copied 1:1. If there was no memory // in the argument new memory will be created. IOTtyOut::IOTtyOut(const IOTtyOut &m) : Memory(1, m.start) { } // IOTtyOut::~IOTtyOut() // Frees the IOTtyOut. IOTtyOut::~IOTtyOut() { } // bool IOTtyOut::write(const unsigned int, const short) // Writes a ASCII char to a tty. This is only done if the address is equal // to start. True or false will be returned according to the success of // the operation. bool IOTtyOut::write(const unsigned int addr, const short val) { if (addr == start) { std::cout << static_cast<char>((val & 0xff)); return true; } return false; } // bool IOTtyOut::read(const unsigned int, short &) // False will be returned and the value is set to -1 (0xffff). bool IOTtyOut::read(const unsigned int addr, short &val) const { val = -1; // don't produce warnings on unused vars... return false; } }
Such a simple class is really easy to implement.