From 9cf92379d5fcf0076c25dae0935daab446c992cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Ko=C4=8D=C3=AD?= Date: Wed, 30 Aug 2017 21:37:53 +0200 Subject: Initial commit Adding work done so far. --- qtmips_machine/registers.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 qtmips_machine/registers.h (limited to 'qtmips_machine/registers.h') diff --git a/qtmips_machine/registers.h b/qtmips_machine/registers.h new file mode 100644 index 0000000..a550f4a --- /dev/null +++ b/qtmips_machine/registers.h @@ -0,0 +1,31 @@ +#ifndef REGISTERS_H +#define REGISTERS_H + +#include +#include + +class Registers : public QObject { + Q_OBJECT +public: + Registers(); + + std::uint32_t read_pc(); // Return current value of program counter + std::uint32_t pc_inc(); // Increment program counter by four bytes + std::uint32_t pc_jmp(std::int32_t offset); // Relative jump from current location in program counter + void pc_abs_jmp(std::uint32_t address); // Absolute jump in program counter (write to pc) + + std::uint32_t read_gp(std::uint8_t i); // Read general-purpose register + void write_gp(std::uint8_t i, std::uint32_t value); // Write general-purpose register + std::uint32_t read_hi_lo(bool hi); // true - read HI / false - read LO + void write_hi_lo(bool hi, std::uint32_t value); + +signals: + // TODO signals + +private: + std::uint32_t gp[31]; // general-purpose registers ($0 is intentionally skipped) + std::uint32_t hi, lo; + std::uint32_t pc; // program counter +}; + +#endif // REGISTERS_H -- cgit v1.2.3