Files
Horizon-OC/test_patch.sh
KazushiM c8587ce441 Misc gui in sys-clk overlay updated, HOS 15.0.0 test passed
Extracting nca...
79c6b910fe436a85496d3b822f23b8b9.nca (ptm) -> /Volumes/RAMDISK/ptm/
e11685a3958d1f25a8f44f54126b10ff.nca (pcv) -> /Volumes/RAMDISK/pcv/

Converting nca to elf...

Building...

Patching...
Patching pcv for Erista...
CpuClkOSLimit   Count: 1
CpuVoltLimit*   Count: 14
MemClkOSLimit   Count: 32
MemVoltHOS      Count: 2
MemClkPllmLimit Count: 2
	in void ams::ldr::oc::pcv::Erista::Patch(uintptr_t, size_t)
Saving to "/Volumes/RAMDISK/pcv/main.elf.erista"...
Patching pcv for Mariko...
CpuClkOSLimit   Count: 1
CpuClkOfficial  Count: 1
GpuClkOfficial  Count: 1
CpuVoltOfficial Count: 13
MemClkOSLimit   Count: 32
GpuClkPllLimit  Count: 1
MemClkPllmLimit Count: 2
GpuAsmPattern   Count: 2
	in void ams::ldr::oc::pcv::Mariko::Patch(uintptr_t, size_t)
Saving to "/Volumes/RAMDISK/pcv/main.elf.mariko"...
Passed!

Patching ptm (Mariko Only)...
cpuPtmBoost Count: 2
memPtmMax   Count: 9
memPtmAlt   Count: 7
	in void ams::ldr::oc::ptm::Patch(uintptr_t, size_t)
Saving to "/Volumes/RAMDISK/ptm/main.elf.mariko"...
Passed!
2022-10-11 15:28:09 +08:00

119 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
fw_dir="/Volumes/RAMDISK/NX-15.0.0/"
tmp_dir="/Volumes/RAMDISK/"
repack_out_dir="/Volumes/RAMDISK/out/"
oc_test_dir="$HOME/Source/Switch-OC-Suite/Source/Atmosphere/stratosphere/loader/source/oc"
prodkeys="$HOME/.switch/prod.keys"
hactool_exe="$HOME/Source/hactool/hactool"
nx2elf_exe="$HOME/Source/nx2elf/nx2elf"
elf2nso_exe="$HOME/Source/switch-tools/elf2nso"
hacpack_exe="$HOME/Source/hacPack/hacpack"
should_remove_tmp="Y"
should_save_repack="Y"
option_Mariko_Erista="M"
echo -e "\nExtracting nca..."
out_pcv="${tmp_dir}pcv/"
out_ptm="${tmp_dir}ptm/"
mkdir -p "${out_pcv}"
mkdir -p "${out_ptm}"
cd $fw_dir
pcv_nca_name=""
ptm_nca_name=""
for file_00 in ./*.nca/00
do
if [ -e "${file_00}" ]; then
echo "Processing \"*.nca/00\" files..."
find "${fw_dir}" -type f -name "00" -exec sh -c 'DIR=$(dirname "{}"); FW_DIR=$(dirname "${DIR}"); mv "{}" "${FW_DIR}/00"; rm -r "${DIR}"; mv "${FW_DIR}/00" "${DIR}"' \;
fi
break
done
for nca_file in ./*.nca
do
file_size=`wc -c "$nca_file" | awk '{print $1}'`
if [[ "$nca_file" == *".cnmt."* || file_size -lt 16384 ]]; then
continue
fi
titleid=`$hactool_exe -k $prodkeys --disablekeywarns -t nca $nca_file | grep 'Title ID'`
if [[ $titleid == *"010000000000001a"* ]]; then
pcv_nca_name="$(basename $nca_file)"
echo "$pcv_nca_name (pcv) -> $out_pcv"
$hactool_exe -k $prodkeys --disablekeywarns -t nca $nca_file --exefsdir "$out_pcv" 1> /dev/null
fi
if [[ $titleid == *"0100000000000010"* ]]; then
ptm_nca_name="$(basename $nca_file)"
echo "$ptm_nca_name (ptm) -> $out_ptm"
$hactool_exe -k $prodkeys --disablekeywarns -t nca $nca_file --exefsdir "$out_ptm" 1> /dev/null
fi
done
echo -e "\nConverting nca to elf..."
$nx2elf_exe "${out_pcv}main" 1> /dev/null
$nx2elf_exe "${out_ptm}main" 1> /dev/null
echo -e "\nBuilding..."
cd $oc_test_dir
make test 1> /dev/null
echo -e "\nPatching..."
[ -z "$should_save_repack" ] && read -p "Save and repack to nca (y/N)? " should_save_repack
SAVE_OPT=" "
case $should_save_repack in
Y|y ) SAVE_OPT="-s ";;
esac
./test pcv $SAVE_OPT "${out_pcv}main.elf"
./test ptm $SAVE_OPT "${out_ptm}main.elf"
make clean 1> /dev/null
if [ ! -z $SAVE_OPT ]; then
case $should_save_repack in
Y|y )
patched_ext=".mariko"
[ -z "$option_Mariko_Erista" ] && read -p "[M]ariko (Default) | [E]rista ? " option_Mariko_Erista
case $option_Mariko_Erista in
E|e ) patched_ext=".erista";;
esac
mkdir -p "${repack_out_dir}"
cd "${tmp_dir}"
echo -e "\nRepacking pcv to ${repack_out_dir}${pcv_nca_name}..."
TMP="${out_pcv}temp/"
mkdir -p "${TMP}"
$elf2nso_exe "${out_pcv}main.elf${patched_ext}" "${TMP}main" 1> /dev/null
cp "${out_pcv}main.npdm" "${TMP}main.npdm"
$hacpack_exe -k $prodkeys -o "${TMP}nca" --type nca --ncatype program --titleid 010000000000001A --exefsdir "${TMP}" 1> /dev/null
find "${TMP}nca" -name "*.nca" -exec mv {} "${repack_out_dir}${pcv_nca_name}" \;
if [[ $patched_ext == ".mariko" ]]; then
echo -e "\nRepacking ptm (Mariko Only) to ${repack_out_dir}${ptm_nca_name}..."
TMP="${out_ptm}temp/"
mkdir -p "${TMP}"
$elf2nso_exe "${out_ptm}main.elf${patched_ext}" "${TMP}main" 1> /dev/null
cp "${out_ptm}main.npdm" "${TMP}main.npdm"
$hacpack_exe -k $prodkeys -o "${TMP}nca" --type nca --ncatype program --titleid 0100000000000010 --exefsdir "${TMP}" 1> /dev/null
find "${TMP}nca" -name "*.nca" -exec mv {} "${repack_out_dir}${ptm_nca_name}" \;
fi
;;
esac
fi
[ -z "$should_remove_tmp" ] && read -p "Remove temp files (Y/n)? " should_remove_tmp
case $should_remove_tmp in
N|n )
exit;;
esac
rm -fr $out_pcv
rm -fr $out_ptm
rm -fr "${tmp_dir}hacpack_backup"
echo -e "\nDone!"