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.
| ContextContexto | ValueValor |
|---|---|
| CreatorCreador | Frank Barchard |
| Used byUsado por | Electronic Arts |
| Compression familyFamilia de compresión | LZ-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.
10 FB .... command stream / literals / copy commands ....
^^^^^
method marker seen in the stream as bytes 10 FB10 FB .... flujo de comandos / literales / comandos de copia ....
^^^^^
marcador de método visto en el flujo como bytes 10 FB| IdentifierIdentificador | MeaningSignificado | ScopeAlcance |
|---|---|---|
| 10FBh | EA 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í. |
| 11FBh | RefPack 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érmino | MeaningSignificado |
|---|---|
| RefPack | The 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. |
| 10FBh | Electronic 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ás | A 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. |
| LiteralLiteral | Raw input data copied directly to the output without compression.Dato de entrada crudo copiado directamente a la salida sin compresión. |
| Distance / offsetDistancia / offset | How 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. |
| LengthLongitud | How many bytes the reference copies.Cuántos bytes copia la referencia. |
| Command streamFlujo de comandos | The 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.
EA Resource Container
|-- Resource metadata / loader fields
`-- RefPack Stream
|-- Header / flags
|-- Uncompressed size
`-- Command stream
|-- Literal data
|-- Back-references
`-- End markerThe 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 comando | PurposeObjetivo | Additional bytesBytes adicionales | Typical rolePapel habitual |
|---|---|---|---|
| Literal runSecuencia literal | Copy raw bytes from input to output.Copiar bytes crudos desde la entrada a la salida. | VariableVariable | Unique or hard-to-compress data.Datos únicos o difíciles de comprimir. |
| Short back-referenceReferencia corta | Copy nearby output data with compact operands.Copiar datos cercanos de la salida con operandos compactos. | SmallPocos | Short-distance repetition.Repetición a corta distancia. |
| Medium back-referenceReferencia media | Copy from a larger distance or with a longer match.Copiar desde una distancia mayor o con una coincidencia más larga. | MediumIntermedios | Repeated sequences inside structured assets.Secuencias repetidas dentro de recursos estructurados. |
| Long back-referenceReferencia larga | Represent larger distances or longer copies.Representar distancias mayores o copias más largas. | LargerMás | Larger repeated blocks where extra command bytes are worthwhile.Bloques repetidos mayores donde compensa gastar más bytes de comando. |
| End commandComando de fin | Terminate the command stream after optional final literal bytes.Terminar el flujo de comandos tras posibles bytes literales finales. | MinimalMínimos | End 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.
Output:
A B C D E F
Distance = 3
Length = 4
Source begins at:
D E F ...
Copied result:
D E F DOverlapping 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.
Current output:
AB
Back-reference:
distance = 2
length = 8
Result:
ABABABABABStep-by-step hexadecimal exampleEjemplo hexadecimal paso a paso
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 -> ABCABCDEWhy 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 evidencia | MeaningSignificado |
|---|---|
| ConfirmedConfirmado | RefPack streams and/or the decoder have been directly identified.Se han identificado directamente flujos RefPack y/o el decodificador. |
| Tool-detectedDetectado por herramienta | A 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. |
| ReportedReportado | A 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. |
| GameJuego | RefPack usageUso de RefPack | EvidenceEvidencia | ExamplesEjemplos |
|---|---|---|---|
| Coach K College Basketball | GraphicsGráficos | ReportedReportado | |
| FIFA International Soccer | GraphicsGráficos | ConfirmedConfirmado | View extracted resourceVer recurso extraído![]()
|
| FIFA Soccer 95 | GraphicsGráficos | ConfirmedConfirmado | View extracted resourceVer recurso extraído![]()
|
| FIFA Soccer 96 | GraphicsGráficos | ConfirmedConfirmado | View extracted resourceVer recurso extraído![]()
|
| FIFA 97 | GraphicsGráficos | ConfirmedConfirmado | View extracted resourceVer recurso extraído![]()
|
| FIFA Soccer 98 | GraphicsGráficos | ReportedReportado | |
| NBA Live 95 | GraphicsGráficos | ReportedReportado | |
| NBA Live 96 | GraphicsGráficos | ReportedReportado | |
| NBA Live 97 | GraphicsGráficos | ConfirmedConfirmado | View extracted resourceVer recurso extraído![]()
|
| NBA Live 98 | GraphicsGráficos | ReportedReportado | |
| Skitchin' | GraphicsGráficos | ReportedReportado | |
| Triple Play 96 | GraphicsGráficos | ReportedReportado | |
| Triple Play: Gold Edition | GraphicsGráficos | ReportedReportado |
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.
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,d3The 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.
Related compression articlesArtículos relacionados
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.
| FormatFormato | RelationshipRelación |
|---|---|
| RefPack | Uses 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érico | Shares 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. |
| Kosinski | Also 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. |




