Skip to content

Instantly share code, notes, and snippets.

@ardianta
Last active April 10, 2022 21:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ardianta/b16292599f780f3231305d4ffe10fb8c to your computer and use it in GitHub Desktop.
Save ardianta/b16292599f780f3231305d4ffe10fb8c to your computer and use it in GitHub Desktop.
PSX CD Ripping Script
#!/bin/bash
#
# This is a script to create a .bin image with corresponding .cue out of your
# PSX game discs as backup and/or for usage with emulators.
#
# Run-time requirements: cdrdao
#
# This script is partly based upon the "wesnoth-optipng" script from the
# Battle for Wesnoth team.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or,
# at your option any later version. This program is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY.
PSXDIR=$HOME/psx
DRIVE=/dev/sr0
report_absent_tool()
{
echo "$1 is not present in PATH. $(basename ${0}) requires it in order to work properly."
if [ -n "$2" ]; then
echo "You can obtain $1 at <${2}>."
fi
exit -1
}
print_help()
{
cat << EOSTREAM
Script for ripping PSX game discs into .bin files with corresponding .cue files.
Usage:
$(basename ${0}) [{--outputdir} <value>] [{--drive} <value>] [{--no-subchan] [{--help|-h}] [filename]
The parameter [filename] is mandatory. Without it, the script will abort. Plain
spaces in the filename are prohibited!
Available switches:
--drive Define the device to be used. If this parameter is not
provided, /dev/sr0 will be used.
--help / -h Displays this help text.
--no-subchan Don't extract subchannel data. Subchannel data might be
required for some PSX copy protection though it *could* create
problems. Retry with this parameter set if any problems occur
when trying to use the resulting image.
--outputdir Define the folder in which the resulting image should be saved.
If the folder does not exist, it will be created. If no
--outputdir parameter is given, the folder ~/psxrip will be
used.
This tool requires cdrdao (http://cdrdao.sourceforge.net/) to be installed and
available in PATH.
EOSTREAM
}
# go through provided parameters
while [ "${1}" != "" ]; do
if [ "${1}" = "--drive" ]; then
DRIVE=$2
shift 2
elif [ "${1}" = "--outputdir" ]; then
PSXDIR=$2
shift 2
elif [ "${1}" = "--nosubchan" ]; then
NOSUBCHAN="true"
shift 2
elif [ "${1}" = "--help" ] || [ "${1}" = "-h" ]; then
print_help
exit 0
elif [ "${2}" != "" ] ; then
echo "ERROR: Inval id usage. Displaying help:"
echo ""
print_help
exit -1
else
IMAGENAME=$1
shift
fi
done
# check for required dependencies
which cdrdao &> /dev/null ||
report_absent_tool cdrdao 'http://cdrdao.sourceforge.net/'
# output recognized parameters
echo "Program "$(basename ${0})" called. The following parameters will be used for"
echo "creating an image of a PSX disc:"
echo "Folder for saving images: "$PSXDIR
echo "Drive used for reading the image: "$DRIVE
echo "Resulting filenames: "$PSXDIR"/"$IMAGENAME"[.bin|.cue]"
if [ "$NOSUBCHAN" = "true" ]; then
echo "Not extracting subchan data."
else
echo "Extracting subchan data."
fi
echo ""
# check if imagename is defined
if [ "$IMAGENAME" = "" ]; then
echo "ERROR: Invalid usage. Found no name for resulting image. Displaying help:"
echo ""
print_help
exit -1
fi
# create dir for resulting image if it does not exist yet
if ! [ -d "$PSXDIR" ]; then
echo "outputdir not found, creating folder: "$PSXDIR
echo ""
mkdir -p $PSXDIR
fi
echo "starting ripping the disc"
echo ""
# final commandline for reading the disc and creating the image
if [ "$NOSUBCHAN" = "true" ]; then
cdrdao read-cd --read-raw --datafile $PSXDIR/$IMAGENAME.bin --device $DRIVE --driver generic-mmc-raw $PSXDIR/$IMAGENAME.toc
else
cdrdao read-cd --read-raw --read-subchan rw_raw --datafile $PSXDIR/$IMAGENAME.bin --device $DRIVE --driver generic-mmc-raw $PSXDIR/$IMAGENAME.toc
fi
toc2cue $PSXDIR/$IMAGENAME.toc $PSXDIR/$IMAGENAME.cue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment