Technical articleArtículo técnico

EA Huffman CompressionCompresión EA Huffman

How Frank Barchard's EA Huffman compression works, how to recognize 30FBh, 32FBh, and 34FBh streams, and which Mega Drive games are confirmed so far.Cómo funciona la compresión EA Huffman de Frank Barchard, cómo reconocer flujos 30FBh, 32FBh y 34FBh, y qué juegos de Mega Drive están confirmados por ahora.

PublishedPublicado

August 27, 202627 de agosto de 2026

UpdatedActualizado

August 29, 202629 de agosto de 2026

DifficultyDificultad

AdvancedAvanzado

Reading timeTiempo de lectura

20 min read20 min de lectura

What is EA Huffman?Qué es EA Huffman

EA Huffman is Electronic Arts' Huffman-based compression implementation created by Frank Barchard for EA tools and games. It is based on Huffman coding, but the method identifiers, wrappers, resource layout, and game decoder behavior belong to Electronic Arts' own implementation.EA Huffman es la implementación de compresión basada en Huffman creada por Frank Barchard para herramientas y juegos de Electronic Arts. Está basada en la codificación Huffman, pero los identificadores de método, envoltorios, estructura de recursos y comportamiento del decodificador pertenecen a la implementación propia de Electronic Arts.

ContextContextoValueValor
CreatorCreadorFrank Barchard
Based onBasado enHuffman codingcodificación Huffman
Used byUsado porElectronic Arts

In Mega Drive ROM hacking, the family is usually encountered through EA method identifiers such as 30FBh, 32FBh, and 34FBh. Those identifiers are dispatch information inside the EA resource architecture. They are not the definition of Huffman coding itself.En romhacking de Mega Drive, esta familia suele aparecer mediante identificadores de método EA como 30FBh, 32FBh y 34FBh. Esos identificadores son información de despacho dentro de la arquitectura de recursos EA. No son la definición de la codificación Huffman en sí.

Origin and attributionOrigen y atribución

The historical relationship is simple: David A. Huffman developed the underlying Huffman coding technique. Frank Barchard created the Electronic Arts implementation documented here.La relación histórica es sencilla: David A. Huffman desarrolló la técnica de codificación Huffman subyacente. Frank Barchard creó la implementación de Electronic Arts documentada aquí.

Attribution chain
David A. Huffman
      -> Huffman coding
      -> Frank Barchard
      -> EA Huffman
      -> Electronic Arts tools and games
Cadena de atribución
David A. Huffman
      -> codificación Huffman
      -> Frank Barchard
      -> EA Huffman
      -> herramientas y juegos de Electronic Arts

Huffman coding vs. EA HuffmanHuffman coding frente a EA Huffman

Huffman coding is a general entropy-coding technique. More frequent symbols receive shorter bit codes, while less frequent symbols receive longer bit codes. EA Huffman is a specific implementation of that principle inside Electronic Arts resource systems.La codificación Huffman es una técnica general de codificación entrópica. Los símbolos más frecuentes reciben códigos de bits más cortos, mientras que los menos frecuentes reciben códigos más largos. EA Huffman es una implementación concreta de ese principio dentro de sistemas de recursos de Electronic Arts.

ConceptConceptoMeaningSignificado
Compression principlePrincipio de compresiónHuffman coding assigns shorter variable-length bit codes to more frequent symbols and longer codes to less frequent symbols.La codificación Huffman asigna códigos de bits de longitud variable más cortos a símbolos frecuentes y códigos más largos a símbolos menos frecuentes.
Specific implementationImplementación concretaEA Huffman is Electronic Arts' implementation of that idea inside its own resource architecture and game decoders.EA Huffman es la implementación de Electronic Arts de esa idea dentro de su propia arquitectura de recursos y decodificadores de juego.
EA wrapperEnvoltorio EA30FBh, 32FBh, and 34FBh are EA method identifiers used to route resources. They are not universal Huffman signatures.30FBh, 32FBh y 34FBh son identificadores de método EA usados para enrutar recursos. No son firmas universales de Huffman.

