Technical articleArtículo técnico

RefPack CompressionCompresión RefPack

How RefPack compression uses literal runs, back-references, command streams, and EA 10FBh method markers in Mega Drive resources.Cómo la compresión RefPack usa secuencias literales, referencias hacia atrás, flujos de comandos y marcadores de método EA 10FBh en recursos de Mega Drive.

PublishedPublicado

August 24, 202624 de agosto de 2026

UpdatedActualizado

August 29, 202629 de agosto de 2026

DifficultyDificultad

AdvancedAvanzado

Reading timeTiempo de lectura

16 min read16 min de lectura

What is RefPack?Qué es RefPack

RefPack is an LZ-derived compression algorithm created by Frank Barchard for Electronic Arts. A RefPack stream combines literal data with references to bytes that have already been decompressed, allowing repeated sequences to be represented compactly.RefPack es un algoritmo de compresión derivado de LZ creado por Frank Barchard para Electronic Arts. Un flujo RefPack combina datos literales con referencias a bytes que ya se han descomprimido, lo que permite representar secuencias repetidas de forma compacta.

ContextContextoValueValor
CreatorCreadorFrank Barchard
Used byUsado porElectronic Arts
Compression familyFamilia de compresiónLZ-derivedDerivada de LZ

For Mega Drive ROM hacking, RefPack matters because many EA resources are stored behind a resource loader and decompression dispatcher. The algorithm is still RefPack; the EA marker and wrapper are the way that specific game architecture reaches the RefPack decoder.En romhacking de Mega Drive, RefPack importa porque muchos recursos de EA están detrás de un cargador de recursos y un despachador de descompresión. El algoritmo sigue siendo RefPack; el marcador y el envoltorio EA son la forma en que esa arquitectura concreta llega al decodificador RefPack.

RefPack vs. 10FBhRefPack frente a 10FBh

RefPack and 10FBh are related, but they are not interchangeable terms. RefPack is the compression algorithm. 10FBh is the method identifier used by one EA resource architecture to say that the following packed resource should be handled by the RefPack path.RefPack y 10FBh están relacionados, pero no son términos intercambiables. RefPack es el algoritmo de compresión. 10FBh es el identificador de método usado por una arquitectura de recursos de EA para indicar que el recurso empaquetado debe procesarse por la ruta RefPack.

EA method marker
10 FB  ....  command stream / literals / copy commands  ....
^^^^^
method marker seen in the stream as bytes 10 FB
Marcador de método EA
10 FB  ....  flujo de comandos / literales / comandos de copia  ....
^^^^^
marcador de método visto en el flujo como bytes 10 FB
IdentifierIdentificadorMeaningSignificadoScopeAlcance
10FBhEA method identifier for a RefPack-compressed resource.Identificador de método EA para un recurso comprimido con RefPack.Useful inside this EA resource architecture, not a definition of RefPack itself.Útil dentro de esta arquitectura de recursos EA, pero no es la definición de RefPack en sí.
11FBhRefPack method byte with the low flag bit set in EA-style dispatchers.Byte de método RefPack con el bit bajo de flag activado en despachadores de estilo EA.Treat as an EA wrapper or extended-header detail and confirm the decoder path before parsing the stream.Trátalo como detalle de envoltorio EA o cabecera extendida y confirma la ruta del decodificador antes de analizar el flujo.

RefPack terminologyTerminología RefPack

These terms are useful before looking at resource loaders or command bytes. They separate the algorithm from the EA container details around it.Estos términos son útiles antes de mirar cargadores de recursos o bytes de comando. Separan el algoritmo de los detalles del contenedor EA que lo rodea.

TermTérminoMeaningSignificado
RefPackThe compression algorithm: an LZ-derived stream made from literals and references to already decompressed output.El algoritmo de compresión: un flujo derivado de LZ formado por literales y referencias a salida ya descomprimida.
10FBhElectronic Arts method identifier associated with RefPack inside a particular EA resource system.Identificador de método de Electronic Arts asociado con RefPack dentro de un sistema concreto de recursos EA.
Back-referenceReferencia hacia atrásA command that copies bytes from data already written to the decompressed output.Un comando que copia bytes desde datos ya escritos en la salida descomprimida.
LiteralLiteralRaw input data copied directly to the output without compression.Dato de entrada crudo copiado directamente a la salida sin compresión.
Distance / offsetDistancia / offsetHow far back in the existing output the copy source begins.Cuánto hay que retroceder en la salida existente para encontrar el origen de copia.
LengthLongitudHow many bytes the reference copies.Cuántos bytes copia la referencia.
Command streamFlujo de comandosThe RefPack control bytes plus literal data and reference operands interpreted by the decoder.Los bytes de control RefPack más datos literales y operandos de referencia interpretados por el decodificador.

