Scripts Z-80 en The Hobbit

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 13 Ene 2015 15:16

Último mensaje de la página anterior:

@Chema
muchas gracias.
Te has pegado una buena currada -thumbup
Me lo he descargado y le echaré una ojeada en cuanto acabe con el L_6DD6 o éste acabe con mi paciencia.
Y la montaña de casos a probar en cuanto esté codificada esta parte, me aterra!
Me pillas de lleno con la susodicha conversión, que contiene además la escritura en la parte superior de pantalla y, por lo que veo,
voy a tener que ceñirme a su manera de hacerlo en lugar de emplear la mía (que era mucho mas corta en código), pero es que aquí
hacen otras cosas y manipulan muchas variables L_xxxx que de no ser actualizadas como en el original igual nos dan problemas mas adelante.

saludos
pere

Cuando revise tu mensaje, actualizaré el fuente en el otro hilo

Avatar de Usuario
Chema
Mensajes: 1813
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 822 veces
Agradecimiento recibido: 293 veces
Contactar:

Re: Scripts Z-80 en The Hobbit

Mensajepor Chema » 16 Ene 2015 11:53

¿Tenéis más o menos claro cómo se hace el parsing? Porque me parece que es bastante complicado. Mirando el tema del área de 8x25 y allegados y tirando del depurador del fuse parece que en ese área se guardan (como suponíamos) los comandos a ejecutar cuando mandamos hacer algo a alguien. No he encontrado otra ocasión en la que se use, pero eso no quiere decir que no se haga.

La cosa es más o menos así:
- Pones SAY TO GANDALF "CARRY ME AND RUN"
- Tras el parseo la rutina CopyIYTo8x25 (en 834B) pone el $ff en la entrada que encuentra libre y copia el comando. En este caso en b738 tenemos:
ff 0d 01 00 00 00 a8 07 00 00 ... (14 bytes a cero) ff 6c 05 00 ...

Si nos fijamos 810d es el puntero a carry según la tabla ACTIONS; si quitamos los flags es 010d (en la tabla, las siguientes dos entradas son cero, si quitamos los flags). Tras esto está 07a8 que es la palabra común YOU (o el offset, vamos). La siguente entrada de 25 bytes contiene 056c que es run en la tabla ACTIONS y así...

He probado con otros términos y se ponen los offsets a las palabras, por ejemplo chest se almacena como $0122 (en el fuente 6122-6000).

- La rutina 195 parece que luego busca las entradas en el área de 8x25 que estén a ff y les pone el ID del actor. En 7ee1 pondría Gandalf. No sé por qué se hace en dos pasos.

- Se ejecutan las acciones (supongo que a través de 980e) en orden y se van liberando las entradas en 7f25, poniéndolas a 0. Cuando Gandalf the coge la entrada se transforma en:
00 0d 01 00 00 00 a8 07 00 00 ... (14 bytes a cero) 3e 6c 05 00 ...

3e es el ID de Gandalf. El siguiente comando (run) se ejecuta después.

Parece que los comandos que introduces para Bilbo, no van por aquí, sino que se almacenan en el bloque de trabajo de b9c8 y se procesan desde allí, sin copiarlos a 8x24. El funcionamiento es el mismo: pones NORTH y se copia 80 04 en ese área. 0480 es el comando north en la tabla ACTIONS. El rellenado de los comandos se hace a través de la rutina en 7918 (que tiene un punto de entrada también en 7914), pero no he seguido más allá.

No sé, igual ya tenías toda esta parte más o menos clara. Díme cómo la llevas....

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 16 Ene 2015 12:34

