Mostrar feed RSS

pSMS WIP

Arquitectura del Z80 (Parte II)

Calificar esta entrada
Con las clases no me queda mucho tiempo libre, pero aun así he conseguido avanzar un poco más en la comprensión del Z80, hoy voy a comentar las interrupciones.

Una interrupción es una señal por la cual se interrumpe momentáneamente el secuenciamiento del programa, se trata dicha interrupción mediante una rutina y después se vuelve al punto donde se interrumpió.

Como ya comenté previamente, en el Z80 tenemos 2 biestables (dispositivos que almacenan un bit) llamados IFF1 y IFF2. El primero se usa para indicar si las interrupciones enmascarables (las que pueden ignorarse) están habilitadas (IFF1=1) o inhibidas (IFF1=0) y el segundo nos servirá como respaldo del primero (ya veremos luego como).

Hay dos tipos de interrupciones: enmascarables (INT) y no enmascarables (NMI). La diferencia entre ambas es que las primeras pueden ignorarse si así se configura el computador y las segundas hay que tratarlas obligatoriamente.

Para habilitar las INT se usa la instrucción EI que pone a 1 los biestables IFF1 y IFF2, mientras que para inhibirlas usaremos la instrucción DI que los pone a 0.

Interrupción no enmascarable

Cuando se produce una NMI el procesador sigue los siguientes pasos:
  1. Salvaguarda el contador de programa (PC) en la pila.
  2. Guarda el valor de IFF1 en IFF2 y pone IFF1=0 (inhibe INT).
  3. Pone PC=0x0066 (Salta a la dirección 0x0066).

Una vez realizado este proceso, en la dirección 0x0066 estará la rutina correspondiente a su tratamiento. Cabe fijarse que no se puede interrumpir a una NMI con una INT porque pone IFF1 a 0.

Finalmente, cuando acabe la rutina de tratamiento de interrupción se ejecutará la instrucción RETN que copia IFF2 en IFF1 (restaura el valor guardado) y restaura el PC desde la pila para continuar la ejecución donde se quedó.

Interrupción enmascarable

Hay tres modos diferentes en que puede estar el procesador para atender a las INT, estos modos llamados 0, 1 y 2 se establecen con las instrucciones IM0, IM1 y IM2.

Modo 0

Es similar al modo del 8080 de Intel, el dispositivo que genera la INT pondrá un código de operación de una instrucción en el bus de datos (normalmente una llamada a subrutina) y a partir de ahí seguirá la ejecución.

Modo 1

Es análogo al tratamiento de las NMI, solo que ahora se salta a la dirección 0x0038 y es enmascarable.

Modo 2
En este modo se usan interrupciones vectorizadas.

El dispositivo pone en el bus de datos un byte. Este byte se tratará como la parte baja de una dirección (recordemos de 16 bits) y el valor del registro I como la parte alta de dicha dirección. Finalmente, se pondrá a 0 el bit menos significativo para que sean direcciones pares.

En esta dirección se encontrará la dirección de la rutina de tratamiento de interrupción adecuada a la que se saltará (previa salvaguarda del PC en la pila).

Consideraciones
Eso sería básicamente todo el tema de las interrupciones, cabe destacar que las interrupciones no enmascarables pueden ser anidadas (una interrupción interrumpe a otra), pero no pueden saltar si se está tratando otra no enmascarable.

Finalmente, he buscado en varios libros y no he encontrado ninguna referencia a que se haga un guardado automático del registro de flags (F) en la pila a semejanza de como ocurre con el PC, así que supongo que será cuestión del programador el contemplar su salvaguarda.

Hasta aquí por hoy

Enviar "Arquitectura del Z80 (Parte II)" a ¡Menéame! Enviar "Arquitectura del Z80 (Parte II)" a Technorati Enviar "Arquitectura del Z80 (Parte II)" a Digg Enviar "Arquitectura del Z80 (Parte II)" a del.icio.us Enviar "Arquitectura del Z80 (Parte II)" a Google Enviar "Arquitectura del Z80 (Parte II)" a Finclu Enviar "Arquitectura del Z80 (Parte II)" a Copada Enviar "Arquitectura del Z80 (Parte II)" a StumbleUpon Enviar "Arquitectura del Z80 (Parte II)" a Reddit Enviar "Arquitectura del Z80 (Parte II)" a FaceBook

Categorías

Comentarios

  1. Avatar de Jurk
    bueno, yo soy mas de 8051, pero... no hay algun comando tipo push-pop (inserta un registro en la pila e incrementa en 1 el valor de esta - saca un registro de la pila e incrementa en 1 el valor de esta)al que le puedas pasar el dato que quieras?
  2. Avatar de Puck2099
    Sí, claro, están los mismos PUSH y POP.

    Si lo dices por lo de guardar los flags, sí, además te guardan conjuntamente el estado del acumulador (guarda el par AF).

    Lo que comentaba de que no se hiciera automáticamente es a semejanza de otro procesadores como el M68000 que guarda en caso de interrupción PC y Flags.
  3. Avatar de Jurk
    bueno, es lo que tiene andar a bajo nivel en micros muy antiguos... control absoluto y trabajo total... XD
  4. Avatar de Locke
    Queremos massss xD
  5. Avatar de LTK666
    Aprendiendo que es gerundio.
  6. Avatar de dn@
    Interesante. Se aprende mucho con esto de como se maneja internamente el bicharraco :3 Sigue, hamigo, que estamos ávidos de información y conocimiento
    EDIT: gracias, X-code *_*
    Actualizado 05/03/2008 a las 10:21 por dn@
  7. Avatar de X-Code
    hábidos? FATALITY ávidos

    --

    Muy interesantes estos posts amigo Puck2099 - a ver si algún dia encuentro mis apuntes sobre el MC68000 xD -, este blog pasa a ser certificado como X-Code Blog of Interest ( la elite ná menos )
  8. Avatar de Jurk
    Solo una cosa, Puck2099... si has pasado en una semana de comenzar a comprender los registros del Z80 a comprender las interrupciones... bufff eres un crack.

    Yo la evaluacion pasada di clases sobre microcontroladores 8051, y aunque yo lo diese todo, la gente no ponia muchas ganas y les tuve que explicar las interrupciones como 15 veces... frustrante.

    Con esto te quiero decir que si algo no lo tienes demasiado claro (me extraña) al menos conceptualmente te puedo ayudar...
  9. Avatar de Jurk
    Un poco de ayuda

    Unas hojas de referencia rápida:
    http://web.frm.utn.edu.ar/tecnicad2/...U-Cartilla.PDF

    Manual en castellano:
    http://web.frm.utn.edu.ar/tecnicad2/...-Manual-SP.pdf

    Manual de la familia Z80(zilog):
    http://www.zilog.com/docs/z80/um0080.pdf




    Tu vete comentando cosas que de esta parte que domino lo entiendo todo, pero quiero saber como funciona la otra parte de un emulador
    Actualizado 05/03/2008 a las 10:33 por Jurk