From d1dab9a35d864d5533e2a9e8d49f1ad840773687 Mon Sep 17 00:00:00 2001 From: Martin Perner Date: Sun, 31 Oct 2010 14:26:52 +0100 Subject: [PATCH] disasm/sim: bugfix for ldi --- 3c_disasm/instr/ldi.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/3c_disasm/instr/ldi.cpp b/3c_disasm/instr/ldi.cpp index 095a144..bb18c28 100644 --- a/3c_disasm/instr/ldi.cpp +++ b/3c_disasm/instr/ldi.cpp @@ -59,7 +59,19 @@ void Cldi::evalInstr() void Cldi::execInstr() { //cout << "should exec " << this->toString() << endl; - this->m_cpu->setRegister(this->m_rd, this->m_imm); + CDat val = this->m_cpu->getRegister(this->m_rd); + if(this->m_s == false) { + if(this->m_hl == false) { + val &= 0xFFFF0000; + } + else { + val &= 0x0000FFFF; + } + this->m_cpu->setRegister(this->m_rd, val + this->m_imm); + } + else { + this->m_cpu->setRegister(this->m_rd, this->m_imm); + } } std::string Cldi::toString() -- 2.25.1