Simplified Huffman exampleEjemplo Huffman simplificado

This is a simplified educational example, not an actual Electronic Arts stream. It only shows why variable-length codes can represent common symbols compactly.Este es un ejemplo educativo simplificado, no un flujo real de Electronic Arts. Solo muestra por qué los códigos de longitud variable pueden representar símbolos frecuentes de forma compacta.

Conceptual example
Simplified Huffman example

Symbol frequencies:
A = very common
B = common
C = less common
D = rare

Possible codes:
A = 0
B = 10
C = 110
D = 111

Bitstream:
0 10 0 111

Decoded symbols:
A B A D
Ejemplo conceptual
Ejemplo Huffman simplificado

Frecuencia de símbolos:
A = muy común
B = común
C = menos común
D = raro

Códigos posibles:
A = 0
B = 10
C = 110
D = 111

Bitstream:
0 10 0 111

Símbolos decodificados:
A B A D

Bit-level representationRepresentación a nivel de bits

Huffman codes are variable-length bit sequences. That matters in reverse engineering because compressed data cannot always be read as independent bytes. The decoder consumes bits, walks or indexes the Huffman representation, and emits symbols only when a complete code has been recognized.Los códigos Huffman son secuencias de bits de longitud variable. Esto importa en ingeniería inversa porque los datos comprimidos no siempre pueden leerse como bytes independientes. El decodificador consume bits, recorre o consulta la representación Huffman y emite símbolos solo cuando reconoce un código completo.

Bit-level view
Byte boundaries are not symbol boundaries:

bits:   0 10 110 111 0
codes:  A B  C   D   A

The decoder consumes bits according to the Huffman representation,
not as fixed 8-bit values.
Vista a nivel de bits
Los límites de byte no son límites de símbolo:

bits:    0 10 110 111 0
códigos: A B  C   D   A

El decodificador consume bits según la representación Huffman,
no como valores fijos de 8 bits.

EA method identifiers: 30FBh / 32FBh / 34FBhIdentificadores EA: 30FBh / 32FBh / 34FBh

The relevant EA Huffman methods are 30FBh, 32FBh, and 34FBh. They identify EA Huffman-family paths inside EA's resource architecture. They should not be treated as universal signatures for Huffman compression in unrelated formats.Los métodos relevantes de EA Huffman son 30FBh, 32FBh y 34FBh. Identifican rutas de la familia EA Huffman dentro de la arquitectura de recursos de EA. No deben tratarse como firmas universales de compresión Huffman en formatos no relacionados.

Identifier relationship
Huffman coding
      -> EA Huffman implementation
      -> EA resource architecture
      -> 30FBh / 32FBh / 34FBh
Relación de identificadores
Codificación Huffman
      -> Implementación EA Huffman
      -> Arquitectura de recursos EA
      -> 30FBh / 32FBh / 34FBh
Method identifierIdentificador de métodoEA Huffman pathRuta EA HuffmanTechnical noteNota técnica
30FBhBasic EA Huffman pathRuta EA Huffman básicaTreat as a Huffman-coded resource method. Locate the representation used by the game, then decode the variable-length bitstream to the expected output length.Trátalo como un método de recurso codificado con Huffman. Localiza la representación usada por el juego y decodifica el bitstream de longitud variable hasta la longitud de salida esperada.
32FBhEA Huffman with reconstruction / filterEA Huffman con reconstrucción / filtroWhere verified, this variant requires an additional reconstruction or filter stage after Huffman decoding. Document the exact behavior per game and resource.Cuando está verificado, esta variante requiere una etapa adicional de reconstrucción o filtro después de la decodificación Huffman. Documenta el comportamiento exacto por juego y recurso.
34FBhEA Huffman with additional reconstructionEA Huffman con reconstrucción adicionalKnown as part of the EA Huffman family, but the extra reconstruction behavior must be verified against the specific asset. Do not assume it matches 32FBh.Forma parte de la familia EA Huffman, pero el comportamiento extra de reconstrucción debe verificarse contra el recurso concreto. No asumas que coincide con 32FBh.
EA Huffman method signatures
30 FB  -> EA Huffman
32 FB  -> EA Huffman with reconstruction / filter
34 FB  -> EA Huffman with additional reconstruction / filter processing
Firmas de método EA Huffman
30 FB  -> EA Huffman
32 FB  -> EA Huffman con reconstrucción / filtro
34 FB  -> EA Huffman con procesamiento adicional de reconstrucción / filtro

