3 Commits

Author SHA1 Message Date
fb4883b840 add unused byte for easier reading in cpu 2024-12-06 16:35:10 +01:00
0dd3e6d83f update to 1.3 2024-12-05 16:37:15 +01:00
35501025ff don't be case sensitive for instructions 2024-12-05 16:34:20 +01:00
2 changed files with 8 additions and 4 deletions

View File

@@ -1,5 +1,6 @@
#include "Assembleur.h"
#include <algorithm>
#include <map>
#include <sstream>
#include <stdexcept>
@@ -79,11 +80,11 @@ std::uint32_t Assembleur::ParseOperationImmediate(
}
std::uint32_t Assembleur::ParseJump(Instruction a_Instruction, const std::string& a_Label) {
return IToInt(a_Instruction) | ParseLabel(a_Label);
return IToInt(a_Instruction) | ParseLabel(a_Label) & 0x3FFFFFF;
}
std::uint32_t Assembleur::ParseJump(Instruction a_Instruction, std::uint8_t a_R1, std::uint8_t a_R2, const std::string& a_Label) {
return IToInt(a_Instruction) | a_R1 << 24 | a_R2 << 21 | ParseLabel(a_Label);
return IToInt(a_Instruction) | a_R1 << 23 | a_R2 << 20 | ParseLabel(a_Label) & 0xFFFFF;
}
std::uint32_t Assembleur::ParseJump(Instruction a_Instruction) {
@@ -91,7 +92,7 @@ std::uint32_t Assembleur::ParseJump(Instruction a_Instruction) {
}
std::uint32_t Assembleur::ParseIO(Instruction a_Instruction, std::uint32_t a_R1, std::uint32_t a_R2, std::uint32_t a_R3) {
return IToInt(a_Instruction) | a_R1 << 24 | a_R2 << 21 | a_R3 << 18;
return IToInt(a_Instruction) | a_R1 << 23 | a_R2 << 20 | a_R3 << 17;
}
@@ -122,6 +123,9 @@ std::uint32_t Assembleur::ParseInstruction(const std::string& a_Str, std::uint32
std::string ins;
ss >> ins;
// to lower case
std::transform(ins.begin(), ins.end(), ins.begin(), [](unsigned char c) { return std::tolower(c); });
auto it = INSTRUCTION_KEYS.find(ins);
if (it == INSTRUCTION_KEYS.end()) {
throw std::invalid_argument("[Line " + std::to_string(a_RealLine) + "] " + "Instruction \"" + ins + "\" not found !");

View File

@@ -3,7 +3,7 @@
#include "IO.h"
#define ASSEMBLEUR_VERSION "1.2"
#define ASSEMBLEUR_VERSION "1.3"
int main(int argc, char** argv) {