sexta-feira, 13 de março de 2020

Pause em assembly (I)

Para uma pausa de segundos, abortada com uma tecla, podemos invocar a rotina PAUSE do BASIC.

para tal:

PAUSE_1       EQU           $1F3D

                        LD              BC,segundos
                        CALL         PAUSE_1

Se for para esperar segundos, sem ser interrompido por teclas, usamos uma variante da rotina da ROM:

PAUSE_1:        HALT       ; Wait for a maskable interrupt.
                          DEC     BC  ; Decrease the counter.
                          LD        A,B ; If the counter is thereby reduced to zero the pause has come to an end.
                          OR       C
                          JR        Z,PAUSE_END
                          LD        A,B    

                          AND     C
                          INC      A
                          JR        NZ,PAUSE_2

                          INC      BC
PAUSE_2:         JR        Z,PAUSE_1
PAUSE_END:
                           RET

Ver $1F3A the PAUSE routine

Sem comentários:

Publicar um comentário