EA Huffman resource structureEstructura del recurso EA Huffman

An EA Huffman block is usually one layer inside a broader resource entry. The resource system locates the packed entry and dispatches by method identifier; the Huffman layer then interprets the representation and encoded bitstream. Filtered variants may still need post-decompression reconstruction.Un bloque EA Huffman suele ser una capa dentro de una entrada de recurso más amplia. El sistema de recursos localiza la entrada empaquetada y despacha según el identificador de método; la capa Huffman interpreta después la representación y el bitstream codificado. Las variantes con filtro pueden requerir reconstrucción posterior a la descompresión.

Layered structure
EA Resource Architecture
        -> Method Identifier
        -> EA Huffman Resource
        -> Huffman Representation / Table
        -> Encoded Bitstream
        -> Huffman Decoding
        -> Optional Reconstruction Stage
        -> Final Output
Estructura por capas
Arquitectura de recursos EA
        -> Identificador de método
        -> Recurso EA Huffman
        -> Representación / tabla Huffman
        -> Bitstream codificado
        -> Decodificación Huffman
        -> Etapa opcional de reconstrucción
        -> Salida final
LayerCapaBelongs toPertenece aRoleFunción
Resource entry and method identifierEntrada de recurso e identificador de métodoElectronic Arts resource architectureArquitectura de recursos de Electronic ArtsLocates the packed resource and routes it to the EA Huffman decoder path.Localiza el recurso empaquetado y lo dirige a la ruta del decodificador EA Huffman.
Symbols, codes, table/tree, bitstreamSímbolos, códigos, tabla/árbol, bitstreamHuffman compression processProceso de compresión HuffmanDefines how variable-length bit sequences become output symbols.Define cómo las secuencias de bits de longitud variable se convierten en símbolos de salida.
Reconstruction / filterReconstrucción / filtroPost-decompression processingProcesamiento posterior a la descompresiónTransforms intermediate Huffman output into the final asset for filtered variants.Transforma la salida Huffman intermedia en el recurso final en variantes con filtro.

Huffman representationRepresentación Huffman

The decoder needs a representation that maps bit sequences to output symbols. Conceptually this can be understood as a tree or table of prefix-free codes: no valid code is the prefix of another valid code, so the decoder can know when one symbol ends and the next begins.El decodificador necesita una representación que relacione secuencias de bits con símbolos de salida. Conceptualmente puede entenderse como un árbol o tabla de códigos libres de prefijo: ningún código válido es prefijo de otro código válido, así que el decodificador puede saber cuándo termina un símbolo y empieza el siguiente.

Reconstruction and filtered variantsReconstrucción y variantes con filtro

For 32FBh and 34FBh, successful Huffman decoding may not immediately produce the final graphical resource. The Huffman stage can output intermediate data that still has to pass through a reconstruction or filter step before it becomes the asset used by the game.En 32FBh y 34FBh, una decodificación Huffman correcta puede no producir inmediatamente el recurso gráfico final. La etapa Huffman puede generar datos intermedios que todavía deben pasar por un paso de reconstrucción o filtro antes de convertirse en el recurso usado por el juego.

Filtered variant flow
30FBh
Compressed Huffman Data
        -> Huffman Decoder
        -> Output Resource

32FBh
Compressed Huffman Data
        -> Huffman Decoder
        -> Reconstruction / Filter
        -> Final Resource

34FBh
Compressed Huffman Data
        -> Huffman Decoder
        -> Additional Reconstruction / Filter Processing
        -> Final Resource
Flujo de variantes con filtro
30FBh
Datos Huffman comprimidos
        -> Decodificador Huffman
        -> Recurso de salida

