2009-11-17 16 views
57

Ok. Espero que no se cierre porque tengo esta curiosidad desde hace 25 años y me encantaría entender el truco.Dibuje en el borde de la pantalla en Commodore 64

En el comodoro 64 el borde no era direccionable por el 6569 VIC. Todo lo que podía hacer era dibujar píxeles en el área central, donde se movía el cursor. El borde siempre fue uniforme, aunque podrías cambiar su color con poke 53280, si recuerdo mal el color.

Sin embargo, recuerdo claramente las introducciones de juegos donde el borde se presentó con gráficos, como si fuera totalmente direccionable. Traté de entender cómo funcionaba, pero nunca llegué al punto. las leyendas dicen que fue un uso inteligente de los duendes, que, en algunas circunstancias, podría dibujarse en el borde, pero no sé si es una leyenda urbana.

editar: acaba de leer esto desde uno de los enlaces proporcionados

Sprites se multiplexan a través de líneas de trama verticales (de más de 8 sprites, a veces hasta 120 sprites). Hasta la cresta Grupo liberado Krestage 3 en de mayo de 2007 se produjo la percepción común de que no más de 8 sprites podría aparecer en una línea de trama, pero asignación nueva coordenadas Y lo hizo vuelven a aparecer más abajo en la pantalla.

Este es el mal .... a vencer la trama y la posición del sprite antes de que llegue allí ...

+0

wow ... incluso si obtiene una respuesta, ¿tiene la posibilidad de probarla? – Dani

+5

Mi c64 espera en el sótano –

+0

Estoy bastante seguro de que mi padre todavía tiene nuestro viejo C64 escondido en algún lugar en el sótano también. – gnovice

Respuesta

40

En primer lugar, solo se pueden mostrar los sprites en el área del borde o un patrón repetitivo de 8 bits (8 píxeles de ancho) que se lee desde el último byte del banco de video, generalmente $ 3fff. Tenga en cuenta que solo puede ver estos sprites o patrones de 8 bits cuando engaña al chip VIC para que "no muestre" los bordes. Vea abajo.

Los bordes tienen una prioridad más alta que los sprites, por lo que normalmente cuando se dibuja un sprite en un área de borde, el borde cubre el sprite. Con un poco de engaño de chips VIC puedes desactivar los bordes.

Puede girar los bordes superior e inferior con bastante facilidad (explicaré a continuación), y el lado bordea con un tiempo muy crítico.

En primer lugar, un poco de información sobre cómo funciona el chip VIC en un c64.

El chip VIC dibuja la pantalla desde la esquina superior izquierda a la esquina superior derecha, luego por una línea y de izquierda a derecha hasta que se dibuja toda la pantalla. Realiza este redibujado 50 veces por segundo (para unidades PAL) o 60 veces por segundo para (unidades NTSC).

Hay un registro VIC de 8 bits que contiene la posición vertical del ráster en un momento dado. $ d012. En realidad, hay más de 255 posiciones posibles, por lo que el noveno bit se almacena en el bit 7 (el bit más alto) o se registra $ d011. Entonces, en cualquier punto puede leer estos registros y averiguar la posición vertical del ráster. No hay un registro disponible para leer la posición x del ráster.

Otra característica interesante del chip VIC fue utilizada para solucionar un problema cuando se usa el desplazamiento de hardware. El desplazamiento vertical básico se logró utilizando un registro de hardware para mover la pantalla de 0 a 7 píxeles verticalmente. Una vez que haya alcanzado el límite (0 o 7 según la dirección del desplazamiento) moverá cada bloque de caracteres (8x8 píxeles) un bloque verticalmente y dibujará los nuevos datos que se mostrarán en la parte superior (o en la dirección inferior). Esto funciona muy bien, excepto que cada 8 píxeles de desplazamiento vería datos "pop" en la pantalla. Para remediar esto, podría hacer que el área del borde crezca en 8 píxeles verticalmente al borrar el bit 3 en el registro $ d011. Esto se llama modo de 24 filas. De forma predeterminada, la pantalla se estableció en 25 filas de caracteres de 8x8 píxeles. En el modo de 24 líneas, aún podría dibujar caracteres en la fila inferior, simplemente quedarían ocultos por el borde.

Así que el truco para apagar los bordes superior e inferior es:

1) Establecer la pantalla al modo de 25 hileras

2) esperar a que la trama para llegar a una posición vertical entre $ f2 $ fa (los 8 píxeles entre donde se inicia el borde tanto en el modo de 24 filas como en el modo de 25 filas).

3) Ajuste la pantalla a modo de fila 24 ... moviendo el inicio vertical de la frontera por encima de la posición de la trama actual

4) Esperar hasta después de la posición trama vertical ($ FA)

5) Repita cada cuadro

