Consejos y Trucos Avanzados de ODROID-GO: Descomprime ROM Mientras Mantienes las Caratulas y la Lista de Juegos

Este es un breve tutorial para ayudarte con tus ROMs y el ODROID-GO Advance. Muchos de nosotros tenemos ROMs con archivos multimedia que los acompañan, como carátulas, capturas de pantalla, logotipos, etc. Algunas veces estas ROMs tienen archivos comprimidos. Ahora, ¿Realmente queremos hacer uso de la batería para descomprimir los juegos antes de cargarlos? No creo que sea una buena idea. El ahorro en espacio es mínimo en los juegos de las generaciones de 8 y 16 bits y no queremos descomprimir ISOs e IMGs en nuestro ODROID-GO Advance. Entonces, ¿cómo podemos reprocesar todos estos archivos y mantener la conexión a los archivos multimedia a través del archivo XML de la lista de juegos? Como sabes, Batocera (https://batocera.org/download) es un excelente sistema operativo basado en RecallBox, para ODROID-GO Advance. La forma en que el sistema lee las ROMs con los archivos multimedia asociados es a través del archivo gamelist.xml. El problema es que si descomprimimos el archivo ZIP, a menudo terminaremos con un nombre y extensión de archivo diferentes. Ahora tenemos que obtener un nuevo conjunto de caratulas para nuestras ROM que puede llevar un tiempo dependiendo de cuántos sistemas esté procesando, o tenemos que editar el gamelist.xml a mano, lo que requeriría un esfuerzo considerable. Te mostraré cómo procesar un conjunto de ROMs comprimido en unos pocos pasos, todo mientras mantengo las entradas correctas en el archivo gamelist.xml para que su diseño de la caratula siga asignándose correctamente. Lo haremos todo con un script bash desde la línea de comandos, para que puedas ejecutarlo a través de SSH si fuera necesario.

Preparación

Para que podamos hacer los cambios necesarios en un archivo XML desde un script bash, necesitamos un poco de ayuda. La herramienta que usaremos se llama XmlStarlet. Instálala en el sistema, la cual utilizaremos para procesar los conjuntos de ROM. Necesitarás un sistema Linux para hacer esta parte, aunque OSX y Ubuntu en Windows probablemente también puedan manejar este script. En realidad es muy simple: XmlStarlet se ocupa de la única parte compleja. Para instalar el paquete, ejecuta lo siguiente desde la línea de comandos.

$ sudo apt-get install xmlstarlet
A continuación, configuraremos nuestro script. Puedes descargar una copia del script desde https://bit.ly/34Y7LNX o puede copiar y pegar el siguiente texto en un archivo local, clean_unzip.
#!/bin/bash

if [ ! -d ./done ]; then
  mkdir ./done
fi
for z in *.zip
do
  mkdir tmp
  cp "$z" tmp
  cd tmp
  unzip "$z"
echo "Looking for *.$1"
  echo $(ls ./*.$1 2>/dev/null | wc -w)
  files=( ./*.$1 )
  if (( $(ls ./*.$1 2>/dev/null | wc -w) )); then
    echo "files do exist $y"
if [ ! -f "${z%.zip}.$1" ]; then
    mv *.$1 "${z%.zip}.$1"
  fi
mv *.$1 ../
      TF="${z%.zip}.$1"
    OF="${z}"
    NF="${TF}"
if [ -f ../${2} ]; then
    echo "replace $OF with $NF"
    xmlstarlet ed --inplace -u \
      "//gameList/game[path=\"./${OF}\"]/path" -v \
      "./$NF" ../${2}
    #../gamelist.xml
  fi
        mv ../"$z" ../done/
  fi
cd ..
  rm -r tmp
#break
done
¿Qué hace el script? Bueno, realiza los siguientes pasos.

  • Crea una carpeta tmp en el directorio local.
  • Copia el siguiente archivo ZIP en la carpeta tmp.
  • Expande el archivo ZIP.
  • Si se encuentra un archivo coincidente con extensión, cambia el nombre del archivo resultante con el mismo nombre que el archivo ZIP pero con la extensión actual.
  • Mueve el archivo resultante al directorio ROM principal.
  • Reemplaza la entrada en gamelist.xml por la nueva extensión, es decir, no zip.
  • Si se procesa, mueve el archivo ZIP a la carpeta completa.
  • Elimina el directorio tmp.
  • Repite los procesos anteriores, hasta que se getionen todos los archivos.

Uso

Puedes ejecutar el script en una tarjeta SD, a través de SSH, o en una tarjeta SD montada en tu dispositivo ODROID-GO. Utiliza una buena cantidad de operación del sistema de archivos para completar la limpieza de un conjunto de ROM. En general, recomendaría no hacerlo directamente en una tarjeta SD debido a la cantidad de operaciones, aunque en realidad he limpiado 30 ROM con él, directamente en una tarjeta montada, sin problemas. Cuando lo estés ejecutando en grandes conjuntos de ROMs, habrás dejado archivos ZIP en el directorio que estás procesando. Algunos archivos ZIP se procesarán y se moverán a la carpeta completa. Esto significa que los archivos comprimidos que sobran tienen contenido con una extensión de archivo diferente. Veamos los comandos utilizados en un ejemplo. AVISO: El script está diseñado para ejecutarse con archivos XML basados en RecallBox. Si está utilizando un formato XML diferente, tendrá que editar la línea donde se llama xmlstarlet y configurar una estructura diferente para que coincida con tu archivo XML. Primero, nos aseguraremos de que podamos ejecutar el script.

$ sudo chmod +x ./clean_unzip
A continuación, ejecutaremos el script y apuntaremos a la extensión del archivo. Usamos Sega Mega Drive como ejemplo.
$ sudo ./clean_unzip bin gamelist.xml
Tendremos algunos archivos ZIP que nos sobran. Abramos uno. Resulta que el contenido tiene una extensión smd. Ejecutemos el script en los archivos ZIP restantes.
$ sudo ./clean_unzip smd gamelist.xml
Es posible que debas ejecutar el comando varias veces para manejar las extensiones de archivo restantes en un conjunto de ROM especifico. El script funcionará con los archivos ZIP restantes, por lo que realmente no es tan malo. Con unas pocas llamadas podemos limpiar cualquier conjunto de ROM. A continuación, se muestran algunas fotos del antes y después para que te hagas una idea de lo que hace el script.

Figura 01 - Antes: observa el "zip" en la entrada del nombre del archivo

Figura 02 - Después: observa que el nombre del archivo ha cambiado

Aquí tienes la vista del directorio en sí.

Figura 03 - Antes: archivos ZIP y ningún directorio "done"

Figura 04 - Después: ROM descomprimidas y una carpeta "done" que contiene los archivos zip completados

Terminando

Esto nos lleva al final este tutorial. Una forma rápida que debería serte de gran utilidad si necesita descomprimir un conjunto de ROM que tenga archivos multimedia asignados a la copia comprimida de tu ROM. Este script es ideal para ajustar las ROMs comprimidas y poder usarlas con dispositivos portátiles donde tal vez no desee utilizar los ciclos de CPU adicionales para expandir el archivo del juego. Para comentarios, preguntas y sugerencias, visita el artículo original en  http://middlemind.net/tutorials/odroid_go/oga_rl_dc_build.html.

Be the first to comment

Leave a Reply