Consultas Técnicas (ensamblador Z80 / Spectrum)

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 20 Mar 2015 11:41

Último mensaje de la página anterior:

muchas gracias, Chema -thumbup
Voy a cambiar de página para consultar lo que hacen los opcodes, he encontrado ésta que explica esta casuística del ADD para 16 bits:
http://z80-heaven.wikidot.com/instructions-set

Espero que cositas de este tipo no duelan mas adelante, cuando el programa ya sea muuuy grande!
Corrijo el código y lo dejaré como se mas abajo.
A ver que te parece ahora

saludos
pere

ldb	#8			        ; numero de bloques a buscar		; 	LD B, $08		 ; 833F 06 08		; número de bloques a revisar
i_8341 lda ,u ; recupera ID del bloque ; i_8341: LD A, (IX+$00) ; 8341 DD 7E 00 ; recupera ID del bloque apuntado
; AND A ; 8344 A7 ; es 0 (está libre)?
beq i_834B ; si 0, salta a i_834B ; JR Z, i_834B ; 8345 28 04 ; si, salta a i_834B (ya encontramos uno libre!)
; leax +$19,u ;ERROR ; suma 25, apunta al siguiente bloque ; ADD IX, DE ; 8347 DD 19 ; apunta al siguiente bloque
leau +$19,u ; OK ; suma 25, apunta al siguiente bloque ; ADD IX, DE ; 8347 DD 19 ; apunta al siguiente bloque
decb ; decrementa contador
bne i_8341 ; si no es cero, vuelve a i_8341 ; DJNZ i_8341 ; 8349 10 F6 ; decrementa contador y si todavía quedan bloques, mira el siguiente
; cmpx #$0000 ;ERROR
; cmpu #$0000 ; MAL ; AÑADIDO 19/3/2015
andcc #$11111011 ;20-3-15; fuerza flag Z=0 (no es cero)
i_834B pshs cc ; guarda flags
ldb #$FF ; pone $FF ; i_834B: LD (IX+$00), $FF ; 834B DD 36 00 FF ; pone ID = $FF en el bloque
stb ,u+ ; en el ID del bloque ; INC IX ; 834F DD 23 ; apunta al primer byte de datos del bloque
; e incrementa puntero ; POP BC ; 8351 C1 ; Recupera BC
puls cc ; recupera flags ; POP DE ; 8352 D1 ; Recupera DE (-24)
bne i_8378 ; si flag Z=0, salta a i_8378 ; JR NZ, i_8378 ; 8353 20 23 ; si no encontró un bloque libre, sale via i_8378
; beq e_834B ;SOBRA ; si flag Z=1, salta a e_834B (OK)
; jsr CtrlMal ;SOBRA ; derivado a un Break! ; JR NZ, i_8378 ; 8353 20 23 ; si no encontró un bloque libre, sale via i_8378

e_834B ldb ,y ; recupera (IY) --- CAMBIO ---
andb #%01000000 ; está el bit6 a 1? ; BIT 6, (IY+$01) ; 8355 FD CB 01 76 ; Está a 1 el bit 6 de (IY+$01)? es el byte alto de la primera palabra

Avatar de Usuario
Chema
Mensajes: 1807
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 805 veces
Agradecimiento recibido: 289 veces
Contactar:

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor Chema » 20 Mar 2015 13:41

Bueno yo de 6809 no se nada. Y lo que es peor, para mí es como si estuviese escrito en chino ;)

De todas formas si lo que se hace es una búsqueda en un área de memoria por un registro con un ID a cero y, si se encuentra, hacemos una cosa y si no se hace otra, pues lo mejor es casi escribirlo de la mejor manera posible en 6809, no intentar imitar la estructura del código en Z80... digo yo. En este caso me parece que ya lo haces, ¿no?

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 20 Mar 2015 15:38

Hola Chema,

como si lo encuentra salta a una etiqueta con flag Z=1 (encontrado)
lo que he hecho es forzar el flag Z a valor 0 con la sentencia ANDCC #%11111011
En el registro de flags el tercero por la derecha (bit 2) es el Z, así cuando no lo encuentre, llegará a la etiqueta con Z=0
Luego guardo flags en el stack, se hacen dos operaciones que modifican flags y los recupero del stack antes del control de Z

saludos y muchas gracias de nuevo
pere

jltursan
Mensajes: 2099
Registrado: 20 Sep 2011 13:59
Agradecido : 87 veces
Agradecimiento recibido: 187 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor jltursan » 20 Mar 2015 16:20

Como para estas cosas (que siempre te pillan a traición) viene bien una referencia, he transformado un viejo .HLP que tenía por ahí y que en su día me gustaba mucho porque incluía una guía bastante bien presentada del juego de instrucciones del Z80 (incluyendo flags T-states, un lujo). A ver que os parece...

