Created
May 18, 2025 10:19
-
-
Save polaris-xoxo/e7f0cf8b153c2d4c0e280e8583cfa615 to your computer and use it in GitHub Desktop.
PS2 Modchip HDD Formatter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| clear | |
| C_RED_BLD='\033[1;31m' C_YLW_BLD='\033[1;93m' C_GRN_BLD='\033[1;32m' C_BLU_BLD='\033[1;94m' C_CYN_BLD='\033[1;36m' C_WHT_BLD='\033[1;37m' C_GRY_BLD='\033[1;30m' | |
| C_RED='\033[0;91m' C_YLW='\033[0;93m' C_GRN='\033[0;92m' C_BLU='\033[0;94m' C_CYN='\033[0;36m' C_WHT='\033[0;37m' C_GRY='\033[0;30m' | |
| C_BLANK='\033[0m' C_FLASH='\033[1;5m' | |
| TOOLKIT_PATH="${HOME}/ps2" | |
| function function_apa_checksum_fix() { | |
| sudo dd if=${DEVICE} of=/tmp/apa_header_full.bin bs=512 count=2 | |
| "${TOOLKIT_PATH}/apps/PS2 APA Header Checksum Fixer.elf" /tmp/apa_header_full.bin | sed -n 8p | awk '{print $6}' | xxd -r -p > /tmp/apa_header_checksum.bin | |
| sudo dd if=/tmp/apa_header_checksum.bin of=${DEVICE} conv=notrunc | |
| } | |
| function function_apajail_magic_number() { | |
| echo ${MAGIC_NUMBER} | xxd -r -p > /tmp/apajail_magic_number.bin | |
| sudo dd if=/tmp/apajail_magic_number.bin of=${DEVICE} bs=8 count=1 seek=28 conv=notrunc | |
| } | |
| function function_clear_temp() { | |
| sudo rm /tmp/apa_header_address.bin &> /dev/null | |
| sudo rm /tmp/apa_header_boot.bin &> /dev/null | |
| sudo rm /tmp/apa_header_checksum.bin &> /dev/null | |
| sudo rm /tmp/apa_header_full.bin &> /dev/null | |
| sudo rm /tmp/apa_journal.bin &> /dev/null | |
| sudo rm /tmp/apa_header_probe.bin &> /dev/null | |
| sudo rm /tmp/apa_header_size.bin &> /dev/null | |
| sudo rm /tmp/apajail_magic_number.bin &> /dev/null | |
| sudo rm /tmp/apa_index.xz &> /dev/null | |
| sudo rm /tmp/gpt_2nd.xz &> /dev/null | |
| sudo rm /tmp/conf_hdd.cfg &> /dev/null | |
| } | |
| function function_continue() { | |
| echo | |
| read -p "Press any key to continue. " | |
| echo | |
| } | |
| function function_device() { | |
| echo -e "Choose your ${C_YLW_BLD}internal PS2 disk${C_BLANK} (eg: ${C_YLW}/dev/sdx${C_BLANK}) from device list below:" | |
| echo | |
| lsblk -p -o MODEL,NAME,SIZE,LABEL,MOUNTPOINT | |
| echo | |
| read DEVICE | |
| echo -e "Ok, so yo have chosen: \"${C_YLW_BLD}${DEVICE}${C_BLANK}\"" | |
| } | |
| function function_disk_size_check() { | |
| LBA_MAX=$(sudo blockdev --getsize ${DEVICE}) | |
| if [ ${LBA_MAX} -gt 4294967296 ]; then | |
| echo -e "${C_RED_BLD}ERROR:${C_RED} Disk size exceeding 2TiB. Formatting aborted.${C_BLANK}" | |
| function_exit | |
| fi | |
| } | |
| function function_exit() { | |
| echo | |
| read -p "Press any key to exit script. " | |
| exit | |
| } | |
| function function_make_ps2_dirs() { | |
| if [ ! -d "/tmp/ps2_dirs" ]; then | |
| mkdir /tmp/ps2_dirs | |
| fi | |
| if [ "$(echo ${DEVICE} | grep -o /dev/loop)" = "/dev/loop" ]; then | |
| sudo mount ${DEVICE}p${PARTITION_NUMBER} /tmp/ps2_dirs | |
| else sudo mount ${DEVICE}${PARTITION_NUMBER} /tmp/ps2_dirs | |
| fi | |
| cd /tmp/ps2_dirs | |
| sudo mkdir -p APPS/ # Open PS2 Loader: applications | |
| sudo mkdir -p ART/ # Open PS2 Loader: disc covers (<GameID>_COV.png, <GameID>_ICO.png, <GameID>_SCR.png etc.) | |
| sudo mkdir -p CFG/ # Open PS2 Loader: per game configs (<GameID>.cfg) | |
| sudo mkdir -p CHT/ # Open PS2 Loader: cheats (<GameID>.cht) | |
| sudo mkdir -p CD/ # Open PS2 Loader: CD disc images (*.iso, *.zso) | |
| sudo mkdir -p DVD/ # Open PS2 Loader: DVD disc images (*.iso, *.zso) | |
| sudo mkdir -p LNG # Open PS2 Loader: Language files | |
| sudo mkdir -p THM/ # Open PS2 Loader: theme dirs (thm_<ThemeName>/*) | |
| sudo mkdir -p VMC/ # Open PS2 Loader: non-ECC PS2 Memory Card images (generic or <GameID>_0.bin, <GameID>_1.bin) | |
| sync | |
| sudo umount -l /tmp/ps2_dirs | |
| } | |
| function function_warning_apajail() { | |
| echo | |
| echo -e "${C_RED_BLD}APA-Jail${C_RED} is a danger for normal users because once setup, it cannot be edited by" | |
| echo -e "ordinary tools on PC and PS2. By doing so, data loss is guaranteed!${C_BLANK}" | |
| } | |
| function function_zeroing() { | |
| # wiping out APA and MBR/GPT: | |
| sudo dd if=/dev/zero of=${DEVICE} bs=128M count=1 conv=notrunc status=none | |
| # wiping out GPT backup: | |
| LBA_MAX=$(sudo blockdev --getsize ${DEVICE}) | |
| LBA_GPT_BUP=$(echo "$((${LBA_MAX}-2048))") | |
| sudo dd if=/dev/zero of=${DEVICE} seek=${LBA_GPT_BUP} bs=512 count=2048 conv=notrunc status=none | |
| # updating partition table: | |
| sudo partprobe ${DEVICE} | |
| echo | |
| } | |
| # //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| echo -e "${C_GRN_BLD}PS2 Modchip HDD Formatter by Burroughs - Based on PS2HDH by Berion" | |
| echo -e "${C_YLW}Script for formatting internal disk using APA-J for use with modchip dev.2 boot" | |
| echo | |
| echo -e "${C_RED_BLD}Confirm root permissions everytime you will be asked.${C_BLANK}" | |
| echo | |
| # //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| # APA-Jail | |
| echo -e "${C_YLW}This operation will ${C_YLW_BLD}mix${C_YLW} ${C_YLW_BLD}APA${C_YLW} and ${C_YLW_BLD}MBR${C_YLW} together. (APA cut on 4GiB)" | |
| echo | |
| echo -e "${C_WHT_BLD}Partition tables:${C_BLANK}" | |
| echo -e " ∙ creating APA and MBR" | |
| echo | |
| echo -e "${C_WHT_BLD}Partitions:${C_BLANK}" | |
| echo -e " ∙ basic PS2 partitions (cannot exceed 4GiB)" | |
| echo -e " ∙ empty 128mb partition for dev.2 boot from APA" | |
| echo -e " ∙ recovery partition on MBR" | |
| echo -e " ∙ protection area + exFAT" | |
| function_warning_apajail | |
| function_continue | |
| function_device | |
| function_continue | |
| function_disk_size_check | |
| function_zeroing | |
| echo -e "device ${DEVICE}\ninitialize yes\nmkpart __boot 128M PFS\nls -l\nexit" | cat | sudo "${TOOLKIT_PATH}/apps/PFS Shell.elf" | |
| echo | |
| # Signature injection (type A2): | |
| MAGIC_NUMBER="4150414A2D413200" | |
| function_apajail_magic_number | |
| # Setting up MBR: | |
| echo -e ",4GiB,17\n,32MiB,17\n,,07" | sudo sfdisk ${DEVICE} | |
| sudo partprobe ${DEVICE} | |
| if [ "$(echo ${DEVICE} | grep -o /dev/loop)" = "/dev/loop" ]; then | |
| sudo mkfs.ext2 -L "RECOVERY" ${DEVICE}p2 | |
| sudo mkfs.exfat -c 32K -L "OPL" ${DEVICE}p3 | |
| else | |
| sleep 4 | |
| sudo mkfs.ext2 -L "RECOVERY" ${DEVICE}2 | |
| sudo mkfs.exfat -c 32K -L "OPL" ${DEVICE}3 | |
| fi | |
| PARTITION_NUMBER=3 | |
| function_make_ps2_dirs | |
| # Finalising recovery: | |
| if [ ! -d "${TOOLKIT_PATH}/storage/hdd/recovery" ]; then | |
| mkdir ${TOOLKIT_PATH}/storage/hdd/recovery | |
| fi | |
| if [ "$(echo ${DEVICE} | grep -o /dev/loop)" = "/dev/loop" ]; then | |
| sudo mount ${DEVICE}p2 ${TOOLKIT_PATH}/storage/hdd/recovery | |
| else sudo mount ${DEVICE}2 ${TOOLKIT_PATH}/storage/hdd/recovery | |
| fi | |
| sudo dd if=${DEVICE} bs=128M count=1 status=progress | xz -z > /tmp/apa_index.xz | |
| sudo cp /tmp/apa_index.xz ${TOOLKIT_PATH}/storage/hdd/recovery | |
| LBA_MAX=$(sudo blockdev --getsize ${DEVICE}) | |
| LBA_GPT_BUP=$(echo $(($LBA_MAX-33))) | |
| sudo dd if=${DEVICE} skip=${LBA_GPT_BUP} bs=512 count=33 status=progress | xz -z > /tmp/gpt_2nd.xz | |
| sudo cp /tmp/gpt_2nd.xz ${TOOLKIT_PATH}/storage/hdd/recovery | |
| sync | |
| sudo umount -l ${TOOLKIT_PATH}/storage/hdd/recovery | |
| rmdir ${TOOLKIT_PATH}/storage/hdd/recovery | |
| function_apa_checksum_fix | |
| # //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |
| function_clear_temp | |
| unset DEVICE | |
| unset LBA_GPT_BUP | |
| unset LBA_MAX | |
| unset MAGIC_NUMBER | |
| unset PARTITION_NUMBER | |
| echo -e ${C_WHT_BLD} | |
| read -p "All done. Press any key to exit. " |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment