1. ARQUITECTURA DE COMPUTADORES
MICROPROCESADOR Z80, RUTINAS Y SUBRUTINAS
NOMBRE: Pablo Chumania
NRC: 2010
OBJETIVO GENERAL:
- Estudiar las rutinas y subrutinas del Z80
OBJETIVOS ESPECÍFICOS:
- Definir para que sirven las rutinas
- Estudiar las rutinas y su funcionamiento
- Estudiar las subrutinas y su funcionamiento
RESUMEN:
Vamos a ver qué son las rutinas del microprocesador Z80 y cómo utilizarlas en nuestro beneficio
para ejecutar rutinas de servicio “en paralelo” al flujo del programa. Aunque la introducción inicial
sera básicamente teórica, la aplicación práctica es bastante sencilla, pudiendo utilizar las rutinas de
esta entrega directamente sin conocimiento total de la información teórica presentada. Los
microprocesadores suelen disponer como mínimo de una señal de Interrupción. Esta señal,
normalmente es invocada externamente por dispositivos de I/O que requieren la atención del
procesador, solicitando la atención del mismo por algún tipo de evento. De esta forma, no es
necesario que sea nuestro programa el encargado de comprobar continuamente si ha ocurrido un
evento concreto.
2. MARCO TEÓRICO
1. EL MICROPROCESADOR ZILOG Z80
El microprocesador Z80 fue lanzado al mercado en 1976 por Zilog y ha sido uno de los
microprocesadores de mayor éxito, debido a su uso en los Amstrad CPC y Sinclair ZX Spectrum. Aún
se utilizan derivados suyos en sistemas empotrados.
2. CARACTERÍSTICAS
Su nombre se debe a que podía ejecutar 80 instrucciones más que el Intel 8080, dando lugar a un
total de 156 instrucciones.
- Arquitectura de 8 bits.
- Frecuencias de reloj desde 2,5 MHz a 20 MHz.
- 22 registros, 4 de 16 bits y 18 de 8 bits (12 de los cuales se podían utilizar a pares, dando
lugar a 6 registros de 16 bits más).
- Una única toma de alimentación de 5V.
- Bus de datos bidireccional de 8 bits.
- Bus de direccionamiento de 16 bits (capaz de direccionar hasta 64 KiB de memoria).
- El encapsulado original era Dual In Line (DIL) de 40 terminales, aunque también se ha
encapsulado en PLCC (Plastic Leader Chip Carrier) y más modermamente en LQFP (Low
Profile Quad Flat Package).
3. RUTINAS
Son llamadas 50 (o 60) veces por segundo. Lo normal en el desarrollo de un juego o programa
medianamente complejo es que utilicemos el modo IM 2 y desarrollemos nuestra propia rutina ISR
para que cumpla nuestras necesidades.
Las ISRs deben de optimizarse lo máximo posible, tratando de que sean lo más rápidas y óptimas
posibles, ya que nuestro programa se ha visto interrumpido y no se continuará su ejecución hasta
la salida de la ISR. Si tenemos en cuenta que normalmente nuestras ISRs se ejecutarán 50 veces por
segundo, es importante no ralentizar la ejecución del programa principal llenando de código
innecesario la ISR.
Al principio de nuestra ISR no es necesario desactivar las interrupciones con DI, ya que el Z80 las
deshabilita al aceptar la interrupción. Debido a este “DI” automático realizado por el procesador,
las rutinas de ISR deben incluir un EI antes del RET/RETI.
Así pues, de las rutinas ISR llamadas en las interrupciones se debe de volver con una instrucción
RETN en las interrupciones no enmascarables y un EI + RETI en las enmascarables (aunque en
algunos casos, según el periférico que provoca la interrupción, también se puede utilizar EI+RET,
que es ligeramente más rápido y que tiene el mismo efecto en sistemas como el Spectrum).
3. RETI ; Return from interrupt (14 T-Estados).
RETN ; Return from non-maskable interrupt (14 T-Estados).
Existe un motivo por el cual existe RETI y no se utiliza simplemente RET, y es que existen unos flip-
flops internos en el procesador que le marcan cierto estados al procesador y que en el caso de salida
de una interrupción deben resetearse.
PUSH: Copia el contenido del par de registros o de los registros índice en la pila. Esta instrucción
primero decrementa el apuntador a la pila y copia la parte alta del registro en la locación SP-1.
Después decrementa nuevamente el apuntador y almacena la parte baja del apuntador en SP-2
4. POP: Copia el contenido de las dos locaciones de memoria de la parte alta de la pila hacia par de
registros especificados o hacia los registros índice . Esta instrucción copia el contenido de la pila
especificado por SP dentro del registro de la parte baja (en BC, seria C) incrementa el apuntador SP
+ 1. Copia el contenido de SP+1 en la parte alta del registro e incrementa SP (SP + 2)
4. SUBRUTINAS
La subrutina consiste en un grupo de instrucciones escritas fuera del programa principal para
desempeñar una función especifica. Las funciones que se realizan repetidamente en el en el
programa principal son candidatas para subrutinas Retardos. Los retardos pueden ser requeridos en
diferentes partes del programa. Máximo, encontrar el numero máximo dentro de una secuencia
Cuando una subrutina es llamada, el contenido del program counter es guardado en el stack y la
ejecuciones transferida a la subrutin
5. Cuando la instrucción de regreso de la subrutina es ejecutada, la dirección previamente guardada
en el stack es recuperada.
Esta instrucción almacena la dirección de la siguiente instrucción en la pila y transfiere la ejecución
del programa a la dirección de la subrutina, Esta instrucción obtiene la dirección de regreso del tope
de la pila y transfiere la ejecución del programa de regreso al programa que realizo el llamado
6. CONCLUSIONES:
- Se logro definir el porque de las rutinas y subrutinas
- Se consiguió estudiar las rutinas a fin de entenderlas para su aplicación
- Las subrutinas fueron exitosamente estudiadas mediante cuadros para su apreciación
RECOMENDACIONES:
- Se debe implementar en los simuladores a fin de que se llegue a un mejor comprendimiento
BIBLIOGRAFÍA:
- https://museo.inf.uva.es/?0=Z80
- https://wiki.speccy.org/cursos/ensamblador/interrupciones
- file:///C:/Users/Pablo/Desktop/Resp%20Pablo/Desktop/Espe%20TI%20Segundo/Arquitect
ura%20de%20Comp/Z80%20PROGRAM.pdf