Paso 3) engaña al chip VIC haciéndole creer que ya comenzó a dibujar el borde, por lo que nunca comienza a dibujarlo. Voila, los bordes superior e inferior están abiertos.

lado Con respecto a las fronteras de que puede hacer lo mismo con diferentes registros, pero como el movimiento horizontal de la trama es mucho más rápido entonces el movimiento vertical del tiempo tiene que ser mucho más fuerte. Y hay otro problema para tener en cuenta llamado jitter. < -que no explicaré aquí. Busque en la web "Stable Raster C64" para una explicación detallada de ese problema.

+1

Sí, el modo de 24 filas que conocí, pero nunca imaginé que podría usarse de esta manera ... Lo único que no entiendo es que básicamente permite borrar el fondo. El modo de 24 bordes crece 8 píxeles en el borde inferior, pero cuando borra el borde inferior, el ráster vuelve a la fila 0 y comienza a dibujar el borde en virtud del restablecimiento. –

+1

No es correcto al suponer que los indicadores de borde se restablecen al comienzo de la actualización de la pantalla. El indicador para detener el trazado del borde ocurre alrededor de la línea 48 o 56, dependiendo del modo de 24 o 25 filas. La bandera para comenzar a dibujar el borde solo ocurre en la línea $ f2 y $ fa, nuevamente dependiendo del modo de 24 o 25 filas de char. Por lo tanto, cuando el indicador de "iniciar extracción" del borde no se establece alrededor de la línea $ fa, no intenta de nuevo hasta la próxima región $ f2- $ fa. – JohnD

+0

aw ... eso es fantástico: D –

3

PRINT "IT WAS 53280, amigo."

+0

Sí, y 53281 era el interior. –

+0

¡Gracias! me estoy haciendo viejo. era un mantra en ese momento. –

2

Por lo que entiendo, esto solo es posible para sprites.

Los Sprites pueden estar en el área del borde, y el borde se sobrepone. Por algún truco, el borde puede ser eliminado.

4

Voy a hacer una puñalada en la oscuridad aquí (no he hecho esto yo mismo). Encontré esto en wikipedia.

El c64demo section explica que:

Efectos creía imposible eran lograr en demos, sobre todo debido a indocumentados efectos secundarios relacionados a la MOS Technology VIC-II chip. Algunos ejemplos para VIC-engaño:

Uno de los cortes mencionados fue:

scrollers Sprite se colocaron en la frontera . Al engañar al hardware no para dibujar el borde alrededor de la pantalla, los sprites se pueden mover a esta área y se muestran.

Por supuesto, la parte interesante de la pregunta es cómo se hace. Sugiero buscar en algún demo database que incluya el código fuente en la búsqueda de una demostración que emplee el truco.

9

Tenga en cuenta que lo que hizo Krestage 3 (como se menciona en la pregunta) es diferente.

Un nivel del truco es desordenar el borde cuando se está dibujando la parte inferior del "papel" (rectángulo del área de trabajo, la cosa dentro del borde). Esto le permite tener sprites en el borde superior e inferior.

Un nivel superior es meterse con él en el borde derecho del papel, en cada línea de trama, todo como se explica en la respuesta de JohnD anterior. Esto le permite tener sprites en los bordes izquierdo y derecho.

Nada de esto le permite tener más de 8 sprites en una línea. Eso es solo magia de Krest.

Con mucho, el mejor recurso (que conozco) para el chip VIC es "The MOS 6567/6569 video controller (VIC-II) and its application in the Commodore 64" por Christian Bauer y un apéndice útil es "The memory accesses of the MOS 6569 VIC-II and MOS 8566 VIC-IIe Video Interface Controller" por Marko Mäkelä.
Lector de advertencias: estas son algo técnicas, y puede que las encuentres más fáciles de entender después de que hayas programado algunos efectos VIC.

Si los enlaces alguna vez mueren, solo busca los artículos por título en Google, se replican infinitamente.

2

Gráficos en el borde: cualquiera de los sprites O usando el efecto $ 3FFF (que en realidad NO son sprites en absoluto). Para entrar en detalle necesita mucho más espacio y tiempo de los que tengo disponible aquí.

+0

+1 solo porque PD es increíble. –

6

Usted puede abrir las fronteras superior e inferior con un simple programa BASIC:

 
    1 poke56334,0:poke53266,212:poke53265,27:poke16383,0 
    2 h=53265:i=53273:h1=19:h2=27:i1=1 
    3 pokei,i1:waiti,i1:pokeh,h1:pokeh,h2:goto3 
1

También puede obtener sprites a la frontera en básica: BASIC Sprites in Border

IIRC, también había alguna manera de confundir el video chip así, que dibuja la 26ª línea de texto.

Cuestiones relacionadas