diff options
author | Karel Kočí <cynerd@email.cz> | 2017-08-30 21:37:53 +0200 |
---|---|---|
committer | Karel Kočí <cynerd@email.cz> | 2017-08-30 21:42:02 +0200 |
commit | 9cf92379d5fcf0076c25dae0935daab446c992cd (patch) | |
tree | dd09a2e996db1e5a8117f01bec76f1e93eaca6e1 /qtmips_machine/registers.h | |
download | qtmips-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.h | 31 |
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 |