#!/bin/bash # Updates and gets jt cores # Retrieves new game ROMS if needed from archive.org # Don't forget to set the SYSTEM attribute for any subdirectories # on the SD card - Linux "fatattr" or Windows "attrib +s JT-SYSTEM16". BASEDIR=_temp SRCDIR=$BASEDIR/git/jtbin ZIPDIR=$BASEDIR/mame MRABIN=./mra FLAGFILE=update_jtcores.flag if [[ ! -f $FLAGFILE ]]; then touch -t 197201010000 $FLAGFILE fi mkdir -p $ZIPDIR # clone git repo if it doesn't exist if [[ ! -d $SRCDIR ]]; then mkdir -p $BASEDIR/git (cd $BASEDIR/git; git clone https://github.com/jotego/jtbin.git) #Set timestamps on git files to match repository commit dates (cd $SRCDIR; git ls-files | sed "s/'/\\\'/g" | xargs -I{} bash -c 'touch "{}" --date=@$(git log -n1 --pretty=format:%ct -- "{}")') fi echo $SRCDIR # Update the cores and mra from jtbin (cd $SRCDIR; git pull) echo #Process MRA files first #Get new MRAs and updated ones since the last run find $SRCDIR/mra -type f -name '*.mra' -newer $FLAGFILE -print0 | while IFS= read -r -d '' MRAFILE do # Exclude what I'm not interested in [[ $MRAFILE == *_alternatives* ]] && continue #[[ $MRAFILE == *Tokio* ]] && continue #[[ $MRAFILE == *Trojan* ]] && continue RBF=$($MRABIN -l "$MRAFILE" | grep 'rbf name:' | sed 's/rbf name: //') DESTDIR=Arcade/JT-OTHER [[ $RBF == *CPS0/* ]] && DESTDIR=Arcade/JT-CPS0 [[ $RBF == jtcps1 ]] && DESTDIR=Arcade/JT-CPS1 [[ $RBF == jtcps15 ]] && DESTDIR=Arcade/JT-CPS15 [[ $RBF == jtcps2 ]] && DESTDIR=Arcade/JT-CPS2 [[ $RBF == jts16* ]] && DESTDIR=Arcade/JT-SYSTEM16 mkdir -p $DESTDIR # Check ROM exists # Get First ROM section only, some MRAs reference two possible ROM options ZIPFILE="" ZIPFILE2="" ZIPFILE=`$MRABIN -l "$MRAFILE" | grep 'zip\[0\]' | head -1 | awk '{print $2}'` ZIPFILE2=`$MRABIN -l "$MRAFILE" | grep 'zip\[1\]' | head -1 | awk '{print $2}'` # Skip roms not interested in #if [[ $ZIPFILE = "qtono2j.zip" ]]; then # continue #fi #echo $ZIPFILE basename "$MRAFILE" .mra if [[ ! -f "${ZIPDIR}/${ZIPFILE}" ]]; then echo Downloading ROM $ZIPFILE (cd "$ZIPDIR"; wget -nc -nv https://archive.org/download/mame-merged/mame-merged/${ZIPFILE}) fi if [[ -n "$ZIPFILE2" && ! -f "${ZIPDIR}/${ZIPFILE2}" ]]; then echo Downloading ROM $ZIPFILE2 (cd "$ZIPDIR"; wget -nc -nv https://archive.org/download/mame-merged/mame-merged/${ZIPFILE2}) fi $MRABIN -A -O $DESTDIR/ -z "$ZIPDIR" "$MRAFILE" | grep -v 'expected: None' # Fix wrong named RBFs #RBF=$(echo $RBF | sed 's/jtcommando/jtcom/') if [[ ! -f $SRCDIR/mist/${RBF}.rbf ]]; then echo "RBF $RBF is missing for MRA `basename "${MRAFILE}"`, probably BETA" else RBFBASE=$(basename "$RBFFILE" | sed 's/_[0-9]\+.rbf//') cp -pvu "$SRCDIR/mist/${RBF}.rbf" $DESTDIR/${RBF}.rbf fi done #Check for beta RBF cores becoming release, i.e. they would be missed SRCDIR=$SRCDIR/mist find $SRCDIR -name '*.rbf' -print0 | while IFS= read -r -d '' FILE do RBF=`basename "$FILE"` DST="Arcade/$FILE" SRC=$SRCDIR/$DSTFILE if [[ ! $(find Arcade/JT* -name $RBF | grep .) ]]; then # Found missing rbf so find out where it belongs DESTDIR=Arcade/JT-OTHER [[ $RBF == *CPS0/* ]] && DESTDIR=Arcade/JT-CPS0 [[ $RBF == jtcps1 ]] && DESTDIR=Arcade/JT-CPS1 [[ $RBF == jtcps15 ]] && DESTDIR=Arcade/JT-CPS15 [[ $RBF == jtcps2 ]] && DESTDIR=Arcade/JT-CPS2 [[ $RBF == jts16* ]] && DESTDIR=Arcade/JT-SYSTEM16 cp -pv $FILE $DESTDIR/ fi done #Check for any updated RBFs with no updated MRA find Arcade/JT* -name '*.rbf' -print0 | while IFS= read -r -d '' FILE do RBF=`basename "$FILE"` if [[ $SRCDIR/$RBF -nt "$FILE" ]]; then echo Updated $RBF cp -p $SRCDIR/$RBF "$FILE" fi done touch $FLAGFILE