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?
¿Cómo pintar en el borde?
- minter
- Mensajes: 4826
- Registrado: 22 Jul 2014 18:51
- Agradecido : 6762 veces
- Agradecimiento recibido: 2602 veces
- carmeloco
- Mensajes: 1961
- Registrado: 16 Dic 2015 08:56
- Agradecido : 27 veces
- Agradecimiento recibido: 432 veces
Re: ¿Cómo pintar en el borde?
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.
-
- 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?
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.
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.
- zx81
- Mensajes: 516
- Registrado: 23 Feb 2013 21:31
- Agradecido : 138 veces
- Agradecimiento recibido: 282 veces
Re: ¿Cómo pintar en el borde?
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.
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
Humpty Dumpty
Empieza a jugar sin tener que compilar: Emulador JSpeccy
ZX Spectrum bare-metal para Raspberry PI ZXBaremulator
- Jinks
- Mensajes: 2700
- Registrado: 09 Oct 2013 16:47
- Agradecido : 348 veces
- Agradecimiento recibido: 478 veces
- Contactar:
Re: ¿Cómo pintar en el borde?
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).
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).
-
- 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?
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.
- Jinks
- Mensajes: 2700
- Registrado: 09 Oct 2013 16:47
- Agradecido : 348 veces
- Agradecimiento recibido: 478 veces
- Contactar:
Re: ¿Cómo pintar en el borde?
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...
- Jinks
- Mensajes: 2700
- Registrado: 09 Oct 2013 16:47
- Agradecido : 348 veces
- Agradecimiento recibido: 478 veces
- Contactar:
Re: ¿Cómo pintar en el borde?
minter escribió:Resumiendo...
Que se te ha quedado el culo torcido, no?
Define "culo torcido", donde yo vivo no usamos esa expresión y yo me lo veo recto... Uy, he dicho recto.
- minter
- Mensajes: 4826
- Registrado: 22 Jul 2014 18:51
- Agradecido : 6762 veces
- Agradecimiento recibido: 2602 veces
Re: ¿Cómo pintar en el borde?
Jinks escribió:minter escribió:Resumiendo...
Que se te ha quedado el culo torcido, no?
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
-
- 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?
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
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.
- Jinks
- Mensajes: 2700
- Registrado: 09 Oct 2013 16:47
- Agradecido : 348 veces
- Agradecimiento recibido: 478 veces
- Contactar:
Re: ¿Cómo pintar en el borde?
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.
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados