mirror of
https://github.com/dingusdev/dingusppc.git
synced 2025-02-08 02:30:40 +00:00
More clean-up
This commit is contained in:
parent
2ab23546ea
commit
e2ad753f4a
3
.gitignore
vendored
3
.gitignore
vendored
@ -20,6 +20,9 @@ CMakeSettings.json
|
|||||||
*.vcxproj
|
*.vcxproj
|
||||||
*.vcxproj.filters
|
*.vcxproj.filters
|
||||||
|
|
||||||
|
# Ignore Visual Studio auto-save recovery folder
|
||||||
|
enc_temp_folder/
|
||||||
|
|
||||||
# Ignore CodeLite configuration files
|
# Ignore CodeLite configuration files
|
||||||
*.workspace
|
*.workspace
|
||||||
*.workspace.*
|
*.workspace.*
|
||||||
|
@ -103,6 +103,12 @@ inline static void snan_double_check(int reg_a, int reg_b) {
|
|||||||
ppc_state.fpscr |= FX | VX | VXSNAN;
|
ppc_state.fpscr |= FX | VX | VXSNAN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline static void max_double_check(double value_a, double value_b) {
|
||||||
|
if (((value_a == DBL_MAX) && (value_b == DBL_MAX)) ||
|
||||||
|
((value_a == -DBL_MAX) && (value_b == -DBL_MAX)))
|
||||||
|
ppc_state.fpscr |= FX | OX | XX | FI;
|
||||||
|
}
|
||||||
|
|
||||||
inline static bool check_qnan(int check_reg) {
|
inline static bool check_qnan(int check_reg) {
|
||||||
uint64_t check_int = ppc_state.fpr[check_reg].int64_r;
|
uint64_t check_int = ppc_state.fpr[check_reg].int64_r;
|
||||||
return (((check_int & (0x7FFULL << 52)) == (0x7FFULL << 52)) &&
|
return (((check_int & (0x7FFULL << 52)) == (0x7FFULL << 52)) &&
|
||||||
@ -151,10 +157,12 @@ void dppc_interpreter::ppc_fadd() {
|
|||||||
ppc_grab_regsfpdab(ppc_cur_instruction);
|
ppc_grab_regsfpdab(ppc_cur_instruction);
|
||||||
|
|
||||||
snan_double_check(reg_a, reg_b);
|
snan_double_check(reg_a, reg_b);
|
||||||
|
max_double_check(val_reg_a, val_reg_b);
|
||||||
|
|
||||||
double ppc_dblresult64_d = val_reg_a + val_reg_b;
|
double ppc_dblresult64_d = val_reg_a + val_reg_b;
|
||||||
ppc_store_dfpresult_flt(reg_d, ppc_dblresult64_d);
|
ppc_store_dfpresult_flt(reg_d, ppc_dblresult64_d);
|
||||||
fpresult_update(ppc_dblresult64_d);
|
fpresult_update(ppc_dblresult64_d);
|
||||||
|
ppc_update_fex();
|
||||||
|
|
||||||
if (rec)
|
if (rec)
|
||||||
ppc_update_cr1();
|
ppc_update_cr1();
|
||||||
@ -170,6 +178,7 @@ void dppc_interpreter::ppc_fsub() {
|
|||||||
snan_double_check(reg_a, reg_b);
|
snan_double_check(reg_a, reg_b);
|
||||||
|
|
||||||
double ppc_dblresult64_d = val_reg_a - val_reg_b;
|
double ppc_dblresult64_d = val_reg_a - val_reg_b;
|
||||||
|
|
||||||
ppc_store_dfpresult_flt(reg_d, ppc_dblresult64_d);
|
ppc_store_dfpresult_flt(reg_d, ppc_dblresult64_d);
|
||||||
fpresult_update(ppc_dblresult64_d);
|
fpresult_update(ppc_dblresult64_d);
|
||||||
|
|
||||||
@ -311,6 +320,7 @@ void dppc_interpreter::ppc_fsubs() {
|
|||||||
snan_double_check(reg_a, reg_b);
|
snan_double_check(reg_a, reg_b);
|
||||||
|
|
||||||
double ppc_dblresult64_d = (float)(val_reg_a - val_reg_b);
|
double ppc_dblresult64_d = (float)(val_reg_a - val_reg_b);
|
||||||
|
|
||||||
ppc_store_sfpresult_flt(reg_d, ppc_dblresult64_d);
|
ppc_store_sfpresult_flt(reg_d, ppc_dblresult64_d);
|
||||||
fpresult_update(ppc_dblresult64_d);
|
fpresult_update(ppc_dblresult64_d);
|
||||||
|
|
||||||
|
@ -666,7 +666,7 @@ template void dppc_interpreter::ppc_srawi<RC1>();
|
|||||||
/** mask generator for rotate and shift instructions (§ 4.2.1.4 PowerpC PEM) */
|
/** mask generator for rotate and shift instructions (§ 4.2.1.4 PowerpC PEM) */
|
||||||
static inline uint32_t rot_mask(unsigned rot_mb, unsigned rot_me) {
|
static inline uint32_t rot_mask(unsigned rot_mb, unsigned rot_me) {
|
||||||
uint32_t m1 = 0xFFFFFFFFUL >> rot_mb;
|
uint32_t m1 = 0xFFFFFFFFUL >> rot_mb;
|
||||||
uint32_t m2 = (uint32_t)(0xFFFFFFFFUL << (31 - rot_me));
|
uint32_t m2 = uint32_t(0xFFFFFFFFUL << (31 - rot_me));
|
||||||
return ((rot_mb <= rot_me) ? m2 & m1 : m1 | m2);
|
return ((rot_mb <= rot_me) ? m2 & m1 : m1 | m2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -279,7 +279,7 @@ uint8_t ScsiBusController::fifo_pop() {
|
|||||||
if (this->fifo_pos) {
|
if (this->fifo_pos) {
|
||||||
data = this->data_fifo[0];
|
data = this->data_fifo[0];
|
||||||
if (--this->fifo_pos)
|
if (--this->fifo_pos)
|
||||||
std:memmove(this->data_fifo, &this->data_fifo[1], this->fifo_pos);
|
std::memmove(this->data_fifo, &this->data_fifo[1], this->fifo_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
// see if we need to refill FIFO
|
// see if we need to refill FIFO
|
||||||
|
4
main.cpp
4
main.cpp
@ -253,6 +253,10 @@ void run_machine(std::string machine_str, std::string bootrom_path, uint32_t exe
|
|||||||
power_off_reason = po_starting_up;
|
power_off_reason = po_starting_up;
|
||||||
enter_debugger();
|
enter_debugger();
|
||||||
break;
|
break;
|
||||||
|
case threaded_int:
|
||||||
|
power_off_reason = po_starting_up;
|
||||||
|
enter_debugger();
|
||||||
|
break;
|
||||||
case debugger:
|
case debugger:
|
||||||
power_off_reason = po_enter_debugger;
|
power_off_reason = po_enter_debugger;
|
||||||
enter_debugger();
|
enter_debugger();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user