What EA Huffman isQué es EA Huffman
EA Huffman is a compression algorithm created by Frank Barchard for Electronic Arts tools and libraries. In Mega Drive ROMs, this family is tracked through FB-suffixed method markers such as 30FBh, 32FBh, and 34FBh.EA Huffman es un algoritmo de compresión creado por Frank Barchard para herramientas y librerías de Electronic Arts. En ROMs de Mega Drive, esta familia se identifica mediante marcadores de método con sufijo FB como 30FBh, 32FBh y 34FBh.
Unlike RefPack, EA Huffman is not built around LZ back-references. It is bit-level coding: the compressed stream represents symbols through a Huffman tree or table, and the decoder reconstructs bytes by reading variable-length bit patterns.A diferencia de RefPack, EA Huffman no se basa en referencias hacia atrás de estilo LZ. Es una codificación a nivel de bits: el flujo comprimido representa símbolos mediante un árbol o tabla Huffman, y el decodificador reconstruye bytes leyendo patrones de bits de longitud variable.
Method markersMarcadores de método
The marker chooses the Huffman-family path. The shared FB suffix links these identifiers to the same EA compression lineage, but the byte before it selects whether the block is plain Huffman or a filtered variant.El marcador elige la ruta de la familia Huffman. El sufijo FB compartido vincula estos identificadores con la misma línea de compresión EA, pero el byte anterior selecciona si el bloque es Huffman simple o una variante con filtro.
30 FB .... Huffman table or tree data .... coded bits
32 FB .... Huffman stream plus one reconstruction filter
34 FB .... Huffman stream plus two reconstruction filters30 FB .... tabla o árbol Huffman .... bits codificados
32 FB .... flujo Huffman más un filtro de reconstrucción
34 FB .... flujo Huffman más dos filtros de reconstrucción| ID | MethodMétodo | Reverse engineering noteNota de ingeniería inversa |
|---|---|---|
| 30FBh | EA Huffman | Huffman-coded bitstream. Rebuild the tree/table used by the game before interpreting payload bits.Bitstream codificado con Huffman. Reconstruye el árbol o tabla que usa el juego antes de interpretar los bits del payload. |
| 32FBh | EA Huffman with filterEA Huffman con filtro | Decode the Huffman stream first, then apply the post-decode filter expected by the asset format.Decodifica primero el flujo Huffman y después aplica el filtro posterior que espera el formato del recurso. |
| 34FBh | EA Huffman with dual filterEA Huffman con doble filtro | Huffman data plus two reconstruction/filter stages. Validate against a known decompressed asset.Datos Huffman más dos etapas de reconstrucción o filtro. Valídalo contra un recurso descomprimido conocido. |
Integrated game decoderEl decodificador integrado en el juego
Many Electronic Arts Mega Drive / Genesis games include a generic 68000 decompression dispatcher. It reads the XX FB signature, places the method byte in D3, verifies FB, masks the low flag bit, and branches to the decoder selected by the normalized method.Muchos juegos de Electronic Arts para Mega Drive / Genesis incluyen un despachador genérico de descompresión en 68000. Lee la firma XX FB, coloca el byte de método en D3, verifica FB, enmascara el bit bajo usado como flag y salta al decodificador seleccionado por el método normalizado.
move.b (a0)+,d3
cmpi.b #$FB,(a0)+
bne error_or_exit
btst #0,d3
beq continue_decode
addq.w #3,a0
continue_decode:
andi.b #$FE,d3move.b (a0)+,d3
cmpi.b #$FB,(a0)+
bne error_o_salida
btst #0,d3
beq continuar
addq.w #3,a0
continuar:
andi.b #$FE,d3For EA Huffman, the relevant normalized method values are 30 FB, 32 FB, and 34 FB. Values such as 31 FB, 33 FB, or 35 FB use the same base IDs after the flag bit is cleared, but include the additional header extension.Para EA Huffman, los valores de método normalizados relevantes son 30 FB, 32 FB y 34 FB. Valores como 31 FB, 33 FB o 35 FB usan los mismos IDs base después de limpiar el bit de flag, pero incluyen la extensión adicional de cabecera.
10 FB -> RefPack
30 FB -> EA Huffman
32 FB -> EA Huffman
34 FB -> EA Huffman
46 FB -> EA BPE
6E FB -> uncompressed data, ASCII 'n'
72 FB -> differential coding, ASCII 'r'
7A FB -> RLE, ASCII 'z'10 FB -> RefPack
30 FB -> EA Huffman
32 FB -> EA Huffman
34 FB -> EA Huffman
46 FB -> EA BPE
6E FB -> datos sin comprimir, ASCII 'n'
72 FB -> codificación diferencial, ASCII 'r'
7A FB -> RLE, ASCII 'z'Compressed file structureEstructura del archivo comprimido
The EA Huffman block is normally part of a broader resource entry. The loader can use the total file size and the high-bit-marked file name to locate the entry, then pass the packed file data to the dispatcher. Inside that data, the compression header begins with 30 FB, 32 FB, or 34 FB, followed by the decompressed size and method-specific Huffman data.El bloque EA Huffman normalmente forma parte de una entrada de recurso más amplia. El loader puede usar el tamaño total del archivo y el nombre marcado con bit alto para localizar la entrada, y después pasar los datos empaquetados al despachador. Dentro de esos datos, la cabecera de compresión empieza con 30 FB, 32 FB o 34 FB, seguida del tamaño descomprimido y los datos Huffman específicos del método.
Resource container entry
- Total entry size
Covers the complete packed file record, including loader metadata,
the name field, the compression header, and the compressed payload.
- Resource name
Stored with its high bit set so the game loader can find this entry
in the resource table or package.
- Packed file data
The byte range handed to the decompression dispatcher.
Compression header
- Method signature: XX FB
- Decompressed size: expected output length
- Method payload: data interpreted by the selected decoderEntrada del contenedor de recursos
- Tamaño total de la entrada
Cubre el registro empaquetado completo, incluyendo metadatos del loader,
el campo de nombre, la cabecera de compresión y el payload comprimido.
- Nombre del recurso
Guardado con el bit alto activado para que el loader pueda encontrar esta
entrada en la tabla o paquete de recursos.
- Datos del archivo empaquetado
Rango de bytes entregado al despachador de descompresión.
Cabecera de compresión
- Firma de método: XX FB
- Tamaño descomprimido: longitud de salida esperada
- Payload del método: datos interpretados por el decodificador seleccionadoFor 30FBh, the payload is the Huffman table or tree data plus the coded bitstream. For 32FBh and 34FBh, the payload also has to support the reconstruction or filter stage that runs after the bit-level Huffman decode.En 30FBh, el payload contiene la tabla o árbol Huffman más el bitstream codificado. En 32FBh y 34FBh, el payload también debe alimentar la etapa de reconstrucción o filtro que se ejecuta después de la decodificación Huffman a nivel de bits.
Filtered variantsVariantes con filtro
The 32FBh and 34FBh variants should be treated as Huffman streams with extra reconstruction work after the bit decode. First recover the Huffman output, then apply the filter stage expected by that asset and game.Las variantes 32FBh y 34FBh deben tratarse como flujos Huffman con trabajo extra de reconstrucción después de decodificar los bits. Primero recupera la salida Huffman y después aplica la etapa de filtro que esperan ese recurso y ese juego.
Confirmed Sega Mega Drive gamesJuegos de Sega Mega Drive confirmados
The following Sega Mega Drive / Genesis titles are confirmed by your 68KRevival research as using EA Huffman compression. This list is intentionally conservative and can be expanded as more Electronic Arts ROMs are checked.Los siguientes títulos de Sega Mega Drive / Genesis están confirmados por tu investigación de 68KRevival como usuarios de compresión EA Huffman. La lista es deliberadamente conservadora y puede ampliarse a medida que se comprueben más ROMs de Electronic Arts.
| GameJuego | PlatformPlataforma | StatusEstado |
|---|---|---|
| FIFA International Soccer | Sega Mega Drive / Genesis | ConfirmedConfirmado |
| FIFA Soccer 95 | Sega Mega Drive / Genesis | ConfirmedConfirmado |
| FIFA Soccer 96 | Sega Mega Drive / Genesis | ConfirmedConfirmado |
| FIFA 97 | Sega Mega Drive / Genesis | ConfirmedConfirmado |
| FIFA 98: Road to the World Cup | Sega Mega Drive / Genesis | ConfirmedConfirmado |
| NBA Live 95 | Sega Mega Drive / Genesis | ConfirmedConfirmado |
| NBA Live 96 | Sega Mega Drive / Genesis | ConfirmedConfirmado |
| NBA Live 97 | Sega Mega Drive / Genesis | ConfirmedConfirmado |
| NBA Live 98 | Sega Mega Drive / Genesis | ConfirmedConfirmado |
Reverse engineering workflowFlujo de ingeniería inversa
- Search for 30 FB, 32 FB, and 34 FB in the ROM.Busca 30 FB, 32 FB y 34 FB en la ROM.
- Follow pointer tables or dispatcher code to confirm which offsets are real compressed blocks.Sigue tablas de punteros o código del despachador para confirmar qué offsets son bloques comprimidos reales.
- Locate the Huffman table or tree data, then confirm bit order and stream termination rules.Localiza la tabla o árbol Huffman y después confirma el orden de bits y las reglas de terminación del flujo.
- Decode to an exact byte count and compare the result against the expected graphics, table, map, or intermediate asset format.Decodifica hasta un conteo exacto de bytes y compara el resultado contra el formato esperado de gráficos, tabla, mapa o recurso intermedio.
- For filtered variants, validate both the Huffman decode and the filter stage separately before recompressing.En variantes con filtro, valida por separado la decodificación Huffman y la etapa de filtro antes de recomprimir.
Open researchInvestigación abierta
More Electronic Arts Mega Drive games probably use this algorithm. As you confirm additional titles, add the title, ROM revision or region, method marker, offset, and the decoded asset type so the list remains useful for tooling and future reverse engineering.Es probable que más juegos de Electronic Arts para Mega Drive usen este algoritmo. Cuando confirmes títulos adicionales, conviene añadir el título, revisión o región de ROM, marcador de método, offset y tipo de recurso decodificado para que la lista siga siendo útil para herramientas e ingeniería inversa futura.