32FBh
Datos Huffman comprimidos
        -> Decodificador Huffman
        -> Reconstrucción / filtro
        -> Recurso final

34FBh
Datos Huffman comprimidos
        -> Decodificador Huffman
        -> Procesamiento adicional de reconstrucción / filtro
        -> Recurso final

Identifying EA Huffman in a ROMIdentificar EA Huffman en una ROM

30FBh, 32FBh, and 34FBh are useful indicators inside an EA resource system, but isolated byte matches are weak evidence. A stronger confirmation follows the resource reference, loader, dispatcher, decoder path, expected output length, and any reconstruction stage.30FBh, 32FBh y 34FBh son indicadores útiles dentro de un sistema de recursos EA, pero coincidencias aisladas de bytes son una evidencia débil. Una confirmación más fuerte sigue la referencia del recurso, cargador, despachador, ruta del decodificador, longitud de salida esperada y cualquier etapa de reconstrucción.

Reverse engineering relationship
Resource reference
        -> EA resource loader
        -> 30FBh / 32FBh / 34FBh
        -> EA Huffman decoder
        -> Optional reconstruction
        -> Expected output
Relación de ingeniería inversa
Referencia del recurso
        -> Cargador de recursos EA
        -> 30FBh / 32FBh / 34FBh
        -> Decodificador EA Huffman
        -> Reconstrucción opcional
        -> Salida esperada

Recompression considerationsConsideraciones de recompresión

Decompression is only part of the ROM-hacking problem. Recompressing EA Huffman data may require symbol frequencies, the correct Huffman representation, variable-length bit packing, EA resource headers, the right method identifier, final compressed size, resource boundaries, pointer relocation, alignment, filter compatibility, and the expectations of the original decoder.La descompresión es solo una parte del problema de romhacking. Recomprimir datos EA Huffman puede requerir frecuencias de símbolos, la representación Huffman correcta, empaquetado de bits de longitud variable, cabeceras de recursos EA, el identificador de método correcto, tamaño comprimido final, límites del recurso, reubicación de punteros, alineación, compatibilidad con filtros y las expectativas del decodificador original.

A regenerated compressed stream does not need to be byte-identical to the original. The essential requirement is that the original game can decode and reconstruct the intended resource correctly.Un flujo comprimido regenerado no necesita ser idéntico byte a byte al original. Lo esencial es que el juego original pueda decodificar y reconstruir correctamente el recurso previsto.

Games using EA HuffmanJuegos que usan EA Huffman

The following Mega Drive / Genesis titles are tracked by 68K Revival research as EA Huffman users. Methods, usage, and examples stay conservative: when a method or extracted resource has not been documented yet, the table says so instead of guessing.Los siguientes títulos de Mega Drive / Genesis están registrados por la investigación de 68K Revival como usuarios de EA Huffman. Métodos, usos y ejemplos se mantienen de forma conservadora: cuando un método o recurso extraído aún no se ha documentado, la tabla lo indica en vez de adivinar.

