Cómo hacer scroll de una fila completa en Zx Spectrum

Foro dedicado a la programación en todo tipo de sistemas clásicos.
Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 583
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: 13 veces
Gracias recibidas: 19 veces

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor Bubu » 14 Ago 2018, 23:58

Del Frogger sí te puedo hablar mucho, pues lo coñozco internamente bastante, me estudié en su momento el código fuente de la placa base. Resulta que en ella, el hardware que trae te hace todo el trabajo de scroll de gráficos en carretera y río: simplemente dibujas los gráficos, y ahora en una cierta dirección de memoria le pones el offset con el que quieres que se dibuje, y el hardware te lo desplaza hasta allí.
Por tanto los coches y los troncos son tratados como background, no así las ranas, serpientes y nutria, que son tratados como sprites propiamente dichos. Por eso con simplemente una CPU Z80 a 3MHz va sobrada, porque realmente no es la CPU la que hace los scrolls.

Yo ya tengo hecho el Frogger en Spectrum usando la tésnica del buffer y los pre-desplazamientos, y va muy bien, aunque es una obra de ingeniería el motor gráfico que creé. Pero me quedó por hacer los sprites de la rana rosa, las serpientes y la nutria. Además, había una dificultad añadida, y es que las tortugas mientras van por el río van moviendo las patitas como nadando, y los cocodrilos abren y cierran la boca... En fins, este juego es una paranoia si el hardware del sistema no ayuda, como es el caso del Spectrumñ

Bueno, de toas formas esto sólo era por darle otro enfoque al tema y estudiar una rutina de desplazamiento "in situ", jiji, cosa sobradamente conseguida ;)
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
explorer
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 239
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 recibidas: 49 veces
Contactar:

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor explorer » 15 Ago 2018, 00:57

Bubu escribió:Del Frogger sí te puedo hablar mucho, pues lo coñozco internamente bastante, me estudié en su momento el código fuente de la placa base.

¿Le tienes a mano?

Te cuento que estos días estaba viendo el código (está disponible) del remake del Donkey Kong para la Atari 2600, y es impresionante ver el análisis previo que hace el programador. Hizo capturas de imagen, cuadro a cuadro, de la versión arcade, y apuntó en un papel, píxel a píxel, cómo se mueven los barriles, los fuegos, el salto de Mario, etc., para luego llevarlo de forma idéntica a la Atari.

Versión original del juego:


Versión mejorada:


Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 583
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: 13 veces
Gracias recibidas: 19 veces

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor Bubu » 15 Ago 2018, 12:00

El desensamblado del Frogger para placas (año 81) sí lo tengo por ahí, en algún disco duro. Te lo busco y te lo envío.
Esto lo hice para el Spectrum en el año 2009,hace casi 10 años, pero es que desde el año 2004 estoy con este juego, lo porté a la GBA. Pero en el caso de la GBA me hice un emulador de Z80 y cargando la rom del Frogger se podía juegar (sin sonido). Para el Spectrum, como tiene un Z80 y el Frogger tamién lo tiene, pensé que sólo tenía que hacer correr la propoia rom del Frogger en el Spectrum, si acaso con algún cambio menor en la parte gráfica y sonora, pero nada más lejos. El hardware de la placa Frogger lo es todo en este juego.
Al final tuve que optar en Spectrum por hacer el juego desde 0, y para los gráficos puse el MAME, le di a F4, vi el mapeado gráfico, lo exporté al Paint, y ahí lo ajusté a 2 colores por cuadro, pues la placa del Frogger usa 4 colores por cuadro.

En fin, esto de la programación en 8 bits es absolutamente emocionante.

Bueno, cuando encuentre lo del listado te lo paso ;)
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Namek
Atari 1040 STf
Atari 1040 STf
Mensajes: 648
Registrado: 11 Jul 2011, 13:13
Gracias dadas: 12 veces
Gracias recibidas: 32 veces

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor Namek » 15 Ago 2018, 12:43

Bubu escribió:Bueno, he estado adaptando la pantalla original del Frogger a la resolución (256x192) y colores (8 colores, sin clash attribute) del Spectrum:

Imagen

Ya sólo habría que escribir la rutina que rote a la izquierda, y aplicársela a esta pantalla. Concretamente tiene que mover 10 filas: 5 en el río y 5 en la carretera, jiji.

Sin animo de menospreciar tu adaptación me he permitido hacer la mia:

Imagen

Faltan los marcadores que logicamente irian a la izquierda y en vertical... :roll:

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 583
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: 13 veces
Gracias recibidas: 19 veces

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor Bubu » 15 Ago 2018, 13:07

Queda chulísima, Namek, el poblema es que con esa configuración tienes que mover no 10, sino 20 filas, y eso ya creo que haría echar humo al Spectrum, AaJajaJA. La solución que usé en su momento fue dividir el juego en 2: primero salía la carretera sola, y cuando la rana llegaba al medio, hacía scroll hacia abajo y aparecía el río. Con esto sólo tenía que hacer scroll de 10 filas.

