Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
- jltursan
- Amiga 2500
- Mensajes: 4028
- Registrado: 13 Oct 2006, 19:45
- Sistema Favorito: MSX
- primer_sistema: Dragon
- Ubicación: Serracines, Madrid, España
- Gracias dadas: 57 veces
- Gracias recibidas: 157 veces
- Contactar:
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
Y ya puestos, ¿por qué no usar sprites precompilados si lo que se busca es la velocidad apabullante?. Sí, el consumo de memoria se dispara; pero los resultados pueden ser interesantes si se dispone de ella.
- explorer
- MSX Turbo R
- Mensajes: 410
- Registrado: 11 May 2014, 17:10
- Sistema Favorito: Atari ST
- primer_sistema: Atari 800XL/600XL
- consola_favorita: Atari 2600
- Primera consola: Atari 2600
- Ubicación: Valladolid, España
- Gracias dadas: 2 veces
- Gracias recibidas: 142 veces
- Contactar:
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
Pero eso te vale para ahorrarte los cálculos de (fondo & máscara or sprite) para todo el ancho del sprite, pero no te ahorras el cálculo del siguiente scanline para pintar la siguiente línea, si el sprite se mueve por toda la pantalla.
Si fuera una disposición completamente lineal, entonces sí que puedes poner una suma constante al final del pintado horizontal para posicionarte en la siguiente línea y seguir pintando, pero el Spectrum... se las trae.
Lo puedes usar en casos especiales... como por ejemplo en sprites que sabes que no se van a mover de su tercio de pantalla o de su fila horizontal. Los típicos enemigos que se mueven horizontalmente, disparos, pintado de fondos...
¿Es a esto a lo que te refieres?
Si fuera una disposición completamente lineal, entonces sí que puedes poner una suma constante al final del pintado horizontal para posicionarte en la siguiente línea y seguir pintando, pero el Spectrum... se las trae.
Lo puedes usar en casos especiales... como por ejemplo en sprites que sabes que no se van a mover de su tercio de pantalla o de su fila horizontal. Los típicos enemigos que se mueven horizontalmente, disparos, pintado de fondos...
¿Es a esto a lo que te refieres?
- jltursan
- Amiga 2500
- Mensajes: 4028
- Registrado: 13 Oct 2006, 19:45
- Sistema Favorito: MSX
- primer_sistema: Dragon
- Ubicación: Serracines, Madrid, España
- Gracias dadas: 57 veces
- Gracias recibidas: 157 veces
- Contactar:
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
Sí, el Spectrum no lo pone fácil
No concretaba el uso; pero efectivamente, tal como dices, los movimientos limitados a un tercio se beneficiarían de la técnica. Si hay cruce ya no puedes dejar precalculadas las posiciones. Siempre puedes complicar el algoritmo y cuando se efectue el cruce conmutar al mecanismo tradicional. Enrevesado; pero la mayor parte de los movimientos tendrían lugar dentro de un tercio.
La otra brutalidad que he llegado a ver es el empleo del "stack blasting"; pero eso ya es enrevesado de verdad, juraría que por la web vi el código del Cobra, que empleaba la técnica y sigue siendo de lo mejor.
No se que podría salir de la mezcla de ambas técnicas
No concretaba el uso; pero efectivamente, tal como dices, los movimientos limitados a un tercio se beneficiarían de la técnica. Si hay cruce ya no puedes dejar precalculadas las posiciones. Siempre puedes complicar el algoritmo y cuando se efectue el cruce conmutar al mecanismo tradicional. Enrevesado; pero la mayor parte de los movimientos tendrían lugar dentro de un tercio.
La otra brutalidad que he llegado a ver es el empleo del "stack blasting"; pero eso ya es enrevesado de verdad, juraría que por la web vi el código del Cobra, que empleaba la técnica y sigue siendo de lo mejor.
No se que podría salir de la mezcla de ambas técnicas
- Bubu
- Atari 1040 STf
- Mensajes: 886
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 20 veces
- Gracias recibidas: 60 veces
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
El tema de la disposición de los píxeles en la VRAM la verdad es que está muy muy bien montado, y está con vistas a dibujar en "modo texto" y de manera muy rápida y eficiente: si quieres dibujar un carácter, sólo tienes que incrementar el registro H una vez para cada scanline, y si quieres pasar al siguiente carácter, sólo tienes que incrementar el registro L. Así que para imágenes pequeñas, es decir, que no midan más de 8 filas, este método es ideal.
Pero no sólo eso, sino que ahorra mucha memoria. Téngase en cuén que tenemos 24 filas de 8 scanlines y 32 columnas, es decir:
24 x 8 x 32 = 6144 bytes, o direcciones de memoria a mapear. De esos 3 números, el que no es (2 EXP n) es el 24, por tanto le sobra bits. Así que ese 24, que es 8x3, podemos considerar que es (2 EXP 3) x 3, así que el 3 que no es múltiplo de 2 lo tenemos que meter en la parte más pesada del byte, y es lo que llamamos el tercio de pantalla. Este tercio puede tener 3 valores: 0, 1 ó 2. Por tanto, perdemos sólo una posibilidad, que es el valor 3. Si la pantalla tuviera 4 cuartos, uséase, 32 filas en vez de las 24 filas, otro gallo cantaría.
Pero no sólo eso, sino que ahorra mucha memoria. Téngase en cuén que tenemos 24 filas de 8 scanlines y 32 columnas, es decir:
24 x 8 x 32 = 6144 bytes, o direcciones de memoria a mapear. De esos 3 números, el que no es (2 EXP n) es el 24, por tanto le sobra bits. Así que ese 24, que es 8x3, podemos considerar que es (2 EXP 3) x 3, así que el 3 que no es múltiplo de 2 lo tenemos que meter en la parte más pesada del byte, y es lo que llamamos el tercio de pantalla. Este tercio puede tener 3 valores: 0, 1 ó 2. Por tanto, perdemos sólo una posibilidad, que es el valor 3. Si la pantalla tuviera 4 cuartos, uséase, 32 filas en vez de las 24 filas, otro gallo cantaría.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- Bubu
- Atari 1040 STf
- Mensajes: 886
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 20 veces
- Gracias recibidas: 60 veces
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
Madredediós... me acabo de releer y qué mal lo he contado, lo que pasa es que es muy difícil de entender si no se acompaña de imágenes y pantallazos, pero vaya, que sus aseguro que la VRAM del Spectrum está optimizada para ahorrar memoria y para agilidad en el modo texto.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- jltursan
- Amiga 2500
- Mensajes: 4028
- Registrado: 13 Oct 2006, 19:45
- Sistema Favorito: MSX
- primer_sistema: Dragon
- Ubicación: Serracines, Madrid, España
- Gracias dadas: 57 veces
- Gracias recibidas: 157 veces
- Contactar:
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
Leyendo tu mensaje ya no lo dudo
Si es para que esté optimizada a la hora de trabajar en modo caracter, de siempre, la del MSX (o de cualquier máquina con el TMS9918 o primo). Si estará bien parida que cuando AMstrad decidió hacer un procesador de textos y dio a luz al PCW, esa fue la arquitectura de pantalla con que lo dotó, exceptuando color, claro.
Si es para que esté optimizada a la hora de trabajar en modo caracter, de siempre, la del MSX (o de cualquier máquina con el TMS9918 o primo). Si estará bien parida que cuando AMstrad decidió hacer un procesador de textos y dio a luz al PCW, esa fue la arquitectura de pantalla con que lo dotó, exceptuando color, claro.
- Bubu
- Atari 1040 STf
- Mensajes: 886
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 20 veces
- Gracias recibidas: 60 veces
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
AjAjAJJAjAJAA, pues a ver si va a ser eso, la noche que lo escribí me había zampado 2 pelotazos, pero vaya, lo normal
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- Bubu
- Atari 1040 STf
- Mensajes: 886
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 20 veces
- Gracias recibidas: 60 veces
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
Acabo de encontrar exácticamente el pispo código que el que propuso aquí explorer, es el escrito por el usuario R-Tape en este foro, lo que él llama "nextlinedown":
https://spectrumcomputing.co.uk/forums/ ... t=20#p3000
¿Tú lo pillaste de ahí? Si no, habéis escrito exácticamente la misma sub-rutina
https://spectrumcomputing.co.uk/forums/ ... t=20#p3000
¿Tú lo pillaste de ahí? Si no, habéis escrito exácticamente la misma sub-rutina
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
- explorer
- MSX Turbo R
- Mensajes: 410
- Registrado: 11 May 2014, 17:10
- Sistema Favorito: Atari ST
- primer_sistema: Atari 800XL/600XL
- consola_favorita: Atari 2600
- Primera consola: Atari 2600
- Ubicación: Valladolid, España
- Gracias dadas: 2 veces
- Gracias recibidas: 142 veces
- Contactar:
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
¡Ostras!, pues sí, ¡son iguales!
Y no, no la copié de ahí, simplemente le estuve pensando un rato cómo optimizarla. Fíjate que hice una primera versión el día 14 de julio y se me ocurrió la "idea feliz" el 16 de julio.
Quizás llegué a la misma solución porque el hardware de vídeo ya te lo condiciona. Quiero decir que con un hardware más versátil, hay más soluciones.
Y no, no es la única solución posible. Lo ideal es que no se hiciesen cálculos. Pero en informática, si no quieres hacer cálculos, los debes hacer antes y guardarlos en memoria. Por ejemplo, en forma de tablas.
Y no, no la copié de ahí, simplemente le estuve pensando un rato cómo optimizarla. Fíjate que hice una primera versión el día 14 de julio y se me ocurrió la "idea feliz" el 16 de julio.
Quizás llegué a la misma solución porque el hardware de vídeo ya te lo condiciona. Quiero decir que con un hardware más versátil, hay más soluciones.
Y no, no es la única solución posible. Lo ideal es que no se hiciesen cálculos. Pero en informática, si no quieres hacer cálculos, los debes hacer antes y guardarlos en memoria. Por ejemplo, en forma de tablas.
- Bubu
- Atari 1040 STf
- Mensajes: 886
- Registrado: 04 Abr 2018, 23:10
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Atari 2600
- Primera consola: Nintendo GameBoy
- Gracias dadas: 20 veces
- Gracias recibidas: 60 veces
Re: Zx Spectrum: Cómo calcular el siguiente scanline en VRAM
Pues me parece alucinante que 2 personas por separado hayáis llegado a la mismísima solución, esto me produce la emoción de la sabiduría y la ciencia, jiji. Esto sisnifica que tié que ser así, y que está altamente optimizado
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 19 invitados