GameBoy Emulator 1
Game Boy emulator core and tooling
Loading...
Searching...
No Matches
op_07.cpp
1#include "../../../../../include/ProcessingUnit.hpp"
2#include "../../../../../include/opcodes.hpp"
3#include "../../../../../include/mmu.hpp"
4
5constexpr int machine_cycles = 4;
6#define totalMachineCycles(n) ((n) * machine_cycles)
7
8#define DUMMY(name) int name(ProcessingUnit&, MMU&) { return totalMachineCycles(1); }
9
10int op_ld_hl_b(ProcessingUnit& cpu, MMU& mmu) // 0x70
11{
12 const u8 newValue = cpu.reg(ProcessingUnit::Register::B);
13 const u16 addr = cpu.get_hl();
14 mmu.write(addr, newValue);
15
16 return totalMachineCycles(2);
17}
18
19int op_ld_hl_c(ProcessingUnit& cpu, MMU& mmu) // 0x71
20{
21 const u8 newValue = cpu.reg(ProcessingUnit::Register::C);
22 const u16 addr = cpu.get_hl();
23 mmu.write(addr, newValue);
24
25 return totalMachineCycles(2);
26}
27
28int op_ld_hl_d(ProcessingUnit& cpu, MMU& mmu) // 0x72
29{
30 const u8 newValue = cpu.reg(ProcessingUnit::Register::D);
31 const u16 addr = cpu.get_hl();
32 mmu.write(addr, newValue);
33
34 return totalMachineCycles(2);
35}
36
37int op_ld_hl_e(ProcessingUnit& cpu, MMU& mmu) // 0x73
38{
39 const u8 newValue = cpu.reg(ProcessingUnit::Register::E);
40 const u16 addr = cpu.get_hl();
41 mmu.write(addr, newValue);
42
43 return totalMachineCycles(2);
44}
45
46int op_ld_hl_h(ProcessingUnit& cpu, MMU& mmu) // 0x74
47{
48 const u8 newValue = cpu.reg(ProcessingUnit::Register::H);
49 const u16 addr = cpu.get_hl();
50 mmu.write(addr, newValue);
51
52 return totalMachineCycles(2);
53}
54
55int op_ld_hl_l(ProcessingUnit& cpu, MMU& mmu) // 0x75
56{
57 const u8 newValue = cpu.reg(ProcessingUnit::Register::L);
58 const u16 addr = cpu.get_hl();
59 mmu.write(addr, newValue);
60
61 return totalMachineCycles(2);
62}
63
64int op_halt(ProcessingUnit &cpu, MMU &mmu) // 0x76
65{
66 cpu.setHalt(true);
67 return totalMachineCycles(1);
68}
69
70int op_ld_hl_a(ProcessingUnit& cpu, MMU& mmu) // 0x77
71{
72 const u8 newValue = cpu.reg(ProcessingUnit::Register::A);
73 const u16 addr = cpu.get_hl();
74 mmu.write(addr, newValue);
75
76 return totalMachineCycles(2);
77}
78
79int op_ld_a_b(ProcessingUnit& cpu, MMU& mmu) // 0x78
80{
81 cpu.reg(ProcessingUnit::Register::A) = cpu.reg(ProcessingUnit::Register::B);
82
83 return totalMachineCycles(1);
84}
85
86int op_ld_a_c_79(ProcessingUnit& cpu, MMU& mmu) // 0x79
87{
88 cpu.reg(ProcessingUnit::Register::A) = cpu.reg(ProcessingUnit::Register::C);
89
90 return totalMachineCycles(1);
91}
92
93int op_ld_a_d(ProcessingUnit& cpu, MMU& mmu) // 0x7A
94{
95 cpu.reg(ProcessingUnit::Register::A) = cpu.reg(ProcessingUnit::Register::D);
96
97 return totalMachineCycles(1);
98}
99
100int op_ld_a_e(ProcessingUnit& cpu, MMU& mmu) // 0x7B
101{
102 cpu.reg(ProcessingUnit::Register::A) = cpu.reg(ProcessingUnit::Register::E);
103
104 return totalMachineCycles(1);
105}
106
107int op_ld_a_h(ProcessingUnit& cpu, MMU& mmu) // 0x7C
108{
109 cpu.reg(ProcessingUnit::Register::A) = cpu.reg(ProcessingUnit::Register::H);
110
111 return totalMachineCycles(1);
112}
113
114int op_ld_a_l(ProcessingUnit& cpu, MMU& mmu) // 0x7D
115{
116 cpu.reg(ProcessingUnit::Register::A) = cpu.reg(ProcessingUnit::Register::L);
117
118 return totalMachineCycles(1);
119}
120
121int op_ld_a_hl(ProcessingUnit& cpu, MMU& mmu) // 0x7E
122{
123 cpu.reg(ProcessingUnit::Register::A) = mmu.read(cpu.get_hl());
124
125 return totalMachineCycles(2);
126}
127
128int op_ld_a_a(ProcessingUnit& cpu, MMU& mmu) // 0x7F
129{
130 cpu.reg(ProcessingUnit::Register::A) = cpu.reg(ProcessingUnit::Register::A);
131
132 return totalMachineCycles(1);
133}
Definition mmu.hpp:12