A ver si subo un vidrio al YT con la adaptación del Frogger ;)

PD: Te comento algunas inconveniencias con poner los marcadores en vertical a ambos lados:

- Cuando llegues a la fase 11 p.ej., no caben las ranitas de número de fases.
- El scroll continuum hace que necesites los bordes verticales para imprimir ahí troncos y coches pero con papel y tinta negros pa que no se vean

Pero la verdad es que la idea de aprovechas las filas intermedias para dibujar las ruedas de otro color y los bajos de los troncos, es genial. ¡¡Enhorabuena!!
Si traslado esto al Frogger en 2 partes, yo creo que quedaría espectacular.
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 583
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: 13 veces
Gracias recibidas: 19 veces

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor Bubu » 15 Ago 2018, 14:49

Aquí está el vidrio:


Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 583
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: 13 veces
Gracias recibidas: 19 veces

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor Bubu » 17 Ago 2018, 18:13

explorer escribió:¿Le tienes a mano?


explorer, nu lo encuentro, torpedo, tengo 2 ó 3 discos duros de hace 15 años, de cuando me puse con ello, pero no lo veo. De toas formas lo que hice fue sencillo: descárgate la rom del Frogger, descomprímela, y métesela al ODA:

https://onlinedisassembler.com


Ahí verás el código fuente del Frogger:

Código: Seleccionar todo

                           .data:00000000 3a 00 40                         ld a,(0x4000)
                           .data:00000003 fe 55                            cp 0x55
                           .data:00000005 ca 01 40                         jp z,0x4001
                           .data:00000008 3a 00 88                         ld a,(0x8800)
                           .data:0000000b 31 00 88                         ld sp,0x8800
                           .data:0000000e c3 a3 02                         jp 0x02a3
                           .data:00000011 ff                               rst 0x38
                           .data:00000012 ff                               rst 0x38
                           .data:00000013 ff                               rst 0x38
                           .data:00000014 ff                               rst 0x38
                           .data:00000015 ff                               rst 0x38
                           .data:00000016 ff                               rst 0x38
                           .data:00000017 ff                               rst 0x38
                           .data:00000018 4f                               ld c,a
                           .data:00000019 3a fe 83                         ld a,(0x83fe)
                           .data:0000001c b7                               or a
                           .data:0000001d c8                               ret z
                           .data:0000001e e5                               push hl
                           .data:0000001f 21 00 83                         ld hl,0x8300
                           .data:00000022 34                               inc (hl)
                           .data:00000023 7e                               ld a,(hl)
                           .data:00000024 6f                               ld l,a
                           .data:00000025 71                               ld (hl),c
                           .data:00000026 e1                               pop hl
                           .data:00000027 c9                               ret


Sorry
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
explorer
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 239
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 recibidas: 49 veces
Contactar:

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor explorer » 17 Ago 2018, 19:06

Pensaba que estaba comentado... Vamos, ingeniería inversa, ya sabes.

Habría que hacerla un IDA para pasarlo a código, pero la licencia de ese maldito programa cuesta lo mismo que el testículo izquierdo :-(

¿Conocéis alguna otra herramienta para hacer ingeniería inversa? El Radare2 está bien, pero con z80 se cuelga, y aún le falta mucho para servir para ingeniería inversa de un proyecto entero.

Avatar de Usuario
Bubu
Amstrad PC 1640
Amstrad PC 1640
Mensajes: 583
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: 13 veces
Gracias recibidas: 19 veces

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor Bubu » 18 Ago 2018, 00:48

Efestivamente yo lo tenía desensamblado con mis comentarios:

; Rutina para recalcular velocidades

; Rutina para la demo

RAM_INI EQU 0x4000

etc

peeeero es que nu sé andandará...
¿A qué llamas tú ingeniería inversa? ¿Cómo sería un ejemplo de listado con la ingeniería inversa?
Si algo funciona... ¡¡NO LO TOQUES!! ¡¡NI DE COÑA!!

Avatar de Usuario
explorer
Amstrad PCW 8256
Amstrad PCW 8256
Mensajes: 239
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 recibidas: 49 veces
Contactar:

Re: Cómo hacer scroll de una fila completa en Zx Spectrum

Mensajepor explorer » 18 Ago 2018, 02:14

Pues... hay muchos, aunque se trata de una actividad nada legal.

Por ejemplo, está el desensamblado del juego ET para la Atari 2600: https://pastebin.com/AaSYZTHt

Yo mismo hice ya unos años el del Pengo (versión Arcade).

Se trata de justamente lo que has dicho: desensamblar, comentar y explicar cómo funciona el código, con el ánimo de aprender, modificar, ampliar o aplicar a otros sistemas.

Digo que no es muy legal (mejor dicho, no es nada legal), porque el código es propiedad de sus autores. La ingeniería inversa solo se permite si es para adaptar el funcionamiento del programa a un sistema y no queda más remedio que hacerlo de esa manera.


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado