aboutsummaryrefslogtreecommitdiff
path: root/qtmips_machine/registers.h
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2017-08-30 21:37:53 +0200
committerKarel Kočí <cynerd@email.cz>2017-08-30 21:42:02 +0200
commit9cf92379d5fcf0076c25dae0935daab446c992cd (patch)
treedd09a2e996db1e5a8117f01bec76f1e93eaca6e1 /qtmips_machine/registers.h
downloadqtmips-9cf92379d5fcf0076c25dae0935daab446c992cd.tar.gz
qtmips-9cf92379d5fcf0076c25dae0935daab446c992cd.tar.bz2
qtmips-9cf92379d5fcf0076c25dae0935daab446c992cd.zip
Initial commit
Adding work done so far.
Diffstat (limited to 'qtmips_machine/registers.h')
-rw-r--r--qtmips_machine/registers.h31
1 files changed, 31 insertions, 0 deletions
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 <QObject>
+#include <cstdint>
+
+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