summaryrefslogtreecommitdiffstats
path: root/games/jzintv/extract_roms.sh
diff options
context:
space:
mode:
Diffstat (limited to 'games/jzintv/extract_roms.sh')
-rw-r--r--games/jzintv/extract_roms.sh73
1 files changed, 73 insertions, 0 deletions
diff --git a/games/jzintv/extract_roms.sh b/games/jzintv/extract_roms.sh
new file mode 100644
index 0000000000..b7931d2efc
--- /dev/null
+++ b/games/jzintv/extract_roms.sh
@@ -0,0 +1,73 @@
+#!/bin/bash
+
+# extract_roms.sh: find the Intellivision and/or ECS ROM images,
+# either as zip files (which get unzipped) or as extracted contents,
+# and copy them to the destination dir (if it exists). This script is
+# intended to be run by jzintv.SlackBuild.
+
+# First arg: the SlackBuild dir ($CWD in the caller).
+srcdir="$1"
+
+# 2nd arg: where the .bin files should go ($ROMDIR in the caller).
+destdir="$2"
+
+# Full list of dirs where we'll look for ROMs.
+alldirs="$srcdir /usr/share/jzintv/rom /usr/share/games/jzintv/rom /usr/share/games/mame/roms ${JZINTV_ROM_PATH//: }"
+
+echo "=== Will search for ROMs in: $alldirs"
+
+# nocaseglob means we can handle intv.zip, intv.ZIP, INTV.ZIP, etc.
+shopt -s nocaseglob
+
+shopt -s nullglob
+
+# First, extract any likely-looking zip files we find.
+for dir in $alldirs; do
+ [ -d $dir ] || continue
+ for zipfile in $dir/intv*.zip $dir/ecs*.zip; do
+ echo "===> Extracting $zipfile"
+ unzip -o -LL $zipfile '*.rom' '*.bin' '*.int' '*.20' '*.70' '*.e0' '*.u21'
+ done
+ cd -
+done
+
+# Handle MAME/MESS split rom.
+if [ -e ecs_rom.20 -a -e ecs_rom.70 -a -e ecs_rom.e0 ]; then
+ echo "===> found split ECS ROM, combining"
+ cat ecs_rom.20 ecs_rom.70 ecs_rom.e0 > ecs.bin
+fi
+
+# Handle the new MAME name for grom.bin.
+if [ -e "ro-3-9503-003.u21" ]; then
+ echo "===> found MAME's ro-3-9503-003.u21, renaming to grom.bin"
+ mv ro-3-9503-003.u21 grom.bin
+fi
+
+# Now look for the actual ROMs, including any we just extracted above.
+for dir in $(pwd) $alldirs; do
+ [ -d $dir ] || continue
+ echo "===> Looking for unzipped ROMs in $dir"
+ for file in $dir/{exec,grom,ecs}.{rom,bin,int}*; do
+ tmp_name="$( echo $file | tr A-Z a-z | sed 's,\.[^.]*$,.bin,' )"
+ dest_name="$( basename $tmp_name )"
+ if [ "$dest_name" = "intv_ecs.bin" ]; then
+ dest_name="ecs.bin"
+ fi
+ size="$( stat -c %s "$file" )"
+ echo "===> candidate for $dest_name: $file, size $size"
+ case "$dest_name" in
+ grom.bin)
+ [ "$size" != 2048 ] && break ;;
+ exec.bin)
+ [ "$size" != 8192 ] && break ;;
+ esc.bin)
+ [ "$size" != 24576 ] && break ;;
+ esac
+ case "$dest_name" in
+ grom.bin|exec.bin|ecs.bin)
+ echo "===> found $dest_name as $file"
+ [ -d "$destdir" ] && cp "$file" "$destdir/$dest_name"
+ ;;
+ esac
+ done
+done