CurtaSim/CurtaSim/make/createDiskImage

374 lines
9.2 KiB
Plaintext
Raw Normal View History

2014-09-10 03:05:58 +00:00
#!/bin/sh
2018-10-18 03:59:31 +00:00
merlinStartAddr() {
awk '$1 ~ /^[oO][rR][gG]$/{print $2}' linkscript.s | sed 's/^[0$]*//'
}
if [ $# -lt 5 ]
2014-09-10 03:05:58 +00:00
then
2019-08-10 02:58:08 +00:00
echo USAGE: $0 '<AppleCommander> <machine> <diskimage> <binary> <startaddress> <otherfilesordirs...>'
2014-09-10 03:05:58 +00:00
exit 1
fi
2014-11-19 05:06:31 +00:00
if [ -z "$JAVA" ]
then
for item in "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home" /Library/Java/JavaVirtualMachines/*/Contents/Home /usr
do
if [ -x "$item/bin/java" ]
then
JAVA="$item/bin/java"
break
fi
done
fi
if [ -z "$JAVA" ]
then
echo Cannot find a path to a Java runtime.
echo Go to https://java.com/download if you do not have Java.
echo If you do have Java, you may need to uncomment the JAVA
echo line in the Makefile and set it to the path for your
echo Java runtime binary.
exit 1
fi
2014-09-10 03:05:58 +00:00
APPLECOMMANDER=$1
shift
MACHINE=$1
shift
DISKIMAGE=$1
shift
PROGRAM=$1
shift
STARTADDR=`echo $1 | sed 's/^0*//'`
shift
2014-09-10 03:05:58 +00:00
2018-10-18 03:59:31 +00:00
SOURCEFILE=$PROGRAM
2014-09-10 03:05:58 +00:00
case "$MACHINE" in
apple2)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=1
RENAMELOADER=0
DELETEBASIC=0
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=1
FILETYPE="bin"
2018-10-18 03:59:31 +00:00
BASICFILETYPE="bas"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`
2014-11-19 05:06:31 +00:00
MAXFILENAMELEN=15
2014-09-10 03:05:58 +00:00
;;
apple2enh)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=1
RENAMELOADER=0
DELETEBASIC=0
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=1
FILETYPE="bin"
2018-10-18 03:59:31 +00:00
BASICFILETYPE="bas"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`
2014-11-19 05:06:31 +00:00
MAXFILENAMELEN=15
2014-09-10 03:05:58 +00:00
;;
apple2-dos33)
TEMPLATE="make/dos33_template.dsk"
DELETELOADER=0
RENAMELOADER=0
DELETEBASIC=0
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=1
2018-10-18 03:59:31 +00:00
FILETYPE="B"
BASICFILETYPE="A"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`
2014-11-19 05:06:31 +00:00
MAXFILENAMELEN=30
2014-09-10 03:05:58 +00:00
;;
apple2enh-dos33)
TEMPLATE="make/dos33_template.dsk"
DELETELOADER=0
RENAMELOADER=0
DELETEBASIC=0
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=1
2018-10-18 03:59:31 +00:00
FILETYPE="B"
BASICFILETYPE="A"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`
2014-11-19 05:06:31 +00:00
MAXFILENAMELEN=30
2014-09-10 03:05:58 +00:00
;;
apple2-system)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=1
RENAMELOADER=0
DELETEBASIC=1
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=0
FILETYPE="sys"
2018-10-18 03:59:31 +00:00
BASICFILETYPE="bas"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`.system
2014-11-19 05:06:31 +00:00
MAXFILENAMELEN=15
2014-09-10 03:05:58 +00:00
;;
apple2enh-system)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=1
RENAMELOADER=0
DELETEBASIC=1
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=0
FILETYPE="sys"
2018-10-18 03:59:31 +00:00
BASICFILETYPE="bas"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`.system
2014-11-19 05:06:31 +00:00
MAXFILENAMELEN=15
2014-09-10 03:05:58 +00:00
;;
apple2-loader)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=0
RENAMELOADER=1
DELETEBASIC=1
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=1
FILETYPE="bin"
2018-10-18 03:59:31 +00:00
BASICFILETYPE="bas"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`
2014-11-19 05:06:31 +00:00
MAXFILENAMELEN=15
2014-09-10 03:05:58 +00:00
;;
apple2-reboot)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=0
RENAMELOADER=1
DELETEBASIC=1
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=1
FILETYPE="bin"
2018-10-18 03:59:31 +00:00
BASICFILETYPE="bas"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`
2014-11-19 05:06:31 +00:00
MAXFILENAMELEN=15
2014-09-10 03:05:58 +00:00
;;
apple2enh-loader)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=0
RENAMELOADER=1
DELETEBASIC=1
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=1
FILETYPE="bin"
2018-10-18 03:59:31 +00:00
BASICFILETYPE="bas"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`
2014-11-19 05:06:31 +00:00
MAXFILENAMELEN=15
2014-09-10 03:05:58 +00:00
;;
apple2enh-reboot)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=0
RENAMELOADER=1
DELETEBASIC=1
2018-10-18 03:59:31 +00:00
COPYBINARY=1
2014-09-10 03:05:58 +00:00
HASHEADER=1
FILETYPE="bin"
2018-10-18 03:59:31 +00:00
BASICFILETYPE="bas"
TARGETFILE=`basename $PROGRAM`
MAXFILENAMELEN=15
;;
apple2-basic)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=1
RENAMELOADER=0
DELETEBASIC=0
COPYBINARY=0
FILETYPE="bas"
BASICFILETYPE="bas"
TARGETFILE=`basename $PROGRAM`
SOURCEFILE=${PROGRAM}.tok
MAXFILENAMELEN=15
;;
apple2-dos33-basic)
TEMPLATE="make/dos33_template.dsk"
DELETELOADER=0
RENAMELOADER=0
DELETEBASIC=0
COPYBINARY=0
FILETYPE="A"
BASICFILETYPE="A"
TARGETFILE=`basename $PROGRAM`
SOURCEFILE=${PROGRAM}.tok
MAXFILENAMELEN=30
;;
apple2-merlin)
TEMPLATE="make/prodos_template.dsk"
DELETELOADER=1
RENAMELOADER=0
DELETEBASIC=0
COPYBINARY=1
HASHEADER=0
FILETYPE="bin"
BASICFILETYPE="bas"
2014-09-10 03:05:58 +00:00
TARGETFILE=`basename $PROGRAM`
MAXFILENAMELEN=15
2018-10-18 03:59:31 +00:00
STARTADDR=`merlinStartAddr`
;;
apple2-dos33-merlin)
TEMPLATE="make/dos33_template.dsk"
DELETELOADER=0
RENAMELOADER=0
DELETEBASIC=0
COPYBINARY=1
HASHEADER=0
FILETYPE="B"
BASICFILETYPE="A"
TARGETFILE=`basename $PROGRAM`
MAXFILENAMELEN=30
STARTADDR=`merlinStartAddr`
2014-09-10 03:05:58 +00:00
;;
*)
echo "Invalid machine type $MACHINE"
exit 1
;;
esac
2018-10-18 03:59:31 +00:00
STARTARG=""
if [ ! -z "$STARTADDR" ]
then
STARTARG="0x$STARTADDR"
fi
if [ ! -f "$SOURCEFILE" ]
then
echo "Cannot file executable $SOURCEFILE"
exit 1
fi
2014-11-19 05:06:31 +00:00
if [ ${#TARGETFILE} -gt $MAXFILENAMELEN ]
then
echo "The filename $TARGETFILE exceeds the max name length of the filesystem ($MAXFILENAMELEN)"
exit 1
fi
2014-09-10 03:05:58 +00:00
if [ ! -f "$TEMPLATE" ]
then
echo "Cannot file template disk image $TEMPLATE"
exit 1
fi
cp "$TEMPLATE" "$DISKIMAGE"
if [ $DELETELOADER -eq 1 ]
then
2014-11-19 05:06:31 +00:00
"$JAVA" -jar "$APPLECOMMANDER" -d "$DISKIMAGE" LOADER.SYSTEM
2014-09-10 03:05:58 +00:00
fi
if [ $RENAMELOADER -eq 1 ]
then
2014-11-19 05:06:31 +00:00
LOADERFILE=${TARGETFILE}.system
if [ ${#LOADERFILE} -gt $MAXFILENAMELEN ]
then
echo "The filename $LOADERFILE exceeds the max name length of the filesystem ($MAXFILENAMELEN)"
rm -f "$DISKIMAGE"
exit 1
fi
"$JAVA" -jar "$APPLECOMMANDER" -g "$DISKIMAGE" LOADER.SYSTEM | "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$LOADERFILE" sys
2014-11-19 05:06:31 +00:00
"$JAVA" -jar "$APPLECOMMANDER" -d "$DISKIMAGE" LOADER.SYSTEM
2014-09-10 03:05:58 +00:00
fi
if [ $DELETEBASIC -eq 1 ]
then
2014-11-19 05:06:31 +00:00
"$JAVA" -jar "$APPLECOMMANDER" -d "$DISKIMAGE" BASIC.SYSTEM
2014-09-10 03:05:58 +00:00
fi
2018-10-18 03:59:31 +00:00
if [ $COPYBINARY -eq 1 ]
2014-09-10 03:05:58 +00:00
then
2018-10-18 03:59:31 +00:00
if [ "$CC65_SUPPORTS_APPLE_SINGLE" -eq 1 ]
then
"$JAVA" -jar "$APPLECOMMANDER" -as "$DISKIMAGE" "$TARGETFILE" < "$SOURCEFILE"
elif [ $HASHEADER -eq 1 ]
then
2018-10-18 03:59:31 +00:00
HDR_STARTADDR=`od -t x2 -N 2 < "$SOURCEFILE" | head -1 | awk '{print $2}' | sed 's/^0*//'`
if [ "$HDR_STARTADDR" = "$STARTADDR" ]
then
dd if="$SOURCEFILE" bs=4 skip=1 | "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE $STARTARG
else
"$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE $STARTARG < "$SOURCEFILE"
fi
else
"$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE $STARTARG < "$SOURCEFILE"
fi
2014-09-10 03:05:58 +00:00
fi
2018-10-18 03:59:31 +00:00
for ITEM in $*
do
2018-10-18 03:59:31 +00:00
# If this is a file matching *.tok, then this is an Applesoft BASIC file
# to copy to the disk image.
if [ -f "$ITEM" ] && echo "$ITEM" | grep '\.tok$' > /dev/null
then
2019-08-10 02:58:08 +00:00
DESTFILE=`basename "$ITEM" | sed 's/\.tok$//'`
2018-10-18 03:59:31 +00:00
"$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$DESTFILE" "$BASICFILETYPE" 0x801 < "$ITEM"
continue
fi
if [ ! -d "$ITEM" ]
then
2018-10-18 03:59:31 +00:00
echo Unable to find directory $ITEM
exit 1
fi
OLDPWD=`pwd`
2018-10-18 03:59:31 +00:00
cd $ITEM
find . -type f -print | while read FILE
do
TRANSFERARG=-p
FILETYPE=bin
DESTFILE=`echo $FILE | sed 's/^\.\///'`
if echo $FILE | egrep '\.as$' > /dev/null
then
# If the file ends with .as, this means the input is AppleSingle format.
# Strip the .as from the end of the file name and set the args to do
# an AppleSingle transfer.
TRANSFERARG=-as
FILETYPE=""
DESTFILE=`echo $DESTFILE | sed 's/\.as$//'`
elif echo $FILE | egrep '\.[ABITSRab]$' > /dev/null
then
# If the file ends with a single character DOS 3.3 file type, then use
# that as the file type.
FILETYPE=`echo $DESTFILE | awk -F. '{print $NF}'`
DESTFILE=`echo $DESTFILE | sed 's/\.[ABITSRab]$//'`
elif echo $FILE | egrep '\.[a-zA-Z][a-zA-Z][a-zA-Z]$' > /dev/null
then
# If the file ends with a three letter extension, use that as
# the file type.
FILETYPE=`echo $DESTFILE | awk -F. '{print $NF}'`
DESTFILE=`echo $DESTFILE | sed 's/\.[a-zA-Z][a-zA-Z][a-zA-Z]$//'`
fi
# If the file type is text, convert the line feeds to carriage return
if [ $FILETYPE = txt ] || [ $FILETYPE = T ]
then
2019-08-10 02:58:08 +00:00
tr '\n' '\r' < $FILE | "$JAVA" -jar "$OLDPWD/$APPLECOMMANDER" $TRANSFERARG "$DISKIMAGE" "$DESTFILE" $FILETYPE
else
2019-08-10 02:58:08 +00:00
"$JAVA" -jar "$OLDPWD/$APPLECOMMANDER" $TRANSFERARG "$DISKIMAGE" "$DESTFILE" $FILETYPE < $FILE
fi
done
cd "$OLDPWD"
done