Hola Chema,
muchas gracias por tu análisis !
La verdad es que en cuanto empecé la conversión me desconecté mucho de la parte de análisis.
Espero que pronto la parte hecha muestre la primera localización y escriba texto en la parte superior.
Temo que habrá que debugar mucho para que esta última parte funcione ... está traducida literalmente
y no se parece en nada a lo que yo hice en las demos del hilo Pruebas en Dragón
La entrada de usuario ya funciona correctamente y se guarda en el buffer de entrada.
Creo que la L_6E97 que tengo pendiente de añadir al fuente en curso ya valida palabras y las guarda
en otra zona una vez codificadas. Tengo que añadirlo, compilar y probar ...
La verdad es que conforme he ido avanzando, una vez hechas las rutinas muy dependientes del hardware
que son especiales para 6809, con las demás estoy tratando de ir convirtiendo línea a línea sin molestarme en exceso
en interpretar porqué motivo lo hacen de la forma en que está hecho ...
Como le comentaba ayer a Luis, cuantos mas cambios hagamos al convertir, mas complicado será buscar porqué
se producen errores al ir probando ... y de momento ya me ha pasado en varias ocasiones que lo convertido
no hacía lo que hace el original ...
Yo voy a traspasar tus notas al fuente porqué siempre ayudan en el momento de convertir una rutina

A ver si este fin de semana puedo dedicarme a pasarlo todo al fuente ...

Te adjunto aquí un scaneado del papel que utilicé mientras iba preparando el bloque que corresponde a la rutina:
IfVB17AZeroClearAndJmpTable75D2 y a sus asociadas ... que son la tira
Y como cabía esperar tienen un montón de llamadas o saltos entre ellas.
Esta parte es la que se patea la zona de 8x25 ... será entretenido!
Si tienes en cuenta que lo hice sobre un papel A5, ya me perdonarás lo poco legible que es, aparte de estar a lápiz, como no!

saludos
pere
Adjuntos
53 - Arbol de IfB17AZeroClearAndJmpTable75D2.jpg

Avatar de Usuario
Chema
Mensajes: 1813
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 822 veces
Agradecimiento recibido: 293 veces
Contactar:

Re: Scripts Z-80 en The Hobbit

Mensajepor Chema » 16 Ene 2015 12:45

Ostras... vale. Ya veo lo complejo que es esto. Te dejo pegarte con ello entonces. Si hay algo que quieres que mire o lo que sea, dímelo.

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 16 Ene 2015 13:33

@Chema,

lo que queda por convertir es mucho. Estamos basándonos en el MainLoop y vamos tomando rutinas de éste y las expandimos hasta el final,
convirtiendo el bloque a la vez (parece mas seguro para controlar el tema uso de registros)
De dicho bucle principal salían estas rutinas:
- L_6DD6 ya está incorporada al fuente, pero todavía no se ha podido probar la escritura en la parte superior de pantalla ... espero que mas adelante actúe
- L_6E97 acabado de convertir ayer. Lo añadiré al fuente, compilaré y veré que sucede
- PutEnter que la voy a añadir ya al fuente porqué es muy corta y solo llama a la PutChar que ya está hecha
- IfB17AZerioClearAndJumpTable75D2, es el mónstruo que no cabía en el esquema que he subido. Pendiente de abordar
- SayWhat solamente llama PrintMsg, pero ya sabemos o tememos lo grande que va a ser el árbol de esta rutina. Pendiente de abordar (no tenemos ni el árbol)
- ExecuteCommandsBilboEvents, este supongo que va a contener todo el tema de comandos y scripts. Pendiente de abordar (no tenemos ni el árbol ... o bosque!)

Así que nos quedan las tres últimas. Si una vez verificada la L_6E97 me pongo con la cuarta (por tener ya el árbol)
solamente quedan dos para planificar ... digamos hacer el árbol de llamadas entre rutinas relacionadas
Si quieres aventurarte a pillar una de ellas, mejor que mejor!
El procedimiento que yo he seguido al ir haciendo el árbol ha sido simple
Lo detallo porqué es lo que le comenté a Luis por si se anima a hacer alguna parte del árbol:
Crear en un documento una lista con todas las CALLs que hace la rutina seleccionada y controlar si los JP, JR se dirigen dentro de la rutina
o van fuera de ella, en cuyo caso anoto esta dirección también. Por supuesto si la rutina YA ha sido tratada en otro árbol o en un paso anterior
solamente la anoto en el árbol y le pongo barras diagonales para recordarlo.
Para cada elemento de la lista copio en el documento el código Z-80 del fuente grande y elimino la linea hecha. Lo mismo para las demás.
Luego, a leerse todo lo añadido para generar una nueva lista de CALL o JP JR y tratarla igual que antes.
Hasta que ya no salgan mas ... entonces ordeno los párrafos de código por la dirección en Z-80
Y ya tenemos un documento con todo el código que hay que convertir y también un esquema del conjunto.

