1#include "../../../../../include/ProcessingUnit.hpp"
2#include "../../../../../include/cb_opcodes.hpp"
3#include "../../../../../include/mmu.hpp"
5constexpr int machine_cycles = 4;
6#define totalMachineCycles(n) ((n) * machine_cycles)
8#define DUMMY(name) int name(ProcessingUnit&, MMU&) { return totalMachineCycles(1); }
12 bool set = (cpu.reg(ProcessingUnit::Register::B) & 0x40) != 0;
14 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
15 cpu.setFlag(ProcessingUnit::Flag::N,
false);
16 cpu.setFlag(ProcessingUnit::Flag::H,
true);
18 return totalMachineCycles(2);
23 bool set = (cpu.reg(ProcessingUnit::Register::C) & 0x40) != 0;
25 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
26 cpu.setFlag(ProcessingUnit::Flag::N,
false);
27 cpu.setFlag(ProcessingUnit::Flag::H,
true);
29 return totalMachineCycles(2);
34 bool set = (cpu.reg(ProcessingUnit::Register::D) & 0x40) != 0;
36 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
37 cpu.setFlag(ProcessingUnit::Flag::N,
false);
38 cpu.setFlag(ProcessingUnit::Flag::H,
true);
40 return totalMachineCycles(2);
45 bool set = (cpu.reg(ProcessingUnit::Register::E) & 0x40) != 0;
47 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
48 cpu.setFlag(ProcessingUnit::Flag::N,
false);
49 cpu.setFlag(ProcessingUnit::Flag::H,
true);
51 return totalMachineCycles(2);
56 bool set = (cpu.reg(ProcessingUnit::Register::H) & 0x40) != 0;
58 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
59 cpu.setFlag(ProcessingUnit::Flag::N,
false);
60 cpu.setFlag(ProcessingUnit::Flag::H,
true);
62 return totalMachineCycles(2);
67 bool set = (cpu.reg(ProcessingUnit::Register::L) & 0x40) != 0;
69 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
70 cpu.setFlag(ProcessingUnit::Flag::N,
false);
71 cpu.setFlag(ProcessingUnit::Flag::H,
true);
73 return totalMachineCycles(2);
78 u8 value = mmu.read(cpu.get_hl());
79 bool set = (value & 0x40) != 0;
81 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
82 cpu.setFlag(ProcessingUnit::Flag::N,
false);
83 cpu.setFlag(ProcessingUnit::Flag::H,
true);
85 return totalMachineCycles(3);
90 bool set = (cpu.reg(ProcessingUnit::Register::A) & 0x40) != 0;
92 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
93 cpu.setFlag(ProcessingUnit::Flag::N,
false);
94 cpu.setFlag(ProcessingUnit::Flag::H,
true);
96 return totalMachineCycles(2);
101 bool set = (cpu.reg(ProcessingUnit::Register::B) & 0x80) != 0;
103 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
104 cpu.setFlag(ProcessingUnit::Flag::N,
false);
105 cpu.setFlag(ProcessingUnit::Flag::H,
true);
107 return totalMachineCycles(2);
112 bool set = (cpu.reg(ProcessingUnit::Register::C) & 0x80) != 0;
114 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
115 cpu.setFlag(ProcessingUnit::Flag::N,
false);
116 cpu.setFlag(ProcessingUnit::Flag::H,
true);
118 return totalMachineCycles(2);
123 bool set = (cpu.reg(ProcessingUnit::Register::D) & 0x80) != 0;
125 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
126 cpu.setFlag(ProcessingUnit::Flag::N,
false);
127 cpu.setFlag(ProcessingUnit::Flag::H,
true);
129 return totalMachineCycles(2);
134 bool set = (cpu.reg(ProcessingUnit::Register::E) & 0x80) != 0;
136 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
137 cpu.setFlag(ProcessingUnit::Flag::N,
false);
138 cpu.setFlag(ProcessingUnit::Flag::H,
true);
140 return totalMachineCycles(2);
145 bool set = (cpu.reg(ProcessingUnit::Register::H) & 0x80) != 0;
147 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
148 cpu.setFlag(ProcessingUnit::Flag::N,
false);
149 cpu.setFlag(ProcessingUnit::Flag::H,
true);
151 return totalMachineCycles(2);
156 bool set = (cpu.reg(ProcessingUnit::Register::L) & 0x80) != 0;
158 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
159 cpu.setFlag(ProcessingUnit::Flag::N,
false);
160 cpu.setFlag(ProcessingUnit::Flag::H,
true);
162 return totalMachineCycles(2);
167 u8 value = mmu.read(cpu.get_hl());
168 bool set = (value & 0x80) != 0;
170 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
171 cpu.setFlag(ProcessingUnit::Flag::N,
false);
172 cpu.setFlag(ProcessingUnit::Flag::H,
true);
174 return totalMachineCycles(3);
179 bool set = (cpu.reg(ProcessingUnit::Register::A) & 0x80) != 0;
181 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
182 cpu.setFlag(ProcessingUnit::Flag::N,
false);
183 cpu.setFlag(ProcessingUnit::Flag::H,
true);
185 return totalMachineCycles(2);