Consultas técnicas ensamblador Z80 (para AGD)

Avatar de Usuario
pser1
Mensajes: 2233
Registrado: 08 Dic 2012 18:34
Agradecido : 308 veces
Agradecimiento recibido: 337 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor pser1 » 26 Jul 2018 21:58

Último mensaje de la página anterior:

explorer escribió:La dirección del 71 debería ser "etiqueta+1", cuidado. Pero si es código generado... es muy probable que sea un fallo de optimización.

Tampoco existe ninguna referencia a etiqueta+1
Digamos que simplemente *no* se ha optimizado la salida del generador de código Z-80
Esta combinación de ld a,NN seguida de and 7 la he encontrado en bastantes partes del código
Y muchas veces *no* tiene ninguna etiqueta por las cercanías ...
Resulta ser el paso previo a llamar a la rutina que colorea los sprites.
El código que le pasan va en el registro A y solo admite 8 valores, de ahí el AND ...
Como en el 6809 no tendremos 'cambios' de colores en los sprites, de entrada, me he limitado a no
convertir el código de estas partes.
Muchas gracias -thumbup
saludos
pere

BlackHole
Mensajes: 941
Registrado: 03 Ago 2011 23:07
Ubicación: Aluche, Madrid
Agradecido : 6 veces
Agradecimiento recibido: 121 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor BlackHole » 27 Jul 2018 18:11

Puede que sea código ensamblador generado desde un lenguaje de mayor nivel, por ejemplo C, y esa parte no esté optimizada.
Lo más lógico es que desde algún sitio hubiese un salto al AND por si el acumulador tiene otro valor en otro punto, pero si dices que no lo hay... tal vez solo sea un despiste del autor.
Lo que no tiene es relación alguna con puertos, ya que no hay instrucciones IN o OUT por ninguna parte.

Avatar de Usuario
pser1
Mensajes: 2233
Registrado: 08 Dic 2012 18:34
Agradecido : 308 veces
Agradecimiento recibido: 337 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor pser1 » 27 Jul 2018 18:34

BlackHole escribió:Puede que sea código ensamblador generado desde un lenguaje de mayor nivel, por ejemplo C, y esa parte no esté optimizada.
Lo más lógico es que desde algún sitio hubiese un salto al AND por si el acumulador tiene otro valor en otro punto, pero si dices que no lo hay... tal vez solo sea un despiste del autor.
Lo que no tiene es relación alguna con puertos, ya que no hay instrucciones IN o OUT por ninguna parte.

Efectivamente, me lié con IN/OUT ya que no entendí porqué hacen algo en dos pasos si se puede hacer en uno ...
La aplicación AGD funciona sobre Windows y 'crea' código Z80 para las acciones de los sprites que define el usuario.
Así que al convertir lineas de scripts en lineas de código lo hace a piñón y si el usuario quiere optimizarlo después, cosa suya ;-)
Lo importante es que el motor del juego si está optimizado por lo que los juegos son realmente 'jugables'
Muchas gracias
pere

Avatar de Usuario
pser1
Mensajes: 2233
Registrado: 08 Dic 2012 18:34
Agradecido : 308 veces
Agradecimiento recibido: 337 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor pser1 » 30 Jul 2018 17:37

Y ahora va una 'hardcore' referente al teclado y como lo leen en FOGGY.
Adjunto de entrada el código aquí. Los comentarios ya estaban en el original Z80

Código: Seleccionar todo

       ld hl,keys+6        ; address of last key.
       ld e,0              ; zero reading.
       ld d,7              ; keys to read.
joyke0 ld a,(hl)           ; get key from table
       call ktest          ; being pressed?
       ccf                 ; complement the carry
       rl e                ; rotate into reading.
       dec hl              ; next key.
       dec d               ; one less to do.
       jp nz,joyke0        ; repeat for all keys.
       jr joyjo1           ; store the value.
; ------------------------------------------------------------      
joyjo1 ld a,e              ; copy e register to accumulator
joyjo2 ld (joyval),a       ; remember value.
       ret
; ------------------------------------------------------------      
ktest  ld c,a              ; key to test in c.
       and 7               ; mask bits d0-d2 for row.
       inc a               ; in range 1-8.
       ld b,a              ; place in b.
       srl c               ; divide c by 8
       srl c               ; to find position within row.
       srl c
       ld a,5              ; only 5 keys per row.
       sub c               ; subtract position.
       ld c,a              ; put in c.
       ld a,254            ; high byte of port to read.
