What CRAM storesQué almacena CRAM
Mega Drive graphics separate pixel shapes from colour. A normal tile stores four-bit indices; CRAM supplies the colours selected by those indices. CRAM contains 64 entries of two bytes, organized as four palette lines of sixteen entries. A background tile or sprite selects one line through its attributes.Los gráficos de Mega Drive separan la forma de los píxeles de su color. Un tile normal almacena índices de cuatro bits; CRAM aporta los colores seleccionados por esos índices. CRAM contiene 64 entradas de dos bytes, organizadas en cuatro líneas de paleta de dieciséis entradas. Un tile de fondo o sprite selecciona una línea mediante sus atributos.
The four lines are shared by the scene, not owned by individual images. Changing one entry can recolour a menu, a player and an unrelated object at once if they use that entry. Before editing a palette, inspect where it is used.Las cuatro líneas se comparten en la escena, no pertenecen a imágenes individuales. Cambiar una entrada puede recolorear un menú, un jugador y otro objeto si utilizan esa misma entrada. Antes de editar una paleta, comprueba dónde se usa.
Reading a colour wordLeer una palabra de color
In normal colour operation, red occupies bits 3-1, green bits 7-5 and blue bits 11-9 of a colour word. Each component ranges from 0 to 7, giving 512 possible RGB combinations. The remaining bits are not extra precision. The common hexadecimal notation 0x0BGR is a reminder of channel order, not an RGB888 value.En el funcionamiento normal de color, el rojo ocupa los bits 3-1, el verde los bits 7-5 y el azul los bits 11-9. Cada componente va de 0 a 7, dando 512 combinaciones RGB posibles. Los bits restantes no aportan precisión adicional. La notación hexadecimal habitual 0x0BGR recuerda el orden de canales; no es un valor RGB888.
The example below uses maximum red and zero green and blue. In a conventional big-endian ROM representation, the word 0x000E appears as bytes 00 0E. A ROM can also store palettes in a custom or compressed representation, so verify the loader before interpreting a candidate block.El ejemplo siguiente usa rojo máximo y verde y azul a cero. En una representación ROM big-endian convencional, la palabra 0x000E aparece como los bytes 00 0E. Una ROM también puede almacenar paletas en un formato propio o comprimido; comprueba el cargador antes de interpretar un bloque candidato.
word = (blue << 9) | (green << 5) | (red << 1)
red = 7, green = 0, blue = 0
word = 0x000E
red = (word >> 1) & 7
green = (word >> 5) & 7
blue = (word >> 9) & 7Transparency and palette selectionTransparencia y selección de paleta
Pixel index zero is transparent for background and sprite pixels; it lets underlying content show. It is not simply a black pixel. The backdrop colour is selected separately through VDP register 7, and can refer to a CRAM entry. Changing a transparent slot does not make transparent tile pixels opaque.El índice de píxel cero es transparente en fondos y sprites: deja ver el contenido inferior. No es simplemente un píxel negro. El color de fondo general se selecciona por separado mediante el registro 7 del VDP y puede apuntar a una entrada de CRAM. Cambiar una posición transparente no convierte los píxeles transparentes del tile en opacos.
For a nonzero index, the entry number is paletteLine * 16 + pixelIndex. Line 2 and index 5 select entry 37, at CRAM byte address 0x4A. Entry numbers, CRAM byte addresses and ROM offsets are three different quantities. This is a synthetic example, not an extracted game resource.Para un índice distinto de cero, el número de entrada es líneaDePaleta * 16 + índiceDePíxel. La línea 2 y el índice 5 seleccionan la entrada 37, en la dirección de byte 0x4A de CRAM. Número de entrada, dirección de byte en CRAM y offset ROM son tres magnitudes distintas. Es un ejemplo didáctico, no un recurso extraído de un juego.
Why colours change during playPor qué cambian los colores al jugar
The game can replace CRAM entries during fades, flashes or colour cycling without changing tile pixels. A debugger snapshot captures the palette at one instant, not necessarily its original ROM values. Pause after a fade has completed and compare several frames when tracing an animated palette.El juego puede sustituir entradas de CRAM durante fundidos, destellos o ciclos de color sin cambiar los píxeles de los tiles. Una captura del depurador recoge la paleta de un instante, no necesariamente sus valores originales en ROM. Pausa después del fundido y compara varios fotogramas al rastrear una paleta animada.
Shadow/highlight operation and deliberate palette changes during a frame complicate simple colour counts. The 64 stored entries are not a promise of 64 independent opaque colours for every image. This introduction uses normal colour operation; special effects require inspection of the VDP state and timing.El modo de sombra y brillo y los cambios deliberados de paleta dentro de un fotograma complican los recuentos simples de colores. Las 64 entradas almacenadas no garantizan 64 colores opacos independientes para cada imagen. Esta introducción utiliza el funcionamiento normal; los efectos especiales requieren revisar el estado del VDP y sus tiempos.
A practical editing workflowFlujo práctico de edición
Identify a visible tile or sprite, its palette line and the relevant live CRAM entry. Trace the update back through any RAM palette buffer to the ROM source or generating routine. Search for several consecutive words rather than a single colour, which is likely to occur many times.Identifica un tile o sprite visible, su línea de paleta y la entrada relevante de CRAM. Rastrea la actualización a través de cualquier búfer de paleta en RAM hasta el origen ROM o la rutina que la genera. Busca varias palabras consecutivas en lugar de un único color, que probablemente se repita muchas veces.
Edit one colour on a copy, preserving the resource size and encoding. Test the complete scene, transitions and other objects sharing the palette. Record the ROM revision, source location, palette line and entry. A temporary debugger edit is useful evidence, but it is not a permanent ROM modification.Edita un color sobre una copia conservando tamaño y codificación. Prueba la escena completa, transiciones y otros objetos que compartan paleta. Registra revisión ROM, ubicación de origen, línea y entrada. Una edición temporal en el depurador aporta evidencia, pero no modifica permanentemente la ROM.