GameBoy Emulator 1
Game Boy emulator core and tooling
Loading...
Searching...
No Matches
cb_op_06.cpp
1#include "../../../../../include/ProcessingUnit.hpp"
2#include "../../../../../include/cb_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_bit_4_b(ProcessingUnit& cpu, MMU& mmu) // 0xCB60
11{
12 bool set = (cpu.reg(ProcessingUnit::Register::B) & 0x10) != 0;
13
14 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
15 cpu.setFlag(ProcessingUnit::Flag::N, false);
16 cpu.setFlag(ProcessingUnit::Flag::H, true);
17
18 return totalMachineCycles(2);
19}
20
21int op_bit_4_c(ProcessingUnit& cpu, MMU& mmu) // 0xCB61
22{
23 bool set = (cpu.reg(ProcessingUnit::Register::C) & 0x10) != 0;
24
25 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
26 cpu.setFlag(ProcessingUnit::Flag::N, false);
27 cpu.setFlag(ProcessingUnit::Flag::H, true);
28
29 return totalMachineCycles(2);
30}
31
32int op_bit_4_d(ProcessingUnit& cpu, MMU& mmu) // 0xCB62
33{
34 bool set = (cpu.reg(ProcessingUnit::Register::D) & 0x10) != 0;
35
36 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
37 cpu.setFlag(ProcessingUnit::Flag::N, false);
38 cpu.setFlag(ProcessingUnit::Flag::H, true);
39
40 return totalMachineCycles(2);
41}
42
43int op_bit_4_e(ProcessingUnit& cpu, MMU& mmu) // 0xCB63
44{
45 bool set = (cpu.reg(ProcessingUnit::Register::E) & 0x10) != 0;
46
47 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
48 cpu.setFlag(ProcessingUnit::Flag::N, false);
49 cpu.setFlag(ProcessingUnit::Flag::H, true);
50
51 return totalMachineCycles(2);
52}
53
54int op_bit_4_h(ProcessingUnit& cpu, MMU& mmu) // 0xCB64
55{
56 bool set = (cpu.reg(ProcessingUnit::Register::H) & 0x10) != 0;
57
58 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
59 cpu.setFlag(ProcessingUnit::Flag::N, false);
60 cpu.setFlag(ProcessingUnit::Flag::H, true);
61
62 return totalMachineCycles(2);
63}
64
65int op_bit_4_l(ProcessingUnit& cpu, MMU& mmu) // 0xCB65
66{
67 bool set = (cpu.reg(ProcessingUnit::Register::L) & 0x10) != 0;
68
69 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
70 cpu.setFlag(ProcessingUnit::Flag::N, false);
71 cpu.setFlag(ProcessingUnit::Flag::H, true);
72
73 return totalMachineCycles(2);
74}
75
76int op_bit_4_hl(ProcessingUnit& cpu, MMU& mmu) // 0xCB66
77{
78 u8 value = mmu.read(cpu.get_hl());
79 bool set = (value & 0x10) != 0;
80
81 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
82 cpu.setFlag(ProcessingUnit::Flag::N, false);
83 cpu.setFlag(ProcessingUnit::Flag::H, true);
84
85 return totalMachineCycles(3);
86}
87
88int op_bit_4_a(ProcessingUnit& cpu, MMU& mmu) // 0xCB67
89{
90 bool set = (cpu.reg(ProcessingUnit::Register::A) & 0x10) != 0;
91
92 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
93 cpu.setFlag(ProcessingUnit::Flag::N, false);
94 cpu.setFlag(ProcessingUnit::Flag::H, true);
95
96 return totalMachineCycles(2);
97}
98
99int op_bit_5_b(ProcessingUnit& cpu, MMU& mmu) // 0xCB68
100{
101 bool set = (cpu.reg(ProcessingUnit::Register::B) & 0x20) != 0;
102
103 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
104 cpu.setFlag(ProcessingUnit::Flag::N, false);
105 cpu.setFlag(ProcessingUnit::Flag::H, true);
106
107 return totalMachineCycles(2);
108}
109
110int op_bit_5_c(ProcessingUnit& cpu, MMU& mmu) // 0xCB69
111{
112 bool set = (cpu.reg(ProcessingUnit::Register::C) & 0x20) != 0;
113
114 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
115 cpu.setFlag(ProcessingUnit::Flag::N, false);
116 cpu.setFlag(ProcessingUnit::Flag::H, true);
117
118 return totalMachineCycles(2);
119}
120
121int op_bit_5_d(ProcessingUnit& cpu, MMU& mmu) // 0xCB6A
122{
123 bool set = (cpu.reg(ProcessingUnit::Register::D) & 0x20) != 0;
124
125 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
126 cpu.setFlag(ProcessingUnit::Flag::N, false);
127 cpu.setFlag(ProcessingUnit::Flag::H, true);
128
129 return totalMachineCycles(2);
130}
131
132int op_bit_5_e(ProcessingUnit& cpu, MMU& mmu) // 0xCB6B
133{
134 bool set = (cpu.reg(ProcessingUnit::Register::E) & 0x20) != 0;
135
136 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
137 cpu.setFlag(ProcessingUnit::Flag::N, false);
138 cpu.setFlag(ProcessingUnit::Flag::H, true);
139
140 return totalMachineCycles(2);
141}
142
143int op_bit_5_h(ProcessingUnit& cpu, MMU& mmu) // 0xCB6C
144{
145 bool set = (cpu.reg(ProcessingUnit::Register::H) & 0x20) != 0;
146
147 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
148 cpu.setFlag(ProcessingUnit::Flag::N, false);
149 cpu.setFlag(ProcessingUnit::Flag::H, true);
150
151 return totalMachineCycles(2);
152}
153
154int op_bit_5_l(ProcessingUnit& cpu, MMU& mmu) // 0xCB6D
155{
156 bool set = (cpu.reg(ProcessingUnit::Register::L) & 0x20) != 0;
157
158 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
159 cpu.setFlag(ProcessingUnit::Flag::N, false);
160 cpu.setFlag(ProcessingUnit::Flag::H, true);
161
162 return totalMachineCycles(2);
163}
164
165int op_bit_5_hl(ProcessingUnit& cpu, MMU& mmu) // 0xCB6E
166{
167 u8 value = mmu.read(cpu.get_hl());
168 bool set = (value & 0x20) != 0;
169
170 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
171 cpu.setFlag(ProcessingUnit::Flag::N, false);
172 cpu.setFlag(ProcessingUnit::Flag::H, true);
173
174 return totalMachineCycles(3);
175}
176
177int op_bit_5_a(ProcessingUnit& cpu, MMU& mmu) // 0xCB6F
178{
179 bool set = (cpu.reg(ProcessingUnit::Register::A) & 0x20) != 0;
180
181 cpu.setFlag(ProcessingUnit::Flag::Z, !set);
182 cpu.setFlag(ProcessingUnit::Flag::N, false);
183 cpu.setFlag(ProcessingUnit::Flag::H, true);
184
185 return totalMachineCycles(2);
186}
Definition mmu.hpp:12