ktest0 rrca                ; rotate into position.
       djnz ktest0         ; repeat until we've found relevant row.
       in a,(254)          ; read port (a=high, 254=low).
ktest1 rra                 ; rotate bit out of result.
       dec c               ; loop counter.
       jp nz,ktest1        ; repeat until bit for position in carry.
       ret
; ------------------------------------------------------------      
joyval defb 0              ; joystick reading (8=UP,
keys   defb 34,26,38,37,32,31,18,36,28,20,12

Creo, aunque puedo haberme equivocado al trazar sobre papel esta rutina, que las letras equivalentes son las siguientes:
'P','O','A','Q','espacio','Z','I','1','2','3','4'
Si alguno de vosotros me pudiera confirmar estas 'sospechas', sería perfecto para intentar convertir este mejunje en código 6809
que en esta ocasión va a ser distinto para cada máquina ya que los teclados de CoCo y Dragón están conectados de forma diferente
-nb -nb -nb
saludos
pere

Avatar de Usuario
minter
Mensajes: 2028
Registrado: 22 Jul 2014 18:51
Agradecido : 1491 veces
Agradecimiento recibido: 613 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor minter » 30 Jul 2018 18:26

Las teclas son las standard para jugar a 2 jugadores sobre un teclado de spectrum de gomas.
Normalmente hay que entrelazar los brazos.como.cuando.brindas con cerveza.-507
Q arriba A abajo O izq P derecha y Fire espacio.
en el 1234 3 y 4 es mano derecha, izq y derecha. La Z disparo pero la I me despista a no ser que sea Pause, ya que esta ocupada la P.

Avatar de Usuario
pser1
Mensajes: 2233
Registrado: 08 Dic 2012 18:34
Agradecido : 308 veces
Agradecimiento recibido: 337 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor pser1 » 30 Jul 2018 19:06

minter escribió:Las teclas son las standard para jugar a 2 jugadores sobre un teclado de spectrum de gomas.
Normalmente hay que entrelazar los brazos.como.cuando.brindas con cerveza.-507
Q arriba A abajo O izq P derecha y Fire espacio.
en el 1234 3 y 4 es mano derecha, izq y derecha. La Z disparo pero la I me despista a no ser que sea Pause, ya que esta ocupada la P.

Maravilloso!!! -thumbup
Supongo que el motor (AGD engine) está pensado para soportar DOS jugadores en aquellos juegos que lo permitan claro!
Para el caso actual, FOGGY, no me imagino que pueda entrar un segundo jugador ...
La tecla 'I' se usa como indica el autor en la pantalla inicial para acceder al INVENTARIO
De hecho la rutina en FOGGY a punta al valor 18 (letra 'I') y va leyendo hacia atrás con lo cual solo acepta las siguientes:
POAQ ZI
La extraña aquí es la 'Z' que para un solo jugador no tengo idea de para que sirve.
De todas formas una vez hecho el shift left dentro del registro E, esta 'Z' quedaría en el bit 5 (32 decimal) pero en el programa
parece que no se utiliza.
En fin, las doy por buenas y trataré hacer una rutina que vaya enviando valores a las columnas del teclado y vaya leyendo la fila de
la tecla esperada, ya veremos cuan distinto resulta en ambas máquinas, básicamente será en la tabla de valores a leer ... espero!
Muchísimas gracias por esta información -thumbup -thumbup
saludos
pere

jltursan
Mensajes: 2251
Registrado: 20 Sep 2011 13:59
Agradecido : 109 veces
Agradecimiento recibido: 300 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor jltursan » 30 Jul 2018 19:19

Ya te mueves con soltura en el mundo del Spectrum :-D

Esa rutina, ktest, la tienes comentada precisamente aqui: https://chuntey.wordpress.com/2012/12/19/how-to-write-zx-spectrum-games-chapter-2/

Por lo demas es todo como indicas, se rellenan secuencialmente los bits de e con el estado de las teclas y se guarda el resultado en "joyval". Hay unos ganchos por ahi que seguro que son para intercalar la salida de la rutina equivalente para joystick Kempston que tambien tienes comentada en esa pagina que pongo. Los comentarios de joyval parecen que delatan su proposito :-)

Avatar de Usuario
pser1
Mensajes: 2233
Registrado: 08 Dic 2012 18:34
Agradecido : 308 veces
Agradecimiento recibido: 337 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor pser1 » 30 Jul 2018 20:17

