diff --git a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp index b5f46d8d..f7886d36 100644 --- a/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp +++ b/Source/Atmosphere/stratosphere/loader/source/oc/pcv/pcv_mariko.cpp @@ -495,7 +495,10 @@ Result MemFreqDvbTable(u32* ptr) { if (C.marikoEmcMaxClock <= EmcClkOSLimit) R_SKIP(); - u32 voltAdd = 25*C.marikoEmcDvbShift; + int32_t voltAdd = 25*C.marikoEmcDvbShift; + + #define DVB_VOLT(zero, one, two) std::min(zero+voltAdd, 1050), std::min(one+voltAdd, 1025), std::min(two+voltAdd, 1000), + if (C.marikoEmcMaxClock < 1862400) { std::memcpy(new_start, default_end, sizeof(emc_dvb_dvfs_table_t)); } else if (C.marikoEmcMaxClock < 2131200){ @@ -505,16 +508,16 @@ Result MemFreqDvbTable(u32* ptr) { emc_dvb_dvfs_table_t oc_table = { 2131200, { 725, 700, 675, } }; std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); } else if (C.marikoEmcMaxClock < 2665600){ - emc_dvb_dvfs_table_t oc_table = { 2400000, { s32(750+voltAdd), s32(725+voltAdd), s32(700+voltAdd), } }; + emc_dvb_dvfs_table_t oc_table = { 2400000, { DVB_VOLT(750, 725, 700) } }; std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); } else if (C.marikoEmcMaxClock < 2931200){ - emc_dvb_dvfs_table_t oc_table = { 2665600, { s32(775+voltAdd), s32(750+voltAdd), s32(725+voltAdd), } }; + emc_dvb_dvfs_table_t oc_table = { 2665600, { DVB_VOLT(775, 750, 725) } }; std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); } else if (C.marikoEmcMaxClock < 3200000){ - emc_dvb_dvfs_table_t oc_table = { 2931200, { s32(800+voltAdd), s32(775+voltAdd), s32(750+voltAdd), } }; + emc_dvb_dvfs_table_t oc_table = { 2931200, { DVB_VOLT(800, 775, 750) } }; std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); } else { - emc_dvb_dvfs_table_t oc_table = { 3200000, { s32(800+voltAdd), s32(800+voltAdd), s32(775+voltAdd), } }; + emc_dvb_dvfs_table_t oc_table = { 3200000, { DVB_VOLT(800, 800, 775) } }; std::memcpy(new_start, &oc_table, sizeof(emc_dvb_dvfs_table_t)); } new_start->freq = C.marikoEmcMaxClock;