Algunas utilidades para ROMs...

Cuestiones en general sobre tecnología e informática que no tengan cabida en el resto de foros.
Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 2838
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 52 veces
Gracias recibidas: 233 veces
Contactar:

Algunas utilidades para ROMs...

Mensajepor zup » 31 May 2020, 12:49

Bueno, aquí va el producto de mis aventuras con C estas dos semanas. Son una serie de utilidades para hacer algunas operaciones con ficheros (especialmente ROMs). Entre ellas tenemos:

  • Para manipular el tamaño: pad_file, remove_header, remove_tail, cut_file, split_file y make_fill
  • Para manipular el orden de bytes: join_oddeven, split_oddeven y swap_oddeven.
  • Comprobar el contenido: is_rep.
  • (De)codificar ficheros: xorfiles, bit_scramble, bit_invert, addr_scramble, addr_invert.

Algunas operaciones se pueden hacer en Linux con dd y otras herramientas seguro que existen (pero no encuentro cómo buscarlas)... pero estas son mis cutreversiones para ejecutar desde línea de comandos y/o scripts. Algunos ejemplos/sugerencias de uso:

Descodificar las ROMs del Amiga Forever:

Código: Seleccionar todo

@echo off
for %%z in (*.rom) do remove_header 11 %%z %%z.noheader
for %%z in (*.noheader) do xorfiles rom.key %%z %%z.decrypt
del *.noheader


(Curiosidad: las versiones viejas de Amiga Forever incluyen rom.key, las nuevas parece que no)

Crear una imagen de discquete vacío (por ejemplo, para Virtualbox):

Código: Seleccionar todo

make_fill disco.img 1440k 0


Comprobar si hay ficheros vacíos, llenos de ceros o 255 en un directorio (posiblemente ROMs inválidas):

Código: Seleccionar todo

@echo off
del resultado.temporal
dir /s /a /b /l %1 > listado.temporal
for /f "delims=" %%z in (listado.temporal) do is_rep "%%z" 255 >> resultado.temporal
type resultado.temporal | find "V:" > resultado.txt
type resultado.temporal | find "0:" >> resultado.txt
type resultado.temporal | find "I:" >> resultado.txt
del resultado.temporal
del listado.temporal
type resultado.txt


Intercambiar los bits 3 y 4 de una ROM (la ROM del Ramjet tiene estos bits intercambiados):

Código: Seleccionar todo

bit_scramble 76534210 ramjet2.rom ramjet2u.rom


Intercambiar los bytes pares e impares de una ROM (ambas alternativas funcionan):

Código: Seleccionar todo

swap_oddeven bios.rom bios.swapped

Código: Seleccionar todo

addr_invert ===============i rom.bios rom.swapped


El código es bastante cutre, pero al menos funciona sin errores (conocidos). La página web correspondiente es esta:

https://blogmeas.wordpress.com/2020/05/ ... para-roms/
Última edición por zup el 16 Jun 2020, 10:18, editado 1 vez en total.
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!

Avatar de Usuario
explorer
MSX Turbo R
MSX Turbo R
Mensajes: 307
Registrado: 11 May 2014, 17:10
Sistema Favorito: Atari ST
primer_sistema: Atari 800XL/600XL
consola_favorita: Atari 2600
Primera consola: Atari 2600
Ubicación: Valladolid, España
Gracias recibidas: 75 veces
Contactar:

Re: Algunas utilidades para ROMs...

Mensajepor explorer » 31 May 2020, 17:54

Un detalle minúsculo.

No es lo mismo 2 GB (2 gigabytes, 2 000 000 000 bytes) que 2 GiB ( 2 gibibytes, 2 147 483 648 bytes).

En los Linux, desde hace ya tiempo, se pueden usar las herramientas más comunes para trabajar con los dos sistemas de unidades. Por ejemplo, el comando

Código: Seleccionar todo

ls -ltr -h

devuelve el listado del directorio actual, en modo largo ordenado por fecha en orden inversa, mostrando el tamaño de los archivos con unidades en formato 2^x, mientras que

Código: Seleccionar todo

ls -ltr -h --si

devuelve el mismo listado con los tamaños en formato 10^x.

Otras herramientas ya muestran las unidades correctas, como 'GB' o 'GiB', y así sabes a que sistema se refieren. Otras, en cambio, es un poco más problemático porque intentan mantener la compatibilidad con lo hecho antes. En el ejemplo anterior del comando ls, verás que las unidades salen en mayúscula cuando se refieren al formato 2^x, mientras que salen en minúscula con el formato 10^x.

Avatar de Usuario
zup
Amiga 2500
Amiga 2500
Mensajes: 2838
Registrado: 04 Sep 2009, 20:07
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Nintendo DS/3DS
Primera consola: Nintendo GameBoy
Ubicación: Navarra
Gracias dadas: 52 veces
Gracias recibidas: 233 veces
Contactar:

Re: Algunas utilidades para ROMs...

Mensajepor zup » 16 Jun 2020, 10:22

Actualizo las utilidades. Ahora he incluído algunas para manipular las líneas de direcciones y datos de una ROM (me ha surgido la necesidad para echar un ojo a la ROM del Ramjet).
I have traveled across the universe and through the years to find Her. Sometimes going all the way is just a start.
Además vendo cosas!


Volver a “Tecnología e informática”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado