Escribí el motor de gráficos para la versión para PC de Golden Axe (lanzado antes de Commander Keen, creo). El adaptador EGA / VGA tenía una característica genial que era esencialmente parte del cambio de página. Puede establecer la dirección de pantalla en cualquier valor de 32 bits que desee. Y la tarjeta de video se envolvería al buscar píxeles.
La mayoría de los adaptadores EGA / VGA tenían más de 64K. Tenían 128K, o 256K, pero solo los abordó en 4 planos de 64K cada uno. En modeX (crédito Mr. Abrash para eso), tenía un modo plano 320 × 200 en 256 colores, donde podía acceder a 4 píxeles secuenciales a través de una dirección de 1 byte. Sí, eso es 32 bits de color (4 planos de profundidad), en un solo byte. Entonces el direccionamiento era exactamente 80 bytes por 200 líneas de escaneo. O 16,000 bytes de espacio de direcciones en una tarjeta de 256K, que le brinda cuatro pantallas más algo extra para jugar.
Creo que Golden Axe usó dos pantallas para pasar la página y una para borrar el sprite. Y el resto se utilizó para almacenar sprites comprimidos. Los rectángulos sucios rastrearon qué áreas de la pantalla necesitaban actualizarse.
Así que de vuelta al desplazamiento. Tres pantallas movidas a través de la memoria. Supongamos que cambia de página entre 0x0000 y 0x4000. Mantiene una copia del fondo sin sprites (para borrar), a 0x8000. La pantalla que se muestra actualmente es de 0x4000 y desea desplazarse hacia arriba.
- ¿Los deportistas profesionales usan ropa y equipo nuevos en cada juego? Si es así, ¿qué se les hace después del juego?
- ¿Cómo puede un XBOX 360 de 5 años ejecutar juegos que mi portátil de un año no puede?
- ¿Alguna vez has hecho tu propio juego de ajedrez realmente único? Si es así, ¿compartirías una foto y tal vez incluso cómo la hiciste?
- ¿Los mejores jugadores de Scrabble conocen el significado de la mayoría de las palabras que juegan?
- ¿Cuáles son los mejores juegos independientes de todos los tiempos y por qué?
1. Restas 80 bytes de tu siguiente búfer de trama, que era 0x0000 y ahora es 0xFFA0.
2, resta 80 bytes de su dirección de pantalla de fondo limpio (que utiliza para borrar sprites).
3. Representa la línea superior de la pantalla de fondo.
4. Agregue la línea superior a la lista de rectángulos sucios de su pantalla a la que va a procesar.
5. Utiliza la lista de rectángulos sucios para borrar todos los sprites en movimiento desde la última vez que renderizaste en esta superficie. Luego borra la lista.
6. Representa todos los sprites en esta superficie, agregándolos a la lista sucia de rect para este marco.
7. Dices la interrupción vertical en blanco, estás listo para mostrar
dirección 0xffa0.
Hace todo lo anterior en 16.6 milisegundos, en una CPU de 8Mhz.
El modo plano le dio algunas ventajas, ya que para borrar los sprites, podría hacerlo cuatro píxeles a la vez, moviéndolo de la memoria de la pantalla a la memoria de la pantalla en este modo plano.
Hay algunas dificultades para realizar un seguimiento de la memoria de sprites, ya que también tiene que moverse, ya que las pantallas pueden desplazarse por toda la memoria.