jltursan escribió:Ya te mueves con soltura en el mundo del Spectrum :-D
Esa rutina, ktest, la tienes comentada precisamente aqui: https://chuntey.wordpress.com/2012/12/19/how-to-write-zx-spectrum-games-chapter-2/
Por lo demas es todo como indicas, se rellenan secuencialmente los bits de e con el estado de las teclas y se guarda el resultado en "joyval". Hay unos ganchos por ahi que seguro que son para intercalar la salida de la rutina equivalente para joystick Kempston que tambien tienes comentada en esa pagina que pongo. Los comentarios de joyval parecen que delatan su proposito :-)

Qué haría sin vuestra ayuda! -thumbup -drinks
Tengo ya codificado el tema teclado y voy a debugarlo (trazarlo) para comprobar si hace lo que debe ...
Además tengo que verificar que el mismo binario decodifica correctamente el teclado de CoCo y Dragón
Me miraré la página para el tema Joystick, parece interesante.
Cuando convierta la parte de Evnt00 supongo que el teclado ya moverá al personaje -grin
saludos
pere

Avatar de Usuario
minter
Mensajes: 2028
Registrado: 22 Jul 2014 18:51
Agradecido : 1491 veces
Agradecimiento recibido: 613 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor minter » 30 Jul 2018 23:05

Un detalle que acabo de recordar.
Creo que el joy tipo sinclair tiene mapeado las direcciones como números. Si mueves un joy sinclair en un spectrum sin un juego, desde el basic, creo que escribe esos números: 1234.
Alguien con spectrum que me lo confirme.
Entonces ya no sería 2o jugador, sino utilizar el joystick.

Edito:
Acabo de leer el articulo, efectivamente, es eso.

Avatar de Usuario
pser1
Mensajes: 2233
Registrado: 08 Dic 2012 18:34
Agradecido : 308 veces
Agradecimiento recibido: 337 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor pser1 » 30 Jul 2018 23:22

minter escribió:Un detalle que acabo de recordar.
Creo que el joy tipo sinclair tiene mapeado las direcciones como números. Si mueves un joy sinclair en un spectrum sin un juego, desde el basic, creo que escribe esos números: 1234.
Alguien con spectrum que me lo confirme.
Entonces ya no sería 2o jugador, sino utilizar el joystick.
Edito:
Acabo de leer el articulo, efectivamente, es eso.

Muchas gracias, lo tendré en cuenta!
La parte complicada es que las máquinas 6809 leen los joysticks usando un DAC mediante aproximaciones sucesivas ...
y obviamente esto se hace para cada uno de los dos ejes de los dos joysticks.
Para mas mala suerte, las PIAs empleadas son compartidas con la parte de sonido, que debe ser silenciada, o se produce
un ruido al leer los joysticks, muy común en los primeros juegos de Dragón.
saludos
pere

Avatar de Usuario
minter
Mensajes: 2028
Registrado: 22 Jul 2014 18:51
Agradecido : 1491 veces
Agradecimiento recibido: 613 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor minter » 31 Jul 2018 10:57

DAC y aproximaciones sucesivas?
En el dragon los joy pueden ser analógicos?

Avatar de Usuario
pser1
Mensajes: 2233
Registrado: 08 Dic 2012 18:34
Agradecido : 308 veces
Agradecimiento recibido: 337 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor pser1 » 31 Jul 2018 12:14

minter escribió:DAC y aproximaciones sucesivas?
En el dragon los joy pueden ser analógicos?

HAN DE SER analógicos, o sea con un par de potenciómetros reales dentro
De hecho para adaptar los joysticks de interruptores, se emplean circuitos CD4066 (quad analog switch)
y se utiliza con unas pocas resistencias para simular las posiciones extremas de los potenciómetros.
En Retrowiki se ha mostrado el circuito en algún hilo ...
saludos
pere

jltursan
Mensajes: 2251
Registrado: 20 Sep 2011 13:59
Agradecido : 109 veces
Agradecimiento recibido: 300 veces

Re: Consultas técnicas ensamblador Z80 (para AGD)

Mensajepor jltursan » 31 Jul 2018 17:51

Efectivamente los joysticks de Dragon son así de raritos; ahora, para ciertos juegos esa forma de funcionar era impagable. ¡Vaya vicios que me echaba con un vecino y el cashman!....EDITO: vaya, iba a poner un video y nadie ha creado todavía un video de ese juego, pensaba que TODO estaba ya en youtube :-D


Volver a “Software Dragon”

¿Quién está conectado?

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