Start with an identified ROMEmpieza por identificar la ROM
A ROM is a sequence of bytes, usually without labels for its routines, tables or graphics. A disassembler can interpret data as instructions, and a tile viewer can render executable code as coloured pixels. A plausible pattern is a starting hypothesis; the useful question is how the game actually uses those bytes.Una ROM es una secuencia de bytes, normalmente sin etiquetas para sus rutinas, tablas o gráficos. Un desensamblador puede interpretar datos como instrucciones y un visor de tiles puede representar código ejecutable como píxeles de colores. Un patrón plausible es una hipótesis inicial; lo útil es averiguar cómo utiliza realmente el juego esos bytes.
Record the title, region, revision, size and hash. Normalize copier or interleaved formats before comparing offsets. Keep an untouched reference and work on a copy. Different revisions may place the same resource at different addresses, so an offset without its ROM identity is incomplete documentation.Registra título, región, revisión, tamaño y hash. Normaliza formatos de copiador o entrelazados antes de comparar offsets. Conserva una referencia intacta y trabaja sobre una copia. Distintas revisiones pueden colocar el mismo recurso en direcciones diferentes, por lo que documentar un offset sin identificar la ROM es insuficiente.
Follow executionSigue la ejecución
The longword at CPU address 0x000004 supplies the reset program counter. Start there with the original 68000 instruction set and big-endian byte order. Follow branches, calls and returns. Interrupt vectors provide other entry points. A plausible instruction far from any known path is weaker evidence than one observed executing.La longword de la dirección de CPU 0x000004 proporciona el contador de programa de reset. Empieza allí con las instrucciones del 68000 original y orden big-endian. Sigue saltos, llamadas y retornos. Los vectores de interrupción aportan otros puntos de entrada. Una instrucción plausible lejos de una ruta conocida es una evidencia más débil que una observada en ejecución.
Instructions start at even addresses and have variable lengths. Decoding from the middle of one produces misleading output. Do not blindly continue into embedded tables after a return or unconditional jump. Indirect jumps may require runtime register values to locate their targets.Las instrucciones empiezan en direcciones pares y tienen longitud variable. Decodificar desde el centro de una produce resultados engañosos. No continúes ciegamente por tablas insertadas después de un retorno o salto incondicional. Los saltos indirectos pueden requerir los valores de registros en ejecución para localizar sus destinos.
Distinguish file offsets from CPU addresses. They often coincide for a raw, linearly mapped cartridge starting at zero. Bank switching and routines copied to RAM break that assumption. A Z80 program stored in ROM is data to the loader and code to the Z80; it should not be decoded as 68000 instructions.Distingue offsets de archivo y direcciones de CPU. Suelen coincidir en un cartucho binario lineal que comienza en cero. Los bancos y las rutinas copiadas a RAM rompen esa suposición. Un programa Z80 almacenado en ROM es un dato para el cargador y código para el Z80; no debe decodificarse como instrucciones 68000.
Recognize data structuresReconoce estructuras de datos
Repeated record sizes suggest tables. Readable text suggests strings, although many games use custom encodings. Groups of plausible addresses may be pointers, but tables can instead hold relative offsets, indices or packed values. Find the instruction that reads an entry: operand size and arithmetic reveal more than the bytes alone.Tamaños de registro repetidos sugieren tablas. El texto legible sugiere cadenas, aunque muchos juegos utilizan codificaciones propias. Grupos de direcciones plausibles pueden ser punteros, pero las tablas también pueden contener offsets relativos, índices o valores empaquetados. Busca la instrucción que lee una entrada: el tamaño de operando y la aritmética revelan más que los bytes aislados.
Graphics become stronger candidates when the right tile format, ordering and palette reconstruct a recognizable asset. Compressed data needs its decoder and any reconstruction step. A signature alone does not establish a format: follow the loader, check boundaries and inspect the output. Long runs of zero or FF bytes are not automatically free space.Los gráficos son candidatos más sólidos cuando el formato, orden de tiles y paleta correctos reconstruyen un recurso reconocible. Los datos comprimidos necesitan su decodificador y cualquier reconstrucción posterior. Una firma aislada no demuestra un formato: sigue el cargador, comprueba límites e inspecciona la salida. Las secuencias largas de ceros o bytes FF no son automáticamente espacio libre.
A small worked exampleUn ejemplo paso a paso
This synthetic example is not extracted from a commercial game. Assume D0 contains a checked index from 0 to 2 and A0 points to the first table byte. Doubling the index gives a byte displacement for two-byte entries.Este ejemplo didáctico no está extraído de un juego comercial. Supón que D0 contiene un índice comprobado de 0 a 2 y A0 apunta al primer byte de la tabla. Duplicar el índice da un desplazamiento en bytes para entradas de dos bytes.
add.w d0,d0
move.w (a0,d0.w),d1
rts
; Table bytes
; 00 0A 00 14 00 1EWith an initial index of 1, D0 becomes 2 and the low word of D1 receives 0x0014, decimal 20. MOVE.W leaves D1's upper word unchanged. This supports a word lookup in the example, but does not explain what 20 means. Follow the consumer of D1 before naming it speed, score or time. The three-entry limit is an explicit example assumption, not something proven by these instructions.Con un índice inicial de 1, D0 pasa a 2 y la palabra inferior de D1 recibe 0x0014, 20 en decimal. MOVE.W conserva la palabra superior de D1. Esto respalda una consulta por palabras, pero no explica qué significa 20. Sigue el código que consume D1 antes de llamarlo velocidad, puntuación o tiempo. El límite de tres entradas es una suposición explícita del ejemplo, no algo demostrado por estas instrucciones.
Confirm at runtimeConfirma durante la ejecución
An execution breakpoint confirms that the CPU reaches a routine. A read watchpoint identifies who consumes data; a write watchpoint can reveal who changes a RAM value. Reproduce one action, inspect registers and calls, then repeat with another selection or state.Un breakpoint de ejecución confirma que la CPU llega a una rutina. Un watchpoint de lectura identifica quién consume datos; uno de escritura puede revelar quién cambia un valor de RAM. Reproduce una acción, inspecciona registros y llamadas, y repite con otra selección o estado.
For graphics, compare the ROM source, any RAM output buffer and final VRAM data. DMA transfers may require the debugger's VDP or DMA facilities rather than CPU read watchpoints. A routine not reached in a short test is not proven unused: later states or interrupts may call it.Para gráficos, compara el origen ROM, cualquier búfer de salida en RAM y los datos finales de VRAM. Las transferencias DMA pueden requerir funciones de VDP o DMA del depurador en lugar de watchpoints de lectura de CPU. Una rutina no alcanzada en una prueba breve no queda demostrada como inútil: pueden llamarla estados posteriores o interrupciones.
Build an evidence-based ROM mapCrea un mapa ROM con evidencias
Record each region's start, known length, interpretation, readers or callers, and supporting observation. Separate confirmed findings from hypotheses and leave unknown boundaries explicitly unknown. An observed read proves that an address is used, not the size of the entire resource.Registra inicio, longitud conocida, interpretación, lectores o llamadas y observación de respaldo para cada región. Separa hallazgos confirmados de hipótesis y deja explícitamente como desconocidos los límites que no conoces. Una lectura observada demuestra que se usa una dirección, no el tamaño del recurso entero.
Validate one small edit on a copy and compare the result with the expected effect. Test other screens or states sharing that data. Keep the before-and-after bytes and reproduction steps so another investigation can check your conclusion.Valida una edición pequeña sobre una copia y compara el resultado con el efecto esperado. Prueba otras pantallas o estados que compartan los datos. Conserva los bytes anteriores y posteriores y los pasos de reproducción para que otra investigación pueda comprobar la conclusión.