summaryrefslogtreecommitdiff
path: root/src/DataTransfer.cpp
blob: f7cc063dcc201c13f2b8c6f802037cdc89bdf051 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include "DataTransfer.h"

#include "ExecutorCases.h"
#include "Instruction.h"
#include "CPUContext.h"
#include "Bus.h"

#include <iostream>

namespace executor_cases {
  
  void Mov_rm32_r32(CPUContext& cc) {
    x86::ModRM modrm = cc.m_Instruction.m_ModRM;

    std::cout << "[Instruction] ";
    
    switch(modrm.m_State) {
    case x86::ModRMState::R:
      cc.m_Registers[modrm.m_Rm] = cc.m_Registers[modrm.m_Reg];
      std::cout << "mov " << x86::Register2Str((x86::Register)modrm.m_Rm) << ", " <<  x86::Register2Str((x86::Register)modrm.m_Rm);
      break;
    default:
      cc.m_Bus->WriteX<uint32_t>(helpers::ResolveModRMAddress(cc), cc.m_Registers[modrm.m_Reg]);
      std::cout << "mov DWORD PTR [0x" << helpers::ResolveModRMAddress(cc) << "], " <<  x86::Register2Str((x86::Register)modrm.m_Reg);
      break;
    }

    std::cout << std::endl;
  }
}