Me temo que los dos que faltan van a requerir una sábana para dibujar el esquema. Igual se tendrán que subdividir en bloques y luego
detallar cada uno de ellos ... como tu veas
En cualquier caso, sería interesante que ésto continuara en el otro hilo Conversión código para 6809 donde habría que indicar si
has asumido una rutina para que otro no haga la misma, ya sería el colmo ...

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 16 Ene 2015 16:33

@Chema,

ya tengo añadido L_6E97 al fuente, compila correctamente pero al ejecutar se me queda en bucle ...
Está claro que hay alguna rutina que debería devolver un resultado pero no lo hace porqué no está implementada.

Lo único que falta es:
SayWhat que no es necesario, creo, al inicio
PrintMsg tampoco hasta que muestre una Localización
ExecuteUsrCommandsBilboEvents tampoco parece necesario de entrada hasta que procese un comando, aunque nunca se sabe sus efectos secundarios aunque no haga nada ...
IfB17AClearAndJmpTable75D2 mas de lo mismo

Entonces ¿Cual es la parte que obliga a cargar la primera localización?

Hurgando he visto que las localizaciones se muestran desde L_7F78 donde llama a "DrawLocGfx".
Esta a su vez es llamada por L_965B solamente.
Y ésta se llama desde L_9630 y L_964D ambas en la misma rutina
Pero ahora ya se abre el abanico y aparecen:
- L_AA27
- Action_Look
- L_8E12
- L_962B
- Action_Capture

Y aquí he echado el freno, el árbol hacia atrás se expande cada vez mas, no sé si seguir mas o cambiar el valor retornado por las dos rutinas de las que no tenemos árbol y
que ahora se limitan a ser un triste RTS.
Creo que optaré por lo segundo al ser mas simple.
Si por cualquier cosa, tuvieras una idea mas clara que yo del punto en que se invoca la carga de la ubicación inicial, sería cuestión de priorizar esta parte en la conversión.
Es una pena que con lo que está convertido ya, no se haya avanzado nada de forma visible

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 16 Ene 2015 18:08

Como ninguno de los caminos elegidos ha dado resultado ...
He optado por la parte mas fácil pero molesta, que es debugar el juego en SpecEmu
Así que he puesto un breakpoint en L_7F78 para que se parara antes de pintar la primera pantalla.

