Added Neutrino support

This commit is contained in:
CosmicScale 2025-02-19 13:29:20 +00:00
parent dbb2e6e0dd
commit 16023d922c
77 changed files with 1049 additions and 166 deletions

View File

@ -6,7 +6,10 @@ echo -e "\e[8;40;100t"
TOOLKIT_PATH="$(pwd)"
ICONS_DIR="${TOOLKIT_PATH}/icons"
ARTWORK_DIR="${ICONS_DIR}/art"
POPSTARTER="${TOOLKIT_PATH}/assets/POPSTARTER.ELF"
HELPER_DIR="${TOOLKIT_PATH}/helper"
ASSETS_DIR="${TOOLKIT_PATH}/assets"
POPSTARTER="${ASSETS_DIR}/POPSTARTER.ELF"
NEUTRINO_DIR="${ASSETS_DIR}/neutrino"
LOG_FILE="${TOOLKIT_PATH}/game-installer.log"
MISSING_ART=${TOOLKIT_PATH}/missing-art.log
@ -24,7 +27,7 @@ clear
cd "${TOOLKIT_PATH}"
# Check if the helper files exists
if [[ ! -f "${TOOLKIT_PATH}/helper/PFS Shell.elf" || ! -f "${TOOLKIT_PATH}/helper/HDL Dump.elf" ]]; then
if [[ ! -f "${HELPER_DIR}/PFS Shell.elf" || ! -f "${HELPER_DIR}/HDL Dump.elf" ]]; then
echo "Required helper files not found. Please ensure you are in the 'PSBBN-Definitive-English-Patch'"
echo "directory and try again."
exit 1
@ -132,20 +135,26 @@ echo " Written by CosmicScale"
lsblk -p -o MODEL,NAME,SIZE,LABEL,MOUNTPOINT | tee -a "${LOG_FILE}"
echo | tee -a "${LOG_FILE}"
read -p "Choose your PS2 HDD from the list above e.g. /dev/sdx): " DEVICE
read -p "Choose your PS2 HDD from the list above (e.g., /dev/sdx): " DEVICE
# Validate input
if [[ $DEVICE =~ ^/dev/sd[a-z]$ ]]; then
echo
echo -e "Selected drive: \"${DEVICE}\"" | tee -a "${LOG_FILE}"
break
# Validate input format (must start with /dev/)
if [[ $DEVICE == /dev/* ]]; then
# Check if the device exists
if lsblk -p | grep -q "^${DEVICE}"; then
echo
echo -e "Selected drive: \"${DEVICE}\"" | tee -a "${LOG_FILE}"
break
else
echo
echo "Error: Device ${DEVICE} not found. Please choose a valid disk from the list."
fi
else
echo
echo "Error: Invalid input. Please enter a valid device name (e.g., /dev/sdx)."
read -n 1 -s -r -p "Press any key to try again..."
echo
continue
fi
read -n 1 -s -r -p "Press any key to try again..."
echo
done
# Find all mounted volumes associated with the device
@ -191,8 +200,204 @@ for folder in APPS ART CFG CHT LNG THM VMC POPS CD DVD; do
}
done
echo | tee -a "${LOG_FILE}"
echo "Please choose a game launcher:"
echo "1) Open PS2 Loader (OPL)"
echo "2) Neutrino"
echo
while true; do
read -p "Enter 1 or 2: " choice
case "$choice" in
1) LAUNCHER="OPL"; DESC="Open PS2 Loader (OPL)";;
2) LAUNCHER="NEUTRINO"; DESC="Neutrino";;
*) echo; echo "Invalid choice. Please enter 1 or 2."; continue ;;
esac
echo
read -p "You selected $DESC. Are you sure? (y/n): " confirm
[[ "$confirm" =~ ^[Yy]$ ]] && break # Exit loop if "y"
done
echo "$DESC selected." >> "${LOG_FILE}"
echo >> "${LOG_FILE}"
# Delete old game partitions
delete_partition=$(sudo "${HELPER_DIR}/HDL Dump.elf" toc "$DEVICE" | grep -o 'PP\.[^ ]\+' | grep -Ev '^(PP\.WLE|PP\.LAUNCHER|PP\.DISC)$')
COMMANDS="device ${DEVICE}\n"
while IFS= read -r partition; do
COMMANDS+="rmpart ${partition}\n"
done <<< "$delete_partition"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
echo | tee -a "${LOG_FILE}"
echo "Checking installed apps:" | tee -a "${LOG_FILE}"
# Check if PP.DISC exists and create it if not
if ! sudo "${HELPER_DIR}/HDL Dump.elf" toc "${DEVICE}" | grep -q 'PP.DISC'; then
echo >> "${LOG_FILE}"
echo "Creating PP.DISC partition..." | tee -a "${LOG_FILE}"
COMMANDS="device ${DEVICE}\n"
COMMANDS+="rmpart PP.WLE\n"
COMMANDS+="rmpart PP.LAUNCHER\n"
COMMANDS+="mkpart PP.DISC 128M PFS\n"
COMMANDS+="mount PP.DISC\n"
COMMANDS+="mkdir res\n"
COMMANDS+="cd res\n"
COMMANDS+="lcd '${ASSETS_DIR}/DISC'\n"
COMMANDS+="put info.sys\n"
COMMANDS+="put jkt_001.png\n"
COMMANDS+="cd /\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
cd "${ASSETS_DIR}/DISC"
sudo "${HELPER_DIR}/HDL Dump.elf" modify_header "${DEVICE}" PP.DISC >> "${LOG_FILE}" 2>&1
fi
echo >> "${LOG_FILE}"
echo "Updating Disc Launcher..." | tee -a "${LOG_FILE}"
COMMANDS="device ${DEVICE}\n"
COMMANDS+="mount PP.DISC\n"
COMMANDS+="lcd '${ASSETS_DIR}/DISC'\n"
COMMANDS+="rm disc-launcher.KELF\n"
COMMANDS+="put disc-launcher.KELF\n"
COMMANDS+="rm PS1VModeNeg.elf\n"
COMMANDS+="put PS1VModeNeg.elf\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
# Check if PP.WLE exists and create it if not
if ! sudo "${HELPER_DIR}/HDL Dump.elf" toc "${DEVICE}" | grep -q 'PP.WLE'; then
echo >> "${LOG_FILE}"
echo "Creating PP.WLE partition..." | tee -a "${LOG_FILE}"
COMMANDS="device ${DEVICE}\n"
COMMANDS+="rmpart PP.LAUNCHER\n"
COMMANDS+="mkpart PP.WLE 128M PFS\n"
COMMANDS+="mount PP.WLE\n"
COMMANDS+="mkdir res\n"
COMMANDS+="cd res\n"
COMMANDS+="lcd '${ASSETS_DIR}/WLE'\n"
COMMANDS+="put info.sys\n"
COMMANDS+="put jkt_001.png\n"
COMMANDS+="cd /\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
cd "${ASSETS_DIR}/WLE"
sudo "${HELPER_DIR}/HDL Dump.elf" modify_header "${DEVICE}" PP.WLE >> "${LOG_FILE}" 2>&1
fi
echo >> "${LOG_FILE}"
echo "Updating WLaunchELF..." | tee -a "${LOG_FILE}"
COMMANDS="device ${DEVICE}\n"
COMMANDS+="mount PP.WLE\n"
COMMANDS+="lcd '${ASSETS_DIR}/WLE'\n"
COMMANDS+="rm WLE.KELF\n"
COMMANDS+="put WLE.KELF\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
# Check if PP.LAUNCHER exists and create it if not
if ! sudo "${HELPER_DIR}/HDL Dump.elf" toc "${DEVICE}" | grep -q 'PP.LAUNCHER'; then
echo >> "${LOG_FILE}"
echo "Creating PP.LAUNCHER partition..." | tee -a "${LOG_FILE}"
COMMANDS="device ${DEVICE}\n"
COMMANDS+="mkpart PP.LAUNCHER 128M PFS\n"
COMMANDS+="mount PP.LAUNCHER\n"
COMMANDS+="mkdir res\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
cd "${ASSETS_DIR}/LAUNCHER"
sudo "${HELPER_DIR}/HDL Dump.elf" modify_header "${DEVICE}" PP.LAUNCHER >> "${LOG_FILE}" 2>&1
fi
echo >> "${LOG_FILE}"
echo "Updating OPL/Neutrino..." | tee -a "${LOG_FILE}"
COMMANDS="device ${DEVICE}\n"
COMMANDS+="mount PP.LAUNCHER\n"
COMMANDS+="lcd '${ASSETS_DIR}'\n"
COMMANDS+="rm launcher.KELF\n"
COMMANDS+="put launcher.KELF\n"
COMMANDS+="cd res\n"
if [ "$LAUNCHER" = "OPL" ]; then
COMMANDS+="lcd OPL\n"
COMMANDS+="rm info.sys\n"
COMMANDS+="rm jkt_001.png\n"
COMMANDS+="put info.sys\n"
COMMANDS+="put jkt_001.png\n"
COMMANDS+="cd /\n"
COMMANDS+="rm nhddl.elf.lch\n"
COMMANDS+="put OPNPS2LD.ELF.lch\n"
elif [ "$LAUNCHER" = "NEUTRINO" ]; then
COMMANDS+="lcd NHDDL\n"
COMMANDS+="put info.sys\n"
COMMANDS+="put jkt_001.png\n"
COMMANDS+="cd /\n"
COMMANDS+="rm OPNPS2LD.ELF.lch\n"
COMMANDS+="put nhddl.elf.lch\n"
fi
COMMANDS+="umount\n"
# Generate the Neutrino file list
neutrino_config=$( { ls -1 "$NEUTRINO_DIR/config" | sort; } 2>> "${LOG_FILE}" )
neutrino_modules=$( { ls -1 "$NEUTRINO_DIR/modules" | sort; } 2>> "${LOG_FILE}" )
COMMANDS+="rmpart +OPL\n"
COMMANDS+="mkpart +OPL 128M PFS\n"
COMMANDS+="mount +OPL\n"
COMMANDS+="cd /\n"
COMMANDS+="lcd '${ASSETS_DIR}'\n"
COMMANDS+="put OPNPS2LD.ELF\n"
COMMANDS+="put nhddl.elf\n"
COMMANDS+="mkdir neutrino\n"
COMMANDS+="cd neutrino\n"
COMMANDS+="lcd '${NEUTRINO_DIR}'\n"
COMMANDS+="put neutrino.elf\n"
COMMANDS+="put version.txt\n"
COMMANDS+="mkdir config\n"
COMMANDS+="mkdir modules\n"
COMMANDS+="cd config\n"
COMMANDS+="lcd '${NEUTRINO_DIR}/config'\n"
# Add put commands for neutrino_config
if [ -n "$neutrino_config" ]; then
while IFS= read -r file; do
COMMANDS+="put \"$file\"\n"
done <<< "$neutrino_config"
fi
COMMANDS+="cd ..\n"
COMMANDS+="cd modules\n"
COMMANDS+="lcd '${NEUTRINO_DIR}/modules'\n"
# Add put commands for neutrino_modules
if [ -n "$neutrino_modules" ]; then
while IFS= read -r file; do
COMMANDS+="put \"$file\"\n"
done <<< "$neutrino_modules"
fi
COMMANDS+="cd /\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo >> "${LOG_FILE}"
echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
# Activate the virtual environment
source "./venv/bin/activate"
sleep 5
source ./venv/bin/activate 2>>"${LOG_FILE}"
# Check if activation was successful
if [ $? -ne 0 ]; then
@ -202,12 +407,55 @@ if [ $? -ne 0 ]; then
exit 1
fi
if [ "$LAUNCHER" = "NEUTRINO" ]; then
if find "$GAMES_PATH/CD" "$GAMES_PATH/DVD" -type f \( -iname "*.zso" \) | grep -q .; then
echo | tee -a "${LOG_FILE}"
echo "Games in the compressed ZSO format have been found in the CD/DVD folder." | tee -a "${LOG_FILE}"
echo "Neutrino does not support compressed ZSO files."
echo
echo "ZSO files will be converted to ISO files before proceeding."
read -n 1 -s -r -p "Press any key to continue..."
echo
echo
while IFS= read -r -d '' zso_file; do
iso_file="${zso_file%.*}.iso"
echo "Converting: $zso_file -> $iso_file"
python3 "${HELPER_DIR}/ziso.py" -c 0 "$zso_file" "$iso_file"
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
rm -f "$iso_file"
echo "Error: Failed to uncompress $zso_file" | tee -a "${LOG_FILE}"
read -n 1 -s -r -p "Press any key to exit..."
echo
exit 1 # Properly exits the main script
fi
rm -f "$zso_file"
done < <(find "$GAMES_PATH/CD" "$GAMES_PATH/DVD" -type f -iname "*.zso" -print0)
fi
fi
# Create games list of PS1 and PS2 games to be installed
echo | tee -a "${LOG_FILE}"
echo "Creating PS1 games list..."| tee -a "${LOG_FILE}"
python3 ./helper/list-builder-ps1.py "${GAMES_PATH}" "${PS1_LIST}" | tee -a "${LOG_FILE}"
echo "Creating PS2 games list..."| tee -a "${LOG_FILE}"
python3 ./helper/list-builder-ps2.py "${GAMES_PATH}" "${PS2_LIST}" | tee -a "${LOG_FILE}"
echo "Creating PS1 games list..." | tee -a "${LOG_FILE}"
python3 "${HELPER_DIR}/list-builder-ps1.py" "${GAMES_PATH}" "${PS1_LIST}" | tee -a "${LOG_FILE}"
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
echo "Error: Failed to create PS1 games list." | tee -a "${LOG_FILE}"
read -n 1 -s -r -p "Press any key to exit..."
echo
exit 1
fi
echo "Creating PS2 games list..." | tee -a "${LOG_FILE}"
python3 "${HELPER_DIR}/list-builder-ps2.py" "${GAMES_PATH}" "${PS2_LIST}" | tee -a "${LOG_FILE}"
if [ "${PIPESTATUS[0]}" -ne 0 ]; then
echo "Error: Failed to create PS2 games list." | tee -a "${LOG_FILE}"
read -n 1 -s -r -p "Press any key to exit..."
echo
exit 1
fi
# Deactivate the virtual environment
deactivate
@ -235,93 +483,10 @@ fi
echo "Games list successfully created."| tee -a "${LOG_FILE}"
# Delete old game partitions
delete_partition=$(sudo "${TOOLKIT_PATH}"/helper/HDL\ Dump.elf toc "$DEVICE" | grep -o 'PP\.[^ ]\+' | grep -Ev '^(PP\.WLE|PP\.OPL|PP\.DISC)$')
COMMANDS="device ${DEVICE}\n"
while IFS= read -r partition; do
COMMANDS+="rmpart ${partition}\n"
done <<< "$delete_partition"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${TOOLKIT_PATH}/helper/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
# Check if PP.DISC exists and create it if not
if sudo "${TOOLKIT_PATH}"/helper/HDL\ Dump.elf toc "${DEVICE}" | grep -q 'PP.DISC'; then
echo
echo "PP.DISC exists." | tee -a "${LOG_FILE}"
else
echo "Installing Disc Launcher..." | tee -a "${LOG_FILE}"
COMMANDS="device ${DEVICE}\n"
COMMANDS+="rmpart PP.WLE\n"
COMMANDS+="rmpart PP.OPL\n"
COMMANDS+="mkpart PP.DISC 128M PFS\n"
COMMANDS+="mount PP.DISC\n"
COMMANDS+="lcd ${TOOLKIT_PATH}/assets/DISC\n"
COMMANDS+="mkdir res\n"
COMMANDS+="cd res\n"
COMMANDS+="put info.sys\n"
COMMANDS+="put jkt_001.png\n"
COMMANDS+="cd ..\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${TOOLKIT_PATH}/helper/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
cd "${TOOLKIT_PATH}/assets/DISC"
sudo "${TOOLKIT_PATH}/helper/HDL Dump.elf" modify_header "${DEVICE}" PP.DISC >> "${LOG_FILE}" 2>&1
fi
# Check if PP.WLE exists and create it if not
if sudo "${TOOLKIT_PATH}"/helper/HDL\ Dump.elf toc "${DEVICE}" | grep -q 'PP.WLE'; then
echo "PP.WLE exists." | tee -a "${LOG_FILE}"
else
echo "Installing WLE..." | tee -a "${LOG_FILE}"
COMMANDS="device ${DEVICE}\n"
COMMANDS+="rmpart PP.OPL\n"
COMMANDS+="mkpart PP.WLE 128M PFS\n"
COMMANDS+="mount PP.WLE\n"
COMMANDS+="lcd ${TOOLKIT_PATH}/assets/WLE\n"
COMMANDS+="put WLE.KELF\n"
COMMANDS+="mkdir res\n"
COMMANDS+="cd res\n"
COMMANDS+="put info.sys\n"
COMMANDS+="put jkt_001.png\n"
COMMANDS+="cd ..\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${TOOLKIT_PATH}/helper/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
cd "${TOOLKIT_PATH}/assets/WLE"
sudo "${TOOLKIT_PATH}/helper/HDL Dump.elf" modify_header "${DEVICE}" PP.WLE >> "${LOG_FILE}" 2>&1
fi
# Check if PP.OPL exists and create it if not
if sudo "${TOOLKIT_PATH}"/helper/HDL\ Dump.elf toc "${DEVICE}" | grep -q 'PP.OPL'; then
echo "PP.OPL exists." | tee -a "${LOG_FILE}"
else
echo "Installing OPL..." | tee -a "${LOG_FILE}"
COMMANDS="device ${DEVICE}\n"
COMMANDS+="mkpart PP.OPL 128M PFS\n"
COMMANDS+="mount PP.OPL\n"
COMMANDS+="lcd ${TOOLKIT_PATH}/assets\n"
COMMANDS+="put OPL-Launcher-BDM.KELF\n"
COMMANDS+="mkdir res\n"
COMMANDS+="cd res\n"
COMMANDS+="lcd OPL\n"
COMMANDS+="put info.sys\n"
COMMANDS+="put jkt_001.png\n"
COMMANDS+="cd ..\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${TOOLKIT_PATH}/helper/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
cd "${TOOLKIT_PATH}/assets"
sudo "${TOOLKIT_PATH}/helper/HDL Dump.elf" modify_header "${DEVICE}" PP.OPL >> "${LOG_FILE}" 2>&1
fi
# Function to find available space
function function_space() {
output=$(sudo "${TOOLKIT_PATH}"/helper/HDL\ Dump.elf toc ${DEVICE} 2>&1)
output=$(sudo "${HELPER_DIR}/HDL Dump.elf" toc ${DEVICE} 2>&1)
# Check for the word "aborting" in the output
if echo "$output" | grep -q "aborting"; then
@ -353,13 +518,17 @@ if [ "$count" -gt "$partition_count" ]; then
echo "Not enough space for $count partitions." | tee -a "${LOG_FILE}"
echo "The first $partition_count games will appear in the PSBBN Game Channel" | tee -a "${LOG_FILE}"
echo "Remaining PS2 games will appear in OPL only"
echo "Remaining PS2 games will appear in OPL/NHDDL only"
# Overwrite master.list with the first $partition_count lines
head -n "$partition_count" "$ALL_GAMES" > "${ALL_GAMES}.tmp"
mv "${ALL_GAMES}.tmp" "$ALL_GAMES"
fi
echo
echo "master.list:" >> "${LOG_FILE}"
cat "$ALL_GAMES" >> "${LOG_FILE}"
echo | tee -a "${LOG_FILE}"
read -n 1 -s -r -p "Ready to install games. Press any key to continue..."
echo
@ -426,7 +595,7 @@ COMMANDS+="umount\n"
COMMANDS+="exit"
# Get the PS1 file list directly from PFS Shell output, filtered and sorted
ps1_files=$(echo -e "$COMMANDS" | sudo "${TOOLKIT_PATH}/helper/PFS Shell.elf" 2>/dev/null | grep -iE "\.vcd$|\.elf$" | sort)
ps1_files=$(echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" 2>/dev/null | grep -iE "\.vcd$|\.elf$" | sort)
# Compute differences and store them in variables
files_only_in_local=$(comm -23 <(echo "$local_files") <(echo "$ps1_files"))
@ -473,7 +642,7 @@ if [ -n "$files_only_in_ps2" ] || [ -n "$files_only_in_local" ]; then
# Execute the combined commands with PFS Shell
echo "Syncing PS1 games to HDD..." | tee -a "${LOG_FILE}"
echo -e "$combined_commands" | sudo "${TOOLKIT_PATH}/helper/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
echo -e "$combined_commands" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
echo | tee -a "${LOG_FILE}"
echo "PS1 games synced successfully." | tee -a "${LOG_FILE}"
echo | tee -a "${LOG_FILE}"
@ -483,6 +652,16 @@ else
echo | tee -a "${LOG_FILE}"
fi
# Check contents of __.POPS after sync
COMMANDS="device ${DEVICE}\n"
COMMANDS+="mount __.POPS\n"
COMMANDS+="ls\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
echo >> "${LOG_FILE}"
# Syncing PS2 games
echo "Mounting OPL partition" | tee -a "${LOG_FILE}"
mkdir "${TOOLKIT_PATH}"/OPL 2>> "${LOG_FILE}"
@ -516,9 +695,13 @@ sudo cp --update=none "${GAMES_PATH}/LNG/"* "${TOOLKIT_PATH}"/OPL/LNG >> "${LOG_
sudo cp --update=none "${GAMES_PATH}/THM/"* "${TOOLKIT_PATH}"/OPL/THM >> "${LOG_FILE}" 2>&1
sudo cp --update=none "${GAMES_PATH}/VMC/"* "${TOOLKIT_PATH}"/OPL/VMC >> "${LOG_FILE}" 2>&1
echo | tee -a "${LOG_FILE}"
echo "PS2 Games on PS2 drive:" >> "${LOG_FILE}"
ls -1 "${TOOLKIT_PATH}/OPL/CD/" >> "${LOG_FILE}" 2>&1
ls -1 "${TOOLKIT_PATH}/OPL/DVD/" >> "${LOG_FILE}" 2>&1
echo "PS2 games successfully synced" | tee -a "${LOG_FILE}"
echo | tee -a "${LOG_FILE}"
echo "Unmounting OPL partition..." | tee -a "${LOG_FILE}"
sleep 5
sudo umount "${TOOLKIT_PATH}"/OPL
mkdir -p "${ARTWORK_DIR}/tmp" 2>> "${LOG_FILE}"
@ -545,7 +728,7 @@ while IFS='|' read -r game_title game_id publisher disc_type file_name; do
# If wget fails, run the art downloader
[[ -f "$png_file" ]] && rm "$png_file"
echo "Trying IGN for game ID: $game_id" | tee -a "${LOG_FILE}"
node "${TOOLKIT_PATH}"/helper/art_downloader.js "$game_id" 2>&1 | tee -a "${LOG_FILE}"
node "${HELPER_DIR}/art_downloader.js" "$game_id" 2>&1 | tee -a "${LOG_FILE}"
fi
fi
done < "$ALL_GAMES"
@ -604,12 +787,20 @@ while IFS='|' read -r game_title game_id publisher disc_type file_name; do
game_dir="$ICONS_DIR/$game_id"
mkdir -p "$game_dir" | tee -a "${LOG_FILE}"
# Determine the launcher value for this specific game
if [[ "$disc_type" == "POPS" ]]; then
launcher_value="POPS"
else
launcher_value="$LAUNCHER"
fi
# Generate the launcher.cfg file
launcher_cfg_filename="$game_dir/launcher.cfg"
cat > "$launcher_cfg_filename" <<EOL
file_name=$file_name
title_id=$game_id
disc_type=$disc_type
launcher=$launcher_value
EOL
echo "Created launcher.cfg: $launcher_cfg_filename" | tee -a "${LOG_FILE}"
@ -664,7 +855,7 @@ echo "All .cfg, info.sys, and .png files have been created in their respective s
echo | tee -a "${LOG_FILE}"
echo "Installing game assets..." | tee -a "${LOG_FILE}"
cd "${TOOLKIT_PATH}/assets/"
cd "${ASSETS_DIR}"
i=0
# Reverse the lines of the file using tac and process each line
@ -688,12 +879,12 @@ while IFS='|' read -r game_title game_id publisher disc_type file_name; do
COMMANDS+="mkpart ${PARTITION_LABEL} 128M PFS\n"
COMMANDS+="mount ${PARTITION_LABEL}\n"
COMMANDS+="cd ..\n"
COMMANDS+="lcd ${TOOLKIT_PATH}/assets\n"
COMMANDS+="put OPL-Launcher-BDM.KELF\n"
COMMANDS+="cd /\n"
COMMANDS+="lcd '${ASSETS_DIR}'\n"
COMMANDS+="put bbnl.KELF\n"
# Navigate into the sub-directory named after the gameid
COMMANDS+="lcd ${ICONS_DIR}/${game_id}\n"
COMMANDS+="lcd '${ICONS_DIR}/${game_id}'\n"
COMMANDS+="put 'launcher.cfg'\n"
COMMANDS+="mkdir res\n"
COMMANDS+="cd res\n"
@ -703,42 +894,15 @@ while IFS='|' read -r game_title game_id publisher disc_type file_name; do
COMMANDS+="exit\n"
echo "Creating $PARTITION_LABEL" | tee -a "${LOG_FILE}"
echo -e "$COMMANDS" | sudo "${TOOLKIT_PATH}/helper/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
echo -e "$COMMANDS" | sudo "${HELPER_DIR}/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
sudo "${TOOLKIT_PATH}/helper/HDL Dump.elf" modify_header "${DEVICE}" "${PARTITION_LABEL}" >> "${LOG_FILE}" 2>&1
sudo "${HELPER_DIR}/HDL Dump.elf" modify_header "${DEVICE}" "${PARTITION_LABEL}" >> "${LOG_FILE}" 2>&1
function_space
((i++))
done < <(tac "$ALL_GAMES")
# Update OPL, Disc Launcher and WLE
COMMANDS="device ${DEVICE}\n"
COMMANDS+="lcd ${TOOLKIT_PATH}/assets\n"
COMMANDS+="mount +OPL\n"
COMMANDS+="cd ..\n"
COMMANDS+="rm OPNPS2LD.ELF\n"
COMMANDS+="put OPNPS2LD.ELF\n"
COMMANDS+="umount\n"
COMMANDS+="mount PP.DISC\n"
COMMANDS+="lcd ${TOOLKIT_PATH}/assets/DISC\n"
COMMANDS+="rm disc-launcher.KELF\n"
COMMANDS+="put disc-launcher.KELF\n"
COMMANDS+="rm PS1VModeNeg.elf\n"
COMMANDS+="put PS1VModeNeg.elf\n"
COMMANDS+="umount\n"
COMMANDS+="mount PP.WLE\n"
COMMANDS+="lcd ${TOOLKIT_PATH}/assets/WLE\n"
COMMANDS+="rm WLE.KELF\n"
COMMANDS+="put WLE.KELF\n"
COMMANDS+="umount\n"
COMMANDS+="exit"
echo | tee -a "${LOG_FILE}"
echo "Updating apps..." | tee -a "${LOG_FILE}"
echo -e "$COMMANDS" | sudo "${TOOLKIT_PATH}/helper/PFS Shell.elf" >> "${LOG_FILE}" 2>&1
# Submit missing artwork to the PSBBN Art Database
cp $MISSING_ART $ARTWORK_DIR/tmp >> "${LOG_FILE}" 2>&1
@ -770,7 +934,7 @@ echo | tee -a "${LOG_FILE}"
echo "Cleaning up..." | tee -a "${LOG_FILE}"
clean_up
sudo "${TOOLKIT_PATH}"/helper/HDL\ Dump.elf toc "$DEVICE" >> "${LOG_FILE}" 2>&1
sudo "${HELPER_DIR}/HDL Dump.elf" toc "$DEVICE" >> "${LOG_FILE}" 2>&1
echo | tee -a "${LOG_FILE}"
echo "Game installer script complete." | tee -a "${LOG_FILE}"
echo

View File

@ -5,10 +5,10 @@ This is the definitive English patch for Sony's "PlayStation Broadband Navigator
You can find out more about the PSBBN software on [Wikipedia](https://en.wikipedia.org/wiki/PlayStation_Broadband_Navigator).
# Donations
This project uses [webhook.site](https://webhook.site/) to automatically contribute game artwork and report missing artwork to the [PSBBN Art Database](https://github.com/CosmicScale/psbbn-art-database). Im currently on a free account, which provides a temporary URL for seven days or 100 requests. As the project grows in popularity, we're exceeding the 100-request limit every few days. A paid subscription costs $9/month or $90/year, donations would help fund this.
If you appreciate my work and want to support the ongoing development of the PSBBN Definitive English Patch and other PS2-related projects, [you can donate to my Ko-Fi here](https://ko-fi.com/cosmicscale).
This project uses [webhook.site](https://webhook.site/) to automatically contribute game artwork and report missing artwork to the [PSBBN Art Database](https://github.com/CosmicScale/psbbn-art-database). As the project has grow in popularity, we're exceeding the limit offered by a free account. A paid subscription costs $9/month or $90/year, donations would help fund this.
## Video demonstration of PSBBN:
[![PSBBN in 2024](https://github.com/user-attachments/assets/298c8c0b-5726-4485-840d-9d567498fd95)](https://www.youtube.com/watch?v=kR1MVcAkW5M)
@ -32,11 +32,11 @@ If you appreciate my work and want to support the ongoing development of the PSB
- PS2 Linux is pre-installed. Just hold any button on the controller while PSBBN is starting to boot into Linux
- Bandai and SCEI online channels have been added to the Game Channel
- Some minor fixes to the English translation
### Update:
### Updates:
- Added Game ID support for the Pixel FX Retro GEM. Works for both PS1 and PS2 games
- PS2 games now launch up to 5 seconds faster
- Resolved conflict with mass storage devices (USB, iLink, MX4SIO). Games now launch without issues if these devices are connected
- OPL software now automatically updates when you sync your games
- Apps now automatically update when you sync your games
- The art downloader has been improved to grab significantly more artwork
- Improved error handling in the PSBBN installer script
- The setup script has been modified to work on live Linux environments without issues
@ -46,12 +46,13 @@ If you appreciate my work and want to support the ongoing development of the PSB
- Set USB keyboard layout to US English. Press `ALT+~` to toggle between kana and direct input
- Minor corrections to the English translation
- Added **Open PS2 Loader** and **Launch Disc** to the Game Channel
- The Game Installer script has been updated to create and delete `OPL Launcher` partitions as needed. Say goodbye to those annoying "Coming soon..." placeholders!
- The Game Installer script has been updated to create and delete game partitions as needed. Say goodbye to those annoying "Coming soon..." placeholders!
- Files placed in the `CFG`, `CHT`, `LNG`, `THM`, and `APPS` folders on your PC will now be copied to the PS2 drive during game sync
- Added Game ID support for MemCard Pro 2 and SD2PSX
- The scripts now auto-update when an update is available
- Optimised art work
- Art downloads from IGN are now automatically contributed to the [PSBBN art database](https://github.com/CosmicScale/psbbn-art-database), and missing artwork is also automatically reported. Manual submissions are welcome, see the [PSBBN art database GitHub page](https://github.com/CosmicScale/psbbn-art-database) for details
- Added Neutrino support
## New installation scripts
@ -61,7 +62,7 @@ These scripts are essential for unlocking all the new features exclusive to vers
[![PSBBN Definitive English Patch 2.0](https://github.com/user-attachments/assets/d60dc4ff-85f8-4fb4-8acb-201b063545b0)](https://www.youtube.com/watch?v=sHz0yKYybhk)
### It is highly recommended to install the scripts using the following command to enable automatic updates:
<span style="font-size: 17px; font-weight: bold;">It is highly recommended to install the scripts using the following command to enable automatic updates:</span>
```
git clone https://github.com/CosmicScale/PSBBN-Definitive-English-Patch.git
```
@ -75,7 +76,6 @@ git clone https://github.com/CosmicScale/PSBBN-Definitive-English-Patch.git
- Downloads and installs the latest version of the **PSBBN Definitive English Patch** from archive.org
- Prompts for the desired size of the Music Partition
- Prompts for the desired size of the POPS Partition
- Installs a pre-release build of [Open PS2 Loader (OPL)](https://github.com/ps2homebrew/Open-PS2-Loader) with exFAT and Auto Launch support for BDM devices
- Installs [POPStarter](https://bitbucket.org/ShaolinAssassin/popstarter-documentation-stuff/wiki/Home)
- Runs [APA-Jail](#notes-on-apa-jail), creating an exFAT partition using all remaining disk space beyond the first 128 GB
@ -83,15 +83,16 @@ git clone https://github.com/CosmicScale/PSBBN-Definitive-English-Patch.git
`03-Game-Installer.sh` fully automates the installation of PS1 and PS2 games. In the `games` folder on your computer, simply put your PS2 `ISO` or `ZSO` files in the `CD`/`DVD` folders, and your PS1 `VCD` files in the `POPS` folder.
The script will:
- Gives you a choice of [Open PS2 Loader (OPL)](https://github.com/ps2homebrew/Open-PS2-Loader) or [Neutrino](https://github.com/rickgaiser/neutrino) for the game launcher
- Synchronise the games on your PC with your PS2's drive
- Create all game assets
- Download artwork from the [PSBBN Art Database](https://github.com/CosmicScale/psbbn-art-database) or IGN if not found in the database
- Automatically contribute game artwork from IGN and reports missing artwork to the [PSBBN Art Database](https://github.com/CosmicScale/psbbn-art-database)
- Install [OPL Launcher BDM](https://github.com/CosmicScale/OPL-Launcher-BDM) into every game partition, making games bootable from the Game Channel
- Install [BBN Launcher](https://github.com/pcm720/bbnl) into every game partition, making games bootable from the Game Channel
To add or delete games, simply add or remove them from the `games` folder on your computer, then run the script again to synchronise. All games are kept in alphabetical order and grouped by series in the Game Channel on PSBBN.
By default the `games` folder is located in the same directory you installed the scrips to. If you need to change the location of the `games` folder, edit `03-Game-Installer.sh` and modify the `GAMES_PATH` variable.
By default the `games` folder is located in the same directory you installed the scripts to. If you need to change the location of the `games` folder, edit `03-Game-Installer.sh` and modify the `GAMES_PATH` variable.
### General Notes:
@ -100,7 +101,7 @@ By default the `games` folder is located in the same directory you installed the
- PS2 games must be in ISO or ZSO format. PS1 games must be in VCD format
- PSBBN startup time increases when no active internet connection is available
- To quit PS1 games, press `L1 + SELECT + START`
- To quit PS2 games, press `L1 + L2 + R1 + R2 + SELECT + START`
- If you are using OPL as your game launcher, to quit PS2 games, press `L1 + L2 + R1 + R2 + SELECT + START` and to power off the console press `L1 + L2 + L3 + R1 + R2 + R3`
- The `root` password for Linux is `password`. There is also a `ps2` user account with the password set as `password`
### Note on Retro GEM support:
@ -124,32 +125,42 @@ Recommended usage:
- Select **Launch Disc** from the menu
### Notes on OPL:
[Open PS2 Loader (OPL)](https://github.com/ps2homebrew/Open-PS2-Loader) is a 100% Open source game and application loader for the PS2.
- If you selected [Open PS2 Loader (OPL)](https://github.com/ps2homebrew/Open-PS2-Loader) as your game launcher, per-game settings assigned in OPL are reflected when launching games from the PSBBN Game Channel
- If OPL freezes at startup and games fail to launch from the PSBBN Game Channel, delete any existing OPL configuration files from your PS2 Memory Cards or connected USB devices.
- To display the games list in OPL, adjust the following settings:
1. Settings > HDD (APA) Start Mode: Off
2. Settings > BDM Start Mode: Auto
3. Settings > BDM Devices > HDD (GPT/MBR): On
- Make sure a PS2 memory card is inserted, then select `Save Changes` from the main menu.
4. Make sure a PS2 memory card is inserted, then select `Save Changes` from the main menu.
### If, after trying the above steps, games still do not appear in the OPL games list and fail to launch from the PSBBN Game Channel, your combination of SATA mod and drive may not be currently compatible with the exFAT version of OPL.
<span style="font-size: 17px; font-weight: bold;">If, after trying the above steps, games still do not appear in the OPL games list and fail to launch from the PSBBN Game Channel, your combination of SATA mod and drive may not be currently compatible with the exFAT version of OPL.</span>
Possible solutions:
1. Wait for the OPL bug fix. You can learn more and report your issue [here](https://github.com/ps2homebrew/Open-PS2-Loader/issues/1437)
2. Connect the PS2 HDD/SSD directly to your PC using an internal SATA connection or a different USB adapter, then rerun the PSBBN installer
3. Try using a different HDD/SSD and rerun the PSBBN installer
4. Try using a different SATA mod for your PS2
5. Wait for the release of the PSBBN Neutrino Launcher
**Solution:**
Re-run `03-Game-Installer.sh` and select [Neutrino](https://github.com/rickgaiser/neutrino) as your game launcher
**Alternatively solutions:**
1. Connect the PS2 HDD/SSD directly to your PC using an internal SATA connection or a different USB adapter, then re-run `02-PSBBN-Installer.sh`
2. Try using a different HDD/SSD and re-run `02-PSBBN-Installer.sh`
3. Try using a different SATA mod for your PS2
4. Wait for the OPL bug fix. You can learn more and report your issue [here](https://github.com/ps2homebrew/Open-PS2-Loader/issues/1437)
### Notes on Neutrino and NHDDL:
[Neutrino](https://github.com/rickgaiser/neutrino) is a lightweight device emulator for PS2. [NHDDL](https://github.com/pcm720/nhddl) is a frontend for Neutrino.
- If you selected [Neutrino](https://github.com/rickgaiser/neutrino) as your game launcher, per-game settings assigned in [NHDDL](https://github.com/pcm720/nhddl) are reflected when launching games from the PSBBN Game Channel
- [Neutrino](https://github.com/rickgaiser/neutrino) does not support compressed `ZSO` files. If `ZSO` files are found in your `games` folder, they will be automatically uncompressed to `ISO` files by the `03-Game-Installer.sh` script
- If PS2 games are not displayed in [NHDDL](https://github.com/pcm720/nhddl) and fail to launch from the PSBBN Game Channel, connect the PS2 HDD/SSD directly to your PC using an internal SATA connection or a different USB adapter, then re-run `02-PSBBN-Installer.sh`
### Notes on APA-Jail:
APA-Jail, created and developed by [Berion](https://www.psx-place.com/resources/authors/berion.1431/), enables the PS2's APA partitions to coexist with an exFAT partition. This setup allows PSBBN to access the first 128 GB of the HDD/SSD directly. The remaining space on the drive is formatted as an exFAT partition, which can be accessed directly on a PC and on the PS2 by the [pre-release build of Open PS2 Loader](https://github.com/ps2homebrew/Open-PS2-Loader). PS2 games in the `ISO` or `ZSO` format are stored on the exFAT partition.
APA-Jail, created and developed by [Berion](https://www.psx-place.com/resources/authors/berion.1431/), enables the PS2's APA partitions to coexist with an exFAT partition. This setup allows PSBBN to access the first 128 GB of the HDD/SSD directly. The remaining space on the drive is formatted as an exFAT partition, which can be accessed directly on a PC and on the PS2 by the [pre-release build of Open PS2 Loader](https://github.com/ps2homebrew/Open-PS2-Loader) and [Neutrino](https://github.com/rickgaiser/neutrino). PS2 games in the `ISO` or `ZSO` format are stored on the exFAT partition.
![APA-Jail Type-A](https://github.com/user-attachments/assets/c1a29371-d0ff-431e-8b86-df8337ddf966)
![APA-Jail Type-A2](https://github.com/user-attachments/assets/8c83dab7-f49f-4a77-b641-9f63d92c85e7)
An application called [OPL Launcher BDM](https://github.com/CosmicScale/OPL-Launcher-BDM) resides on the APA partitions, along with the [pre-release build of Open PS2 Loader](https://github.com/ps2homebrew/Open-PS2-Loader).
An application called [BBN Launcher](https://github.com/pcm720/bbnl) resides on the APA partitions, along with the [pre-release build of Open PS2 Loader](https://github.com/ps2homebrew/Open-PS2-Loader) or [Neutrino](https://github.com/rickgaiser/neutrino).
[OPL Launcher BDM](https://github.com/CosmicScale/OPL-Launcher-BDM) directs [Open PS2 Loader](https://github.com/ps2homebrew/Open-PS2-Loader) to launch specific PS2 games.
[BBN Launcher](https://github.com/pcm720/bbnl) directs [Open PS2 Loader](https://github.com/ps2homebrew/Open-PS2-Loader) or [Neutrino](https://github.com/rickgaiser/neutrino) to launch specific PS2 games.
### Warning: Creating new partitions manually on your PS2 drive may lead to drive corruption.
### Warning: Creating new partitions manually on your PS2 drive (e.g., with wLaunchELF) and exceeding the 128 GB limit will cause drive corruption.
## Credits
- PSBBN Definitive English Patch by [CosmicScale](https://github.com/CosmicScale)
@ -160,8 +171,9 @@ An application called [OPL Launcher BDM](https://github.com/CosmicScale/OPL-Laun
- `01-Setup.sh`, `02-PSBBN-Installer.sh`, `03-Game-Installer.sh`, `art_downloader.js` written by [CosmicScale](https://github.com/CosmicScale)
- Contains code from `list_builder.py` from [XEB+ neutrino Launcher Plugin](https://github.com/sync-on-luma/xebplus-neutrino-loader-plugin) by [sync-on-luma](https://github.com/sync-on-luma), modified by [CosmicScale](https://github.com/CosmicScale)
- Contains data from `TitlesDB_PS1_English.txt` and `TitlesDB_PS2_English.txt` from the [Title Database Scrapper](https://github.com/GDX-X/Title-Database-Scrapper), modified by [CosmicScale](https://github.com/CosmicScale)
- [OPL Launcher BDM](https://github.com/CosmicScale/OPL-Launcher-BDM) written by [CosmicScale](https://github.com/CosmicScale)
- [BBN Launcher](https://github.com/pcm720/bbnl) written by [pcm720](https://github.com/pcm720) and [CosmicScale](https://github.com/CosmicScale)
- [Open PS2 Loader](https://github.com/ps2homebrew/Open-PS2-Loader) with BDM contributions from [KrahJohlito](https://github.com/KrahJohlito) and Auto Launch modifications by [CosmicScale](https://github.com/CosmicScale)
- [NHDDL](https://github.com/pcm720/nhddl) written by [pcm720](https://github.com/pcm720)
- [Retro GEM Disc Launcher](https://github.com/CosmicScale/Retro-GEM-PS2-Disc-Launcher) written by [CosmicScale](https://github.com/CosmicScale)
- Uses APA-Jail code from the [PS2 HDD Decryption Helper](https://www.psx-place.com/resources/ps2-hdd-decryption-helper.1507/) by [Berion](https://www.psx-place.com/resources/authors/berion.1431/)
- `APA Partition Header Checksumer` by Pinky from the [PS2 HDD Decryption Helper](https://www.psx-place.com/resources/ps2-hdd-decryption-helper.1507/) project. Linux port by Bucanero

18
assets/LAUNCHER/icon.sys Normal file
View File

@ -0,0 +1,18 @@
PS2X
title0=Homebrew Launcher
title1=
bgcola=0
bgcol0=0,0,0
bgcol1=0,0,0
bgcol2=0,0,0
bgcol3=0,0,0
lightdir0=1.0,-1.0,1.0
lightdir1=-1.0,1.0,-1.0
lightdir2=0.0,0.0,0.0
lightcolamb=64,64,64
lightcol0=64,64,64
lightcol1=16,16,16
lightcol2=0,0,0
uninstallmes0=
uninstallmes1=
uninstallmes2=

BIN
assets/LAUNCHER/list.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View File

@ -0,0 +1,4 @@
BOOT2 = pfs:/launcher.KELF
VER = 1.01
VMODE = NTSC
HDDUNITPOWER = NICHDD

21
assets/NHDDL/info.sys Normal file
View File

@ -0,0 +1,21 @@
title = NHDDL
title_id =
title_sub_id = 0
release_date =
developer_id =
publisher_id =
note =
content_web =
image_topviewflag = 0
image_type = 0
image_count = 1
image_viewsec = 600
copyright_viewflag = 1
copyright_imgcount = 1
genre =
parental_lock = 1
effective_date = 0
expire_date = 0
violence_flag = 0
content_type = 255
content_subtype = 0

BIN
assets/NHDDL/jkt_001.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

Binary file not shown.

View File

BIN
assets/bbnl.KELF Executable file

Binary file not shown.

View File

@ -1,5 +1,5 @@
PS2X
title0=OPL Launcher BDM
title0=BBNL
title1=
bgcola=0
bgcol0=0,0,0

BIN
assets/launcher.KELF Executable file

Binary file not shown.

179
assets/neutrino/README.md Normal file
View File

@ -0,0 +1,179 @@
# neutrino
Small, Fast and Modular PS2 Device Emulator
## Design
A neutrino is a particle with almost zero mass, and that's what this device emulator's primary goal is. To have almost 0 mass when emulating devices to maximize compatibility.
Neutrino also does not have a user interface, instead it's meant to be integrated as a backend to a frontend (user interface). This makes neutrino much more easy to maintain, and allows many more applications to be made using neutrino as the backend.
With neutrino all modules are... modular. They are in a separate folder called `modules`. This allows the user add new and improved modules. What modules are loaded is fully configurable using TOML config files in the `config` folder.
## Environments
An environment in neutrino describes what IOP modules are loaded and defines what features the environment has. In neutrino there are 3 environments:
- Boot Environment (BE): environment neutrino is loaded from (by uLE / ps2link / ...), containing neutrino, configuration files and drivers
- Load Environment (LE): neutrino's loader.elf reboots into the LE, containing virtual disk images
- Emulation Environment (EE): neutrino's ee_core.elf reboots into the EE, emulating devices
## Backing Store Driver
A backing store driver provides a storage location for storing virtual disk images. For instance of DVD's, HDD's or MC's.
The following backing storage devices are supported:
Device | PS2 model | Speed | Device comp. | Type | bsd | internal
-------------------|------------|-----------------------------------------------------------|------------------------------------|--------------|----------|-----
USB | FAT + 70k |![x](https://progress-bar.xyz/750?scale=2200&suffix=KB/s) | ![x](https://progress-bar.xyz/80) | Block Device | `usb` | `usb`
USB | slim |![x](https://progress-bar.xyz/900?scale=2200&suffix=KB/s) | ![x](https://progress-bar.xyz/80) | Block Device | `usb` | `usb`
MX4SIO | slim |![x](https://progress-bar.xyz/1150?scale=2200&suffix=KB/s) | ![x](https://progress-bar.xyz/60) | Block Device | `mx4sio` | `sdc`
MMCE | slim |![x](https://progress-bar.xyz/1350?scale=2200&suffix=KB/s) | ![x](https://progress-bar.xyz/100) | File System | `mmce` | -
MX4SIO | FAT + 70k |![x](https://progress-bar.xyz/1500?scale=2200&suffix=KB/s) | ![x](https://progress-bar.xyz/60) | Block Device | `mx4sio` | `sdc`
MMCE | FAT + 70k |![x](https://progress-bar.xyz/1700?scale=2200&suffix=KB/s) | ![x](https://progress-bar.xyz/100) | File System | `mmce` | -
iLink / IEEE1394 | FAT |![x](https://progress-bar.xyz/6?scale=2&suffix=MB/s) | ![x](https://progress-bar.xyz/10) | Block Device | `ilink` | `sd`
UDPBD | ALL |![x](https://progress-bar.xyz/10?scale=2&suffix=MB/s) | ![x](https://progress-bar.xyz/100) | Block Device | `udpbd` | `udp`
ATA (internal HDD) | FAT |![x](https://progress-bar.xyz/30?scale=2&suffix=MB/s) | ![x](https://progress-bar.xyz/100) | Block Device | `ata` | `ata`
PS2 model: The older FAT PS2 models and the first slim PS2 model (70k) have the original PS1 MIPS R3000 CPU. Later slim PS2 models have a new CPU with 'DECKARD' emulating the MIPS R3000. This is why there is a speed difference between those two groups of PS2 models.
Speed: USB, MX4SIO and MMCE have been tested with neutrino v1.5.0. The other speeds are based on older tests and should serve as an indication. For proper emulation of the ps2 DVD drive a speed of at least 2.2MB/s is needed. The slower the speed, the more likely video's will stutter. Due to game-bugs, some games will not even run if the device is too slow.
"Device comp.": how many devices will work with neutrino. For instance most USB sticks work, but some (mostly USB3.0 sticks) don't work. With mx4sio, many SD cards are not compatible, etc... Don't hold these values for fact, they are based on my personal observations and should give you an indication on what devices would fit your need.
On "Block Devices" the following partitioning schemes are supported:
- MBR (Master Boot Record)
- GPT (GUID Partition Table)
And the following file systems:
- exFat/FAT32, accessable as `mass:<file>.iso`
- HDLoader, accessable as `hdl:<file>`, `hdl:<file>.iso`, `hdl:<part>` or `hdl:<part>.iso`
- Block Devices, accessable as `bdfs:<blockdevice>`. Like `bdfs:udp0p0`
Note that the HDLoader backing store is currently read-ony, and limited to only emulating the DVD.
## CD/DVD emulation
The following CD/DVD emulation drivers are supported:
- No: using original CD's / DVD's in the optical drive
- ESR: using ESR patched DVD's in the optical drive
- File: using an iso file from the backing store
## ATA HDD emulation
The following HDD emulation drivers are supported:
- No: using ATA HDD in the PS2
- File: using a virtual HDD image file from the backing store
## Usage instructions
Neutrino is a command line application. To get the most out of neutrino you will need to run it from the command line, for instance using [ps2link](https://github.com/ps2dev/ps2link) and [ps2client](https://github.com/ps2dev/ps2client).
Alternatively you can use a more user friendly GUI from one of the third-party projects (see below), but with a limited feature set.
Command line usage instructions:
```
Usage: neutrino.elf options
Options:
-bsd=<driver> Backing store drivers, supported are:
- no (uses cdvd, default)
- ata (block device)
- usb (block device)
- mx4sio (block device)
- udpbd (block device)
- ilink (block device)
- mmce (file system)
-bsdfs=<driver> Backing store fileystem drivers used for block device, supported are:
- exfat (default)
- hdl (HD Loader)
- bd (Block Device)
NOTE: Used only for block devices (see -bsd)
-dvd=<mode> DVD emulation mode, supported are:
- no (default)
- esr
- <file>
-ata0=<mode> ATA HDD 0 emulation mode, supported are:
- no (default)
- <file>
NOTE: only both emulated, or both real.
mixing not possible
-ata0id=<mode> ATA 0 HDD ID emulation mode, supported are:
- no (default)
- <file>
NOTE: only supported if ata0 is present
-ata1=<mode> See -ata0=<mode>
-mc0=<mode> MC0 emulation mode, supported are:
- no (default)
- <file>
-mc1=<mode> See -mc0=<mode>
-elf=<file> ELF file to boot, supported are:
- auto (elf file from cd/dvd) (default)
- <file>
-mt=<type> Select media type, supported are:
- cd
- dvd
Defaults to cd for size<=650MiB, and dvd for size>650MiB
-gc=<compat> Game compatibility modes, supported are:
- 0: IOP: Fast reads (sceCdRead)
- 1: dummy
- 2: IOP: Sync reads (sceCdRead)
- 3: EE : Unhook syscalls
- 5: IOP: Emulate DVD-DL
- 7: IOP: Fix game buffer overrun
Multiple options possible, for example -gc=23
-gsm=x:y:z GS video mode
Parameter x = Interlaced field mode
A full height buffer is used by the game for displaying. Force video output to:
- : don't force (default) (480i/576i)
- fp : force progressive scan (480p/576p)
Parameter y = Interlaced frame mode
A half height buffer is used by the game for displaying. Force video output to:
- : don't force (default) (480i/576i)
- fp1 : force progressive scan (240p/288p)
- fp2 : force progressive scan (480p/576p line doubling)
Parameter z = Compatibility mode
- : no compatibility mode (default)
- 1 : field flipping type 1 (GSM/OPL)
- 2 : field flipping type 2
- 3 : field flipping type 3
Examples:
-gsm=fp - recommended mode
-gsm=fp::1 - recommended mode, with compatibility 1
-gsm=fp:fp2:2 - all parameters
-cwd=<path> Change working directory
-cfg=<file> Load extra user/game specific config file (without .toml extension)
-logo Enable logo (adds rom0:PS2LOGO to arguments)
-qb Quick-Boot directly into load environment
--b Break, all following parameters are passed to the ELF
Usage examples:
neutrino.elf -bsd=usb -dvd=mass:path/to/filename.iso
neutrino.elf -bsd=mx4sio -dvd=mass:path/to/filename.iso
neutrino.elf -bsd=mmce -dvd=mmce:path/to/filename.iso
neutrino.elf -bsd=ilink -dvd=mass:path/to/filename.iso
neutrino.elf -bsd=udpbd -dvd=mass:path/to/filename.iso
neutrino.elf -bsd=ata -dvd=mass:path/to/filename.iso
neutrino.elf -bsd=ata -dvd=hdl:filename.iso -bsdfs=hdl
neutrino.elf -bsd=udpbd -dvd=bdfs:udp0p0 -bsdfs=bd
```
## Third-Party Loaders
The following third-party projects use neutrino:
Loader | Author
-|-
[XEB+ neutrino Launcher Plugin](https://github.com/sync-on-luma/xebplus-neutrino-loader-plugin) | sync-on-luma
[NHDDL](https://github.com/pcm720/nhddl) | pcm720
[RETROLauncher](https://github.com/Spaghetticode-Boon-Tobias/RETROLauncher) | Boon Tobias
[OSD-XMB](https://github.com/HiroTex/OSD-XMB) | Hiro Tex
Add your project here? Send me a PR.

View File

@ -0,0 +1,17 @@
# Name of loaded config, to show to user
name = "ATA HDD BDM driver"
# Drivers this driver depends on (config file must exist)
depends = ["i_bdm", "i_dev9_ns"]
# Modules to load
[[module]]
file = "ata_bd.irx"
env = ["LE", "EE"]
# Modules of the game that are faked/blocked
[[fake]]
file = "ATAD.IRX"
name = "atad_driver"
version = 0x0207
startrv = 0 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END

View File

@ -0,0 +1,20 @@
# Name of loaded config, to show to user
name = "iLink/FireWire/IEEE1394 BDM driver"
# Drivers this driver depends on (config file must exist)
depends = ["i_bdm"]
# Modules to load
[[module]]
file = "iLinkman.irx"
env = ["LE", "EE"]
[[module]]
file = "IEEE1394_bd_mini.irx"
env = ["LE", "EE"]
# Modules of the game that are faked/blocked
[[fake]]
file = "ILINK.IRX"
name = "iLINK_HW_Manager" # is this correct?
version = 0x0202 # is this correct?
startrv = 2 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END # is this correct?

View File

@ -0,0 +1,17 @@
# Name of loaded config, to show to user
name = "MMCEDRV"
[[module]]
file = "iomanX.irx"
env = ["LE"]
[[module]]
file = "fileXio.irx"
env = ["LE"]
[[module]]
file = "mmceman.irx"
env = ["LE"]
[[module]]
file = "mmcefhi.irx"
func = "FHI_FILEID"
env = ["EE"]

View File

@ -0,0 +1,10 @@
# Name of loaded config, to show to user
name = "MX4SIO in MC2 BDM driver"
# Drivers this driver depends on (config file must exist)
depends = ["i_bdm"]
# Modules to load
[[module]]
file = "mx4sio_bd_mini.irx"
env = ["LE", "EE"]

View File

@ -0,0 +1,29 @@
# Name of loaded config, to show to user
name = "UDPBD BDM driver with HDD support"
# Drivers this driver depends on (config file must exist)
depends = ["i_bdm", "i_dev9_ns"]
# Modules to load
[[module]]
file = "smap_udpbd.irx"
args = ["ip=192.168.1.10"]
env = ["LE", "EE"]
# Faking strategy
# ---------------
# To allow games to use hdd:
# - dev9 (no-shutdown) is resident, and can be used by hdd modules
# - all networking modules are faked (we hope they are not used)
[[fake]]
file = "ENT_SMAP.IRX"
name = "ent_smap"
version = 0x021f
loadrv = 0 # 0=ok, -xxx=error code (module not loaded)
startrv = 2 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END
[[fake]]
file = "SMAP.IRX"
name = "INET_SMAP_driver"
version = 0x0219
loadrv = 0 # 0=ok, -xxx=error code (module not loaded)
startrv = 2 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END

View File

@ -0,0 +1,30 @@
# Name of loaded config, to show to user
name = "UDPBD BDM driver"
# Drivers this driver depends on (config file must exist)
depends = ["i_bdm", "i_dev9_hidden"]
# Modules to load
[[module]]
file = "smap_udpbd.irx"
args = ["ip=192.168.1.10"]
env = ["LE", "EE"]
# Faking strategy
# ---------------
# To prevent games from trying to use networing:
# - we try to simulate that there is no dev9 hardware present:
# - dev9 returns NO_RESIDENT_END, module is hidden
# - all modules depending on dev9 fail to load becouse dev9 is not resident
[[fake]]
file = "ENT_SMAP.IRX"
name = "ent_smap"
version = 0x021f
loadrv = -200 # KE_LINKERR becouse dev9 does not exist
startrv = 1 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END
[[fake]]
file = "SMAP.IRX"
name = "INET_SMAP_driver"
version = 0x0219
loadrv = -200 # KE_LINKERR becouse dev9 does not exist
startrv = 1 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END

View File

@ -0,0 +1,68 @@
# Name of loaded config, to show to user
name = "USB BDM driver - with UDPTTY debugging"
# Drivers this driver depends on (config file must exist)
depends = ["i_bdm", "i_dev9_hidden"]
# Modules to load
[[module]]
file = "smap_udptty.irx"
args = ["ip=192.168.1.10"]
env = ["LE", "EE"]
[[module]]
file = "usbd_mini.irx"
# Modules that emulate the sceCdRead function must operate at a higher
# priority than the highest possible game priority.
#
# If the priority is lower (higher number) then some games will wait in
# and endless loop for data, but the waiting thread will then cause the
# data to never be processed.
#
# This causes some games to 'need' MODE2 (sync reads) to work.
#
# Supported parameters:
# - dev = maxDevices
# - ed = maxEndpoints
# - gtd = maxTransfDesc
# - itd = maxIsoTransfDesc
# - ioreq = maxIoReqs
# - conf = maxStaticDescSize
# - hub = maxHubDevices
# - port = maxPortsPerHub
# - thpri = hcdThreadPrio,cbThreadPrio
# USBD defaults
#args = ["dev=32", "ed=64", "gtd=128", "itd=128", "hub=8", "port=8", "thpri=7,8"]
# USBD defaults for 'mini' driver
args = ["thpri=7,8"]
# Save 13KiB IOP RAM extra compared to 'mini'
#args = ["dev=4", "ed=8", "gtd=16", "itd=16", "hub=2", "port=4", "thpri=7,8"]
env = ["LE", "EE"]
[[module]]
file = "usbmass_bd_mini.irx"
env = ["LE", "EE"]
# Modules of the game that are faked/blocked
[[fake]]
file = "USBD.IRX"
name = "USB_driver"
version = 0x0204
startrv = 2 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END
# Faking strategy
# ---------------
# To prevent games from trying to use networing:
# - we try to simulate that there is no dev9 hardware present:
# - dev9 returns NO_RESIDENT_END, module is hidden
# - all modules depending on dev9 fail to load becouse dev9 is not resident
[[fake]]
file = "ENT_SMAP.IRX"
name = "ent_smap"
version = 0x021f
loadrv = -200 # KE_LINKERR becouse dev9 does not exist
startrv = 1 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END
[[fake]]
file = "SMAP.IRX"
name = "INET_SMAP_driver"
version = 0x0219
loadrv = -200 # KE_LINKERR becouse dev9 does not exist
startrv = 1 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END

View File

@ -0,0 +1,45 @@
# Name of loaded config, to show to user
name = "USB BDM driver"
# Drivers this driver depends on (config file must exist)
depends = ["i_bdm"]
# Modules to load
[[module]]
file = "usbd_mini.irx"
# Modules that emulate the sceCdRead function must operate at a higher
# priority than the highest possible game priority.
#
# If the priority is lower (higher number) then some games will wait in
# and endless loop for data, but the waiting thread will then cause the
# data to never be processed.
#
# This causes some games to 'need' MODE2 (sync reads) to work.
#
# Supported parameters:
# - dev = maxDevices
# - ed = maxEndpoints
# - gtd = maxTransfDesc
# - itd = maxIsoTransfDesc
# - ioreq = maxIoReqs
# - conf = maxStaticDescSize
# - hub = maxHubDevices
# - port = maxPortsPerHub
# - thpri = hcdThreadPrio,cbThreadPrio
# USBD defaults
#args = ["dev=32", "ed=64", "gtd=128", "itd=128", "hub=8", "port=8", "thpri=7,8"]
# USBD defaults for 'mini' driver
args = ["thpri=7,8"]
# Save 13KiB IOP RAM extra compared to 'mini'
#args = ["dev=4", "ed=8", "gtd=16", "itd=16", "hub=2", "port=4", "thpri=7,8"]
env = ["LE", "EE"]
[[module]]
file = "usbmass_bd_mini.irx"
env = ["LE", "EE"]
# Modules of the game that are faked/blocked
[[fake]]
file = "USBD.IRX"
name = "USB_driver"
version = 0x0204
startrv = 2 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END

View File

@ -0,0 +1,10 @@
# Name of loaded config, to show to user
name = "Block Device filesystem driver"
# Drivers this driver depends on (config file must exist)
#depends = ["i_bdm"]
# Modules to load in load environment
[[module]]
file = "bdfs.irx"
env = ["LE"]

View File

@ -0,0 +1,10 @@
# Name of loaded config, to show to user
name = "exFat filesystem driver"
# Drivers this driver depends on (config file must exist)
#depends = ["i_bdm"]
# Modules to load in load environment
[[module]]
file = "bdmfs_fatfs.irx"
env = ["LE"]

View File

@ -0,0 +1,14 @@
# Name of loaded config, to show to user
name = "HDLoader filesystem driver"
# Drivers this driver depends on (config file must exist)
#depends = ["i_bdm"]
# Modules to load in load environment
[[module]]
file = "ps2hdd-bdm.irx"
args = ["-o", "4", "-n", "20"]
env = ["LE"]
[[module]]
file = "hdlfs.irx"
env = ["LE"]

View File

@ -0,0 +1,25 @@
# Name of loaded config, to show to user
name = "ATA emulation using image file"
# Modules to load
[[module]]
file = "atad_emu.irx"
env = ["EE"]
# Modules of the game that are faked/blocked
[[fake]]
file = "ATAD.IRX"
name = "atad_driver"
version = 0x0207
startrv = 0 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END
# For booting rom0:OSDSYS, block the following?:
# - rom0:ATAD (dev9 + atad combined driver)
# - HDDLOAD
#
# What do these libraries do? Also block?:
# - rom0:XDEV9 ?
# - rom0:XDEV9SERV ?
# - rom0:PS1ID ?
# - rom0:PS1VERE ?
# - rom1:DVDIDE ?

View File

@ -0,0 +1,10 @@
# Name of loaded config, to show to user
name = "Builtin DVD drive with ESR patched disk"
# Modules to load
[[module]]
file = "cdvdman_esr1.irx"
env = ["LE", "EE"]
[[module]]
file = "cdvdman_esr2.irx"
env = ["LE", "EE"]

View File

@ -0,0 +1,25 @@
# Name of loaded config, to show to user
name = "CD/DVD emulation using image file"
# Modules to load
[[module]]
file = "cdvdman_emu.irx"
ioprp = "CDVDMAN"
env = ["EE"]
[[module]]
file = "cdvdfsv.irx"
ioprp = "CDVDFSV"
env = ["EE"]
# Modules of the game that are faked/blocked
[[fake]]
file = "CDVDFSV.IRX"
name = "cdvd_ee_driver"
#unload = true // FIXME this is broken, can be tested with Jak X
version = 0x0202
startrv = 2 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END
[[fake]]
file = "CDVDSTM.IRX"
name = "cdvd_st_driver"
version = 0x0202
startrv = 2 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END

View File

@ -0,0 +1,7 @@
# Name of loaded config, to show to user
name = "MC emulation using image file"
# Modules to load
[[module]]
file = "mc_emu.irx"
env = ["EE"]

View File

@ -0,0 +1,19 @@
# Name of loaded config, to show to user
name = "Block Device Manager (with FHI)"
# Modules to load in load environment
[[module]]
file = "bdm.irx"
env = ["LE"]
[[module]]
file = "iomanX.irx"
env = ["LE"]
[[module]]
file = "fileXio.irx"
env = ["LE"]
# Modules to load in emulation environment
[[module]]
file = "fhi_bd_defrag.irx"
func = "FHI_BD"
env = ["EE"]

View File

@ -0,0 +1,15 @@
# Name of loaded config, to show to user
name = "DEV9 hidden driver"
# Modules to load
[[module]]
file = "dev9_hidden.irx" # hidden version to hide from the game
env = ["LE", "EE"]
# Modules of the game that are faked/blocked
[[fake]]
file = "DEV9.IRX"
name = "dev9"
version = 0x0208
loadrv = 0 # 0=ok, -xxx=error code (module not loaded)
startrv = 1 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END

View File

@ -0,0 +1,14 @@
# Name of loaded config, to show to user
name = "DEV9 no-shutdown driver"
# Modules to load
[[module]]
file = "dev9_ns.irx" # no-shutdown version, to prevent games shutting down the dev9
env = ["LE", "EE"]
# Modules of the game that are faked/blocked
[[fake]]
file = "DEV9.IRX"
name = "dev9"
version = 0x0208
startrv = 0 # 0=RESIDENT_END, 1=NO_RESIDENT_END, 2=REMOVABLE_END

View File

@ -0,0 +1,14 @@
# Name of loaded config, to show to user
name = "Patches for Ratchet Clank 3 / Up Your Arsenal - ONLINE!"
# For testing
#default_bsd = "ata"
#default_dvd = "mass:DVD/Ratchet Clank - Up Your Arsenal (U).iso"
# Boot directly into online menu
default_elf = "cdrom0:I5BOOTN.ELF;1"
# Load patch module that fixes a game bug
[[module]]
file = "patch_rc_uya.irx"
env = ["EE"]

View File

@ -0,0 +1,85 @@
# Name of loaded config, to show to user
name = "System settings and drivers"
# Default argument values
# Overwrite these from the command line
default_bsd = "no"
default_bsdfs = "exfat"
default_dvd = "no"
#default_ata0 = "mass:mydrive0.bin"
#default_ata0id = "mass:mydrive0_id.bin"
#default_ata1 = "mass:mydrive1.bin"
#default_mc0 = "mass:mymc0.bin"
#default_mc1 = "mass:mymc1.bin"
default_elf = "auto"
#default_mt = "dvd"
#default_gc = "12"
#default_gsm = "fp"
#default_cfg = ""
default_dbc = false
default_logo = false
# EE_CORE configuration
eecore_elf = "ee_core.elf"
eecore_mod_base = 0x95000
#eecore_mod_base = 0xA7000
# Select the number of sectors for the FS buffer
# A small value can increase game compatibility
# A large value can increase performce
# Min=2, Max=128, Default=8
cdvdman_fs_sectors = 8
# Override the 8-byte string returned by:
# - sceCdRI
# This string is also used by:
# - sceCdReadGUID
# - sceCdReadModelID
#
# This string is used (for instance) by the sony network configuration
# to verify if the config belongs to the specific console.
#
#ilink_id = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
# Use the 5-byte string returned by:
# - sceCdReadDiskID
#disk_id = [0x00, 0x00, 0x00, 0x00, 0x00]
# Modules to load in emulation environment
[[module]]
file = "eesync.irx"
ioprp = "EESYNC"
env = ["EE"]
[[module]]
file = "imgdrv.irx"
func = "IMGDRV" # used by EECORE durion IOP reboot
env = ["EE"]
# By default the system rom0:UDNL will be used, but this can be overruled here
# Some games (like Auto Modellista) don't work over USB with the default UDNL.
[[module]]
file = "udnl.irx"
#file = "udnl-t300.irx"
func = "UDNL" # used by EECORE durion IOP reboot
env = ["EE"]
[[module]]
file = "fakemod.irx"
func = "FAKEMOD" # loaded last, so we don't fake our own modules
env = ["EE"]
#[[module]]
#file = "patch_freemem.irx"
#args = ["512", "X"] # "X" = block above limit (default no blocking), number is limit in KiB (default 512KiB)
#env = ["EE"]
#[[module]]
#file = "memcheck.irx"
#env = ["EE"]
#[[module]]
#file = "patch_membo.irx"
#env = ["EE"]
# It's best to load this module last (bottom of bsd-usb.toml for instance)
#[[module]]
#file = "gapfill.irx"
#env = ["EE"]

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/neutrino/modules/bdfs.irx Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/neutrino/modules/hdlfs.irx Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
v1.5.0-20-gbc685a4

BIN
assets/nhddl.elf Normal file

Binary file not shown.

View File

@ -1,4 +1,4 @@
BOOT2 = pfs:/OPL-Launcher-BDM.KELF
BOOT2 = pfs:/bbnl.KELF
VER = 1.01
VMODE = NTSC
HDDUNITPOWER = NICHDD