No la he podido revisar mucho, espero que el formato no haya sufrido mucho con la transformación.
Adjuntos
Z80.zip
Ayuda Z80
(33.18 KiB) Descargado 48 veces

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 20 Mar 2015 16:29

Hola José Luis,
lo he descargado 2 veces, pero no me lo abre Windows, da error de fichero .zip
¿Podrías subirlo de nuevo?
muchas gracias

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 20 Mar 2015 16:37

esto es lo máximo que puedo ver usando el 7zip

Directorio de C:UsersserratDownloadsPruebas
20/03/2015 16:34 <DIR> .
20/03/2015 16:34 <DIR> ..
20/03/2015 16:32 <DIR> $WWAssociativeLinks
20/03/2015 16:32 <DIR> $WWKeywordLinks
20/03/2015 16:32 <DIR> html
20/03/2015 16:30 4.096 #IDXHDR
20/03/2015 16:30 0 #ITBITS
20/03/2015 16:30 404 #IVB
20/03/2015 16:30 1.927 #STRINGS
20/03/2015 16:30 4.279 #SYSTEM
20/03/2015 16:30 832 #TOPICS
20/03/2015 16:30 1.430 #URLSTR
20/03/2015 16:30 624 #URLTBL
20/03/2015 16:30 204 #WINDOWS
20/03/2015 16:30 0 $FIftiMain
20/03/2015 16:30 2.715 $OBJINST
20/03/2015 16:30 19.663 hscA144.hhk
13 archivos 36.174 bytes

jltursan
Mensajes: 2099
Registrado: 20 Sep 2011 13:59
Agradecido : 87 veces
Agradecimiento recibido: 187 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor jltursan » 20 Mar 2015 16:40

Creo que ya se lo que ha pasado, prueba a renombrar el "zip" a "chm". Si no te va, descargalo de nuevo que ya debería estar corregido :-)

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 20 Mar 2015 16:48

He renombrado el que tenía descargado y me ha abierto como cualquier fichero de ayuda de Windows
Al seleccionar un opcode sale una ventana pequeña pero ya no da mas información dejando la ventana grande central en blanco.

Se ma ha ocurrido eliminarlo y descargarlo de nuevo ... ahora tras renombrarlo como .chm no se abre de ninguna forma!

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 20 Mar 2015 16:52

Vale, ahora si, tras decargarlo había que extraer del zip el fichero comprimido ....
Yo entendí que bastaba con renombrarlo a .chm
Tiene buena pinta
muchas gracias

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 20 Mar 2015 17:39

Si yo tuviera mas memoria, habría encontrado antes este documento pdf con muy buenas explicaciones de los opcodes de la Z-80
Me lo descargué al principio, lo usé y luego olvidé donde lo había guardado ... ahora lo he reencontrado!

saludos
pere
Adjuntos
Z80.Instruction set.zip
(457.88 KiB) Descargado 231 veces

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 03 Sep 2015 16:13

Hola compañeros,
me vuelvo a poner en contacto con los expertos en Z-80 porqué no todo van a ser rositas,
la mayoría llevan espinas incluidas ;-)

Cuando entro la orden:
OPEN
sin mas palabras, el programa responde correctamente:
OPEN WHAT ? > +
Y me deja escribir a continuación ... pero NO hace caso de lo que escriba a MENOS que sea un comando completo.
Quiero decir que al completar la linea con:
OPEN WHAT ? > DOOR+
El parser se limita a responder
WHAT ?
> +

Está claro que no se ha guardado la acción que estaba incompleta, por lo que luego al procesar la palabra DOOR
da el mensaje indicado.
He intentado encontrarle una explicación debugando, pero con el DBG se muestran los cambios en pantalla solo cuando se envía un Intro ...
y éste no es el caso ya que espera que se complete la línea.
A ver si alguien puede encontrar en el código de Z-80 donde se procesaría esta incompletitud del comando, y por tanto cuando pasaria a
escribir el WHAT ? > + y esperaría que el usuario precise objeto
Luego habría que ver por donde seguiría al darle la palabra suelta DOOR

Para estar hablando de lo mismo, os adjunto aquí el fichero fuente actualizado y los dos ficheros de datos que estoy utilizando.
Por si alguien prefiriera mirar un documento que solamente contenga codigo Z-80 os pongo también el original comentado

saludos
pere
Adjuntos
Analisis Z80 - HOBASM_V10_00 - NO TOCAR .asm.zip
Versión original Z-80
(196.42 KiB) Descargado 36 veces
_Bloc 25 - The Hobbit v0.8.zip
Versión Dual Z-80 y 6809
(170.62 KiB) Descargado 27 veces

