Página 1 de 1

¿Cómo pintar en el borde?

Publicado: 06 Oct 2019 14:22
por Jinks
Ya había visto algún gráfico de Spectrum que aprovechaba el borde, pero acabo de ver la demo Across the edge (enlace en YouTube).

¿Cómo se hace técnicamente para pintar en el borde?

Ya sé que si cambiamos el color del borde, se comienza a usar el nuevo color en el próximo punto en el que el "haz" esté dibujando el borde. Incluso en BASIC si cambiamos el color del borde en un bucle sin fin, veremos líneas horizontales de distintos colores en el borde. Pero, ¿tanta precisión para pintar cada píxel? Que yo sepa el Spectrum no tiene ningún mecanismo (interrupciones o un registro que pueda leerse) para saber cuándo se comienza a trazar una nueva línea, mucho menos para cada columna.

Es que ni me creo que esto pueda hacerse en un Spectrum "básico". Por el sonido diría que hay un chip de sonido, así que debería ser un 128K, pero la generación de vídeo es igual que en un 48K, que yo sepa su hardware no añade nada para ayudar a pintar en el borde.

Por otro lado, en algunos momentos me cuesta creer que haya sólo 16 colores, lo que me hace pensar si no estará ejecutándose en un clon con capacidades extra... ¿o de verdad es un Spectrum? ¿Pero cómo se hace eso?

Re: ¿Cómo pintar en el borde?

Publicado: 06 Oct 2019 14:25
por minter
Resumiendo...
Que se te ha quedado el culo torcido, no? -507

Re: ¿Cómo pintar en el borde?

Publicado: 06 Oct 2019 16:37
por carmeloco
Creo que es teniendo en cuenta los ciclos de CPU que usa cada instrucción usada en assembler. Conociendo cuanto dibuja por cada ciclo, se puede saber cuanto va a dibujar según los ciclos que pasen.

Re: ¿Cómo pintar en el borde?

Publicado: 06 Oct 2019 18:09
por BlackHole
No, no hay interrupciones de Raster en Spectrum. Así que efectivamente solo se puede empezar a pintar en el Vertical Blank, y a partir de ahí hay que calcular escrupulosamente los ciclos de reloj que va a durar cada línea. Si te fijas con cuidado, no es modificable cada pixel, pues la instrucción OUT (254),A que es la mínima que puede cambiar el borde, dura 11 ciclos y durante la misma, el barrido del televisor ha recorrido un espacio equivalente a una docena de pixeles y no permite modificaciones en medio. O bien se usan largísimas ristras de cientos de OUTs, o se usa OUTI/OUTIR que tomaría los datos de una lista apuntados por HL, pero en ese caso la granularidad se vería reducida a 16 ciclos.

Hay que tener en cuenta que aquí gobierna la ULA y los cálculos de tiempos en un Spectrum 16/48K serán diferentes a los de un 128K. De todas formas, esta demo es para el clon ruso Pentagon, que tiene modos adicionales como el HiColor y el Gigascreen. Porque de otra forma sería inexplicable lo que se ve en el vídeo de YouTube, donde hay caracteres de 8x8 con 4 colores en medio de la pantalla durante algunas secciones de la demo. Y bueno, esos marrones, esos naranjas, esos violetas, esos verdes oscuros y esos grises ya me diréis de donde salen. En un Spectrum normal no funcionaría.

Re: ¿Cómo pintar en el borde?

Publicado: 06 Oct 2019 18:13
por zx81
Lo primero, esa demo no es para Spectrum, es para los modelos rusos y esos no dibujan en borde exactamente igual que el Spectrum.

La idea básica es que un frame dura 69888 ciclos Z80 en el 48k. Justo en el primer ciclo de cada cuadro se produce una interrupción. A partir de ahí, sabiendo que cada línea dura 224 ciclos y que se dibujan 64 líneas superiores de borde antes de empezar a dibujar la pantalla, teniendo en cuenta que una TV CRT no visualizará al menos las primeras 16 líneas, solo hay que contar ciclos para ir cambiando el borde de color cuando se quiera, sin perder de vista que el cambio de color se produce en bloques de 8 pixels (los modelos rusos cambian el borde al pixel), como si fueran caracteres.