GameJuegoEA Huffman methodMétodo EA HuffmanConfirmed usageUso confirmadoExampleEjemplo
FIFA International Soccer30FBh and 34FBh identified30FBh y 34FBh identificadosGraphics and interface resourcesgráficos y recursos de interfaz
View extracted resourceVer recurso extraído
Extracted Ron Barr portrait graphic from FIFA International Soccer EA Huffman data
ResourceRecurso
ronbarr.qgf
ROM OffsetOffset ROM
0x0A4A2C
CompressionCompresión
30FB EA Huffman
Extracted outputSalida extraída
out0x4AA.raw
ContentContenido
Ron Barr portrait graphicgráfico del retrato de Ron Barr
Used inUsado en
Ron Barr portrait on the pre-match team analysis / match presentation screenretrato de Ron Barr en la pantalla de análisis de equipos previa al partido / presentación del partido
FIFA Soccer 9530FBhOpening screen logo graphicsgráficos del logo de la pantalla de inicio
View extracted resourceVer recurso extraído
Extracted FIFA Soccer 95 opening logo graphic from EA Huffman data
ResourceRecurso
fesoccer.qcf
ROM OffsetOffset ROM
0x107C76
CompressionCompresión
30FB EA Huffman
Extracted outputSalida extraída
out0x267C.raw
ContentContenido
FIFA Soccer 95 opening logo graphicgráfico del logo inicial de FIFA Soccer 95
Used inUsado en
FIFA Soccer 95 start screenpantalla de inicio de FIFA Soccer 95
FIFA Soccer 9630FBhMenu background graphicsgráficos de fondo de menú
View extracted resourceVer recurso extraído
Extracted FIFA Soccer 96 menu background graphic from EA Huffman data
ResourceRecurso
unnamed resourcerecurso sin nombre
ROM OffsetOffset ROM
0x12739A
CompressionCompresión
30FB EA Huffman
Extracted outputSalida extraída
out0x35E2.raw
ContentContenido
menu background graphicgráfico de fondo de menú
Used inUsado en
FIFA Soccer 96 menu backgroundfondo de menú de FIFA Soccer 96
FIFA 9730FBhPresentation logo graphicsgráficos del logo de presentación
View extracted resourceVer recurso extraído
Extracted FIFA 97 Gold Edition presentation logo graphic from EA Huffman data
ResourceRecurso
unnamed resourcerecurso sin nombre
ROM OffsetOffset ROM
0x12B816
CompressionCompresión
30FB EA Huffman
Extracted outputSalida extraída
out0x1BE4.raw
ContentContenido
FIFA 97 Gold Edition presentation logologo de presentación de FIFA 97 Gold Edition
Used inUsado en
presentation screen with the FIFA 97 Gold Edition logopantalla de presentación con el logo de FIFA 97 Gold Edition
FIFA 98: Road to the World CupNot yet documentedAún no documentadoNot yet documentedAún no documentadoNot yet documentedAún no documentado
NBA Live 95Not yet documentedAún no documentadoNot yet documentedAún no documentadoNot yet documentedAún no documentado
NBA Live 96Not yet documentedAún no documentadoNot yet documentedAún no documentadoNot yet documentedAún no documentado
NBA Live 9730FBhGameplay court graphicsgráficos de la cancha durante el juego
View extracted resourceVer recurso extraído
Extracted NBA Live 97 gameplay court graphic from EA Huffman data
ResourceRecurso
unnamed resourcerecurso sin nombre
ROM OffsetOffset ROM
0x08E94E
CompressionCompresión
30FB EA Huffman
Extracted outputSalida extraída
out0x8D82.raw
ContentContenido
in-game basketball court graphicgráfico de la cancha de baloncesto del juego
Used inUsado en
gameplay court / main match court backgroundcancha de juego / fondo principal del partido
NBA Live 98Not yet documentedAún no documentadoNot yet documentedAún no documentadoNot yet documentedAún no documentado

Common pitfallsErrores habituales

Common mistakeError habitual
Confusing generic Huffman coding with EA Huffman.Confundir la codificación Huffman genérica con EA Huffman.
Attributing Huffman coding itself to Frank Barchard.Atribuir la codificación Huffman en sí a Frank Barchard.
Treating 30FBh as a universal Huffman signature.Tratar 30FBh como una firma Huffman universal.
Assuming Huffman data is made of independent byte values instead of bit-level codes.Asumir que los datos Huffman están formados por bytes independientes en vez de códigos a nivel de bits.
Ignoring the table or tree representation required by the decoder.Ignorar la representación de tabla o árbol que necesita el decodificador.
Confusing the EA resource wrapper with the Huffman stream.Confundir el envoltorio de recursos EA con el flujo Huffman.
Assuming 30FBh, 32FBh, and 34FBh behave identically.Asumir que 30FBh, 32FBh y 34FBh se comportan igual.
Assuming filtered Huffman output is already the final graphical resource.Asumir que la salida Huffman filtrada ya es el recurso gráfico final.
Assuming every Electronic Arts game uses the same variant.Asumir que todos los juegos de Electronic Arts usan la misma variante.