Download | Plain Text | No Line Numbers
- /**
- * @module instructions
- * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
- * @brief Implementations of CInstruction
- * @date 10.05.2009
- */
-
- #ifndef INSTRUCTIONS_H
- #define INSTRUCTIONS_H 1
-
- #include "cinstruction.h"
- #include "ccpu.h"
-
- /**
- * @class CInstructionInc
- *
- * Implementation of assembler command "inc"
- * Syntax: inc R1
- * (R1++)
- */
- class CInstructionInc
- : public CInstruction
- {
- public:
- CInstructionInc()
- : CInstruction("inc")
- {}
-
- CInstructionInc *factory()
- {
- return new CInstructionInc;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionDec
- *
- * Implementation of assembler command "dec"
- * Syntax: dec R1
- * (R1--)
- */
- class CInstructionDec
- : public CInstruction
- {
- public:
- CInstructionDec()
- : CInstruction("dec")
- {}
-
- CInstructionDec *factory()
- {
- return new CInstructionDec;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionAdd
- *
- * Implementation of assembler command "add"
- * Syntax: add R1, R2, R3
- * (R1 = R2 + R3)
- */
- class CInstructionAdd
- : public CInstruction
- {
- public:
- CInstructionAdd()
- : CInstruction("add")
- {}
-
- CInstructionAdd *factory()
- {
- return new CInstructionAdd;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- /** register number */
- unsigned m_regidx2;
- /** register number */
- unsigned m_regidx3;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionSub
- *
- * Implementation of assembler command "sub"
- * Syntax: sub R1, R2, R3
- * (R1 = R2 - R3)
- */
- class CInstructionSub
- : public CInstruction
- {
- public:
- CInstructionSub()
- : CInstruction("sub")
- {}
-
- CInstructionSub *factory()
- {
- return new CInstructionSub;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- /** register number */
- unsigned m_regidx2;
- /** register number */
- unsigned m_regidx3;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionMul
- *
- * Implementation of assembler command "mul"
- * Syntax: mul R1, R2, R3
- * (R1 = R2 * R3)
- */
- class CInstructionMul
- : public CInstruction
- {
- public:
- CInstructionMul()
- : CInstruction("mul")
- {}
-
- CInstructionMul *factory()
- {
- return new CInstructionMul;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- /** register number */
- unsigned m_regidx2;
- /** register number */
- unsigned m_regidx3;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionDiv
- *
- * Implementation of assembler command "div"
- * Syntax: div R1, R2, R3
- * (R1 = R2 / R3)
- */
- class CInstructionDiv
- : public CInstruction
- {
- public:
- CInstructionDiv()
- : CInstruction("div")
- {}
-
- CInstructionDiv *factory()
- {
- return new CInstructionDiv;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- /** register number */
- unsigned m_regidx2;
- /** register number */
- unsigned m_regidx3;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionLoad
- *
- * Implementation of assembler command "load"
- * Syntax: load R1, R2
- * (R1 = memory[R2])
- */
- class CInstructionLoad
- : public CInstruction
- {
- public:
- CInstructionLoad()
- : CInstruction("load")
- {}
-
- CInstructionLoad *factory()
- {
- return new CInstructionLoad;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- /** register number */
- unsigned m_regidx2;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionStore
- *
- * Implementation of assembler command "store"
- * Syntax: store R1, R2
- * (memory[R2] = R1)
- */
- class CInstructionStore
- : public CInstruction
- {
- public:
- CInstructionStore()
- : CInstruction("store")
- {}
-
- CInstructionStore *factory()
- {
- return new CInstructionStore;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- /** register number */
- unsigned m_regidx2;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionTest
- *
- * Implementation of assembler command "test"
- * Syntax: test R1
- * (R1 == 0: zeroflag: true, R1 < 0: signflag: true)
- */
- class CInstructionTest
- : public CInstruction
- {
- public:
- CInstructionTest()
- : CInstruction("test")
- {}
-
- CInstructionTest *factory()
- {
- return new CInstructionTest;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionLabel
- *
- * Implementation of assembler command "label"
- * Syntax: label name:
- */
- class CInstructionLabel
- : public CInstruction
- {
- public:
- CInstructionLabel()
- : CInstruction("label")
- {}
-
- CInstructionLabel *factory()
- {
- return new CInstructionLabel;
- }
-
- void compile(std::list<std::string>& params)
- {}
-
- void execute(CCPU *cpu)
- {}
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionJumpA
- *
- * Implementation of assembler command "jumpa"
- * Syntax: jumpa labelname
- * (jump to labelname)
- */
- class CInstructionJumpA
- : public CInstruction
- {
- public:
- CInstructionJumpA()
- : CInstruction("jumpa"), m_addr("")
- {}
-
- CInstructionJumpA *factory()
- {
- return new CInstructionJumpA;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** labelname */
- std::string m_addr;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionJumpZ
- *
- * Implementation of assembler command "jumpz"
- * Syntax: jumpz labelname
- * (jump to labelname if zeroflag)
- */
- class CInstructionJumpZ
- : public CInstruction
- {
- public:
- CInstructionJumpZ()
- : CInstruction("jumpz"), m_addr("")
- {}
-
- CInstructionJumpZ *factory()
- {
- return new CInstructionJumpZ;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** labelname */
- std::string m_addr;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionJumpS
- *
- * Implementation of assembler command "jumps"
- * Syntax: jumps labelname
- * (jump to labelname if signflag)
- */
- class CInstructionJumpS
- : public CInstruction
- {
- public:
- CInstructionJumpS()
- : CInstruction("jumps"), m_addr("")
- {}
-
- CInstructionJumpS *factory()
- {
- return new CInstructionJumpS;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** labelname */
- std::string m_addr;
- };
-
- /*============================================================================*/
-
- /**
- * @class CInstructionWrite
- *
- * Implementation of assembler command "write"
- * Syntax: write DEV, R1
- * (write R1 to DEV, which is a name of a display)
- */
- class CInstructionWrite
- : public CInstruction
- {
- public:
- CInstructionWrite()
- : CInstruction("write"), m_dev("")
- {}
-
- CInstructionWrite *factory()
- {
- return new CInstructionWrite;
- }
-
- void compile(std::list<std::string>& params);
- void execute(CCPU *cpu);
-
- protected:
- /** register number */
- unsigned m_regidx1;
- /** device name */
- std::string m_dev;
- };
-
- #endif
-
- /* vim: set et sw=2 ts=2: */
-