Registros de Ppu: precio wiki de nesdev de un bitcoin

Cuando el bit 6 de PPUCTRL está despejado (el caso habitual), el PPU obtiene el índice de paleta para el color de fondo de los pines EXT. El inventario NES conecta estos pines, haciendo que el índice de paleta 0 color de fondo como se esperaba. Un generador de imágenes secundario conectado a los pines EXT podría reemplazar el fondo con una imagen diferente usando colores de la paleta de fondo, que podría usarse, por ejemplo, para implementar el desplazamiento de paralaje.

El bit de configuración 6 hace que el PPU muestre los cuatro bits más bajos del índice de memoria de la paleta en los pines EXT para cada píxel (además del dibujo de imagen normal). Dado que solo salen cuatro bits, normalmente no se pueden distinguir los píxeles de fondo y sprite de esta manera. Como los pines EXT están puestos a tierra en un NES no modificado, se desaconseja el bit de configuración 6, ya que podría dañar el chip siempre que genere un valor de píxel distinto de cero (debido a que efectivamente corta Vcc y GND juntos). Al observar los circuitos relevantes en Visual 2C02, parece que el hack de la paleta de fondo no sería funcional para la salida de los pines EXT; siempre generarían el índice 0 para el color de fondo.

• Si cualquiera de los bits 3 o 4 está habilitado, en cualquier momento fuera del intervalo vblank, la PPU hará un uso continuo de la dirección PPU y del bus de datos para recuperar las teselas, así como para obtener internamente datos de sprites del OAM. Si desea realizar cambios en la memoria PPU fuera de vblank (a través de $ 2007), debe establecer estos dos bits en 0 para deshabilitar la representación y evitar conflictos.

• Desactivar el renderizado (borrar los bits 3 y 4) durante una parte visible del cuadro puede ser problemático. Puede causar una corrupción del estado de sprite, que mostrará datos de sprite incorrectos en el siguiente fotograma. (Ver: Errata) Sin embargo, está perfectamente bien enmascarar los sprites pero dejar el fondo encendido (establecer el bit 3, borrar el bit 4) en cualquier momento en el cuadro.

• El bit 0 controla un modo de escala de grises, lo que hace que la paleta use solo los colores de la columna gris: $ 00, $ 10, $ 20, $ 30. Esto se implementa como un Y a nivel de bit con $ 30 en cualquier valor leído de PPU $ 3F00- $ 3FFF, tanto en la pantalla como a través de PPUDATA. Las escrituras en la paleta a través de PPUDATA no se ven afectadas. También tenga en cuenta que los colores negros como $ 0F serán reemplazados por un gris no negro de $ 00.

El valor de OAMADDR cuando evaluación de sprites comienza al marcar 65 de las líneas de exploración visibles determinarán dónde comienza la evaluación de sprites de OAM, y por lo tanto qué sprite se tratará como sprite 0. La primera entrada de OAM que se comprobará durante la evaluación de sprites es la que comienza en OAM [OAMADDR]. Si OAMADDR no está alineado y no apunta a la posición y (primer byte) de una entrada OAM, todo lo que señale (índice de mosaico, atributo o coordenada x) será reinterpretado como una posición ay, y los siguientes bytes serán similarmente reinterpretado No se encontrarán más sprites una vez que se llegue al final de OAM, ocultando efectivamente cualquier sprite antes de OAM [OAMADDR].

• Escribe en OAMDATA durante el procesamiento (en la línea de preprocesamiento y las líneas visibles 0-239, siempre que esté habilitado el sprite o el renderizado en segundo plano) no modifica los valores en OAM, pero realiza un incremento glitchy de OAMADDR, golpeando solo el alto 6 bits (es decir, supera el valor [n] en PPU evaluación de sprites – es plausible que pueda golpear los bits bajos en lugar de depender del estado actual de evaluación de sprites) Esto se extiende a las transferencias de DMA a través de OAMDMA, ya que usa escrituras en $ 2004. Para fines de emulación, probablemente sea mejor ignorar por completo las escrituras durante la representación.

Este registro se utiliza para cambiar la posición de desplazamiento, es decir, para indicar al PPU qué píxel de la tabla de nombre seleccionada a través de PPUCTRL debe estar en la esquina superior izquierda de la pantalla representada. Normalmente, este registro se escribe durante el borrado vertical, de modo que el siguiente fotograma comience a renderizarse desde la ubicación deseada, pero también se puede modificar durante el renderizado para dividir la pantalla. Los cambios realizados en el desplazamiento vertical durante el renderizado solo tendrán efecto en el siguiente cuadro.

Cuando la pantalla se apaga desactivando el indicador de renderizado de fondo / sprite con el PPUMASK o durante el espacio en blanco vertical, puede leer o escribir datos de VRAM a través de este puerto. Debido a que el acceso a este registro incrementa la dirección VRAM, no se debe acceder fuera de la supresión vertical o forzada, ya que causará fallas gráficas, y si se escribe, escriba en una dirección impredecible en VRAM. Sin embargo, se sabe que hay dos juegos que se leen de PPUDATA durante la representación: consulte Juegos difíciles de emular.

Al leer mientras la dirección VRAM está en el rango de 0- $ 3EFF (es decir, antes de las paletas), la lectura devolverá el contenido de un búfer de lectura interno. Este búfer interno se actualiza solo cuando se lee PPUDATA, por lo que se conserva en todos los marcos. Después de que la CPU lee y obtiene el contenido de la buffer interno, el PPU actualizará inmediatamente el buffer interno con el byte en el actual Dirección VRAM. Por lo tanto, después de configurar el Dirección VRAM, primero se debe leer este registro y descartar el resultado.

Leer los datos de la paleta de $ 3F00- $ 3FFF funciona de manera diferente. Los datos de la paleta se colocan inmediatamente en el bus de datos y, por lo tanto, no se requiere ninguna lectura ficticia. Sin embargo, la lectura de las paletas aún actualiza el búfer interno, pero los datos colocados en él son los datos duplicados de la tabla de nombres que aparecerían. "debajo" la paleta. (Verificar el mapa de la memoria del PPU debería aclarar esto).

• La transferencia DMA comenzará en la dirección de escritura OAM actual. Es una práctica común inicializarlo en 0 con una escritura en OAMADDR antes de la transferencia de DMA. Diferentes direcciones de inicio se pueden utilizar para una técnica de ciclado OAM simple, para aliviar conflictos de prioridad de sprites por parpadeo. Si se usa esta técnica, después de DMA, OAMADDR se debe establecer en 0 antes del final de vblank para evitar posibles daños OAM (Ver: Errata). Sin embargo, debido a OAMADDR escribe también tener una "corrupción" efecto [5] esta técnica no es recomendable.

banner