Pista para el estudiante que consultó al final de clase hoy...

Pista para el estudiante que consultó al final de clase hoy...

de Julio Perez -
Número de respuestas: 3

... porque no coincidían los tiempos de la subrutina de espera: 

la instrucción de decremento de 16 bits (dec bc o dec de) no afecta los flags!!

En respuesta a Julio Perez

Re: Pista para el estudiante que consultó al final de clase hoy...

de Jose Ignacio Fort Etchamendi -

Si, por eso había un ld a, un or y un cp

//CODE

; NOTE: ticks come in bcde, big endian

wait_32:

push af

push hl


ld a, 5

call sr_32

ld l, 0

wait_32_loop_0:

nop ; NOTE: just for the 4T 

dec de

ld a, e

or d

wait_if_0:

cp l

jp nz, wait_32_loop_0

dec bc

ld a, c

or b

wait_if_1:

cp 0

jr nz, wait_32_loop_0

wait_32_loop_0_end:

pop hl

pop af

ret


include "sr_32.s"


//CODE

PS: Si no hubiera un cp jamás saldría del loop. 

En respuesta a Jose Ignacio Fort Etchamendi

Re: Pista para el estudiante que consultó al final de clase hoy...

de Julio Perez -

ok.

No me acordaba del código de tu subrutina, pensé que te habías olvidado que "dec bc" no afecta flags.

Para otra vez, no subas soluciones completas al foro.

Ahora que ya lo hiciste vamos a usarla.

Me parece que el error es que estás saliendo del loop cuando C es cero, y no cuando BC es cero que es lo que intentas hacer. O en el otro caso cuando E es cero y no cuando DE es 0.

La instrucción "CP dato" compara el acumulador con la constante "dato" y setea los flags de acuerdo al resultado. En el acumulador antes de comparar pusiste el byte bajo (ld a, e en un caso, ld a, c en el otro).

julio

En respuesta a Julio Perez

Re: Pista para el estudiante que consultó al final de clase hoy...

de Jose Ignacio Fort Etchamendi -

Si, es eso, debería ser un jp p en vez de un jr nz.

Lo vi poniendo un out y contando las líneas de output.log del qemu y acá me lo confirmaste.

No subo más, creí que no había problema ya que no es parte de la tarea.

Gracias por la respuesta.