Al final, se trata de hacer rutinas perfectamente medidas. Creo que están publicados los fuentes de las rutinas BorderTrix de Andrew Owen, donde puedes ver cómo se hace.

Re: ¿Cómo pintar en el borde?

Publicado: 06 Oct 2019 21:01
por Jinks
Vale, si es para Pentagon entonces me quedo más tranquilo :)
En pouet.net ponía platform: Spectrum
Y sí, otra de las cosas que se me hacían raras de ver era el color naranja. Aunque uno ya no tiene claro si es naranja o si intercalan frames con rojo y amarillo para que el ojo vea la mezcla (que supongo que será posible).

Re: ¿Cómo pintar en el borde?

Publicado: 07 Oct 2019 10:02
por Kyp
La demo es espectacular. Habría que probarla en un Spectrum normal a ver que tal se ve :D

Re: ¿Cómo pintar en el borde?

Publicado: 07 Oct 2019 18:36
por jltursan
Jinks escribió:Y sí, otra de las cosas que se me hacían raras de ver era el color naranja. Aunque uno ya no tiene claro si es naranja o si intercalan frames con rojo y amarillo para que el ojo vea la mezcla (que supongo que será posible).


Hacen precisamente eso, intercalar frames con colores diferentes para crear la ilusión de un nuevo color. El chispas que ha subido el video lo ha hecho eliminando el flicker y por eso indica "ZX Spectrum full-resolution demo - CC`2016 (noflic 50Hz)"; pero aunque chulísimo, cuando ves todos estos efectos en una TV real se te cae el alma a los pies un poco.

Re: ¿Cómo pintar en el borde?

Publicado: 07 Oct 2019 21:21
por Jinks
jltursan escribió:
Jinks escribió:Y sí, otra de las cosas que se me hacían raras de ver era el color naranja. Aunque uno ya no tiene claro si es naranja o si intercalan frames con rojo y amarillo para que el ojo vea la mezcla (que supongo que será posible).


Hacen precisamente eso, intercalar frames con colores diferentes para crear la ilusión de un nuevo color. El chispas que ha subido el video lo ha hecho eliminando el flicker y por eso indica "ZX Spectrum full-resolution demo - CC`2016 (noflic 50Hz)"; pero aunque chulísimo, cuando ves todos estos efectos en una TV real se te cae el alma a los pies un poco.


A lo mejor también depende de la tele...

Re: ¿Cómo pintar en el borde?

Publicado: 07 Oct 2019 21:25
por Jinks
minter escribió:Resumiendo...
Que se te ha quedado el culo torcido, no? -507

Define "culo torcido", donde yo vivo no usamos esa expresión y yo me lo veo recto... Uy, he dicho recto.

Re: ¿Cómo pintar en el borde?

Publicado: 08 Oct 2019 00:15
por minter
Jinks escribió:
minter escribió:Resumiendo...
Que se te ha quedado el culo torcido, no? -507

Define "culo torcido", donde yo vivo no usamos esa expresión y yo me lo veo recto... Uy, he dicho recto.

https://www.tubabel.com/definicion/3918 ... lo-torcido

:)

Re: ¿Cómo pintar en el borde?

Publicado: 08 Oct 2019 18:40
por jltursan
A lo mejor también depende de la tele...


Totalmente, en algunas el parpadeo es mareante y en otras se nota menos; pero yo todavia tengo por descubrir la que de la misma imagen que un emulador fundiendo frames y generando colores maravillosos -507

Tendría que probar con monitores planos, ahora que tengo alguno con soporte de los 15Khz; igual suena la flauta y el resultado es bueno. Por lo pronto, el efecto entrelazado de los Amiga desaparece casi por completo y eso es porque funde frames. Y ahora que sigo pensando, aun a riesgo de un bajón de azucar, los conversores a HDMI he visto que funcionan más o menos igual de bien, puede que para este tipo de efectos funcionen de lujo.

Re: ¿Cómo pintar en el borde?

Publicado: 08 Oct 2019 21:03
por Jinks
minter escribió:https://www.tubabel.com/definicion/39188-con-el-culo-torcido

:)


Ah, vale, con eso y con saber cuándo decir lo de "tener hype" (si es que no se ha pasado de moda ya), actualizo mi vocabulario y ya no se me nota que soy retro.