Avatar de Usuario
minter
Mensajes: 1715
Registrado: 22 Jul 2014 18:51
Agradecido : 981 veces
Agradecimiento recibido: 444 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor minter » 03 Sep 2015 17:50

Para que vale la L_7955?
Está comentada que no vale para nada, pero A se carga con ella en muchas ocasiones.
Parece una posición auxiliar de memoria.
Pero parece que lo pisa con el L_B71B antes de llegar a usar el valor anteriormente cargado cuando realiza el bucle de la función saywhat?
:P
No soy persona de confianza con el Z80, así que no me tomes muy en serio.

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 03 Sep 2015 18:59

Hola,

efectivamente, mirando sola la parte de Z-80 tenemos:
LD A, (L_7955) ; 7DB4 3A 55 79 ; Carga A con (L_7955)
LD A, (SecObj3WordPtrs) ; 7DB7 3A 48 79 ; Carga A con (SecObj3WordPtrs) - byte bajo del 1er puntero

Es obvio que tras un LD A meter otro simplemente se carga lo que hizo el anterior, por esto puse el texto de "No sirve para NADA"

En fin, a ver si entre todos se nos ilumina el panorama y vemos la luz!!

muchas gracias
saludos
pere

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 09 Sep 2015 20:09

no se anima nadie o he tenido la mala pata de solicitar ayuda cuando la gente todavía está disfrutando de sus vacaciones?

saludos
pere

Avatar de Usuario
minter
Mensajes: 1715
Registrado: 22 Jul 2014 18:51
Agradecido : 981 veces
Agradecimiento recibido: 444 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor minter » 09 Sep 2015 22:48

Yo estoy dandole vueltas al rollo, pero como no conozco un monitor o programa para poder tracear/monitorizar el codigo para spectrum (para aprender el funcionamiento del juego)... estoy con lapiz, papel y goma de borrar. -banghead

Veamos.
Yo doy una ORDEN.
Como falta la segunda parte, salta a la rutina saywhat y pregunta what?.
Pero la Orden queda almacenada en algún lado.
La respuesta del what la guarda en otro segundo lugar.
Y luego debería lanzar la ejecución de la orden con los dos parametros, como si hubieras dado una orden normal y corriente con ENTER.
Debería encontrarme una parte que haga lo mismo que lo que captura del teclado, pero de la memoria. Y luego que se lance la ejecución normal del programa.

Es lo que entiendo, o al menos intento encontrarme esto. -shock

Avatar de Usuario
Chema
Mensajes: 1807
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 805 veces
Agradecimiento recibido: 289 veces
Contactar:

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor Chema » 09 Sep 2015 23:30

Pere, siento mucho no estar lo activo que debería con esto. De todas formas sigo con interés tus progresos (que son muchos). Tras las vacaciones he tenido un inicio de curso algo complicado y entre eso y mi proyecto del Oric, como que ando mal de tiempo.

A mi me parece que el código que pones es un parche de los muchos que hay. No veo utilidad a cargar dos veces con dos valores (creo que el z80 no mapea dispositivos en memoria, así que no puede ser que lea algún registro que realice alguna operación de E/S).

Yo no me complicaría con eso. Déjalo si acaso como un comentario.

Y, en cuanto a la orden incompleta... Seguro que no se comporta así el parser original? Es que me suena...

Avatar de Usuario
pser1
Mensajes: 2101
Registrado: 08 Dic 2012 18:34
Agradecido : 220 veces
Agradecimiento recibido: 227 veces

Re: Consultas Técnicas (ensamblador Z80 / Spectrum)

Mensajepor pser1 » 10 Sep 2015 11:01

@Chema
Me alegra contactar contigo de nuevo ...
El tema del LDA doble, salió a raiz del comentario de Minter sobre L_7955, pero este punto ya lo comentamos en su momento mientras
se hacía el análisis del código Z-80. No creo que afecte lo más mínimo, solo es una sentencia desperdiciada (la primera)

En el original (SpecEmu) al entrar:
> OPEN+
Te responde con:
OPEN WHAT ? > +
Entonces escribes DOOR en el lugar del cursor (+)
Y el programa, correctamente, muestra el mensaje : "You open the round green door"
O sea que forzosamente hay un punto en que yo llamo la rutina de limpieza del área de órdenes a procesar
cuando el Z-80 no lo hace ...
Por esto pedía si alguien es capaz de encontrar donde se detecta que la orden es incompleta.
Parece que el grupo "WHAT > +" se imprime en estos casos y si solamente es en estos casos, puede ser
un punto a seguir al trazarlo ...
En fin, lo dicho, se aceptan ideas sobre este problemilla

saludos
pere


Volver a “Proyecto The Hobbit 6809 por pser1”

¿Quién está conectado?

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