Flags desde Basic

Por Warchild

Paragon (1280)

Imagen del Warchild

11-09-2014, 13:12

Buenas, he hecho una pequeña rutina que me permite desde Basic llamar a una rutina asignando los valores necesarios en los registros del Z80. Al volver al Basic puedo guardar los valores de salida de los registros pero no sé cómo hacer lo mismo con los flags. ¿Una ayudita?

Login sesión o register para postear comentarios

Por assembler

Champion (404)

Imagen del assembler

11-09-2014, 16:48

Entiendo que la rutina está hecha en ensamblador, y supongo que "devuelves" los registros al basic almacenandolos en alguna dirección de memoria. En ese caso, bastaría con guardar AF. Como no puedes guardar AF directamente, copialo en HL por ejemplo y luego lo recuperas

        ...
	push hl ;guardamos HL
	push af ;guardamos AF
	pop hl ;y lo recuperamos como HL
	ld [posicion_de_memoria_para_af],hl
	pop hl ;recuperamos el valor original de HL
        ld [posicion_de_memoria_para_hl],hl
        ... resto de la gestión de retorno de registros

Por Warchild

Paragon (1280)

Imagen del Warchild

12-09-2014, 13:47

Muchas gracias! Smile La rutina es tan sencilla como dices, pero con mi bajo nivel lo del push-pop se me escapaba. Ahora veo que al hacer pop hl no recuperamos lo que guardamos con push hl si no lo último que se guardó...

Gracias de nuevo, un saludo!

Por assembler

Champion (404)

Imagen del assembler

12-09-2014, 16:08

Es lo que tiene el push-pop, que no recuperas el registro que guardaste, si no el valor que guardaste. Donde lo recuperes, es cosa tuya. Eso puede usarse a favor o ponerse en tu contra:

Si haces POP sobre el valor de retorno de un CALL (sin haber hecho ningún PUSH). Si es por un error, lo mas probable es que revientes el programa.

    ;cosas varias
    call rutinita
    ;cosas varias
    ret

rutinita:
     pop hl
     ret; salvo que el siguiente valor de la pila sea otra dirección de llamada anterior, 
         ;  tendrás un cuelgue casi al 100%