¿Cómo pintar en el borde?

Avatar de Usuario
Jinks
Mensajes: 2700
Registrado: 09 Oct 2013 16:47
Agradecido : 348 veces
Agradecimiento recibido: 478 veces
Contactar:

¿Cómo pintar en el borde?

Mensajepor Jinks » 06 Oct 2019 14:22

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?

Avatar de Usuario
minter
Mensajes: 4826
Registrado: 22 Jul 2014 18:51
Agradecido : 6762 veces
Agradecimiento recibido: 2602 veces

Re: ¿Cómo pintar en el borde?

Mensajepor minter » 06 Oct 2019 14:25

Resumiendo...
Que se te ha quedado el culo torcido, no? -507

Avatar de Usuario
carmeloco
Mensajes: 1961
Registrado: 16 Dic 2015 08:56
Agradecido : 27 veces
Agradecimiento recibido: 432 veces

Re: ¿Cómo pintar en el borde?

Mensajepor carmeloco » 06 Oct 2019 16:37

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.

BlackHole
Mensajes: 1669
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 29 veces
Agradecimiento recibido: 523 veces

Re: ¿Cómo pintar en el borde?

Mensajepor BlackHole » 06 Oct 2019 18:09

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.

Avatar de Usuario
zx81
Mensajes: 516
Registrado: 23 Feb 2013 21:31
Agradecido : 138 veces
Agradecimiento recibido: 282 veces

Re: ¿Cómo pintar en el borde?

Mensajepor zx81 » 06 Oct 2019 18:13

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.
Cuando utilizo una palabra, esa palabra significa, exactamente, lo que yo quiero que signifique. Ni más, ni menos.
Humpty Dumpty

Empieza a jugar sin tener que compilar: Emulador JSpeccy
ZX Spectrum bare-metal para Raspberry PI ZXBaremulator

Avatar de Usuario
Jinks
Mensajes: 2700
Registrado: 09 Oct 2013 16:47
Agradecido : 348 veces
Agradecimiento recibido: 478 veces
Contactar:

Re: ¿Cómo pintar en el borde?

Mensajepor Jinks » 06 Oct 2019 21:01

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).

Avatar de Usuario
Kyp
Mensajes: 888
Registrado: 03 Oct 2013 17:13
Agradecido : 132 veces
Agradecimiento recibido: 347 veces

Re: ¿Cómo pintar en el borde?

Mensajepor Kyp » 07 Oct 2019 10:02

La demo es espectacular. Habría que probarla en un Spectrum normal a ver que tal se ve :D

jltursan
Mensajes: 5619
Registrado: 20 Sep 2011 13:59
Ubicación: Madrid
Agradecido : 990 veces
Agradecimiento recibido: 2040 veces
Contactar:

Re: ¿Cómo pintar en el borde?

Mensajepor jltursan » 07 Oct 2019 18:36

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.

Avatar de Usuario
Jinks
Mensajes: 2700
Registrado: 09 Oct 2013 16:47
Agradecido : 348 veces
Agradecimiento recibido: 478 veces
Contactar:

Re: ¿Cómo pintar en el borde?

Mensajepor Jinks » 07 Oct 2019 21:21

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...

Avatar de Usuario
Jinks
Mensajes: 2700
Registrado: 09 Oct 2013 16:47
Agradecido : 348 veces
Agradecimiento recibido: 478 veces
Contactar:

Re: ¿Cómo pintar en el borde?

Mensajepor Jinks » 07 Oct 2019 21:25

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.

Avatar de Usuario
minter
Mensajes: 4826
Registrado: 22 Jul 2014 18:51
Agradecido : 6762 veces
Agradecimiento recibido: 2602 veces

Re: ¿Cómo pintar en el borde?

Mensajepor minter » 08 Oct 2019 00:15

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

:)

jltursan
Mensajes: 5619
Registrado: 20 Sep 2011 13:59
Ubicación: Madrid
Agradecido : 990 veces
Agradecimiento recibido: 2040 veces
Contactar:

Re: ¿Cómo pintar en el borde?

Mensajepor jltursan » 08 Oct 2019 18:40

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.

Avatar de Usuario
Jinks
Mensajes: 2700
Registrado: 09 Oct 2013 16:47
Agradecido : 348 veces
Agradecimiento recibido: 478 veces
Contactar:

Re: ¿Cómo pintar en el borde?

Mensajepor Jinks » 08 Oct 2019 21:03

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.


Volver a “Software Spectrum”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados