1#include "../../../../include/opcode_table.hpp"
2#include "../../../../include/ProcessingUnit.hpp"
3#include "../../../../include/mmu.hpp"
4#include "../../../../include/opcodes.hpp"
5#include "../../../../include/cb_opcodes.hpp"
7OpcodeFunc instructionTable[256] = {
10 op_nop, op_ld_bc_d16, op_ld_bc_a, op_inc_bc,
11 op_inc_b, op_dec_b, op_ld_b_d8, op_rlca,
12 op_ld_a16_sp, op_add_hl_bc, op_ld_a_bc, op_dec_bc,
13 op_inc_c, op_dec_c, op_ld_c_d8, op_rrca,
16 op_stop, op_ld_de_d16, op_ld_de_a, op_inc_de,
17 op_inc_d, op_dec_d, op_ld_d_d8, op_rla,
18 op_jr_r8, op_add_hl_de, op_ld_a_de, op_dec_de,
19 op_inc_e, op_dec_e, op_ld_e_d8, op_rra,
22 op_jr_nz, op_ld_hl_d16, op_ld_hli_a, op_inc_hl,
23 op_inc_h, op_dec_h, op_ld_h_d8, op_daa,
24 op_jr_z, op_add_hl_hl, op_ld_a_hli, op_dec_hl,
25 op_inc_l, op_dec_l, op_ld_l_d8, op_cpl,
28 op_jr_nc, op_ld_sp_d16, op_ld_hld_a, op_inc_sp,
29 op_inc_hl_ptr, op_dec_hl_ptr, op_ld_hl_d8, op_scf,
30 op_jr_c, op_add_hl_sp, op_ld_a_hld, op_dec_sp,
31 op_inc_a, op_dec_a, op_ld_a_d8, op_ccf,
34 op_ld_b_b, op_ld_b_c, op_ld_b_d, op_ld_b_e,
35 op_ld_b_h, op_ld_b_l, op_ld_b_hl, op_ld_b_a,
36 op_ld_c_b, op_ld_c_c, op_ld_c_d, op_ld_c_e,
37 op_ld_c_h, op_ld_c_l, op_ld_c_hl, op_ld_c_a_4f,
40 op_ld_d_b, op_ld_d_c, op_ld_d_d, op_ld_d_e,
41 op_ld_d_h, op_ld_d_l, op_ld_d_hl, op_ld_d_a,
42 op_ld_e_b, op_ld_e_c, op_ld_e_d, op_ld_e_e,
43 op_ld_e_h, op_ld_e_l, op_ld_e_hl, op_ld_e_a,
46 op_ld_h_b, op_ld_h_c, op_ld_h_d, op_ld_h_e,
47 op_ld_h_h, op_ld_h_l, op_ld_h_hl, op_ld_h_a,
48 op_ld_l_b, op_ld_l_c, op_ld_l_d, op_ld_l_e,
49 op_ld_l_h, op_ld_l_l, op_ld_l_hl, op_ld_l_a,
52 op_ld_hl_b, op_ld_hl_c, op_ld_hl_d, op_ld_hl_e,
53 op_ld_hl_h, op_ld_hl_l, op_halt, op_ld_hl_a,
54 op_ld_a_b, op_ld_a_c_79, op_ld_a_d, op_ld_a_e,
55 op_ld_a_h, op_ld_a_l, op_ld_a_hl, op_ld_a_a,
58 op_add_a_b, op_add_a_c, op_add_a_d, op_add_a_e,
59 op_add_a_h, op_add_a_l, op_add_a_hl, op_add_a_a,
60 op_adc_a_b, op_adc_a_c, op_adc_a_d, op_adc_a_e,
61 op_adc_a_h, op_adc_a_l, op_adc_a_hl, op_adc_a_a,
64 op_sub_b, op_sub_c, op_sub_d, op_sub_e,
65 op_sub_h, op_sub_l, op_sub_hl, op_sub_a,
66 op_sbc_a_b, op_sbc_a_c, op_sbc_a_d, op_sbc_a_e,
67 op_sbc_a_h, op_sbc_a_l, op_sbc_a_hl, op_sbc_a_a,
70 op_and_b, op_and_c, op_and_d, op_and_e,
71 op_and_h, op_and_l, op_and_hl, op_and_a,
72 op_xor_b, op_xor_c, op_xor_d, op_xor_e,
73 op_xor_h, op_xor_l, op_xor_hl, op_xor_a,
76 op_or_b, op_or_c, op_or_d, op_or_e,
77 op_or_h, op_or_l, op_or_hl, op_or_a,
78 op_cp_b, op_cp_c, op_cp_d, op_cp_e,
79 op_cp_h, op_cp_l, op_cp_hl, op_cp_a,
82 op_ret_nz, op_pop_bc, op_jp_nz, op_jp,
83 op_call_nz, op_push_bc, op_add_a_d8, op_rst_00,
84 op_ret_z, op_ret, op_jp_z, op_cb_prefix,
85 op_call_z, op_call, op_adc_a_d8, op_rst_08,
88 op_ret_nc, op_pop_de, op_jp_nc, op_illegal_d3,
89 op_call_nc, op_push_de, op_sub_d8, op_rst_10,
90 op_ret_c, op_reti, op_jp_c, op_illegal_db,
91 op_call_c, op_illegal_dd, op_sbc_a_d8, op_rst_18,
94 op_ldh_a8_a, op_pop_hl, op_ld_c_a_e2, op_illegal_e3,
95 op_illegal_e4, op_push_hl, op_and_d8, op_rst_20,
96 op_add_sp_e8, op_jp_hl, op_ld_a16_a, op_illegal_eb,
97 op_illegal_ec, op_illegal_ed, op_xor_d8, op_rst_28,
100 op_ldh_a_a8, op_pop_af, op_ld_a_c_f2, op_di,
101 op_illegal_f4, op_push_af, op_or_d8, op_rst_30,
102 op_ld_hl_sp_e8, op_ld_sp_hl, op_ld_a_a16, op_ei,
103 op_illegal_fc, op_illegal_fd, op_cp_d8, op_rst_38
106OpcodeFunc cbInstructionTable[256] = {
109 op_rlc_b, op_rlc_c, op_rlc_d, op_rlc_e,
110 op_rlc_h, op_rlc_l, op_rlc_hl, op_rlc_a,
111 op_rrc_b, op_rrc_c, op_rrc_d, op_rrc_e,
112 op_rrc_h, op_rrc_l, op_rrc_hl, op_rrc_a,
115 op_rl_b, op_rl_c, op_rl_d, op_rl_e,
116 op_rl_h, op_rl_l, op_rl_hl, op_rl_a,
117 op_rr_b, op_rr_c, op_rr_d, op_rr_e,
118 op_rr_h, op_rr_l, op_rr_hl, op_rr_a,
121 op_sla_b, op_sla_c, op_sla_d, op_sla_e,
122 op_sla_h, op_sla_l, op_sla_hl, op_sla_a,
123 op_sra_b, op_sra_c, op_sra_d, op_sra_e,
124 op_sra_h, op_sra_l, op_sra_hl, op_sra_a,
127 op_swap_b, op_swap_c, op_swap_d, op_swap_e,
128 op_swap_h, op_swap_l, op_swap_hl, op_swap_a,
129 op_srl_b, op_srl_c, op_srl_d, op_srl_e,
130 op_srl_h, op_srl_l, op_srl_hl, op_srl_a,
133 op_bit_0_b, op_bit_0_c, op_bit_0_d, op_bit_0_e,
134 op_bit_0_h, op_bit_0_l, op_bit_0_hl, op_bit_0_a,
135 op_bit_1_b, op_bit_1_c, op_bit_1_d, op_bit_1_e,
136 op_bit_1_h, op_bit_1_l, op_bit_1_hl, op_bit_1_a,
139 op_bit_2_b, op_bit_2_c, op_bit_2_d, op_bit_2_e,
140 op_bit_2_h, op_bit_2_l, op_bit_2_hl, op_bit_2_a,
141 op_bit_3_b, op_bit_3_c, op_bit_3_d, op_bit_3_e,
142 op_bit_3_h, op_bit_3_l, op_bit_3_hl, op_bit_3_a,
145 op_bit_4_b, op_bit_4_c, op_bit_4_d, op_bit_4_e,
146 op_bit_4_h, op_bit_4_l, op_bit_4_hl, op_bit_4_a,
147 op_bit_5_b, op_bit_5_c, op_bit_5_d, op_bit_5_e,
148 op_bit_5_h, op_bit_5_l, op_bit_5_hl, op_bit_5_a,
151 op_bit_6_b, op_bit_6_c, op_bit_6_d, op_bit_6_e,
152 op_bit_6_h, op_bit_6_l, op_bit_6_hl, op_bit_6_a,
153 op_bit_7_b, op_bit_7_c, op_bit_7_d, op_bit_7_e,
154 op_bit_7_h, op_bit_7_l, op_bit_7_hl, op_bit_7_a,
157 op_res_0_b, op_res_0_c, op_res_0_d, op_res_0_e,
158 op_res_0_h, op_res_0_l, op_res_0_hl, op_res_0_a,
159 op_res_1_b, op_res_1_c, op_res_1_d, op_res_1_e,
160 op_res_1_h, op_res_1_l, op_res_1_hl, op_res_1_a,
163 op_res_2_b, op_res_2_c, op_res_2_d, op_res_2_e,
164 op_res_2_h, op_res_2_l, op_res_2_hl, op_res_2_a,
165 op_res_3_b, op_res_3_c, op_res_3_d, op_res_3_e,
166 op_res_3_h, op_res_3_l, op_res_3_hl, op_res_3_a,
169 op_res_4_b, op_res_4_c, op_res_4_d, op_res_4_e,
170 op_res_4_h, op_res_4_l, op_res_4_hl, op_res_4_a,
171 op_res_5_b, op_res_5_c, op_res_5_d, op_res_5_e,
172 op_res_5_h, op_res_5_l, op_res_5_hl, op_res_5_a,
175 op_res_6_b, op_res_6_c, op_res_6_d, op_res_6_e,
176 op_res_6_h, op_res_6_l, op_res_6_hl, op_res_6_a,
177 op_res_7_b, op_res_7_c, op_res_7_d, op_res_7_e,
178 op_res_7_h, op_res_7_l, op_res_7_hl, op_res_7_a,
181 op_set_0_b, op_set_0_c, op_set_0_d, op_set_0_e,
182 op_set_0_h, op_set_0_l, op_set_0_hl, op_set_0_a,
183 op_set_1_b, op_set_1_c, op_set_1_d, op_set_1_e,
184 op_set_1_h, op_set_1_l, op_set_1_hl, op_set_1_a,
187 op_set_2_b, op_set_2_c, op_set_2_d, op_set_2_e,
188 op_set_2_h, op_set_2_l, op_set_2_hl, op_set_2_a,
189 op_set_3_b, op_set_3_c, op_set_3_d, op_set_3_e,
190 op_set_3_h, op_set_3_l, op_set_3_hl, op_set_3_a,
193 op_set_4_b, op_set_4_c, op_set_4_d, op_set_4_e,
194 op_set_4_h, op_set_4_l, op_set_4_hl, op_set_4_a,
195 op_set_5_b, op_set_5_c, op_set_5_d, op_set_5_e,
196 op_set_5_h, op_set_5_l, op_set_5_hl, op_set_5_a,
199 op_set_6_b, op_set_6_c, op_set_6_d, op_set_6_e,
200 op_set_6_h, op_set_6_l, op_set_6_hl, op_set_6_a,
201 op_set_7_b, op_set_7_c, op_set_7_d, op_set_7_e,
202 op_set_7_h, op_set_7_l, op_set_7_hl, op_set_7_a