Sorpresa, ya estaba escrita la frase: "You are in a comfortable tunnel like hall" en la parte superior de pantalla!
El stack indica las rutinas por donde ha pasado y algún parámetro que se pasa ahí también:
STACK
=====
$9671 - dentro de L_965B (#213#) que efectivamente llama a L_7F78
$9655 - dentro de L_9630 (sin nombre ni número!)
#1000 - registro BC
#B9C8 - area de 24 bytes para comandos (a pesar de no haber entrado nada todavía) - (IY)
#BA97 - puntero a localización $01 (tunnel like hall) - (IX)
$9B78 - dentro de CallSubroutineHL (no faltaría mas)
$8C4B - entrada de Action_Look (parecía evidente que estaría)
...
$798B - rutina ExecuteCommandsBilboEvents (tenía que ser ésta!!!)
$6D99 - este es el punto al que regresa al MainLoop

O sea que estamos jodidos pero contentos -507
Habrá que lidiar con la estructura de ExecuteCommandsBilboEvents.

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 16 Ene 2015 18:30

he hecho lo mimso para ver cuando y donde imprime el texto en la parte superior
y la llamada que desencadena todo es:
CALL DescribeActionOnScreen que está en ExecuteCommandsBilboEvents para variar

O sea que habrá que pasarla por delante de la IfB17AZeroClearAndJmpTable75D2 a pesar de tener el árbol ya muy avanzado (prácticamente finalizado)
En fin, apliquemos aquello de que el orden de los factores no altera el producto -thumbup

saludos
pere

@Chema
¿Ibas a pringar pillando una? ... porqué visto lo visto, me decido por la ExecuteUsrCommandsBilboEvents claramente como prioritaria
ya me dirás algo

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 16 Ene 2015 18:33

Ya se que el hilo no existe, pero lo suelto aquí ...

como me estoy viciando con el SpecEmu, voy a ver si consigo llegar al punto fatídico de nuestro fichero fuente, que es éste:
JP NZ, $B301 ; AA3F C2 01 B3 ; ###E ; OJO esto no es salto a código sino a texto de mensaje. PELIGROOOOO !!!!!

Vamos a ver si consigo disparar el breakpoint que le voy a poner y observaré que llega en A, si fuera $0A sería genial!

ya os contaré ... aunque se intuye de que NUNCA se llega a este punto con A=$0A ... ¿o si?

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 16 Ene 2015 19:02

hasta ahora no ha habido tal suerte, pero algo raro he hecho porqué me ha saltado un breakpoint anterior
y el stack tenia ni mas ni menos que 70 bytes apilados.
Lo tengo anotado por si alguien tiene ganas de ver la ristra de datos y direcciones acumuladas.
Me parece increíble que el stack se llene tanto

@Luis
¿qué decías tu de que no veías claro el uso del stack en este programa?
Pues aquí podrías ver una exhibición del abuso de este recurso ...

saludos
pere

Avatar de Usuario
Chema
Mensajes: 1813
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 822 veces
Agradecimiento recibido: 293 veces
Contactar:

Re: Scripts Z-80 en The Hobbit

Mensajepor Chema » 16 Ene 2015 21:14

De momento no me comprometo a nada porque tengo el finde liado. Si encuentro un hueco echo un vistazo a lo que comentas...

Solo recuerda que al iniciar el juego se fuerza un comando LOOK que se procesa como entrada de usuario y es ahí donde se describe y pinta la localización inicial, si no recuerdo mal.

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 16 Ene 2015 21:36

Hola Chema, no te preocupes
He empezado por el maldito ExecuteUsrCommandsBilboEvents ya que es el que invoca tanto la escritura de la descripción de la localización como el dibujo de la misma.
Ya tengo dos niveles hechos, es alarmante como crece.
Cambiamos de hilo y seguimos en "Conversión código para 6809, allí subiré el diagrama de estos dos niveles
Como comenté, al tiempo que hago el diagrama, voy copiando y pegando los párrafos de código en un fichero nuevo, así que ya tengo un buen montón de líneas de esta parte para convertir

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 20 Ene 2015 19:45

@Chema

como puedes ver he acumulado un buen retraso ...

XOR A          		; 7F28 AF      		; borra A
CP C ; 7F29 B9 ; era Bilbo el personaje recibido?
JR NZ, i_7F37 ; 7F2A 20 0B ; no, salta a i_7F37
; Modificamos HL en pila por el actual (apunta al comando en el registro)
; y volvemos con Z=0 (¿EXITO?)
OR $01 ; 7F2C F6 01 ; Hace OR lógico de A con $01
EX (SP), HL ; 7F2E E3 ; cambia 1er parámetro del stack y lo fuerza igual a HL actual


En esta parrafada, ambos indicamos que se modifica el parámetro en la pila por HL actual, pero viendo un documento que explica los opcodes he encontrado esto:

EX (SP), HL hace lo siguiente:
(SP+0) <-> L
(SP+1) <-> H
es decir toma el parámetro que está en el stack (S+1):(S+0) para formar una dirección (byte alto-bajo)
Y entonces se intercambian los valores apuntados por este nuevo puntero con HL
Es una indirección, no una sustitución directa ...

Intento copiar aquí la página de este maldito opcode ...


saludos
pere

EX (SP), HL
Operation: H  (SP+1), L  (SP)
Op Code: EX
Operands: (SP), HL
Description: The low order byte contained in register pair HL is exchanged with the
contents of the memory address specified by the contents of register pair SP
(Stack Pointer), and the high order byte of HL is exchanged with the next
highest memory address (SP+1).
M Cycles T States 4 MHz E.T.
5 19 (4, 3, 4, 3, 5) 4.75
Condition Bits Affected: None
Example: If the HL register pair contains 7012H, the SP register pair contains 8856H,
the memory location 8856H contains byte 11H, and memory location
8857H contains byte 22H, then the instruction EX (SP), HL results in the
HL register pair containing number 2211H, memory location 8856H
containing byte 12H, memory location 8857H containing byte 70H and
Stack Pointer containing 8856H.

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 20 Ene 2015 20:05

Chema escribió:¿Tenéis más o menos claro cómo se hace el parsing? Porque me parece que es bastante complicado. Mirando el tema del área de 8x25 y allegados y tirando del depurador del fuse parece que en ese área se guardan (como suponíamos) los comandos a ejecutar cuando mandamos hacer algo a alguien. No he encontrado otra ocasión en la que se use, pero eso no quiere decir que no se haga.

La cosa es más o menos así:
- Pones SAY TO GANDALF "CARRY ME AND RUN"
- Tras el parseo la rutina CopyIYTo8x25 (en 834B) pone el $ff en la entrada que encuentra libre y copia el comando. En este caso en b738 tenemos:
ff 0d 01 00 00 00 a8 07 00 00 ... (14 bytes a cero) ff 6c 05 00 ...

Si nos fijamos 810d es el puntero a carry según la tabla ACTIONS; si quitamos los flags es 010d (en la tabla, las siguientes dos entradas son cero, si quitamos los flags). Tras esto está 07a8 que es la palabra común YOU (o el offset, vamos). La siguente entrada de 25 bytes contiene 056c que es run en la tabla ACTIONS y así...

He probado con otros términos y se ponen los offsets a las palabras, por ejemplo chest se almacena como $0122 (en el fuente 6122-6000).

- La rutina 195 parece que luego busca las entradas en el área de 8x25 que estén a ff y les pone el ID del actor. En 7ee1 pondría Gandalf. No sé por qué se hace en dos pasos.

- Se ejecutan las acciones (supongo que a través de 980e) en orden y se van liberando las entradas en 7f25, poniéndolas a 0. Cuando Gandalf the coge la entrada se transforma en:
00 0d 01 00 00 00 a8 07 00 00 ... (14 bytes a cero) 3e 6c 05 00 ...

3e es el ID de Gandalf. El siguiente comando (run) se ejecuta después.

Parece que los comandos que introduces para Bilbo, no van por aquí, sino que se almacenan en el bloque de trabajo de b9c8 y se procesan desde allí, sin copiarlos a 8x24. El funcionamiento es el mismo: pones NORTH y se copia 80 04 en ese área. 0480 es el comando north en la tabla ACTIONS. El rellenado de los comandos se hace a través de la rutina en 7918 (que tiene un punto de entrada también en 7914), pero no he seguido más allá.

No sé, igual ya tenías toda esta parte más o menos clara. Díme cómo la llevas....


Hola de nuevo, Chema

esta parte no podemos decir que la tengamos clara, pero tampoco le hemos echado demasiado tiempo para estudiarla.
Como ahora debería empezar a convertir la parte "ExecuteUsrCommandsBilboEevnts", es aquí donde se llama a la L_980E, por lo que ya lo iré sufriendo sobre la marcha.
De momento tuve que parar tras haber añadido L_6E97 ya que dejando al programa que funcionara en vacío, tardaba unos 10 segundos en cascar saliendo del PMODE4 y dejando el programa colgado
Ahora ya no lo hace, la verdad he encontrado algunos gazapos que no aparecieron en su momento, pero que ahora ya mostraban efectos nocivos ...
He actualizado el fuente Z-80, ahora copiaré tus comentarios del último post y lo subiré al hilo "Análisis del fuente ... "
muchas gracias por todo.

saludos
pere

Avatar de Usuario
Chema
Mensajes: 1813
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 822 veces
Agradecimiento recibido: 293 veces
Contactar:

Re: Scripts Z-80 en The Hobbit

Mensajepor Chema » 20 Ene 2015 23:57

pser1 escribió:EX (SP), HL hace lo siguiente:
(SP+0) <-> L
(SP+1) <-> H
es decir toma el parámetro que está en el stack (S+1):(S+0) para formar una dirección (byte alto-bajo)
Y entonces se intercambian los valores apuntados por este nuevo puntero con HL
Es una indirección, no una sustitución directa ...



No sé mucho de z80, pero creo que no es tan complicado como lo cuentas... El registro SP apunta a la posición del tope de la pila, así que (SP) es el contenido del tope de la pila (lo que has metido en el último PUSH). Yo creo que hace precisamente lo que se supone, intercambiar el contenido de HL por los dos bytes del tope de la pila.

Yo creo que es precisamente lo que dice el ejemplo...

Cierto es que en el z80 puedes poner SP a cualquier valor, es decir, puedes poner la pila donde quieras. Eso se ha hecho para borrar la pantalla rápidamente, por ejemplo...

Avatar de Usuario
pser1
Mensajes: 2161
Registrado: 08 Dic 2012 18:34
Agradecido : 250 veces
Agradecimiento recibido: 253 veces

Re: Scripts Z-80 en The Hobbit

Mensajepor pser1 » 21 Ene 2015 00:34

Hola Chema,

Tienes razón, mirando bien el ejemplo sacado del manual extendido de la Z-80
mustra los valores que se intercambian ...
-------------------------------------------------------------------------------------
Operation: H  (SP+1), L  (SP)       Op Code: EX        Operands: (SP), HL
Description: The low order byte contained in register pair HL is exchanged with the contents of the memory address specified by the contents of register pair SP (Stack Pointer),
and the high order byte of HL is exchanged with the next highest memory address (SP+1).
Condition Bits Affected: None
Example: If the HL register pair contains 7012H,
the SP register pair contains 8856H,
the memory location 8856H contains byte 11H, and memory location 8857H contains byte 22H,
then the instruction EX (SP), HL results in:
the HL register pair containing number 2211H,
memory location 8856H containing byte 12H,
memory location 8857H containing byte 70H
and Stack Pointer containing 8856H.

-------------------------------------------------------------------------------------
El contenido del Stack Pointer NO ha cambiado, (lógico no hay ni PUSH ni PULL)
Lo que cambia son los dos bytes apuntados por el contenido del stack Pointer (o sea el puntero inicial que se guardó (HL antiguo)

Resumiendo, NO sé que historia me monté, pero tengo programado en 6809 lo que te dije en lugar de esto
Así que ya tengo trabajo para mañana ... está usado dos veces y lo genial es que NO ha cascado!

saludos
pere

Avatar de Usuario
Chema
Mensajes: 1813
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 822 veces
Agradecimiento recibido: 293 veces
Contactar:

Re: Scripts Z-80 en The Hobbit

Mensajepor Chema » 21 Ene 2015 00:54

Ya, claro. Creo que hablamos de lo mismo, pero a mi no me parece raro. Supongamos que la pila está en la dirección 2ff como en el 6502. Si haces un PUSH HL y HL vale 1234 se guarda 34 en 2ff, 12 en 2fe (o al revés, depende de la endianity, nunca me acuerdo) y SP pasa a valer 2fd.

Si ahora pones HL a 0000 y haces el EX, HL pasa a valer el (SP) o sea 1234 y en la pila quedan 00 en 2ff y 2fe. SP sigue valiendo 2fd.

En el ejemplo que pones SP contiene 8856, es decir esa es la dirección del tope de la pila, y lo que intercambias es el contenido del tope de la pila... ¿Dónde me estoy perdiendo?


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