ppcopcodes: fix mfsr, mfsrin, mtsrin and mtmsr emulation.

This commit is contained in:
Maxim Poliakovski
2019-07-19 19:00:18 +02:00
parent c9854b36c6
commit 112f2265d6

View File

@@ -129,7 +129,7 @@ void ppc_grab_regssa(){
void ppc_grab_regssb(){ void ppc_grab_regssb(){
reg_s = (ppc_cur_instruction >> 21) & 31; reg_s = (ppc_cur_instruction >> 21) & 31;
reg_b = (ppc_cur_instruction >> 16) & 31; reg_b = (ppc_cur_instruction >> 11) & 31;
ppc_result_d = ppc_state.ppc_gpr[reg_s]; ppc_result_d = ppc_state.ppc_gpr[reg_s];
ppc_result_b = ppc_state.ppc_gpr[reg_b]; ppc_result_b = ppc_state.ppc_gpr[reg_b];
} }
@@ -1358,7 +1358,7 @@ void ppc_mtsr(){
void ppc_mtsrin(){ void ppc_mtsrin(){
if ((ppc_state.ppc_msr & 0x4000) == 0){ if ((ppc_state.ppc_msr & 0x4000) == 0){
ppc_grab_regssb(); ppc_grab_regssb();
grab_sr = ppc_result_b & 15; grab_sr = ppc_result_b >> 28;
ppc_state.ppc_sr[grab_sr] = ppc_result_d; ppc_state.ppc_sr[grab_sr] = ppc_result_d;
} }
} }
@@ -1368,16 +1368,14 @@ void ppc_mfsr(){
reg_d = (ppc_cur_instruction >> 21) & 31; reg_d = (ppc_cur_instruction >> 21) & 31;
grab_sr = (ppc_cur_instruction >> 16) & 15; grab_sr = (ppc_cur_instruction >> 16) & 15;
ppc_state.ppc_gpr[reg_d] = ppc_state.ppc_sr[grab_sr]; ppc_state.ppc_gpr[reg_d] = ppc_state.ppc_sr[grab_sr];
ppc_store_result_regd();
} }
} }
void ppc_mfsrin(){ void ppc_mfsrin(){
if ((ppc_state.ppc_msr & 0x4000) == 0){ if ((ppc_state.ppc_msr & 0x4000) == 0){
ppc_grab_regssb(); ppc_grab_regssb();
grab_sr = ppc_result_b & 15; grab_sr = ppc_result_b >> 28;
ppc_state.ppc_gpr[reg_d] = ppc_state.ppc_sr[grab_sr]; ppc_state.ppc_gpr[reg_d] = ppc_state.ppc_sr[grab_sr];
ppc_store_result_regd();
} }
} }
@@ -1391,7 +1389,7 @@ void ppc_mfmsr(){
void ppc_mtmsr(){ void ppc_mtmsr(){
//if ((ppc_state.ppc_msr && 0x4000) == 0){ //if ((ppc_state.ppc_msr && 0x4000) == 0){
reg_s = (ppc_cur_instruction >> 21) & 31; reg_s = (ppc_cur_instruction >> 21) & 31;
ppc_state.ppc_msr = ppc_state.ppc_spr[reg_s]; ppc_state.ppc_msr = ppc_state.ppc_gpr[reg_s];
msr_status_update(); msr_status_update();
//} //}
} }