RefPack stream structureEstructura del flujo RefPack

A common source of confusion is mixing the EA container layer with the RefPack stream itself. The container helps the game find and dispatch the resource. The RefPack stream is the data interpreted by the RefPack decoder after that dispatch decision has been made.Una fuente habitual de confusión es mezclar la capa de contenedor EA con el flujo RefPack en sí. El contenedor ayuda al juego a localizar y despachar el recurso. El flujo RefPack es la información interpretada por el decodificador RefPack después de tomar esa decisión de despacho.

Conceptual layersCapas conceptuales
EA Resource Container
|-- Resource metadata / loader fields
`-- RefPack Stream
    |-- Header / flags
    |-- Uncompressed size
    `-- Command stream
        |-- Literal data
        |-- Back-references
        `-- End marker

The exact header and wrapper fields must be verified against the target game. The important conceptual split is that the command stream belongs to RefPack, while resource names, entry sizes, and dispatcher method IDs belong to the EA-side resource system.La cabecera exacta y los campos de envoltorio deben verificarse contra el juego concreto. La división conceptual importante es que el flujo de comandos pertenece a RefPack, mientras que nombres de recurso, tamaños de entrada e IDs de método del despachador pertenecen al sistema de recursos del lado EA.

Literal runsSecuencias literales

A literal run copies raw bytes from the compressed input directly to the decompressed output. RefPack needs literals because not every part of a resource is worth referencing: unique data, small transitions, noisy bytes, and incompressible fragments can be cheaper to store directly.Una secuencia literal copia bytes crudos desde la entrada comprimida directamente a la salida descomprimida. RefPack necesita literales porque no toda parte de un recurso merece representarse como referencia: datos únicos, transiciones pequeñas, bytes irregulares y fragmentos poco comprimibles pueden ser más baratos si se guardan directamente.

Back-referencesReferencias hacia atrás

A back-reference tells the decoder to copy bytes from the output buffer that already exists. The command describes a distance, also called an offset, and a length. The decoder then duplicates that previous data into the current output position.Una referencia hacia atrás indica al decodificador que copie bytes desde el buffer de salida que ya existe. El comando describe una distancia, también llamada offset, y una longitud. El decodificador duplica esos datos previos en la posición actual de salida.

RefPack uses different command forms so that short, nearby matches can be encoded compactly while longer copies or larger distances can still be represented when they save enough space.RefPack usa distintas formas de comando para que las coincidencias cortas y cercanas puedan codificarse de forma compacta, mientras que copias más largas o distancias mayores sigan siendo posibles cuando ahorran espacio suficiente.

Command typesTipos de comando

The command stream is not just 'literals plus copies'. It contains command families selected according to literal count, copy length, copy distance, and the number of bytes required to describe the operation. The table below is conceptual: use exact byte counts only after the target decoder has been verified.El flujo de comandos no es solo 'literales más copias'. Contiene familias de comandos elegidas según cantidad de literales, longitud de copia, distancia de copia y número de bytes necesarios para describir la operación. La tabla siguiente es conceptual: usa conteos exactos de bytes solo después de verificar el decodificador concreto.

Command typeTipo de comandoPurposeObjetivoAdditional bytesBytes adicionalesTypical rolePapel habitual
Literal runSecuencia literalCopy raw bytes from input to output.Copiar bytes crudos desde la entrada a la salida.VariableVariableUnique or hard-to-compress data.Datos únicos o difíciles de comprimir.
Short back-referenceReferencia cortaCopy nearby output data with compact operands.Copiar datos cercanos de la salida con operandos compactos.SmallPocosShort-distance repetition.Repetición a corta distancia.
Medium back-referenceReferencia mediaCopy from a larger distance or with a longer match.Copiar desde una distancia mayor o con una coincidencia más larga.MediumIntermediosRepeated sequences inside structured assets.Secuencias repetidas dentro de recursos estructurados.
Long back-referenceReferencia largaRepresent larger distances or longer copies.Representar distancias mayores o copias más largas.LargerMásLarger repeated blocks where extra command bytes are worthwhile.Bloques repetidos mayores donde compensa gastar más bytes de comando.
End commandComando de finTerminate the command stream after optional final literal bytes.Terminar el flujo de comandos tras posibles bytes literales finales.MinimalMínimosEnd of resource.Final del recurso.

Copy length and distanceLongitud y distancia de copia

Distance tells the decoder how far back to look in the decompressed output. Length tells it how many bytes to copy from that point. Together, those two values are the heart of every RefPack back-reference.La distancia indica al decodificador cuánto debe retroceder en la salida descomprimida. La longitud indica cuántos bytes debe copiar desde ese punto. Juntos, esos dos valores son el núcleo de toda referencia hacia atrás en RefPack.

Conceptual copyCopia conceptual
Output:
A B C D E F

Distance = 3
Length   = 4

Source begins at:
D E F ...

Copied result:
D E F D

Overlapping copiesCopias solapadas

Like many LZ-style schemes, RefPack references may overlap the bytes being written. The decoder must copy forward one byte at a time when necessary, because bytes generated earlier in the same command can become the source for later bytes in that command.Como muchos esquemas de estilo LZ, las referencias de RefPack pueden solaparse con los bytes que se están escribiendo. El decodificador debe copiar hacia delante byte a byte cuando haga falta, porque los bytes generados antes dentro del mismo comando pueden convertirse en origen para bytes posteriores de ese comando.

Overlapping referenceReferencia solapada
Current output:
AB

Back-reference:
distance = 2
length   = 8

Result:
ABABABABAB

Step-by-step hexadecimal exampleEjemplo hexadecimal paso a paso

Simplified walkthroughRecorrido simplificado
Compressed input, teaching notation:
[10 FB] [size: 00 08]
[LIT 03] 41 42 43
[COPY distance=3 length=3]
[LIT 02] 44 45
[END]

After literal command:
41 42 43          -> ABC

After back-reference:
41 42 43 41 42 43 -> ABCABC

After final literal bytes:
41 42 43 41 42 43 44 45 -> ABCABCDE

Why RefPack works wellPor qué RefPack funciona bien

RefPack balances compression ratio, decoder complexity, speed, memory usage, and suitability for binary game resources. It is effective when a resource contains repeated local patterns, but it is not universally superior: noisy, irregular, or already packed data may gain little or even grow after overhead.RefPack equilibra ratio de compresión, complejidad del decodificador, velocidad, uso de memoria y adecuación para recursos binarios de juego. Es efectivo cuando un recurso contiene patrones locales repetidos, pero no es universalmente superior: datos ruidosos, irregulares o ya empaquetados pueden ganar poco o incluso crecer por el overhead.

Identifying RefPack in a ROMIdentificar RefPack en una ROM

  • A 10FBh method marker inside a known EA resource container.Un marcador de método 10FBh dentro de un contenedor de recursos EA conocido.
  • A loader routing the resource to a RefPack decoder.Un cargador que envía el recurso a un decodificador RefPack.
  • A command stream mixing literal bytes and back-references.Un flujo de comandos que mezcla bytes literales y referencias hacia atrás.
  • Compressed data expanding to a larger output buffer.Datos comprimidos que se expanden hacia un buffer de salida mayor.
  • Graphics, maps, menus, or tables becoming usable only after the RefPack routine runs.Gráficos, mapas, menús o tablas que solo se vuelven utilizables después de ejecutar la rutina RefPack.

Inside EA-based resource systems, 10FBh is a strong clue. Outside that context, the best evidence is the decoder behavior: literals, copy commands, output growth, and successful reconstruction of the resource format that consumes the decoded bytes.Dentro de sistemas de recursos basados en EA, 10FBh es una pista fuerte. Fuera de ese contexto, la mejor evidencia es el comportamiento del decodificador: literales, comandos de copia, crecimiento de salida y reconstrucción correcta del formato que consume los bytes decodificados.

Recompressing RefPack resourcesRecomprimir recursos RefPack

When modifying a RefPack-compressed resource, the new stream normally does not need to match the original byte-for-byte. It needs to decode correctly using the original game routine, preserve the expected output size, and satisfy the loader's assumptions.Al modificar un recurso comprimido con RefPack, normalmente el nuevo flujo no necesita coincidir byte a byte con el original. Necesita decodificarse correctamente usando la rutina original del juego, conservar el tamaño de salida esperado y cumplir las suposiciones del cargador.

  • Final compressed size and available ROM space.Tamaño comprimido final y espacio disponible en ROM.
  • Resource boundaries, pointer relocation, and alignment.Límites del recurso, reubicación de punteros y alineación.
  • Header correctness, uncompressed size, and decoder compatibility.Corrección de cabecera, tamaño descomprimido y compatibilidad con el decodificador.
  • Loader assumptions such as table entry size, resource name handling, and bank or address constraints.Suposiciones del cargador como tamaño de entrada de tabla, manejo del nombre de recurso y restricciones de banco o dirección.

Mega Drive / Genesis games using RefPackJuegos de Mega Drive / Genesis que usan RefPack

The table keeps the evidence level separate from the asset usage. Confirmed entries include one expandable resource example when an extracted resource has been documented; reported entries remain listed without examples until 68K Revival has stronger evidence.La tabla mantiene separado el nivel de evidencia del uso del recurso. Las entradas confirmadas incluyen un ejemplo desplegable cuando se ha documentado un recurso extraído; las entradas reportadas se mantienen sin ejemplos hasta que 68K Revival tenga evidencias más sólidas.

Evidence levelNivel de evidenciaMeaningSignificado
ConfirmedConfirmadoRefPack streams and/or the decoder have been directly identified.Se han identificado directamente flujos RefPack y/o el decodificador.
Tool-detectedDetectado por herramientaA reverse-engineering tool detects RefPack-compatible structures, but the usage has not been manually documented.Una herramienta de ingeniería inversa detecta estructuras compatibles con RefPack, pero el uso no se ha documentado manualmente.
ReportedReportadoA credible external technical source reports RefPack usage, but 68K Revival has not independently verified it.Una fuente técnica externa creíble reporta uso de RefPack, pero 68K Revival no lo ha verificado de forma independiente.
GameJuegoRefPack usageUso de RefPackEvidenceEvidenciaExamplesEjemplos
Coach K College BasketballGraphicsGráficosReportedReportado
FIFA International SoccerGraphicsGráficosConfirmedConfirmado
View extracted resourceVer recurso extraído
Extracted stadium.qcf graphic from FIFA International Soccer RefPack data
ResourceRecurso
stadium.qcf
ROM OffsetOffset ROM
0x0A5098
CompressionCompresión
10FB RefPack
Extracted outputSalida extraída
out0x4430.raw
ContentContenido
stadium graphic with tilemapgráfico de estadio con tilemap
Used inUsado en
Match presentation / team comparison screenpantalla de presentación del partido / comparación de equipos
FIFA Soccer 95GraphicsGráficosConfirmedConfirmado
View extracted resourceVer recurso extraído
Extracted trophy.qbf graphic from FIFA Soccer 95 RefPack data
ResourceRecurso
trophy.qbf
ROM OffsetOffset ROM
0x112740
CompressionCompresión
10FB RefPack
Extracted outputSalida extraída
out0x2994.raw
ContentContenido
trophy graphic with its own tilemapsgráfico de trofeo con sus propios tilemaps
Used inUsado en
Tournament trophy screenspantallas de trofeos de torneos
FIFA Soccer 96GraphicsGráficosConfirmedConfirmado
View extracted resourceVer recurso extraído
Extracted EA SPORTS logo graphic from FIFA Soccer 96 RefPack data
ResourceRecurso
unnamed resourcerecurso sin nombre
ROM OffsetOffset ROM
0x0D1602
CompressionCompresión
10FB RefPack
Extracted outputSalida extraída
out0x30E6.raw
ContentContenido
EA SPORTS logo graphicgráfico del logotipo de EA SPORTS
Used inUsado en
Opening EA SPORTS logo screenpantalla inicial del logotipo de EA SPORTS
FIFA 97GraphicsGráficosConfirmedConfirmado
View extracted resourceVer recurso extraído
Extracted France map graphic from FIFA 97 RefPack data
ResourceRecurso
unnamed resourcerecurso sin nombre
ROM OffsetOffset ROM
0x130EDE
CompressionCompresión
10FB RefPack
Extracted outputSalida extraída
out0x580.raw
ContentContenido
France map graphicgráfico del mapa de Francia
Used inUsado en
National championship selection in League, Tournament, or Playoff modeselección de campeonato nacional en modo Liga, Torneo o Playoff
FIFA Soccer 98GraphicsGráficosReportedReportado
NBA Live 95GraphicsGráficosReportedReportado
NBA Live 96GraphicsGráficosReportedReportado
NBA Live 97GraphicsGráficosConfirmedConfirmado
View extracted resourceVer recurso extraído
Extracted NBA logo graphic from NBA Live 97 RefPack data
ResourceRecurso
unnamed resourcerecurso sin nombre
ROM OffsetOffset ROM
0x0F0EAE
CompressionCompresión
10FB RefPack
Extracted outputSalida extraída
out0xE4E.raw
ContentContenido
NBA logo graphicgráfico del logotipo de la NBA
Used inUsado en
Opening license / copyright screenpantalla inicial de licencia / copyright
NBA Live 98GraphicsGráficosReportedReportado
Skitchin'GraphicsGráficosReportedReportado
Triple Play 96GraphicsGráficosReportedReportado
Triple Play: Gold EditionGraphicsGráficosReportedReportado

Electronic Arts implementation notesNotas sobre la implementación de Electronic Arts

EA context remains important because many Mega Drive examples are encountered through EA resource containers. A loader can locate a packed resource, read the method bytes, normalize 10FBh or 11FBh as needed, and route the payload to the RefPack decoder.El contexto EA sigue siendo importante porque muchos ejemplos de Mega Drive aparecen dentro de contenedores de recursos de EA. Un cargador puede localizar un recurso empaquetado, leer los bytes de método, normalizar 10FBh o 11FBh cuando corresponda y enviar el payload al decodificador RefPack.

EA dispatcher fragment
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,d3
Fragmento de despachador EA
move.b  (a0)+,d3
cmpi.b  #$FB,(a0)+
bne     error_o_salida

btst    #0,d3
beq     continuar
addq.w  #3,a0

continuar:
andi.b  #$FE,d3

The same EA architecture can dispatch other compression methods, but those belong in their own articles. For RefPack work, keep the focus on the 10FBh / 11FBh path, the expected output size, and the command stream consumed by the RefPack routine.La misma arquitectura EA puede despachar otros métodos de compresión, pero esos pertenecen a sus propios artículos. Para trabajo RefPack, mantén el foco en la ruta 10FBh / 11FBh, el tamaño de salida esperado y el flujo de comandos consumido por la rutina RefPack.

Common pitfallsErrores habituales

  • Treating 10FBh as the definition of RefPack instead of an EA method identifier.Tratar 10FBh como la definición de RefPack en vez de como identificador de método EA.
  • Decoding from the marker offset when the actual command stream starts after a wrapper, size field, or asset-table entry.Decodificar desde el offset del marcador cuando el flujo real de comandos empieza después de un envoltorio, un campo de tamaño o una entrada de tabla de recursos.
  • Implementing references as fixed block copies and breaking overlapping copy cases.Implementar referencias como copias de bloque fijas y romper los casos de copia solapada.
  • Assuming a plausible image means the stream ended at the correct byte. Always verify output length and the next referenced block.Asumir que una imagen plausible significa que el flujo terminó en el byte correcto. Verifica siempre la longitud de salida y el siguiente bloque referenciado.
  • Claiming a game's exact RefPack usage without documenting the decoded resource type.Afirmar el uso exacto de RefPack en un juego sin documentar el tipo de recurso decodificado.

RefPack fits inside the broader LZ family, but command encoding is what makes each format different. Use the related articles when the ROM evidence points to another decoder path.RefPack encaja dentro de la familia LZ amplia, pero la codificación de comandos es lo que diferencia cada formato. Usa los artículos relacionados cuando la evidencia de la ROM apunte a otra ruta de decodificación.

FormatFormatoRelationshipRelación
RefPackUses literals and back-references with multiple command forms.Usa literales y referencias hacia atrás con varias formas de comando.
Generic LZ77 / LZSSLZ77 / LZSS genéricoShares the broad idea of reusing previous output, but the command encoding differs.Comparte la idea general de reutilizar salida previa, pero la codificación de comandos es distinta.
KosinskiAlso LZ-derived, but uses a different bitstream and control structure.También deriva de LZ, pero usa un bitstream y una estructura de control diferentes.