From 1a60d0c2a8eeef3b39ef276f0f3552552a1519b1 Mon Sep 17 00:00:00 2001 From: manuel Date: Tue, 26 May 2009 14:49:37 +0200 Subject: adding ue4 (copy from ue3) --- ue4/mycpu/cinstruction.h | 189 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 ue4/mycpu/cinstruction.h (limited to 'ue4/mycpu/cinstruction.h') diff --git a/ue4/mycpu/cinstruction.h b/ue4/mycpu/cinstruction.h new file mode 100644 index 0000000..4cc69de --- /dev/null +++ b/ue4/mycpu/cinstruction.h @@ -0,0 +1,189 @@ +/** + * @module cinstruction + * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348) + * @brief Abstract class for displays + * @date 13.05.2009 + */ + +#ifndef CINSTRUCTION_H +#define CINSTRUCTION_H 1 + +#include +#include + +/* forward declare CCPU */ +class CCPU; + +/** + * @class CInstruction + * + * Abstract class for displays + */ +class CInstruction +{ + public: + /** + * @method CInstruction + * @brief Default ctor + * @param name name of instruction + * @return - + * @globalvars none + * @exception none + * @conditions none + */ + CInstruction(std::string name) + : m_name(name) + {} + + /** + * @method ~CInstruction + * @brief Default dtor + * @param - + * @return - + * @globalvars none + * @exception none + * @conditions none + */ + virtual ~CInstruction() + {} + + /** + * @method operator== + * @brief implementation of operator == + * @param name reference to std::string + * @return true if instructionname is name + * @globalvars none + * @exception none + * @conditions none + */ + virtual bool operator==(std::string& name) + { + return name == m_name; + } + + /** + * @method operator() + * @brief implementation of operator (CCPU) + * @param cpu pointer to cpu + * @return - + * @globalvars none + * @exception std::runtime_error + * @conditions none + */ + virtual CInstruction& operator()(CCPU *cpu) + { + execute(cpu); + return *this; + } + + /** + * @method getName + * @brief returns instruction name + * @param - + * @return name of instruction + * @globalvars none + * @exception none + * @conditions none + */ + virtual const std::string& getName() + { + return m_name; + } + + /** + * @method dump + * @brief dumps information about instruction to outputstream + * @param stream outputstream + * @return reference to outputstream + * @globalvars none + * @exception none + * @conditions none + */ + virtual std::ostream& dump(std::ostream& stream) + { + stream << m_name; + return stream; + } + + /** + * @method operator<< + * @brief Shift/output operator for outputstream + * @param stream reference to outputstream + * @param instr object which will be printed to stream + * @return reference to outputstream + * @globalvars none + * @exception none + * @conditions none + */ + friend std::ostream& operator<<(std::ostream& stream, CInstruction& instr) + { + return instr.dump(stream); + } + + /** + * @method parseRegister + * @brief parses register syntax Rx (e.g. "R1") + * @param str register in assembler syntax + * @return registernumber + * @globalvars none + * @exception std::runtime_error + * @conditions none + */ + virtual const unsigned parseRegister(const std::string& str); + + /** + * @method checkRegister + * @brief performs a register boundary check + * does the register exist in cpu? + * @param cpu pointer to cpu + * @param regidx registernumber + * @return - + * @globalvars none + * @exception std::runtime_error + * @conditions none + */ + virtual void checkRegister(CCPU *cpu, const unsigned regidx); + + /** + * @method factory + * @brief creates a new instance of this instruction + * @param - + * @return new instruction instance + * @globalvars none + * @exception none + * @conditions none + */ + virtual CInstruction *factory() = 0; + + /** + * @method compile + * @brief parses instruction parameters and prepares the + * instruction for executing + * @param params list of parameters of this instruction + * @return - + * @globalvars none + * @exception std::runtime_error + * @conditions none + */ + virtual void compile(std::list& params) = 0; + + /** + * @method execute + * @brief executes the instruction + * @param cpu pointer to cpu + * @return - + * @globalvars none + * @exception std::runtime_error + * @conditions none + */ + virtual void execute(CCPU *cpu) = 0; + + protected: + /* members */ + /** name of instruction */ + std::string m_name; +}; + +#endif + +/* vim: set et sw=2 ts=2: */ -- cgit v1.2.3