Creating images of PSX games using Linux

From Pandora Wiki
Revision as of 15:12, 22 February 2011 by Maplesugarlover (talk | contribs)
Jump to: navigation, search

This pages describes a rather simple way for creating images for usage with an emulator like PSX4Pandora. Everything listed here does require the program cdrdao which is often already installed in common Linux distributions once some burner software is installed.

Single command

This command creates a dump of your disc. It does also extract subchannel data which is required for the copy protection of some of the games to work correctly. It does save the image in .bin format and also does create a .cue file.

Assuming that your optical drive is called /dev/sr0 and you want to name the image GAME_NAME, this is the command you can use to create the image in the current dir:

cdrdao read-cd --read-raw --read-subchan rw_raw --datafile GAME_NAME.bin --device /dev/sr0 --driver generic-mmc-raw GAME_NAME.cue

Of course you have to adjust the parameters according to your desires and your system setup.

Useful script

Following is a script doing some useful stuff. It does by default rip the current disc in your drive /dev/sr0 into the folder ~/psxrip/ with the name you give as parameter. If the folder does not exist, it is created. It does extract subchannel data by default, saves the image as .bin and creates a .cue.

You can also copy the following code into a text file and make it executable. To do so, lets assume you named the text file psxrip, then run chmod +x psxrip. For usage information just type ./psxrip --help. The script does check if you got the required program installed, if you provided the parameters and all the likes. If you do something that you are not supposed to do, it will print an error message as well as some (hopefully) helpful output.

Here is the 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/psxrip
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.cue
else
	cdrdao read-cd --read-raw --read-subchan rw_raw --datafile $PSXDIR/$IMAGENAME.bin --device $DRIVE --driver generic-mmc-raw $PSXDIR/$IMAGENAME.cue
fi

Compressing the images

If you want to compress the images you can try to use the program PocketISO via wine. There seems to be no native program doing this task in a nice way.