Proyecto de Arquitectura de Computadores

Sistemas de Entrada/Salida
Curso 2014/2015
Antonio P´erez Ambite
Santiago Rodr´ıguez de la Fuente
Departamento de Arquitectura y Tecnolog´ıa de Sistemas Inform´aticos
Facultad de Inform´atica
Universidad Polit´ecnica de Madrid
Versi´on 1.1
Febrero 2015

´Indice general
1. Microprocesador MC68000
1.1. Modelo de programaci´on . . . . . . . . . . . . . . . .
1.1.1. Modelo de programaci´on del modo usuario .
1.1.2. Modelo de programaci´on del modo supervisor
1.1.3. Registro de estado . . . . . . . . . . . . . . .
1.2. Tipos de operandos y modos de direccionamiento . .
1.3. Organizaci´on de datos en registros . . . . . . . . . .
1.3.1. Registros de datos . . . . . . . . . . . . . . .
1.3.2. Registros de direcciones . . . . . . . . . . . .
1.4. Mapa de direcciones . . . . . . . . . . . . . . . . . .
1.4.1. Organizaci´on de datos en memoria . . . . . .
1.5. Excepciones e interrupciones . . . . . . . . . . . . .
1.5.1. Procesamiento de excepciones . . . . . . . . .
1.5.2. Tabla de vectores de excepci´on . . . . . . . .
1.5.3. Procesamiento de interrupciones . . . . . . .
1.5.4. Excepci´on de reset . . . . . . . . . . . . . . .
1.6. Juego de instrucciones . . . . . . . . . . . . . . . . .
1.6.1. Abreviaturas . . . . . . . . . . . . . . . . . .
1.6.2. Transferencia de datos . . . . . . . . . . . . .
1.6.3. Aritm´eticas . . . . . . . . . . . . . . . . . . .
1.6.4. L´ogicas . . . . . . . . . . . . . . . . . . . . .
1.6.5. Desplazamientos . . . . . . . . . . . . . . . .
1.6.6. Manejo de bits . . . . . . . . . . . . . . . . .
1.6.7. Control del programa . . . . . . . . . . . . .
1.6.8. Control del procesador . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

2. Controlador de l´ıneas serie MC68681
2.1. Transmisi´on as´ıncrona de caracteres por una l´ınea serie
2.2. Caracter´ısticas de la DUART MC68681 . . . . . . . . .
2.3. Descripci´on de los registros . . . . . . . . . . . . . . . .
2.3.1. Registros de modo 1 (MR1A y MR1B) . . . . . .
2.3.2. Registros de modo 2 (MR2A y MR2B) . . . . . .
2.3.3. Registros de estado (SRA y SRB) . . . . . . . .
2.3.4. Registros de selecci´on de reloj (CSRA y CSRB) .
2.3.5. Registros de control (CRA y CRB) . . . . . . . .
2.3.6. Registros del buffer de recepci´on (RBA y RBB) .
i

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

1
1
1
1
3
3
5
5
5
5
5
6
7
7
7
9
9
9
13
17
23
25
31
32
34

.
.
.
.
.
.
.
.
.

35
35
36
36
38
38
38
39
39
40

. . . . . . . .2. . 4. . . . . . 2. . . . .2. . . . Conexi´on remota a batman . . . . . . . . . . .3. . . . 3. . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1. . . . . . . . . .9. . . . . . . . 4. . . . . . . . . . .2. . . Set origin ORG . . . . . . . . . . . . . . Men´ us de la ventana de manejo del simulador . . . . . . . . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . 3. . . . . . . . . . . .2. . . . . . . . . . 3. . . .2. . .Proyecto de Entrada–Salida (2014–2015) II 2. . . . . . . . . . .3. . . . . . . . . . . . . . . . . . .6. .3. . . . . . . Simulador BSVC 4. . . . . . . . . . . . . Obtenci´on del entorno . . . . . . .1. . . . . Registros del buffer de transmisi´on (TBA y TBB) Registro de control auxiliar (ACR) .2. . . . . 51 51 53 53 54 54 55 . . . Set symbol SET . . . . . . . . 3. . .2. . . . . . . . . . . . . . . . . . . .3. . . . . . A. . . . . .7. . . . . . . . Equate EQU . 40 40 40 41 41 . .6. 3. . . . . . . . . . . . . . . . . . . . . . .1. .6. . . . .3. . . . . . . . . . . . . . . . . . Campo de operandos . . . . . S´ımbolos . . .7. . . . . . . . . . .4. . . . . 3. . . . . . Instrucciones de bifurcaci´on . . . . . . . . Enunciado del proyecto: E/S mediante interrupciones 57 A. . . . A. . . . . . . . . . . . . . .11. . . . . . . .4. . . . . . Define constant block DCB . . . 3. 3. . . .3. . . . . . . . . . .3. .4. . . . . . . A. . . . . . . . . . . . . Registro del vector de interrupci´on (IVR) . . . . . . . . . . . . . .6. . . . Especificaci´on de los modos de direccionamiento 3. . . . . . . . . . . . . . . . .2. . . . . . . . . . 3. . . . . . . 4. . . . . . . . . . . .4. . . .4. . . . . . . . Compilaci´on de bsvc en Linux . .1. . .4. . Campo de comentario . .2. . . . . . . . . Expresiones . Instalaci´on del paquete . .2. A. . . . . . . . . . . . . . . . . . . . . . . . . . . Instalaci´on en Linux . . . .5. . . . . . . Instalaci´on del paquete . . . . . . . . . . . . . . . . 3. . . . . Pseudoinstrucciones . .7. . . . . . . . 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5. . . . . . . . . . . . . 3.1. .3. . .8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . Programa ensamblador 68kasm 3. . .1.2. . . . . . . . . . . . . . . . 3. . . . . . . . 3.2. . . . . . . Define constant DC . . . . . . . . . . . Instalaci´ on del entorno de la pr´ actica en un computador con sistema operativo Linux A. . .1. . Formato del listado ensamblador . . . . . . . . .1. Errores conocidos . . Resultados de la ejecuci´on de un programa . . . . . . . . . . A. . . . . . . . . . . . . . . . . . Obtenci´on del entorno . . . . . . . . . . .2. . . . . . . . . . . . . . . . . . . . 2. . . . . Define storage DS . . . 89 89 89 89 90 90 90 91 . . Registro de m´ascara de interrupci´on (IMR) . . . . . . . 2. . . . . . . . Define register set REG . Carga de un programa objeto . . .4. . . . . . . . . Ejemplos . . . . . . 3. . . . . . . . . . Campo de etiquetas . .4. Formato del c´odigo fuente . . . . . . . 5. . Llamada al programa ensamblador . . . .3. . . . . . . . . . .4. . . . . . 4. . . . . . . Botones de la ventana de manejo del simulador 4. . Campo de operaci´on . . . . Carga de computador virtual . . . . . . . .10. . . . . . . . 2. . . . . . . . . . . . . . . . . . . . . . . . . 3. . . 3. . . . . . .1. . . A. . .3. . . .2. . . . . . . . . . . . 3. . . . . . . . . . . . . . . . . Registro de estado de interrupci´on (ISR) . . . . . . . . . . . . . . . . . . . . . . .5. . . . .4. . . . . 43 43 44 44 44 44 44 45 45 45 45 46 46 46 47 48 48 48 48 49 49 . . . . . . . . . . . . . .

. . . . . . .1. . . . . . . . . . .´ INDICE GENERAL III B. . . . . . . . Depuraci´ on de fallos que se manifiesten como excepciones en el procesador MC68000 93 B. . . 94 B. . . . . Ejemplo .2. . . . . . . Identificaci´on la instrucci´on que provoc´o la excepci´on . . . . . . . . . . . . . . . 95 . .

IV Proyecto de Entrada–Salida (2014–2015) .

Los registros adicionales de este modo para el procesador . tiene un bus de datos de 16 bits y un bus de direcciones de 24 bits. Modelo de programaci´ on del modo supervisor En el modelo de programaci´on del modo supervisor est´an disponibles todos los registros del modo usuario y otros adicionales. User Stack Pointer) se pueden usar como registros de direcciones o punteros de pila de usuario. Estos registros de direcciones s´olo se pueden usar para operandos de una palabra o de una palabra larga. Modelo de programaci´ on del modo usuario El modelo de programaci´on del modo usuario es com´ un para todos los microprocesadores de la familia M68000.2. Program Counter) de 32 bits y un registro de estado de 8 bits (CCR. pero no de un octeto. las instrucciones se ejecutan en uno de los dos modos posibles: Modo usuario: este modo proporciona el entorno de ejecuci´on para los programas de aplicaci´on. una palabra (word = 16 bits) o de una palabra larga (long–word = 32 bits). Los primeros 8 registros (D0–D7) se usan para almacenar operandos de un octeto (byte = 8 bits). Todos estos 16 registros se pueden usar como registros ´ındices en los desplazamientos m´ ultiples. El software de sistema y el sistema operativo ejecuta en este modo privilegiado. Este modelo contiene (ver figura 1.1) 16 registros de 32 bits de prop´osito general (D0–D7. A0–A7). Es un procesador CISC.Cap´ıtulo 1 Microprocesador MC68000 El microprocesador MC68000 fue introducido en 1979 y es el primer microprocesador de la familia M68000 de Motorola. Condition Code Register). aunque posee un juego de instrucciones muy ortogonal.1. en particular el registro A6 se suele utilizar como puntero de marco (FP. Modo supervisor: en este modo se proporcionan algunas instrucciones privilegiadas que no est´an disponibles en el modo usuario. 1. 1. 1. un contador de programa (PC. Modelo de programaci´ on El MC68000 fue uno de los primeros microprocesadores en introducir un modo de ejecuci´on privilegiado.1.1.1. Frame Pointer). As´ı. El otro grupo de 7 registros (A0–A6) y el puntero de pila de usuario (A7 ´o USP.

31 16 15 0 A7’ (SSP) PUNTERO DE PILA DE SUPERVISOR SR REGISTRO DE ESTADO 8 7 CCR Figura 1. si se referencia el registro A7 se referencia el USP o el SSP dependiendo del modo de ejecuci´on. De este modo. desde el modo supervisor se tiene acceso al puntero de pila de usuario.2. pero no a la inversa. Como es habitual.2 Proyecto de Entrada–Salida (2014–2015) 31 16 15 8 7 0 D0 D1 D2 D3 D4 OCHO REGISTROS DE DATOS D5 D6 D7 31 16 15 0 A0 A1 A2 A3 SIETE REGISTROS DE DIRECCIONES A4 A5 A6 A7 (USP) PUNTERO DE PILA DE USUARIO PC CONTADOR DE PROGRAMA CCR REGISTRO DE ESTADO Figura 1. .1: Modelo de programaci´on de usuario MC68000 se muestran en la figura 1.2: Modelo de programaci´on de supervisor En este modo se tiene acceso al octeto de mayor peso del registro de estado y se dispone de un puntero de pila de supervisor (A7’ ´o Supervisor Stack Pointer).

Absoluto 3.I0 ). supervisor). 11. Byte).1.B indica operandos de 8 bits (B. Palabras largas (32 bits) Existen nem´onicos espec´ıficos para operandos de bits y BCD. Overflow).2. 7. Relativo a contador de programa. cero (Z. 6. Decimal Codificado en Binario (BCD) de 4 bits por d´ıgito. acarreo (C. 3. para distinguir entre octetos. El octeto de mayor peso (octeto de sistema) contiene biestables de control de modo para modo traza (T. Longword).W operandos de 16 bits (W. as´ı como la m´ascara de interrupci´on (I2 . 12 y 14 no se usan en el MC68000 y est´an reservados para uso futuro. En cuanto a los modos de direccionamiento.3: Registro de estado 1. Carry) y precisi´on extendida (X. Directo a registro 2. 2.3) tiene 16 bits. aunque los bits 5. palabras y palabras largas se a˜ nade un sufijo al nem´onico en cuesti´on. el MC68000 proporciona 14 modos de direccionamiento que se pueden agrupar en los siguientes 7 tipos b´asicos: 1.I1 . Bits. Trace) y supervisor (S. negativo (N. Palabras (16 bits) 5. BYTE DE SISTEMA 9 BYTE DE USUARIO 15 13 10 T S I2 I1 I0 8 4 3 2 1 0 XNZ VC ACARREO DESBORDAMIENTO CERO NEGATIVO PRECISION EXTENDIDA MODO TRAZA MODO SUPERVISOR MASCARA DE INTERRUPCION Figura 1. 3 Registro de estado El registro de estado (ver figura 1. MOVE. Octetos (8 bits) 4. Zero). Microprocesador MC68000 1. .3.L operandos de 32 bits (L. Word) y MOVE. Sin embargo. Negative). Indirecto a registro 4. El octeto de menor peso (octeto de usuario) contiene los siguientes biestables de estado: desbordamiento (O. Tipos de operandos y modos de direccionamiento El procesador MC68000 soporta los siguientes tipos de operandos: 1. De este modo. Extend). MOVE.1.

PC #< data > #< data > SR. palabra o palabra larga corto Impl´ıcito a registro Leyenda: EA = Dn = An = CO = d8 = d16 = N = ← = Xn = SR = PC = USP= SSP = C´alculo de la direcci´on Sintaxis EA=Registro de dato n EA=Registro de direcci´on n Dn An EA=Siguiente palabra en CO EA=Siguientes dos palabras en CO EA=An EA=An.SSP.L (An) (An)+ -(An) (d16 .USP.SSP.1 detalla cada uno de los modos de direccionamientos del MC68000. An ← An+N An ← An–N. Modo Directo a registro de datos de direcci´on Absoluto corto largo Indirecto a registro con postincremento con predecremento Relativo a PC con desplazamiento m´ ultiple Relativo a registro base con desplazamiento m´ ultiple Inmediato byte.An. Impl´ıcito La tabla 1. Relativo a registro base.PC.4 Proyecto de Entrada–Salida (2014–2015) 5.PC Direcci´on efectiva Registro de datos Registro de direcciones C´odigo de operaci´on Desplazamiento de 8 bits Desplazamiento de 16 bits 1 para byte.An) (d8 . Inmediato 7.Xn) (d16 .Xn) DATA=Siguientes bytes en CO DATA=3 bits en CO EA=SR.USP.1: Modos de direccionamiento . EA=An EA=PC+d16 EA=PC+Xn+d8 EA=An+d16 EA=An+Xn+d8 (XXX). 6.PC) (d8 . 2 para palabra y 4 para palabra larga Sustituye Registro de datos o direcciones usado como ´ındice en los desplazamientos m´ ultiples Registro de estado Registro contador de programa Registro puntero de pila de usuario Registro puntero de pila de supervisor Tabla 1.W (XXX).

1. Microprocesador MC68000

1.3.

5

Organizaci´
on de datos en registros

Los ocho registros de datos proporcionan soporte para operandos de 1, 8, 16 o 32 bits. Los
siete registros de direcciones y el puntero de pila activo proporcionan soporte para direcciones
de 32 bits.

1.3.1.

Registros de datos

Cada registro de datos contiene 32 bits. Los operandos de octeto ocupan los 8 bits de
menor peso, los de palabra los 16 bits de menor peso y los de palabra larga los 32 bits. El bit
menos significativo se direcciona como bit 0 y el m´as significativo como bit 31.
Si alguno de estos registros se usa como fuente o destino de una operaci´on de tama˜
no
inferior a palabra larga, s´olo se modifica la parte de menor peso correspondiente y la parte
de mayor peso permanece inalterada.

1.3.2.

Registros de direcciones

Estos registros de direcciones (junto con el puntero de pila) tienen 32 bits y contiene
una direcci´on completa de 32 bits. Los registros de direcciones no proporcionan soporte para
operandos de byte. A diferencia de los registros de datos, si un registro de direcciones se
usa como destino, el registro completo se modifica aunque la operaci´on tenga un tama˜
no
de palabra. En este caso, se extiende el signo de los operandos antes de la realizaci´on de la
operaci´on.

1.4.

Mapa de direcciones

Los procesadores de la familia M68000 tienen un u
´nico espacio o mapa de direcciones. De
este modo, en dicho mapa de direcciones se deben ubicar tanto los dispositivos que configuran
la memoria principal como los controladores de perif´ericos. Por lo tanto, dentro del juego de
instrucciones, no existen instrucciones espec´ıficas de Entrada/Salida, sino que todas las instrucciones se podr´an utilizar para direccionar tanto memoria principal como los controladores
de perif´erico.
Aunque el MC68000 posee registros de direcciones de 32 bits de ancho, solo dispone 24
bits en el bus de direcciones1 . Como posee direccionamiento a nivel de byte, puede direccionar
224 Bytes es decir 16 Megabytes. Lo habitual es reservar las u
´ltimas direcciones del mapa
para ubicar los controladores de perif´ericos.

1.4.1.

Organizaci´
on de datos en memoria

El MC68000 proporciona direccionamiento a nivel de byte con una organizaci´on big–
endian como se muestra en la figura 1.4. Como se observa, el byte de mayor peso tiene
asignado una direcci´on menor que la del byte de menor peso.
Las instrucciones y operandos de varios bytes se deben almacenar en direcciones pares.
De otro modo, se genera la excepci´on Address Error si se intenta acceder a un operando de

as de un byte con una direcci´on impar. En particular, los operandos de tama˜
no de palabra
1
En realidad, existen desde el A1 hasta el A23 para direccionar palabras y dos l´ıneas adicionales UDS y
LDS (Upper y Lower Data Strobes) para seleccionar el byte de mayor peso, el de menor peso o ambos de cada
palabra.

6

Proyecto de Entrada–Salida (2014–2015)
15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

DIRECCION
$000000

BYTE 000000

$000002

BYTE 000002

$000004

BYTE 000004

PALABRA 0
PALABRA 1
PALABRA 2

BYTE 000001
BYTE 000003
BYTE 000005

.
.
.

$FFFFFE

BYTE FFFFFE

PALABRA 7FFFFF

BYTE FFFFFF

Figura 1.4: Organizaci´on de palabras en memoria

larga se almacenan en dos palabras consecutivas. Es decir, si la primera palabra se ubica en
la direcci´on n (n debe ser par), la segunda palabra se ubica en la direcci´on n+2.

1.5.

Excepciones e interrupciones

El t´ermino excepci´on denota comportamientos an´omalos o no deseados por el programa en
ejecuci´on, tal es el caso de los cepos o traps y las interrupciones. Cuando se presenta un suceso
como una divisi´on por cero, un error en el bus, una violaci´on de privilegios o un controlador
de perif´erico solicita un interrupci´on, se abandona el procesamiento de las instrucciones del
programa en ejecuci´on y se ejecuta la secuencia o ciclo de reconocimiento de excepciones.
Por lo tanto, las interrupciones que solicitan los controladores de perif´erico son un caso
particular de las excepciones. Entre las excepciones que trata el MC68000 se encuentran:
Excepci´
on de reset Es la que se procesa al activar RESET y HALT de forma simult´
anea
y supone una reinicializaci´on del procesador.
Errores de bus y de direcci´
on Un error de bus se produce cuando desde el exterior se
activa la se˜
nal BERR en un ciclo de bus, y un error de direcci´on, cuando se intenta
acceder con direcci´on impar a palabras o dobles palabras. En ambos casos se suspende
el ciclo de memoria y se trata la excepci´on, en este caso no se puede completar la
ejecuci´on de la instrucci´on.
Traza Se procesa al final de cada instrucci´on si est´a activo el bit de traza del registro de
estado. Se utiliza para la depuraci´on de programas.
Instrucci´
on ilegal Se procesa cuando se intenta ejecutar un c´odigo de instrucci´on no implementado. Dos casos especiales son los c´odigos de instrucci´on destinados a los coprocesadores de coma flotante y memoria paginada, que tienen vectores espec´ıficos. Estos
c´odigos comienzan con las secuencias 1111 y 1010.

1. Microprocesador MC68000

7

Violaci´
on de privilegio Se produce cuando se intenta ejecutar en modo usuario instrucciones que s´olo se pueden ejecutar en modo supervisor.
TRAP La propia instrucci´on TRAP procesa una de las 16 excepciones TRAP que expresa
un operando inmediato. Se utiliza para solicitar servicios del sistema operativo.
TRAPV Se procesa la excepci´on si se cumple la condici´on de overflow al ejecutar una
instrucci´on TRAPV.
CHK Se procesa la excepci´on si ejecutando la instrucci´on CHK se detecta un desbordamiento
de rango. Se utiliza para dar soporte a los lenguajes de alto nivel2 que poseen rangos
en tipos enteros, como por ejemplo el ´ındice de un vector.
Divisi´
on por 0 Se provoca la excepci´on si en una instrucci´on de divisi´on el cociente es 0.
Interrupci´
on Se procesa al final de una instrucci´on si se solicita una interrupci´on por las
l´ıneas de interrupci´on IP L2, IP L1 e IP L0, con una prioridad mayor a la codificada
en los bits I2 , I1 y I0 del registro de estado.

1.5.1.

Procesamiento de excepciones

En procesamiento de cualquier excepci´on, supone almacenar en la pila el registro de estado
y contador de programa3 . A continuaci´
on, se lleva el contenido de la entrada correspondiente
de la tabla de vectores al PC y se procede a ejecutar instrucciones. Por lo tanto, en la entrada
correspondiente de la tabla de vectores debe de almacenarse previamente la direcci´on de la
rutina de tratamiento de la excepci´on. Adem´as, se coloca a 1 el bit S del registro de estado
y por lo tanto las rutinas de tratamiento de excepciones se ejecutan en modo privilegiado.
Existe una instrucci´on espec´ıfica para retornar de rutina de excepci´on (RTE). Esta instrucci´on restaura el contador de programa y el registro de estado que se almacenaron en la
pila durante el procesamiento de la excepci´on. Por lo tanto, al restaurar el registro de estado,
restaura el bit S y se restaura el modo de ejecuci´on anterior.

1.5.2.

Tabla de vectores de excepci´
on

La entrada de la tabla de vectores cuyo contenido se carga en el PC, viene predeterminada
para todas las excepciones excepto para las interrupciones de los perif´ericos. El MC68000 tiene
asignadas entradas distintas para cada tipo de excepci´on, seg´
un se muestra en la figura 1.5.
Cada entrada de esta tabla tiene 4 bytes, ya que almacena una direcci´on. Por lo tanto
ocupa 1 Kbytes. Adem´as y a diferencia de los otros procesadores de la familia M68000, el
MC68000 no posee un registro base de la tabla de vectores. Por lo tanto, esta tabla siempre
debe estar ubicada a partir de la direcci´on 000000 y abarca hasta la direcci´on 0003FF.

1.5.3.

Procesamiento de interrupciones

Las interrupciones son un caso particular de excepciones y su procesamiento es ligeramente
diferente. Las principales diferencias se refieren a:
2
3

Es decir, todos menos C
En el procesamiento de las excepciones de direcci´
on y bus, el procesador almacena en pila m´
as informaci´
on.

2. La instrucci´on (RTE) restaura el registro de estado. los controladores de perif´ericos deben suministrar un vector de interrupci´on de un byte5 . Adem´as del bit S. Este vector debe estar comprendido entre 64 y 255 (ver tabla 1. As´ı se enmascaran las interrupciones de nivel igual o menor a la que se ha reconocido.5). Por lo tanto. durante la secuencia de reconocimiento de interrupciones se producen varios ciclos de bus para obtener la direcci´on de la rutina de tratamiento de la interrupci´on. Con la direcci´on obtenida se inicia 4 Excepto las de nivel 7 que no con enmascarables Tambi´en existe la posibilidad de interrupciones autovectorizadas para compatibilidad con perif´ericos de otras familias distintas a la M68000 5 . Este vector es el n´ umero de la entrada de la tabla de vectores donde est´a almacenada la direcci´on de su rutina de tratamiento. al final de la ejecuci´on de la instrucci´on en curso. Vectorizaci´ on. Solo se procesa la interrupci´on. I1 y I0 del registro de estado. si el nivel de la solicitud4 es estrictamente superior al nivel almacenado en los bits I2 . tambi´en se modifican estos bits almacenando el nivel de la interrupci´on que se procesa. 1.8 Proyecto de Entrada–Salida (2014–2015) N´ umero vector 0 2 3 4 5 6 7 8 9 10 11 12-14 15 16-23 24 25-31 32-47 48-63 64-255 Direcci´ on Dec Hex 0 000 4 004 8 008 12 00C 16 010 20 014 24 018 28 01C 32 020 36 024 40 028 44 02C 48 030 60 03C 64 040 96 060 100 064 128 080 192 0C0 256 100 Excepci´ on Reset: SSP inicial Reset: PC inicial Error de bus Error de direcci´ on Instrucci´ on ilegal Divisi´ on por 0 Instrucci´ on CHK Instrucci´ on TRAPV Violaci´ on de privilegio Traza Emulador instrucci´ on 1010 Emulador instrucci´ on 1111 Reservado Vector Int. El vector de interrupci´on le´ıdo se multiplica por 4 para obtener la direcci´on de la entrada correspondiente de la tabla de vectores. no inicializado Reservado Interrupci´ on esp´ urea Autovectores 1-7 Instrucciones TRAP 0-15 Reservado Vectores de interrupci´ on Figura 1.5: Tabla de vectores de excepci´on del MC68000 Enmascaramiento selectivo. A diferencia de las excepciones propiamente dichas. El ciclo de bus de reconocimiento de interrupciones cuyo objetivo es leer el vector de interrupci´on. por lo tanto restaura el nivel de interrupci´on anterior.

El n´ umero de ciclos aparece con el siguiente formato: t(r/w). cuando se est´e en condiciones de reconocer interrupciones se debe colocar 000 en los biestables de m´ ascara de interrupci´on I2 . U quiere decir que quedar´a indefinido. Se colocan a 1 los bits S.6. Los pasos m´as destacables de esta excepci´on son: Se lee el contenido de los 4 primeros bytes de la memoria y se llevan al SSP (puntero de pila de supervisor).1. donde la t determina el n´ umero total de ciclos de reloj que emplea el procesador en ejecutar esa instrucci´on. I1 y I0 del registro de estado.1.000007 y el puntero de pila inicial en las direcciones 000000 . Por lo tanto. Esta direcci´on almacenada en la tabla de vectores se lleva al PC y se comienza a ejecutar la rutina de tratamiento. cu´antos de escritura. los bits de estado que se modifican y un peque˜ no resumen de la operaci´on que ejecutan. r determina cu´antos ciclos de memoria se realizan en la instrucci´on.6. y w.1. se va iniciar la ejecuci´on de instrucciones en modo privilegiado y con las interrupciones inhibidas. incluido el ciclo de fetch. Abreviaturas Cuando aparece una X en un bit de estado. el n´ umero de ciclos de reloj que consumen. Excepci´ on de reset Cuando se reinicia el computador. 1. En ella todas las w valen 0. Microprocesador MC68000 9 un ciclo de bus para leer la direcci´on de comienzo de la rutina de interrupci´on. Se lee el contenido de los siguientes 4 bytes y se llevan al PC.4. En ellas se representan el nem´onico de las operaciones.6. Durante el procesamiento de esta excepci´on no se almacena nada en la pila. se produce la excepci´on de RESET. Las abreviaturas empleadas son: . los bytes que ocupan. La descripci´on de estas abreviaturas se encuentra en la secci´on 1. Por lo tanto. ya que se usa para iniciar o reiniciar el procesador.000003. Los posibles operandos se representan de forma abreviada. quiere decir que la operaci´on modifica el bit de estado: 0 lo pone a 0 y 1 lo pone a 1. 1. se debe colocar la direcci´on de inicio del programa en las direcciones 000004 . I1 y I0 del registro de estado. Se incluye una columna que determina el n´ umero de ciclos de reloj que emplea cada instrucci´on. Juego de instrucciones Las instrucciones se resumen en el conjunto de tablas ubicadas a partir de la p´agina 13. y se obtendr´a de la tabla 1. Lo que hay que sumar depende del direccionamiento. los operandos posibles. Adem´as.6. y que se emplean para calcular la direcci´on efectiva seg´ un sea ´esta. Se realiza el fetch de la instrucci´on apuntada por el PC y se comienza la ejecuci´on de instrucciones. En algunos casos aparece un signo +. 1. que indica que hay que sumar ciclos a los que aparecen. I2 .5.

7.. modos de direccionamiento posibles: Indirecto a registro (An)..31. count: Contador de desplazamiento 1-8. A1... bitb: N´ umero de bit de byte 0. count o Dn: Operando que puede ser count o Dn. Indirecto a registro con postincremento (An)+.I) Relativo a PC con desplazamiento m´ ultiple 10(2/0) 14(3/0) #xxx Inmediato 4(1/0) 8(2/0) Figura 1.byte Larga Dn Directo a registro datos 0(0/0) 0(0/0) An Directo a registro direcciones 0(0/0) 0(0/0) (An) Indirecto a registro 4(1/0) 8(2/0) (An)+ Indirecto a registro con postincremento 4(1/0) 8(2/0) -(An) Indirecto a registro con predecremento 6(1/0) 10(2/0) $Desp(An) Relativo a registro base 8(2/0) 12(3/0) $Desp(An.10 Proyecto de Entrada–Salida (2014–2015) Modo de direccionamiento Pala. cc: C´odigo de condici´on: CC: Carry Clear: C CS: Carry Set: C EQ: Equal: Z F: False: 0 GE: Greater Than or Equal: (N ∧ V ) ∨ (N ∧ V ) GT: Greater Than: (N ∧ V ∧ Z) ∨ (N ∧ V ∧ Z) HI: High: C ∧ Z LS: Low or Same: C ∨ Z LE: Less Than or Equal: Z ∨ (N ∧ V ) ∨ (N ∧ V ) LT: Less Than: (N ∧ V ) ∨ (N ∧ V ) MI: Minus: N NE: Not Equal: Z PL: Plus: N T: True: 1 VC: Overflow Clear: V VS: Overflow Set: V CCR: Condition Code Register. indistintamente. .. A7.I) Relativo a registro base con desplazamien- 10(2/0) 14(3/0) to m´ ultiple xxx.W Absoluto corto 8(2/0) 12(3/0) xxx.6: C´alculo de ciclos a partir de direcciones efectivas addr: Direcci´on absoluta de 16 o 32 bits. An: Registro de direcci´on A0.L Absoluto largo 12(3/0) 16(4/0) $Desp(PC) Relativo a PC 8(2/0) 12(3/0) $Desp(An.. Byte de usuario del registro de estado. bitl: N´ umero de bit de doble palabra 0. dadr: Direcci´on destino.

excluidos (An)+ y -(An). data32: 32 bits de dato inmediato. data16: 16 bits de dato inmediato. i: Registro ´ındice (An o Dn. d16: Desplazamiento de 16 bits. Igual que sadr. label o addr empleadas en direccionamiento relativo a PC.7 (tama˜ nos de 8.. sAn: Registro de direcci´on fuente. dDn: Registro de datos destino. Dn: Registro de datos. reglist: Lista de registros. d8: Desplazamiento de 8 bits. madr: Direcci´on m´ ultiple.i). en desplazamiento m´ ultiple). Igual que dadr. Direcci´on absoluta addr. rs: Registro fuente (sDn o sAn).1. puede ser una de las siguientes: Indirecto a registro (An). Direccionamiento relativo a PC indexado label(i). Indirecto a registro indexado con desplazamiento d8(An. . n=0. data8: 8 bits de dato inmediato. 16 o 32). Indirecto a registro con postincremento (An)+. label: Etiqueta o direcci´on absoluta. incluye varios registros separados por comas o rangos de registros Rn-Rm separados por ’/’ rd: Registro destino (dDn o dAn). Microprocesador MC68000 11 Indirecto a registro con predecremento -(An). Indirecto a registro indexado con desplazamiento d8(An. Relativo a registro base d16(An). Relativo a registro base d16(An). dAn: Registro de direcci´on destino. data3: 3 bits de dato inmediato. excluidos (An)+ y -(An). Indirecto a registro con predecremento -(An). addr Direcci´on Absoluta. jadr: Direcci´on de salto. sadr: Direcci´on fuente.i).

3 o 4: 1. ⊕: OR Exclusivo l´ogico. se˜ naladas en los casos necesarios mediante una indicaci´on del tipo comentarioi . 4. En las siguientes instrucciones se comentan las siguientes cuatro notas.12 Proyecto de Entrada–Salida (2014–2015) sDn: Registro de datos fuente. x: Complemento del valor de x. USP: Puntero de pila de usuario (no es el registro A7). Por ejemplo. =: Igual. SR: Registro de estado. Bits del y al z de x. ←: Movimiento de datos en el sentido de la flecha. El postincremento o predecremento se hace sumando o restando 4. ÷: Dividir. en cuyo caso se trabaja con 2 en vez de 1. 3. Dn ← An Indica que se carga en Dn el contenido de An. ←→: Intercambio de datos entre dos posiciones. ×: Multiplicar. ∨: OR l´ogico. 2. vector:Direcci´on del vector de TRAP [ ]: Contenido de la posici´on de memoria cuya direcci´on est´a contenida en el registro especificado. x < y − z >: de Dn. El postincremento o predecremento se hace sumando o restando 2. para que A7 siempre tenga una direcci´on par. ∧: AND l´ogico. Los postincrementos suman 1 y los predecrementos restan 1. Dn < 0 − 7 > representa los 8 bits bajos +: Suma. donde i puede ser 1. Dn ← [An] Indica que se almacena en Dn el contenido de la posici´on de memoria cuya direcci´on est´a cargada en An. −: Resta. 2. salvo que el registro de direcci´on que aparezca sea el A7. La direcci´on efectiva debe ser par. .

L rs.4 MOVE.8.10 5(1/1)+ X X 0 0 [dadr]←[sadr]1 MOVE.L rs.10 14(1/2)+ X X 0 0 [dadr]←[sadr]2.dadr 2.W rs. 13 Transferencia de datos Ciclos Nem´ onico Operandos Bytes MOVE.10 5(0/1)+ X X 0 0 [dadr]←[sadr]2.6 4(1/0)+ X X 0 0 An<0−15>←[sadr]. [An]←Dn<0−7>1 Dn.W data16.addr 4 13(2/1) X X 0 0 [An+d16]←Dn<0−7> 4 15(2/1) X X 0 0 [An+d8+i]←Dn<0−7> 4.An 6 12(3/0)+ X X 0 0 An<0−31>←data32 MOVE.6.4.4 MOVE.W sadr.W sadr. Dn<0−7>←[An]1 MOVE.Dn 2 4(1/0) X X 0 0 Dn<0−15>←rs<0−15> MOVE. MOVE.8 9(1/1)+ X X 0 0 [dadr]←data16 MOVE.6 5(0/1)+ X X 0 0 [dadr]←rs<0−15>2.6 10(0/2)+ X X 0 0 [dadr]←rs<0−31>2.An 2 4(1/0) An←U SP Instrucci´ on ejecutable en supervisor .2.Dn 2 4(1/0) MOVE.4.USP 2 4(1/0) U SP ←An An<16−31>←An<15> An<0−15>←rs<0−15>.Dn 2 reloj Registro estado X N Z V C Operaci´ on realizada 8(2/0) X X 0 0 Dn<0−7>←[An] 8(2/0) X X 0 0 Dn<0−7>←[An].Dn 2.An 4 8(2/0)+ X X 0 0 An<0−15>←data16.L sadr.4.Dn 4 14(3/0) X X 0 0 Dn<0−7>←[P C+d8+i] Dn.4.An 2.Dn 4 14(3/0) X X 0 0 Dn<0−7>←[An+d8+i] addr. An←An+11 -(An).L data32.4 MOVE.6 5(0/1)+ X X 0 0 [addr]←Dn<0−7> 2.L data32.Dn 4 12(3/0) X X 0 0 Dn<0−7>←[P C+d16] label(i).d8(An.(An)+ 2 9(1/1) X X 0 0 [An]←Dn<0−7>.6.6.3 MOVE.6 4(1/0)+ X X 0 0 Dn<0−15>←[sadr]2.dadr 2.W data16.dadr 6. An←An+11 Dn.3 MOVE.dadr 2.10 18(2/2)+ X X 0 0 [dadr]←data32 MOVE.B sDn.B (An).dadr 2.W rs. Microprocesador MC68000 1.Dn 4 12(3/0) X X 0 0 Dn<0−7>←[An+d16] d8(An.4.L rs.An 2 4(1/0) MOVE.B sadr.L sadr.6.L data32.4.-(An) 2 9(1/1) X X 0 0 An←An−1.1.dadr 4.dDn 2 4(1/0) X X 0 0 dDn<0−7>←sDn<0−7> MOVE.B d16(An).i).Dn 2 10(2/0) X X 0 0 An←An−1.Dn 2 (An)+.W rs.4.L sadr.Dn 4.8.Dn 6 12(3/0) X X 0 0 Dn<0−31>←data32 MOVE.An 2 4(1/0) An<0−31>←rs<0−31> MOVE An.6 8(2/0)+ X X 0 0 An<0−31>←[sadr]2.W sadr.dadr MOVE.6 4(1/0)+ X X 0 0 Dn<0−31>←[sadr]2.8.(An) 2 9(1/1) X X 0 0 [An]←Dn<0−7> Dn.6 4(1/0)+ X X 0 0 Dn<0−7>←[addr] label.3 MOVE. An<16−31>←An<15> X X 0 0 Dn<0−31>←rs<0−31> Instrucci´ on ejecutable en supervisor MOVE USP.Dn 2.i) Dn. An<16−31>←An<15>2.d16(An) Dn.4.4.8.4 MOVE.6.An 2.3 MOVE.

An←[An+2]2. reg1<16−31>←reg1r15>.A0-A7 MOVEM. pero con postincremento MOVEM. regn<16−31>←regn<15>.reglist 4.6. An←[A7].W jadr. reg2<16−31>←reg2<15> : regn<0−15>←[jadr+2n−2].madr 4.W reglist.reglist 4 8+4n(2+n/0)+ reg1<0−15>←[An]. regn<16−31>←regn<15>2 Carga palabras al- macenadas secuencialmente en memoria en una lista de registros el orden en que se cargan es D0-D7.6.rd 2 6(1/0) rs←→rd LINK An.d16 4 18(2/2) A7←A7−4. A7←A7+4 MOVEM.8 4+5n(1/n)+ [madr]←reg1<0−15> [madr+2]←reg2<0−15> [madr+4]←reg3<0−15> : : [madr+2n−2]← regn<0−15>2 Almacena palabras de lista de registros en espacio secuencial de de memoria.A0-A7 . An←[An+2] reg2<0−15>←[An]. A7←A7+d16 UNLK An 2 12(3/0) A7←An.3 Igual que la anterior. orden almacenamiento D0-D7. reg2<16−31>←reg2<15>. An←[An+2] : regn<0−15>←[An].W (An)+.14 Proyecto de Entrada–Salida (2014–2015) Ciclos Bytes reloj Registro estado Nem´ onico Operandos X N Z V C Operaci´ on realizada EXG rs.8 8+4n(1+n/0)+ X X 0 0 reg1<0−15>←[jadr]. [A7]←An An←A7. reg1<16−31>←reg1<15> reg2<0−15>←[jadr+4].

reglist (An)+. [An]←reg3<0−15> An←[An−2]. excepto que ahora se mueven los 32 bits de registros MOVEP.W d16(An).4 Dn<8−15>←[An+d16].6.1. An←An+2.W.Dn 4 16(4/0) 2. La direcci´ on es de byte y lee bytes MOVEP. An←An+2 Dn<8−15>←[An+d16].6. Dn<0−7>←[An+d16]3 Carga datos de pe- rif´ ericos de direcciones alternas. [An]←regn<0−15> : An←[An−2].L jadr.Dn 4 24(6/0) Dn<24−31>←[An+d16]. La direcci´ on es de byte y escribe bytes MOVEP.3 Almacena de lista palabras de registros en espacio secuencial de memoria el orden de almacenamiento A7-A0. [An+d16]←Dn<0−7>3 Almacena los bytes de registros en direcciones alternas de pe- rif´ ericos.madr 4.d16(An) 4 18(2/2) [An+d16]←Dn<8−15>.reglist 4.W reglist. [An]←reg2<0−15> An←[An−2]. An←An+2 Dn<16−23>←[An+d16].D7-D0 MOVEM.L d16(An). Microprocesador MC68000 15 Ciclos Nem´ onico Operandos MOVEM.-(An) Bytes 4 reloj 4+5n(1/n)+ Registro estado X N Z V C Operaci´ on realizada An←[An−2].8 4 8+8n (2+2n/0) reglist. An←An+2 Dn<0−7>←[An+d16]3 Carga datos de pe- rif´ ericos de direcciones alternas.-(An) 4 (1+n) Igual que MOVEM. La direcci´ on es de byte y lee bytes . An←An+2.8 4+10n reglist. [An]←reg1<0−15>2.W Dn.

6 10(1/2)+ A7←A7−4.6 9(1/1)+ 0 1 0 0 [dadr]←01 CLR.4 SWAP Dn 2 4(1/0) X X 0 0 Dn<0−7>←→Dn<8−15> Scc dadr 2.L Dn.3 CLR.4.4.An 2.Dn 4 LEA jadr.3 CLR.L dadr 2. [An+d16]←Dn<16−23>.B Dn 2 4(1/0)+ 0 1 0 0 Dn<0−7>←01 CLR.4.16 Proyecto de Entrada–Salida (2014–2015) Ciclos Nem´ onico Operandos MOVEP.4.W Dn 2 4(1/0)+ 0 1 0 0 Dn<0−15>←02.W dadr 2.dadr 4.B data8.6 9(1/1)+ [dadr]←todo1s si cc = TRUE [dadr]← todo 0s si cc = FALSE1 Scc Dn 2 4(1/0) Dn<0−7>←todo1s si cc = TRUE Dn<0−7>←todo0s si cc = FALSE TAS dadr 2.6. An←An+2 [An+d16]←Dn<0−7> Almacena los bytes de registros en direcciones alternas de pe- rif´ ericos.L Dn 2 6(1/0)+ 0 1 0 0 Dn<0−31>←02.6 11(1/1)+ X X 0 0 [dadr<7>]←11 Instrucci´ on para multiprocesador TAS Dn 2 4(1/0) X X 0 0 Dn<7>←1 . La direcci´ on es de byte y escribe bytes MOVEQ data8.B data8.W data16. Dn<8−31>←Dn<7> MOVE. [A7]←jadr4 Apila direcci´ on efectiva CLR.4.6 14(1/2)+ 0 1 0 0 [dadr]←02.Dn MOVE.Dn 2 4(1/0) X X 0 0 Dn<0−7>←data8.B dadr 2.4.d16(An) Bytes 4 reloj Registro estado X N Z V C 28(2/4) Operaci´ on realizada [An+d16]←Dn<24−31>. An←An+2 [An+d16]←Dn<8−15>.4.6 8(2/0) X X 0 0 Dn<0−7>←data8 9(1/1)+ X X 0 0 [dadr]←data8 8(2/0) X X 0 0 Dn<0−15>←data16 2(0/0)+ An←jadr2 Carga una direcci´ on efectiva en un registro de direcci´ on PEA jadr 2.4 CLR. An←An+2.6 9(1/1)+ 0 1 0 0 [dadr]←02.8 4 MOVE.

W Dn<0−7>← Dn<0−7>+data8 Dn<0−15>+data16 An<0−31>←An<0−31> +data16(expande signo) 4.W data3.B data3.B data3.L Dn.Dn 2 8(1/0) X X X X X ADD.6 9(1/1)+ Dn<0−31>← Dn<0−31>+rs<0−31> An<0−31>← An<0−31>+rs<0−31> Dn<0−7>← Dn<0−7>+data3 2.6 14(1/2)+ X X X X X [dadr]← [dadr]+Dn<0−31>2. 17 Aritm´ eticas Ciclos Registro estado Nem´ onico Operandos Bytes reloj X N Z V C Operaci´ on realizada ADD.6 4(1/0)+ X X X X X Dn<0−7>← Dn<0−7>+[sadr]1 ADD.Dn 2 4(1/0) X X X X X rs.dadr ADD.dadr ADD.L sadr.8 13(2/1)+ X X X X X [dadr]←[dadr]+data162.W data16.6 9(1/1)+ X X X X X [dadr]← [dadr]+Dn<0−7>1 ADD.6.An 2 8(1/0)+ dDn<0−7>+sDn<0−7> Dn<0−15>← [Dn<0−15>+rs<0−15> An<0−31>←An<0−31>+ rs<0−15>(expande signo) ADD.10 22(3/2)+ X X X X X [dadr]←[dadr]+data322.3 .L data32.L rs.An 4 8(2/0)+ ADD.An 2.An 2.8 13(2/1)+ X X X X X [dadr]←[dadr]+data81 ADD.L data32.dadr 2.Dn 2.Dn 2 4(1/0) X X X X X Dn<0−15>← ADDQ.4 ADD.W data3.6 4(1/0)+ X X X X X Dn<0−15>← Dn<0−15>+[sadr]2.4.4 2 4(1/0) X X X X X dDn<0−7>← rs.Dn ADDA.Dn 2 4(1/0) X X X X X ADDQ.B data8.4.dadr 2.W sadr.6 9(1/1)+ X X X X X [dadr]← [dadr]+Dn<0−15>2.L sadr.L data32.4.B Dn.An 2 8(1/0) ADDQ.Dn 2.Dn 4 8(2/0) X X X X X Dn<0−15>← ADDA.6.Dn 2.W Dn.3 ADD.Dn 4 8(2/0) X X X X X ADD.8.3.3 ADD.4.An 2 4(1/0)+ ADDQ.4 ADD.dadr 4.L rs.B sDn.4.B data8.dadr 2.6 6(1/0)+ An<0−31>← An<0−31>+[sadr]2.W ADD.6 Dn<0−15>+data3 An<0−31>← An<0−31>+data3 X X X X X [dadr]←[dadr]+data32.1.B sadr.dadr 2.4.4.W sadr.W data16.4 ADD.3 6 16(3/0) X X X X X Dn<0−31>← 6 16(3/0) Dn<0−31>+data32 An<0−31>← An<0−31>+data32 6. Microprocesador MC68000 1.4.3 ADD.6 8(1/0)+ An<0−31>←An<0−31> +[sadr](expande signo)2.dadr 9(1/0)+ X X X X X [dadr]←[dadr]+data31 ADDQ.4.W data3.W data16.An ADD.dDn ADD.4.6.6 6(1/0)+ X X X X X Dn<0−31>← Dn<0−31>+[sadr]2.

B sDn.6 9(1/1)+ X X X X X [dadr]←0−[dadr]1 dadr 2.B Dn 2 4(1/0) X X X X X Dn<0−7>←0−Dn<0−7> NEG. las direcciones son en bit dos de byte ABCD sDn. dAn←dAn−1 [dAn]←[dAn]+[sAn]+X 1 Suma BCD n´ umeros empleando eXtendido.4.L data3.L data3.6 14(1/2)+ X X X X X [dadr]←0−[dadr]2.W Dn 2 4(1/0) X X X X X Dn<0−15>← 0−Dn<0−15>−X NEGX.4.dadr ADDX.B dadr NEG.6 9(1/1)+ X X X X X [dadr]←0−[dadr]−X 1 NEGX.L data3.6 9(1/1)+ X X X X X [dadr]←0−[dadr]−X 2.W 2 6(1/0) X U X U X 2.dDn NEG.4.B Dn 4(1/0) X X X X X Dn<0−7>← dDn<0−7>←dDn<0−7> +sDn<0−7>+X 2 0−Dn<0−7>−X NEGX.3 ADDX.L dadr 2.-(dAn) 2 19(3/1) X U X U X sAn←sAn−1.W Dn 2 4(1/0) X X X X X Dn<0−15>←0−Dn<0−15> NEG.L Dn NBCD dadr 2 6(1/0) X X X X X 9(1/1)+ X U X U X Dn<0−31>← 0−Dn<0−31>−X 2.W sDn.Dn Bytes 2 Registro estado reloj X N Z V C Operaci´ on realizada 8(1/0) X X X X X Dn<0−31>← Dn<0−31>+data3 ADDQ.4.18 Proyecto de Entrada–Salida (2014–2015) Ciclos Nem´ onico Operandos ADDQ.-(dAn) 2 19(3/1) X X X X X sAn←sAn−2.4.4.An ADDQ.4 NEGX.4.-(dAn) 2 35(5/2) X X X X X sAn←sAn−4.L dadr 2.6 9(1/1)+ X X X X X [dadr]←0−[dadr]2.4 NEG.3 NEGX.6 [dadr]←0−[dadr]−X 1 Complementa a 10 en BCD si X = 0 o a 9 si si X = 1 NBCD Dn 2 6(1/0) X U X U X Dn<0−7>←[D<0−7>]−X .-(dAn) 2 8(1/0) An<0−31>← An<0−31>+data3 2.B dadr 2.W dadr 2.3 NEG.6 14(1/2)+ X X X X X [dadr]←0−[dadr]−X 2.4 19(3/1) X X X X X sAn←sAn−1. dAn←dAn−2 [dAn]←[dAn]+[sAn]+X 2.L sDn.dDn 2 8(1/0) X X X X X dDn<0−31>←X+ dDn<0−31>+sDn<0−31> ABCD -(aAn). dAn←dAn−1 [dAn]←[dAn]+[sAn]+X 1 ADDX.B -(sAn).4.4 ADDX. dAn←dAn−4 [dAn]←[dAn]+[sAn]+X 2.L -(sAn).L Dn 2 6(1/0) X X X X X Dn<0−31>←0−Dn<0−31> NEGX.6 2 14(1/2)+ X X X X X [dadr]←[dadr]+data32.dDn 2 4(1/0) X X X X X dDn<0−7>←dDn<0−7> +sDn<0−7>+X dDn<0−15>←X+ dDn<0−15>+sDn<0−15> ADDX.dDn 2 4(1/0) X X X X X ADDX.W -(sAn).

1.dDn 6.4.W sadr.4 SUB.L sadr.dadr 4.dadr 2.B data8.Dn 4 8(2/0) X X X X X Dn<0−7>← Dn<0−7>−data8 SUB.L data32.4 SUB.W data3.3 .L rs.dadr 2.4.W data16.4.L data32.6.B data3.10 2 22(3/2)+ X X X X X [dadr]←[dadr]−data322.dadr 2.An 2 8(1/0)+ SUB.W data3.L rs.6 9(1/1)+ X X X X X [dadr]← [dadr]−Dn<0−7>1 SUB.W rs.8 An<0−31>←An<0−31> 13(2/1)+ X X X X X 6 16(3/0) X X X X X 6 16(3/0) −data16(expande signo) [dadr]←[dadr]−data162.W data3.W data16.6 4(1/0)+ X X X X X Dn<0−15>← [Dn<0−15>−[sadr]2.An Dn.6 4(1/0)+ X X X X X Dn<0−7>← Dn<0−7>−[sadr]1 SUB.Dn SUBA.6 8(1/0)+ 9(1/1)+ X X X X X X X X X X An<0−31>←An<0−31> −[sadr](expande signo)2.6 6(1/0)+ X X X X X Dn<0−31>← Dn<0−31>−[sadr]2.W SUB.dadr SUB.3 [dadr]← [dadr]−Dn<0−15>2.6 6(1/0)+ X X X X X An<0−31>← An<0−31>−[sadr]2.L Dn. Microprocesador MC68000 19 Ciclos Registro estado Nem´ onico Operandos Bytes reloj X N Z V C Operaci´ on realizada SUB.An 2.An 2.L data32.4.W data16.Dn 4 8(2/0) X X X X X Dn<0−15>← SUBA.6 14(1/2)+ X X X X X [dadr]← [dadr]−Dn<0−31>2.4.Dn 2.6 9(1/1)+ X X X X X [dadr]←[dadr]−data32.B data3.Dn SUBQ.dadr SUB.B data8.6 9(1/0)+ X X X X X [dadr]←[dadr]−data31 2 4(1/0) X X X X X Dn<0−15>← 2 4(1/0)+ Dn<0−15>−data3 An<0−15>← An<0−15>−data3 SUBQ.4 4(1/0) X X X X X dDn<0−7>← dDn<0−7>−sDn<0−7> SUB.4 SUB.An 4 8(2/0)+ [Dn<0−15>−data16 SUB.B Dn.dadr 2.An 4.8 13(2/1)+ X X X X X [dadr]←[dadr]−data81 SUB.W rs.Dn 2 8(1/0) SUB.4.4.W sadr.3 Dn<0−31>← [Dn<0−31>−data32 An<0−31>← An<0−31>−data32 SUB.L sadr.Dn 2 4(1/0) X X X X X Dn<0−15>← Dn<0−15>−rs<0−15> SUB.dadr SUBQ.Dn 2.4.6.B sadr.3 SUB.8.3 SUB.B sDn.6 2.An 2 8(1/0) SUBQ.Dn 2.4.Dn 2 4(1/0) An<0−15>←An<0−15>− rs<0−15>(expande signo) X X X X X Dn<0−31>← Dn<0−31>−rs<0−31> An<0−31>← An<0−31>−rs<0−31> X X X X X Dn<0−7>← Dn<0−7>−data3 SUBQ.4.

dadr SUBX.B -(sAn).Dn 4 ≤70(1/0)+ X X 0 0 Dn<0−31>← Dn<0−15>×data16 Multiplica dos n´ umeros 16 bits con signo y genera uno de 32 MULS sDn.20 Proyecto de Entrada–Salida (2014–2015) Ciclos Nem´ onico Operandos SUBQ.3 Multiplica dos n´ umeros 16 bits con signo y genera uno de 32 MULS data16.-(dAn) 2 35(5/2) X X X X X sAn←sAn−4.4. dAn←dAn−4 [dAn]←[dAn]−[sAn]+X 2.dDn 2 4(1/0) X X X X X SUBX.L -(sAn).6 2 14(1/2)+ X X X X X [dadr]←[dadr]−data32.L data3.L data3.dDn 2 4(1/0) X X X X X SUBX.4.4 19(3/1) X X X X X sAn←sAn−1.3 SUBX.W sDn.Dn Bytes 2 Registro estado reloj X N Z V C Operaci´ on realizada 8(1/0) X X X X X Dn<0−31>← Dn<0−31>−data3 SUBQ.An SUBQ.dDn 2 6(1/0) X U X U X dDn<0−7>←dDn<0−7> −sDn<0−7>−X Resta en BCD con bit de extendido MULS asdr.dDn 2 8(1/0) X X X X X SBCD -(sAn).dDn 2 ≤70(1/0) X X 0 0 dDn<0−31>← dDn<0−15>×sDn<0−15> Multiplica dos n´ umeros 16 bits con signo y genera uno de 32 .4 SUBX. dAn←dAn−1 [dAn]←[dAn]−[sAn]−X 1 Resta en BCD de byte de memoria SBCD sDn.W -(sAn).B sDn.L sDn.-(dAn) 2 8(1/0) An<0−31>← An<0−31>−data3 2. dAn←dAn−2 sAn←sAn−2 [dAn]←[dAn]−[sAn]+X 2. dAn←dAn−1 [dAn]←[dAn]−[sAn]+X 1 SUBX.-(dAn) 2 10(3/1) X U X U X dDn<0−7>←dDn<0−7> −sDn<0−7>+X dDn<0−15>←X+ dDn<0−15>−sDn<0−15> dDn<0−31>←X+ dDn<0−31>−sDn<0−31> sAn←sAn−1.6 <70(1/0)+ X X 0 0 Dn<0−31>← Dn<0−15>×[sadr]2.-(dAn) 2 19(3/1) X X X X X sAn←sAn−2.Dn 2.L data3.

4.Dn 2. Dn<16−31>←resto Divide sin dos signo n´ umeros y genera cociente y resto en 16 bits .1. Dn<16−31>←resto Divide n´ umeros con signo y genera cociente y resto en 16 bits DIVS sDn.Dn 2.dDn 2 ≤158(1/0) X X 0 0 dDn<0−15>← dDn<0−31>÷sDn<0−15>.dDn 4 ≤70(1/0) X X 0 0 dDn<0−31>← dDn<0−15>×sDn<0−15> Multiplica dos n´ umeros 16 bits sin signo y genera uno de 32 DIVS asdr. Dn<16−31>←resto2.3 Multiplica dos n´ umeros 16 bits sin signo y genera uno de 32 MULU data16.3 Divide n´ umeros con signo y genera cociente y resto en 16 bits DIVS data16.Dn 4 ≤162(2/0)+ X X 0 0 Dn<0−15>← Dn<0−31>÷data16.4.Dn 4 ≤74(2/0)+ X X 0 0 Dn<0−31>← [Dn<0−15>×data16 Multiplica dos n´ umeros 16 bits sin signo y genera uno de 32 MULU sDn.6 <158(1/0)+ X X 0 0 Dn<0−15>← Dn<0−31>÷[sadr]. Dn<16−31>←resto2. dDn<16−31>←resto Divide n´ umeros con signo y genera cociente y resto en 16 bits DIVU asdr. Microprocesador MC68000 21 Ciclos Nem´ onico Operandos Bytes reloj MULU asdr.Dn 4 ≤74(2/0)+ X X 0 0 Dn<0−15>← Dn<0−31>÷data16.4.3 Divide sin dos signo n´ umeros y genera cociente y resto en 16 bits DIVU data16.6 ≤140(1/0)+ X X 0 0 Dn<0−15>← Dn<0−31>÷[sadr].Dn 2.6 <74(2/0)+ Registro estado X N Z V C Operaci´ on realizada X X 0 0 Dn<0−31>← Dn<0−15>×[sadr]2.

W rs.L sadr.L Dn 2 4(1/0) X X 0 0 CMP.3 CMP.An CMP. sAn←sAn+42.3 CMPM.4.4.dadr 4 14(3/0) X X X X An<0−31>−data16 4. dDn<16−31>←resto Divide sin dos signo n´ umeros y genera cociente y resto en 16 bits EXT.L rs.8 8(2/0) X X X X [dadr]−data162.(dAn)+ 2 20(5/0) X X X X [dAn]−[sAn] dAn←dAn+4.6 4(1/0)+ X X 0 0 [dadr]−02 TST.6 6(1/0)+ X X X X Dn<0−31>−[sadr]2.4.4.L rs.6.6 4(1/0)+ X X 0 0 [dadr]−01 TST.W Dn<0−15>−rs<0−15> rs.W dadr 2.22 Proyecto de Entrada–Salida (2014–2015) Ciclos Nem´ onico Operandos DIVU sDn.6 4(1/0)+ X X 0 0 [dadr]−02 TST.4.4 CMP. sAn←sAn+22.L dadr 2.B Dn 2 4(1/0) X X 0 0 Dn<0−7>−0 TST.L data32.6 4(1/0)+ X X X X Dn<0−15>−[sadr]2.L (sAn)+.W sadr.6 6(1/0)+ X X X X An<0−31>−[sadr]2.B dadr 2.Dn 4 8(2/0) X X X X Dn<0−15>−data16 CMP.3 CMP.8 4 8(2/0) X X X X Dn<0−7>−data8 8(2/0)+ X X X X [dadr]−data81 CMP.An 2 6(1/0) X X X X An<0−15>−rs<0−15> CMP.(dAn)+ 2 12(3/0) X X X X [dAn]−[sAn] Dn<8−15>←Dn<7> Extiende signo Dn<16−31>←Dn<15> Extiende signo dAn←dAn+1.Dn 2 6(1/0) X X X X Dn<0−31>−rs<0−31> CMP.6 6(1/0)+ X X X X An<0−15>−[sadr]2.W sadr.Dn 2 4(1/0) X X X X dDn<0−7>−sDn<0−7> 2 4(1/0) X X X X CMP.4 CMP. sAn←sAn+11 CMPM.6.B sadr.Dn 2.W Dn 2 4(1/0) X X 0 0 EXT.L sadr.(dAn)+ 2 12(3/0) X X X X [dAn]−[sAn] dAn←dAn+2.4.dadr 4.4 CMPM.6 4(1/0)+ X X X X Dn<0−7>−[sadr]1 CMP.Dn 2.L data32.An 2.W Dn 2 4(1/0) X X 0 0 Dn<0−15>−0 TST.Dn 4 14(3/0) X X X X Dn<0−31>−data16 CMP.W data16.Dn CMP.B (sAn)+.8 12(3/0) X X X X [dadr]−data162.6.B data8.4.dDn Bytes 4 reloj ≤74(2/0)+ Registro estado X N Z V C Operaci´ on realizada X X 0 0 dDn<0−15>← dDn<0−31>÷sDn<0−15>.L data32.3 CMP.B sDn.An 2.An CMP.An 2 6(1/0) X X X X An<0−31>−rs<0−31> TST.B data8.4.W (sAn)+.Dn 2.W data16.L Dn 2 4(1/0) X X 0 0 Dn<0−31>−0 .4 CMP.dadr 4 8(2/0) X X X X An<0−15>−data16 4.dDn CMP.W data16.

W AND.4.W sadr.4.B Dn. 23 L´ ogicas Ciclos Registro estado Nem´ onico Operandos Bytes reloj N Z V C Operaci´ on realizada NOT.L 4.W data16.6 9(1/1)+ X X 0 0 [dadr]← [dadr]∧Dn<0−15>2.6 14(1/2)+ X X 0 0 [dadr]← [dadr]∧Dn<0−31>2.4 OR.B Dn.W dadr 2.Dn 2.4.4 2 4(1/0) X X 0 0 dDn<0−7>← sDn.dadr 2.Dn 2.3 AND.4.6 4(1/0)+ X X 0 0 Dn<0−15>← Dn<0−15>∨[sadr]2.dDn AND.6 9(1/1)+ X X 0 0 [dadr]←[dadr]2.8 AND.4.4.4.4 AND.dadr AND.B sadr.W Dn.W sadr.dadr 2.4.6 14(1/2)+ X X 0 0 [dadr]←[dadr]2.B sDn.Dn 4 8(2/0) X X 0 0 Dn<0−7>←Dn<0−7>∧data8 13(2/1)+ X X 0 0 [dadr]←[dadr]∧data81 8(2/0) X X 0 0 Dn<0−15>← Dn<0−15>∧data16 AND.B Dn 2 6(1/0)+ X X 0 0 Dn<0−15>←Dn<0−15> NOT.6 9(1/1)+ X X 0 0 [dadr]← [dadr]∨Dn<0−15>2.L Dn 2 6(1/0)+ X X 0 0 Dn<0−31>←Dn<0−31> AND.6.dadr 4.L data32.4.L data32.6 4(1/0)+ X X 0 0 Dn<0−15>← Dn<0−15>∧[sadr]2.6.Dn 4 AND. Microprocesador MC68000 1.6 6(1/0)+ X X 0 0 Dn<0−31>← Dn<0−31>∨[sadr]2.6 4(1/0)+ X X 0 0 Dn<0−7>←Dn<0−7>∧[sadr]1 AND.3 16(3/0) X X 0 0 Dn<0−31>← 22(3/2)+ X X 0 0 [dadr]←[dadr]∧data322.4.1.4.Dn 2.4 NOT.Dn 2.4.3 OR.6 6(1/0)+ X X 0 0 Dn<0−31>← Dn<0−31>∧[sadr]2.10 dDn<0−7>∧sDn<0−7> Dn<0−15>← dDn<0−15>∧sDn<0−15> Dn<0−31>← dDn<0−31>∧sDn<0−31> OR.4.Dn AND.3 OR.6.L sadr.6 4(1/0)+ X X 0 0 Dn<0−7>←Dn<0−7>∨[sadr]1 OR.3 NOT.8.dadr 2.W data16.4 AND.L dadr 2.L sadr.dadr 2.B data8.4 .4.8 13(2/1)+ X X 0 0 [dadr]←[dadr]∧data162.4.W Dn.dadr AND.B Dn 2 4(1/0)+ X X 0 0 Dn<0−7>←Dn<0−7> NOT.Dn 2.Dn 2.4.3 AND.dadr 2.B dadr 2.dDn 2 4(1/0) X X 0 0 sDn.6 9(1/1)+ X X 0 0 [dadr]←[dadr]∨Dn<0−7>1 OR.B data8.dDn 2 8(1/0) X X 0 0 6 Dn<0−31>∧data32 6.dadr 2.L Dn.6 14(1/2)+ X X 0 0 [dadr]← [dadr]∨Dn<0−31>2.B sadr.6 9(1/1)+ X X 0 0 [dadr]←[dadr]∧Dn<0−7>1 AND.6 9(1/1)+ X X X 0 0 [dadr]←[dadr]1 NOT.L Dn.

4.W data16.8.6 4(1/0)+ X X 0 0 Dn<0−15>← dDn<0−31>← dDn<0−31>∨sDn<0−31> Dn<0−15>⊕[sadr]2.dadr 4.8.dDn 2 4(1/0) X X 0 0 dDn<0−15>← dDn<0−15>∨sDn<0−15> OR.3 16(3/0) X X 0 0 Dn<0−31>← Dn<0−15>∨data16 4.8 EOR.L data32.dDn 2 8(1/0) X X 0 0 EOR.L sadr.B sDn.dadr EOR.6.W data16.dDn 6.L data32.3 16(3/0) X X 0 0 Dn<0−31>← Dn<0−31>⊕data32 EOR.B Dn.6.6 6(1/0)+ X X 0 0 Dn<0−31>← Dn<0−31>⊕[sadr]2.W sDn.W sDn.10 22(3/2)+ X X 0 0 [dadr]←[dadr]⊕data322.Dn 2.6 9(1/1)+ X X 0 0 [dadr]←[dadr]⊕Dn<0−7>1 EOR.Dn 4 reloj Registro estado X N Z V C Operaci´ on realizada 8(2/0) X X 0 0 Dn<0−7>←Dn<0−7>∨data8 13(2/1)+ X X 0 0 [dadr]←[dadr]∨data81 8(2/0) X X 0 0 Dn<0−15>← 13(2/1)+ X X 0 0 [dadr]←[dadr]∨data162.4.dadr 2.W sadr.Dn 4 8(2/0) X X 0 0 Dn<0−7>←Dn<0−7>⊕data8 13(2/1)+ X X 0 0 [dadr]←[dadr]⊕data81 8(2/0) X X 0 0 Dn<0−15>← Dn<0−15>⊕data16 EOR.Dn 2.W data16.B data8.8 OR.Dn 4.dadr OR.6.B sadr.B sDn.W Dn.L data32.L sDn.dadr OR.10 2 22(3/2)+ X X 0 0 [dadr]←[dadr]∨data322.L data32.4.24 Proyecto de Entrada–Salida (2014–2015) Ciclos Nem´ onico Operandos Bytes OR.4.dDn 2 8(1/0) X X 0 0 dDn<0−31>← dDn<0−31>⊕sDn<0−31> .Dn 2.dadr 4.B data8.8 6 Dn<0−31>∨data32 OR.dadr 2.3 EOR.6 4(1/0)+ X X 0 0 Dn<0−7>←Dn<0−7>⊕[sadr]1 EOR.W data16.4.6.6 14(1/2)+ X X 0 0 [dadr]← [dadr]⊕Dn<0−31>2.L sDn.B data8.4 4(1/0) X X 0 0 dDn<0−7>← dDn<0−7>∨sDn<0−7> OR.4 2 4(1/0) X X 0 0 dDn<0−7>← 2 4(1/0) X X 0 0 dDn<0−7>⊕sDn<0−7> dDn<0−15>← dDn<0−15>⊕sDn<0−15> EOR.3 EOR.B data8.8 6 13(2/1)+ X X 0 0 [dadr]←[dadr]⊕data162.dDn 6.4 EOR.Dn OR.Dn 4 OR.4.dadr EOR.dadr 2.dDn EOR.L Dn.6 9(1/1)+ X X 0 0 [dadr]← [dadr]⊕Dn<0−15>2.Dn 4 EOR.4 EOR.

4.Dn 2 6+2n(1/0)+ X X X X X 0 æ Igual que anterior.L count o Dn. El bit 15 queda como estaba y pasa al 14. de byte. La cantidad la determina el contador (1-8) o (1-63).-C -X . bit 0 se pone a 0.6 9(1/1)+ X X X X X Desplazamiento aritm´ etico un bit a derecha. pero con palabra 31 1615 0 Cæ Xæ ASL.Dn 2 6+2n(1/0)+ X X X X X Desplazamiento aritm´ etico de va- rios bit a izquierda. el registro Entran 0s al bit 0 el bit 7 pasa a X y C 31 87 Cæ Xæ ASL.6.1.Dn 2 6+2n(1/0)+ X X X X X æ0 æ æ0 Igual que anterior.6 9(1/1)+ X X X X X Desplazamiento aritm´ etico un bit a izquierda.5.4.W count o Dn.B count o Dn. Microprocesador MC68000 1. 25 Desplazamientos Ciclos Registro estado Nem´ onico Operandos Bytes reloj X N Z V C Operaci´ on Realizada ASL dadr 2.3 Cæ 15 0 0 æ Xæ ASL. pero con doble palabra Cæ 31 0 0 æ Xæ ASR dadr 2. El bit 15 pasa a X y C2. El 0 se lleva a X y C 15 - 0 .

El bit 7 conserva su valor y se propaga. pero V siempre vale 0 Cæ 15 2.26 Proyecto de Entrada–Salida (2014–2015) Ciclos Nem´ onico Operandos ASR. El bit 0 pasa a C y X 31 ASR.B count o Dn. El bit 0 queda a 0 y el 15 pasa a C y X. Entran 0s por el 0 y el bit 7 pasa a X y C 31 87 0 Cæ Xæ æ æ0 .-C -X Desplazamiento l´ ogico un bit a izquierda.-C -X Igual que anterior con doble palabra 31 0 LSL dadr 2.Dn 2 6+2n(1/0)+ X X X 0 X Desplazamiento l´ ogico varios bit a izquier- da de byte.Dn 2 6+2n(1/0)+ X X X X X 87 0 - .B count o Dn.4.L count o Dn.Dn 2 6+2n(1/0)+ X X X X X .-C -X Igual que anterior con palabra 3116 15 0 - ASR. Es igual que el ASL. bit El lo n´ umero de determina un contador (1-8) o un registro (1-63). El n´ umero de bits desplazado lo determina un contador (1-8) o un registro (1-63).6 9(1/1)+ X X X 0 X .3 0 0 æ Xæ LSL.Dn Bytes 2 Registro estado reloj X N Z V C Operaci´ on realizada 6+2n(1/0)+ X X X X X Desplazamiento aritm´ etico de va- rios bit a derecha de byte.W count o Dn.

Entran 0s al bit 7 y el bit 0 pasa a X y C 31 LSR.-C -X Igual que anterior.6 9(1/1)+ X X X 0 X Desplazamiento L´ ogi- co un bit a Derecha.B count o Dn.W count o Dn.-C -X .Dn Bytes 2 Registro estado reloj X N Z V C Operaci´ on realizada 6+2n(1/0)+ X X X 0 X Igual que anterior con palabra 31 1615 LSL. El bit 15 pasa a valer 0 y el valor del 0 pasa a X y C 15 0 0LSR.4. El n´ umero de bits lo determina un contador (1-8) o un registro (1-63). Microprocesador MC68000 27 Ciclos Nem´ onico Operandos LSL.L count o Dn. pero con doble palabra 31 0- 0 .L count o Dn.1.Dn 2 6+2n(1/0)+ X X X 0 X 0 .Dn 2 6+2n(1/0)+ X X X 0 X 0 æ Cæ Xæ æ0 Igual que anterior con doble palabra Cæ 31 0 0 æ Xæ LSR dadr 2. pero con palabra 3116 15 06 LSR.-C 6 -X 0 Igual que anterior.W count o Dn.Dn 2 6+2n(1/0)+ X X X 0 X .-C -X Desplazamiento l´ ogico varios bit a derecha de byte.Dn 2 6+2n(1/0)+ X X X 0 X 87 0 .

El n´ umero de bits lo determina un contador (1-8) o un registro (163).W count o Dn.28 Proyecto de Entrada–Salida (2014–2015) Ciclos Nem´ onico Operandos Bytes reloj ROL dadr 2.6 9(1/1)+ X X X 0 X 31 0 æ æ Rotaci´ on de un bit a derecha. El bit 15 se carga con el bit 0 que pasa tambi´ en al C 15 0 ROR.L count o Dn. El bit 15 pasa al 0 y a C2.6 9(1/1)+ Registro estado X N Z V C Operaci´ on realizada X X 0 X Rotaci´ on a al Izquierda de un bit.4. El n´ umero de bits rotados lo determina un contador (1-8) o un registro (1-63).Dn 2 6+2n(1/0)+ X X X 0 X Igual que anterior con palabra 31 1615 0 æ Cæ ? ROL.B count o Dn. El bit 0 pasa bit 7 y a C 31 87 0 .-C Rotaci´ on de varios bit a derecha de byte.B count o Dn.Dn 2 6+2n(1/0)+ X X X 0 X 0 æ Rotaci´ on varios bit a izquierda de byte.4. El bit 7 pasa al bit 0 y a C 31 87 0 æ æ C ? ROL.Dn 2 6+2n(1/0)+ X X X 0 X .Dn 2 6+2n(1/0)+ X X X 0 X æ æ Igual que anterior con doble palabra Cæ ROR dadr 2.3 15 Cæ æ ROL.-C 6 .

1. pero con palabra 31 1615 0 æ æ ? C ROXL.3 15 Cæ æ ROXL. El n´ umero de bits desplazado lo determina un contador (1-8) o un registro (1-63).W count o Dn.-C a izquierda de un bit empleando extensi´ on.Dn 2 6+2n(1/0)+ X X X 0 X Igual que anterior.Dn Bytes 2 Registro estado reloj X N Z V C Operaci´ on realizada 6+2n(1/0)+ X X X 0 X Igual que anterior.Dn 2 6+2n(1/0)+ X X X 0 X 0 æX 6 Rotaci´ on varios bit a izquierda de byte empleando bit eXtensi´ on. Microprocesador MC68000 29 Ciclos Nem´ onico Operandos ROR. pero con doble palabra 31 ROXL count o Dn. pero con palabra 3116 15 6 ROR. El bit 15 pasa al X y a C y el X al 02. pero con doble palabra Cæ 31 æ 0 æX 6 .B count o Dn.Dn 2 6+2n(1/0)+ X X X 0 X Rotaci´ on 0 .Dn 2 6+2n(1/0)+ X X X 0 X 0 .Dn 2 6+2n(1/0)+ X X X 0 X æX 6 Igual que anterior.L count o Dn.W count o Dn.L count o Dn. El bit X pasa al bit 0 y el bit 7 pasa a X y a C 31 87 0 æ æX 6 Cæ ? ROXL.-C Igual que anterior.

-C . pero con doble palabra 31 Xæ 0 .L count o Dn.Dn Bytes 2 Registro estado reloj X N Z V C Operaci´ on realizada 6+2n(1/0)+ X X X 0 X Rotaci´ on de un bit a derecha empleando bit de extensi´ on. y el bit 15 se carga con X 15 0 X- 6 . y el bit 7 se carga con X 31 ROXR. El bit 0 pasa al bit X y a C.Dn 2 6+2n(1/0)+ X X X 0 X 87 0 . ROXR.-C 6 Xæ Igual que anterior.B .-C X ROXR.30 Proyecto de Entrada–Salida (2014–2015) Ciclos Nem´ onico Operandos ROXR count o Dn.Dn 2 6+2n(1/0)+ X X X 0 X Igual que anterior. El n´ umero de bits lo determina un contador (1-8) o un registro (1-63). pero con palabra 3116 15 6 0 .Dn 2 6+2n(1/0)+ X X X 0 X Rotaci´ on de varios bit a derecha de byte empleando bit de eXtensi´ on.W count o Dn.-C count o Dn. El bit 15 se carga con el bit X y el bit 0 pasa a X y C.

Dn<bitl>←1 Dn.6 4(1/0)+ X Z←[dadr<Dn>]1 Consulta el contenido de un bit de memoria BSET bitl. Dn<bitl>←0 Dn.6. dDn<Dn>←1 Consulta el contenido de un determinado bit de un registro y lo pone a 1 BSET bitl.8 13(2/1)+ X Z←[dadr<bitl>].Dn 4 10(2/0) X Z←Dn<bitl> Dn.8 8(2/0)+ X Z←[dadr<bitl>] Dn. [dadr<Dn>]←11 Consulta el contenido de un bit de memoria y lo pone a 1 BCLR bitl. dDn<Dn>←0 Consulta el contenido de un determinado bit de un registro y lo pone a 0 BCLR bitl. [dadr<bitl>]←1 Dn.dDn 2 8(1/0) X Z←dDn<Dn>.6.6 9(1/1)+ X Z←[dadr<Dn>].4.dDn 2 8(1/0) X Z←dDn<Dn>.dadr 2. [dadr<Dn>]←01 Consulta el contenido de un bit de memoria y lo pone a 0 .6 9(1/1)+ X Z←[dadr<Dn>].dadr 2.dadr 4.1.Dn 4 14(2/0) X Z←Dn<bitl>.8 13(2/1)+ X Z←[dadr<bitl>].Dn 4 12(2/0) X Z←Dn<bitl>.dadr 2.dDn 2 6(1/0) X Z←dDn<Dn> Consulta el contenido de un bit de un registro BTST bitl. 31 Manejo de bits Ciclos Bytes reloj Registro estado Nem´ onico Operandos X N Z V C Operaci´ on realizada BTST bitl.dadr 4.4.dadr 4. Microprocesador MC68000 1. [dadr<bitl>]←0 Dn.6.4.6.6.

[dadr<Dn>]←[dadr<Dn>]1 Consulta el contenido de un bit de memoria y lo pone al valor contrario 1.7.6.4 10.4.12(2/0) P C←label Salto subrutina corto relativo a PC JSR jadr 2. [dadr<bitl>]←[dadr<bitl>] Dn.dDn 2 8(1/0) X Z←dDn<Dn>.Dn Bytes 4 reloj Registro estado X N 12(2/0) Z V C X Operaci´ on realizada Z←Dn<bitl>. A7←A7+4 Restaura estado y retorna subrutina .dadr 2.8 13(2/1)+ X Z←[dadr<bitl>]. [A7]←P C P C←jadr Salto subrutina absoluto RTS 2 16(4/0) P C←[A7].4.32 Proyecto de Entrada–Salida (2014–2015) Ciclos Nem´ onico Operandos BCHG bitl. dDn<Dn>←dDn<Dn> Consulta el contenido de un bit de un registro y lo pone al valor contrario BCHG bitl. A7←A7+4 Retorno subrutina RTR 2 20(5/0) SR<0−4>←[A7<0−4>]. Dn<bitl>←Dn<bitl> Dn. A7←A7+2 P C←[A7].dadr 4.4.4 reloj 10(2/0) Registro estado X N Z V C Operaci´ on realizada P C←label Salto incondicional corto relativo a PC JMP jadr 2.6 4(1/0)+ P C←jadr Salto incondicional absoluto BSR label 2.6. Control del programa Ciclos Nem´ onico Operandos BRA label Bytes 2.6 14(1/2)+ A7←A7−4. [A7]←P C 10.6 9(1/1)+ X Z←[dadr<Dn>].8(1/0) A7←A7−4.

A7←A7−2.8(1/0) P C←label. X U U U 12(2/0) Si Dn<0−15><0 ∨ Dn<0−15>>data16 entonces P C← vector CHK Dn.label 4 12.Dn 4 49(6/3).4. A7←A7+4 Retorno de excepci´ on Bcc label 2.dDn 2 45(5/3) X U U U 8(1/0) Si dDn<0−15><0 ∨ dDn<0−15>>Dn entonces P C← vector CHK sadr. con decremento CHK data16.1.12(2/0) Salto condicional corto relativo a PC DBcc Dn.O.10(2/0). A7←A7+2 P C←[A7]. [A7]←SR. [A7]←P C.4 10. P C←vector Desv´ ıo al S.dDn 2. Microprocesador MC68000 33 Ciclos Nem´ onico Operandos RTE Bytes 2 Registro estado reloj X N Z V C Operaci´ on realizada 20(5/0) X X X X X SR←[A7]. Si cumple condici´ on nada. TRAPV 2 37(5/3) Si V = 1 TRAP vector TRAPV Comprobaci´ on overflow bit . Si condici´ on 10. 14(3/0) No cumple condici´ on: Dn<0−15>←Dn<0−15>−1 Si Dn<0−15>=−1 si- guiente instrucci´ on P C←label Salto condicional corto relativo a PC.6 45(5/3) 8(1/0) X U U U Si dDn<0−15><0 ∨ dDn<0−15>>[sadr] entonces P C← vector CHK Comprobaci´ on de rangos TRAP vector 2 37(4/3) A7←A7−4.

6.SR 2.W data16.34 Proyecto de Entrada–Salida (2014–2015) 1.3 Ejecutable en supervisor MOVE data16.8.4.6 Ejecutable en supervisor MOVE sadr.SR 4 20(3/0) X X X X X SR<0−7>←SR<0−7>∨ data8 OR inmediato a SR ORI.3 4 20(3/0) X X X X X SR<0−7>←SR<0−7>∧ data8 AND inmediato a SR ANDI.B data8.dadr ANDI.Dn MOVE SR.B data8.SR Bytes Registro estado reloj X N Z V C Operaci´ on realizada 12(2/0) X X X X X SR<0−4>←Dn<0−4> 12(2/0)+ X X X X X SR<0−4>←[sadr<0−4>]2.6 12(2/0)+ X X X X X SR←[sadr]2.SR 4 20(3/0) X X X X X SR←SR⊕data16 Ejecutable en supervisor ORI.SR 4 16(3/0) X X X X X SR←data16<0−8> Ejecutable en supervisor MOVE SR.CCR MOVE Dn.3 4 16(3/0) X X X X X SR<0−4>←data8<0−4> 2 12(2/0) X X X X X SR←Dn<0−15> 2 Actualiza estado 2. Ejecutable en supervisor STOP data16 4 8(2/0) X X X X X SR←data16 Bloqueado en espera de interrupci´ on.SR 4 20(3/0) X X X X X SR←SR∧data16 Ejecutable en supervisor EORI.B data8.SR 6(1/0) Dn<0−15>←SR 2.CCR MOVE sadr.W data16.6 2 9(1/1)+ [dadr]←SR2.4.4.SR 4 20(3/0) X X X X X SR<0−7>←SR<0−7>⊕ data8 EOR inmediato a SR EORI. Ejecutable en supervisor .W data16.SR 4 20(3/0) X X X X X SR←SR∨data16 Ejecutable en supervisor NOP 2 4(1/0) No hace nada RESET 2 132(1/0) Activa RESET.CCR MOVE data8. Control del procesador Ciclos Nem´ onico Operandos MOVE Dn.

El n´ umero .Cap´ıtulo 2 Controlador de l´ıneas serie MC68681 El MC68681 es un m´odulo de entrada/salida perteneciente a la familia M68000 de Motorola. en la figura se utilizan 8. Como se puede observar en la figura 2. Transmisi´ on as´ıncrona de caracteres por una l´ınea serie En el modo de transmisi´on as´ıncrono. que es opcional. Cada trama comienza con un bit de inicio (Start). ni interbloqueo hardware para el control de flujo de las l´ıneas y no tiene simulado el temporizador programable para la generaci´on de nuevas velocidades de transmisi´on y recepci´on. Adem´as. Su funci´on es controlar dos l´ıneas series con capacidad de transmisi´on y recepci´on as´ıncrona. A continuaci´ on se transmiten los bits de datos que pueden ser desde 5 hasta 8. se incluye un n´ umero de bits de parada (Stop) a 1 que sirven para que el receptor se recupere antes del inicio de una nueva trama. par o impar. por lo que se transmitir´a sin paridad. Por lo tanto. Este bit. El car´acter se codifica en un formato de codificaci´on de caracteres (habitualmente c´odigo ASCII) y se incluye en una trama cuyo formato se muestra en la figura 2. el env´ıo de un car´acter constituye una transferencia elemental. El calificativo Universal le viene dado porque admite una gran variedad de formatos de datos y modos de operaci´on. solo se describen los registros y bits de registros que proporcionan la funcionalidad simulada. que naturalmente es un 0. ya que puede proporcionar un vector durante el ciclo de reconocimiento de interrupci´on y puede solicitar interrupci´on por 8 sucesos distintos enmascarables individualmente. Por u ´ltimo. la MC68681 DUART tiene un mecanismo de interrupciones bastante vers´atil. A continuaci´on se puede incluir un bit de paridad. As´ı.1. el estado inactivo de la l´ınea es a 1. hay que tener en cuenta que el dispositivo simulado no realiza ning´ un tipo de control de errores.1. A pesar de que un dispositivo de estas caracter´ısticas puede parecer complejo. sirve para detectar errores en la transmisi´on y no est´a disponible en la MC68681 simulada. la descripci´on que se hace en este cap´ıtulo es incompleta y se refiere solo a las funciones que realiza la DUART MC68681 simulada que proporciona el simulador BSVC. 2. Adem´as. El modo de operaci´on y formato de datos de cada l´ınea se programa independientemente. a este tipo de dispositivo se le conoce con el nombre de DUART (Dual Universal Asynchronous Receiver/Transmiter). las UART’s son uno de los controladores de dispositivos m´as sencillos.1.

desde 50 hasta 38400 baudios. El tiempo de transmisi´on o recepci´on de una trama depende de la velocidad a la que se utilice la l´ınea y del n´ umero de bits que contenga la trama. • Eco autom´atico. • Proporciona el vector de interrupci´on almacenado en el registro correspondiente durante el ciclo de reconocimiento de interrupci´on. Descripci´ on de los registros El modo de operaci´on de la DUART se programa a trav´es de sus registros de control. RS-422. se pueden leer sus registros de estado para conocer el estado de operaci´on de . Asimismo. Formato de datos programable desde 5 hasta 8 bits por car´acter.25 milisegundos pudi´endose alcanzar una velocidad de transferencia m´axima de 800 bytes/seg. etc.2. Cada l´ınea se puede conectar a un proceso Unix. 2. 2. As´ı. Sistema de interrupciones vers´atil: • Posibilidad de petici´on de interrupci´on por 4 condiciones distintas enmascarables individualmente.1: Transferencia de un car´acter en modo as´ıncrono con 8 bits de datos de bits de parada es variable (desde 0. 18 velocidades distintas para cada transmisor y receptor. Caracter´ısticas de la DUART MC68681 El controlador de l´ıneas serie simulado tiene las siguientes caracter´ısticas: Dos l´ıneas serie full–duplex (posibilidad de recepci´on y transmisi´on simult´ anea) independientes con formato de recepci´on/transmisi´ on as´ıncrono. tarda en transmitirse 1.3. Modo de canal programable: • Normal (full–duplex).36 Proyecto de Entrada–Salida (2014–2015) Bits de datos Inicio Paridad Parada Figura 2. La velocidad de transmisi´on se selecciona de acuerdo a la calidad y longitud del cable y a la norma utilizada. por ejemplo RS-232.5 a 2) y en la MC68681 simulada no est´an disponibles ya que no se necesitan al no haber una l´ınea serie f´ısica. una trama como la de la figura que se compone de 12 bits y una velocidad de 9600 bits/seg.

MR2A) de selecci´on de reloj A (CSRA) de control A (CRA) buffer de transmisi´on A (TBA) de control auxiliar (ACR) de m´ascara de interrupci´on (IMR) Sin implementar Sin implementar de modo B (MR1B. MR2B) de selecci´on de reloj B (CSRB) de control B (CRB) buffer de transmisi´on B (TBB) del vector de interrupci´on (IVR) Sin implementar Sin implementar Sin implementar L´ınea A A A A Ambas Ambas Ambas Ambas B B B B Ambas Ambas Ambas Ambas Tabla 2. se deber´an usar instrucciones de tama˜ no de operando de 8 bits para leer y escribir en estos registros. Todos los accesos posteriores direccionar´an el registro de modo 2. a menos que se reinicialice el puntero interno que los discrimina. Por lo tanto. de la B o son comunes. la direcci´on que tienen asignada en el computador simulado de la pr´actica y si son espec´ıficos de la l´ınea serie A. en muchos casos 2 registros distintos comparten el mismo puerto. MR2B) de estado B (SRB) Sin acceso buffer de recepci´on B (RBB) del vector de interrupci´on (IVR) Sin implementar Sin implementar Sin implementar Registro en escritura de modo A (MR1A.1: Registros de la DUART MC68681 Todos los registros son de 8 bits y el ancho del bus de datos de esta unidad es tambi´en de 8 bits. MR2A) de estado A (SRA) Sin acceso buffer de recepci´on A (RBA) Sin implementar de estado de interrupci´on (ISR) Sin implementar Sin implementar de modo B (MR1B. en el primer acceso se direcciona el registro de modo 1 y en el segundo el registro de modo 2.2. En muchos casos aparece la notaci´on N/A que indica que la funcionalidad proporcionada por el bit correspondiente del registro no est´a disponible en la unidad simulada . La tabla 2.1 muestra los registros de la DUART junto con su acr´onimo de su denominaci´on en ingl´es. de forma que cuando se escribe se accede a un registro y cuando se lee se accede a otro. Este puntero se reinicializa al realizar el RESET del sistema o bien ordenando una reinicializaci´on del puntero en el registro de control correspondiente. A continuaci´on se describen cada uno de los registros de la DUART MC68681 simulada. Como es habitual en los controladores de perif´ericos. Adem´as. los 2 registros de modo de cada l´ınea comparten la misma direcci´on. Controlador de l´ıneas serie MC68681 37 la unidad. De forma que. Direcci´on EFFC01 EFFC03 EFFC05 EFFC07 EFFC09 EFFC0B EFFC0D EFFC0F EFFC11 EFFC13 EFFC15 EFFC17 EFFC19 EFFC1B EFFC1D EFFC1F Registro en lectura de modo A (MR1A.

se pone a 1 cuando se puede cargar un nuevo car´acter en el buffer de transmisi´on (TBA o TBB) y el car´acter anterior se ha terminado de enviar.2.3. En este u ´ltimo caso existen dos posibilidades: RxRDY (Receiver ReaDY) Se solicita una interrupci´on cada vez que llega un car´acter. 2. Registros de modo 2 (MR2A y MR2B) Modo de la l´ınea Bit 7 Bit 6 00 = Normal 01 = Eco 10 = N/A 11 = N/A N/A Bit 5 N/A Bit 4 N/A Bit 3 Bit 2 Bit 1 Bit 0 A trav´es de este registro se le ordena a la DUART el modo de operaci´on de la l´ınea correspondiente.3.3. En el modo eco. lo que permite recibir 3 caracteres consecutivos.38 2. Proyecto de Entrada–Salida (2014–2015) Registros de modo 1 (MR1A y MR1B) N/A Bit 7 Selecci´on RxIRQ Bit 6 0 = RxRDY 1 = FFULL N/A Bit 5 N/A Bit 4 Bit 3 N/A Bit 2 Bits por car´acter Bit 1 Bit 0 00 = 5 01 = 6 10 = 7 11 = 8 A trav´es de este registro se le ordena a la DUART el n´ umero de bits por car´acter de la l´ınea correspondiente y cuando ha de solicitar una interrupci´on en recepci´on. 2.3. . es decir cada 3 caracteres.1. Registros de estado (SRA y SRB) N/A Bit 7 N/A Bit 6 N/A Bit 5 N/A Bit 4 TxEMT Bit 3 0 = No 1 = Yes TXRDY Bit 2 0 = No 1 = Yes FFULL Bit 1 0 = No 1 = Yes RxRDY Bit 0 0 = No 1 = Yes En este registro se consulta el estado de la l´ınea correspondiente. Esta opci´on supone por lo tanto que se solicite la interrupci´on cuando la pila se llene. FFULL (Fifo FULL) Cada l´ınea posee 3 registros de recepci´on organizados como una pila FIFO (First–Input–First–Output). la DUART retransmite autom´aticamente cada car´acter que recibe. Los sucesos que registra son: TxEMT (Transmitter EMpTy) Si est´a habilitada la transmisi´on por la l´ınea correspondiente.

3. 2. Controlador de l´ıneas serie MC68681 39 TXRDY (Transmitter ReaDY) Si est´a habilitada la transmisi´on por la l´ınea correspondiente. se elige la velocidad de transmisi´on y recepci´on de la l´ınea correspondiente. se pone a 1 cuando se puede cargar un nuevo car´acter en el buffer de transmisi´on (TBA o TBB).3.5 0011 200 150 0100 300 300 0101 600 600 0110 1200 1200 0111 1050 2000 1000 2400 2400 1001 4800 4800 1010 7200 1800 1011 9600 9600 1100 38400 19200 1101 N/A N/A 1110 N/A N/A 1111 N/A N/A Mediante este registro en combinaci´ on con el bit 7 del registro auxiliar de control (ACR).5 0011 200 150 0100 300 300 0101 600 600 0110 1200 1200 0111 1050 2000 1000 2400 2400 1001 4800 4800 1010 7200 1800 1011 9600 9600 1100 38400 19200 1101 N/A N/A 1110 N/A N/A 1111 N/A N/A Selecci´ on de velocidad de transmisi´on Bit 3 Bit 2 Bit 1 Bit 0 Conjunto 1 Conjunto 2 ACR Bit 7 = 0 ACR Bit 7 = 1 0000 50 75 0001 110 110 0010 134. Registros de selecci´ on de reloj (CSRA y CSRB) Selecci´on de velocidad de recepci´on Bit 7 Bit 6 Bit 5 Bit 4 Conjunto 1 Conjunto 2 ACR Bit 7 = 0 ACR Bit 7 = 1 0000 50 75 0001 110 110 0010 134.5.4.2. Registros de control (CRA y CRB) N/A Bit 7 000 001 010 011 100 101 110 111 = = = = = = = = Miscel´aneos Bit 6 Bit 5 Bit 4 Sin efecto Reinicializar puntero a MR1 Reinicializar recepci´on Reinicializar transmisi´on Reinicializar estado de error N/A N/A N/A Transmisi´ on Bit 3 Bit 2 00 = Sin efecto 01 = Habilitar 10 = Inhibir 11 = N/A Recepci´on Bit 1 Bit 0 00 = Sin efecto 01 = Habilitar 10 = Inhibir 11 = N/A . pero puede que a´ un no se haya completado el env´ıo del car´acter anterior. RxRDY (Receiver ReaDY) Se ha recibido un car´acter y est´a en la pila FIFO de registros de recepci´on.5 134. 2.5 134. FFULL (Fifo FULL) Hay 3 caracteres en la pila FIFO de registros de recepci´on.

De modo que. 2. De modo que. la recepci´on. si se ha recibido m´as de un car´acter desde la u ´ltima vez que se ley´o. 2.3. la transmisi´on y los estados de error de la l´ınea correspondiente. Existen dos fuentes posibles de interrupci´on para cada l´ınea: RxRDY o FFULL (Receiver ReaDY o Fifo FULL) Se colocar´a a 1 si se ha recibido un car´acter o la pila de registros FIFO ´este llena. ´estos se pueden leer en accesos consecutivos.3.6. La velocidad elegida dentro del conjunto se especifica a trav´es de los registros de selecci´on de reloj correspondiente (CSRA o CSRB). Registros del buffer de recepci´ on (RBA y RBB) En cada uno de estos puertos hay 3 registros organizados como una pila FIFO. . seg´ un lo elegido mediante el bit 6 del registro de modo 1 correspondiente (MR1A o MR1B). Registro de control auxiliar (ACR) Selecci´on del conjunto de velocidades Bit 7 0 = Conjunto 1 1 = Conjunto 2 N/A Bit 6 Bit 5 Bit 4 N/A Bit 3 N/A Bit 2 N/A Bit 1 N/A Bit 0 Este registro sirve para seleccionar uno de los dos conjuntos de velocidades de recepci´on y transmisi´on. se puede reinicializar el puntero para poder acceder al registro de modo 1 (MR1A o MR1B). Adem´as.3.8. 2. Los contenidos de este registro se enmascaran con los contenidos del registro de m´ascara de interrupci´on (IMR). 2. Registros del buffer de transmisi´ on (TBA y TBB) En este registro se escribe el car´acter que se va a enviar por la l´ınea correspondiente.9. se activar´ a la petici´on de interrupci´on si y solo si existe alg´ un bit de este registro a 1 y el bit correspondiente del registro de m´ascara de interrupci´on tambi´en est´a a 1.40 Proyecto de Entrada–Salida (2014–2015) Mediante este registro de control se habilita o inhibe la transmisi´on y/o recepci´on en la l´ınea correspondiente.3.7. donde se almacenan los caracteres que se reciben por la l´ınea correspondiente. Registro de estado de interrupci´ on (ISR) N/A Bit 7 N/A Bit 6 RxRDYB FFULLB Bit 5 0 = No 1 = Yes TxRDYB Bit 4 0 = No 1 = Yes N/A Bit 3 N/A Bit 2 RxRDYA FFULLA Bit 1 0 = No 1 = Yes TxRDYA Bit 0 0 = No 1 = Yes Este registro proporciona el estado de todas las fuentes posibles de interrupci´on.

Tras un reset contiene el vector 0F. valga la redundancia. 2.5 es el correspondiente a vector de interrupci´on no inicializado. Controlador de l´ıneas serie MC68681 41 TxRDY (Transmiter ReaDY) Es un duplicado del bit TxRDY del registro de estado correspondiente (SRA o SRB). Por lo tanto. Si no. . Registro del vector de interrupci´ on (IVR) En este registro se almacenar´a el vector de interrupci´on que debe proporcionar el controlador MC68681 durante el ciclo de bus de reconocimiento de interrupci´on.11.10. si alguno de los bit TxRDYA y TxRDYB est´a a 1 se solicitar´a una interrupci´on siempre que se est´e en condiciones de transmitir un nuevo car´acter. se pondr´a a 1 siempre que el registro buffer de transmisi´on est´e vac´ıo. Por lo tanto. Registro de m´ ascara de interrupci´ on (IMR) N/A Bit 7 Bit 6 RxRDYB FFULLB Bit 5 0 = Inhibida 1 = Habilitada TxRDYB Bit 4 0 = Inhibida 1 = Habilitada N/A Bit 3 Bit 2 RxRDYA FFULLA Bit 1 0 = Inhibida 1 = Habilitada TxRDYA Bit 0 0 = Inhibida 1 = Habilitada Como se ha dicho.3). hasta que no se cargue un nuevo car´acter en el registro del buffer de transmisi´on correspondiente (TBA o TBB) se solicitar´an interrupciones de forma ininterrumpida. que seg´ un la tabla 1. este registro se usa para habilitar o inhibir la petici´on de interrupci´on de cada una de las 4 fuentes posibles.3. tras mandar el u ´ltimo car´acter de un paquete se deber´a colocar a 0.5. 2.3. Es decir. En particular.2. la direcci´on de la rutina de tratamiento se deber´a almacenar a partir de la posici´on de memoria resultante de multiplicar por 4 el contenido de este registro (v´ease secci´on 1.

42 Proyecto de Entrada–Salida (2014–2015) .

Llamada al programa ensamblador La sintaxis para invocar al programa ensamblador 68kasm es la siguiente: 68kasm [-clna] <fichero fuente> Options: -c -l -n -a Show full constant expansions for DC directives Produce listing file (infile. Mott la versi´ on 2.h68) La sintaxis recomendada es: 68kasm -l practica. Si no se utiliza esta opci´on el simulador no mostrar´a el c´odigo ensamblador del programa y no se podr´an colocar puntos de ruptura con una simple pulsaci´on del rat´on. La salida que genera se compone de un fichero con el listado de ensamblaje y un otro que contiene el c´odigo objeto en el formato S-record de Motorola.h68) Produce long word absolute addresses only (infile.Cap´ıtulo 3 Programa ensamblador 68kasm El programa que se describe es un ensamblador b´asico de dos pasadas para los microprocesadores MC68000 y MC68010. Este ensamblador traduce el juego completo de instrucciones de ambos procesadores a la vez que proporciona un juego de directivas para el ensamblador o pseudoinstrucciones.h68. adem´as. permitir´a al simulador BSVC mostrar el c´odigo de programa en la ventana correspondiente.lis y.0 y Bradford W. 3. Si no ha habido errores el programa mostrar´a el mensaje siguiente: 68000 Assembler by PGM No errors detected No warnings generated Se recomienda utilizar la opci´on -l ya que.lis) Produce NO object file (infile.1.s Lo que producir´a un fichero con el listado de ensamblaje llamado practica. por un lado permitir´a estudiar los posibles errores en el fichero de listado y.1. un fichero con el c´odigo objeto llamado practica. Paul McKee escribi´o la versi´ on 1 de este programa en 1986. Mark Hollomon la versi´ on 2. . si no ha habido errores.

3. Adem´as. una l´ınea que comience por un * se considera como l´ınea de comentario.2. Se recomienda comenzar todos los comentarios con un asterisco para mejorar la legibilidad del c´odigo. pseudoinstrucciones y comentarios. Adem´as.44 Proyecto de Entrada–Salida (2014–2015) 3. Este campo no puede empezar en la primera columna.2.2. . a excepci´on del campo de comentario y en tiras de caracteres entre comillas. .2.1. Campo de etiquetas El campo de etiquetas se distingue. 3. 3.L Los campos se pueden separar por cualquier combinaci´ on de blancos y tabuladores. Si la operaci´on tiene m´as de un operando. Una etiqueta puede tener cualquier longitud. Los operandos no pueden contener espacios a menos que se entrecomillen. Sin embargo. Campo de operaci´ on Este campo espec´ıfica la instrucci´on que se va a ensamblar o la pseudoinstrucci´on para el ensamblador. Cada l´ınea de c´odigo fuente puede tener los siguientes campos: ETIQUETA OPERACION OPERANDO. se puede a˜ nadir el sufijo que indica el tama˜ no de la operaci´on (.W.2. Campo de comentario Un comentario es cualquier combinaci´ on de caracteres que est´e en la misma l´ınea tras el campo de operandos. Si la operaci´on lo permite. Cada l´ınea puede tener hasta un m´aximo de 256 caracteres y el programa no distingue entre may´ usculas y min´ usculas.S) para indicar byte. no se pueden incluir espacios antes o detr´as de la coma que separa dos operandos. . que no forma parte de la etiqueta sino que solo la finaliza.2.4. 3. COMENTARIO (A0)+. Se recomienda finalizar las etiquetas con dos puntos para mejorar la legibilidad del c´odigo.L o . palabra. ´estos se deben separar por comas.B. bien porque comienza en la primera columna o bien porque se termina con una coma. Campo de operandos Los operandos se separan de la operaci´on por espacios o tabuladores. palabra larga o desplazamiento corto. Formato del c´ odigo fuente La entrada al programa ensamblador es un fichero que contiene instrucciones. no se permite el uso de blancos y tabuladores dentro de un campo.. pero solo se tienen en cuenta los ocho primeros caracteres.3.(A1)+ *Ejemplo Por ejemplo: LOOP: MOVE.

6.127). Programa ensamblador 68kasm 3.S. Pueden ser de cualquier longitud aunque solo se distinguen por sus 8 primeros caracteres. Los restantes pueden ser: letras. hasta un m´aximo de 4.2. 3. Una expresi´on consiste en uno o m´as operandos (n´ umeros o s´ımbolos) y operadores de uno o dos operandos. 45 S´ımbolos Los s´ımbolos aparecen en el c´odigo como etiquetas. Instrucciones de bifurcaci´ on Las instrucciones Bcc.5.L. N´ umeros binarios Est´an constituidos por una secuencia de d´ıgitos binarios precedidos por %. Si se a˜ nade el sufijo . Si se usa y la direcci´on de destino cae fuera de rango se produce un error.3. entrecomilladas por comillas simples (’). Este sufijo obliga a ensamblar estas instrucciones con direcciones de salto de 1 byte (rango -128.2. Se recuerda que el programa ensamblador no distingue entre may´ usculas y min´ usculas. BRA y BSR son las u ´nicas a las que se les puede a˜ nadir el sufijo . Operadores de expresiones Los operadores se muestran en la tabla 3. . Si se quiere introducir una comilla simple en la tira hay que colocar dos consecutivas. constantes u operandos. ´o _. N´ umeros hexadecimales Est´an constituidos por una secuencia de d´ıgitos hexadecimales precedidos por $. se usa una palabra para la direcci´on de salto puede estar en el rango . Expresiones Se pueden utilizar expresiones en lugar de n´ umeros. N´ umeros octales Est´an constituidos por una secuencia de d´ıgitos octales precedidos por @.1 en orden de precedencia decreciente. Los de igual precedencia se eval´ uan de izquierda a derecha (a excepci´on de los del grupo 2). Constantes ASCII Est´an constituidas por una tira de caracteres ASCII. El primer car´acter de un s´ımbolo debe de ser una letra o un punto. $.7.. 3. Aunque.2. Los c´alculos se realizan con 32 bits y no se obtiene ning´ un resultado en caso de overflow. la divisi´on por cero produce un error. 3. Especificaci´ on de los modos de direccionamiento La tabla 3.3.2 detalla como se especifican los modos de direccionamientos en el programa ensamblador. Operandos de expresiones Un operando de una expresi´on puede ser un s´ımbolo o una constante de cualquiera de los tipos siguientes: N´ umeros decimales Est´an constituidos por una secuencia de d´ıgitos decimales.

S. La etiqueta es obligatoria ya que se trata del s´ımbolo que se define y adquiere el valor de <EXPRESION>. El formato de una l´ınea con esta pseudoinstrucci´on es: <ETIQUETA> EQU <EXPRESION> La expresi´on no debe contener referencias adelantadas ya que su valor se debe conocer durante la primera pasada en la l´ınea donde ORG aparece.4. Si no se usa ning´ un sufijo el ensamblador intenta utilizar un salto corto . 3.1: Operadores de expresiones -32768. 3. el s´ımbolo adquiere el valor de la direcci´on <EXPRESION>. utilizar´a un salto largo . 3.1. Equate EQU Se usa para definir s´ımbolos cuyo valor permanece constante.4.32767. La etiqueta es opcional y si se usa.L.2.46 Proyecto de Entrada–Salida (2014–2015) Precedencia 1 2 3 Operador () ~ << >> 4 & ! * / \ + - 5 6 Descripci´on Par´entesis Negaci´on (complementa a dos) NOT (complementa a uno) Desplaza a la izquierda (x<<y significa que x se desplaza y bits y se introducen ceros) Desplaza a la derecha (x>>y significa que x se desplaza y bits y se introducen ceros) AND OR Multiplicaci´ on Divisi´on entera M´odulo Suma Resta Tabla 3. Pseudoinstrucciones Set origin ORG Especifica en qu´e posiciones de memoria se ubicar´an las variables o el c´odigo que aparece a continuaci´on. pero si la direcci´on destino no est´a en el rango correspondiente o no se conoce tras la primera pasada. . El formato de una l´ınea con esta pseudoinstrucci´on es: <ETIQUETA> ORG <EXPRESION> La expresi´on no debe contener referencias adelantadas ya que su valor se debe conocer durante la primera pasada en la l´ınea donde ORG aparece.4..

1 palabra (. si no se pone se asume 0 < ex > = Cualquier expresi´on SR = Registro de estado PC = Registro contador de programa USP = Registro puntero de pila de usuario SSP = Registro puntero de pila de supervisor VBR = Registro base de la tabla de vectores (MC68010) SFC = Registro fuente de c´odigo de funci´on (MC68010) DFC = Registro destino de c´odigo de funci´on (MC68010) Tabla 3.SFC.3..L.4.W) o 1 palabra larga (.Xn.B).s = C´odigo de tama˜ no del registro ´ındice (.<ITEM>.USP. Ejemplo: TEXTO DC.3.2: Especificaci´on de los modos de direccionamiento 3.B ’DC Ejemplo’.PC.VBR..s) #< ex > SR. .<TAMA~ NO> <ITEM>. El c´odigo de <TAMA~ NO> especifica si cada <ITEM> tiene el tama˜ no de 1 byte (.$0A.W es la opci´on por defecto) < ex8 > = Expresi´on que se calcula a 8 bits. Programa ensamblador 68kasm Modo Directo a registro de datos Directo a registro de direcci´on Absoluto (el tama˜ no lo elige el ensamblador) Relativo a PC Relativo a PC con desplazamiento m´ ultiple Indirecto a registro Indirecto a registro con postincremento Indirecto a registro con predecremento Relativo a registro base Relativo a registro base con desplazamiento m´ ultiple Inmediato Impl´ıcito 47 Sintaxis Dn An < ex > < ex16 >(PC) < ex8 >(PC.$0D.DFC Leyenda: Dn An Xn = Registro de datos = Registro de direcciones (se puede usar SP por A7) = Registro de datos o direcciones usado como ´ındice en los desplazamientos m´ ultiples . Define constant DC Esta pseudoinstrucci´on es equivalente a la DATA del est´andar IEEE–694. si no se pone se asume 0 < ex16 >= Expresi´on que se calcula a 16 bits.s) (An) (An)+ -(An) < ex16 >(An) < ex8 >(An.W o . Al s´ımbolo de la etiqueta se le asigna la direcci´on de memoria de comienzo de la lista de datos.0 . El formato de una l´ınea con esta pseudoinstrucci´on es: <ETIQUETA> DC. Se usa para almacenar tiras de caracteres y listas de constantes en memoria.L).Xn.. La opci´on por defecto es de palabra.

pero se usa para s´ımbolos que se pueden redefinir usando otra pseudoinstrucci´on SET (pero no usando EQU o REG).4.4. palabras o palabras largas que se inicializan al mismo valor.<VALOR>.. Se usa para generar un bloque de bytes. Define constant block DCB Se usa para generar un bloque de bytes.-(A7) equivale a: 3. El formato de una l´ınea con esta pseudoinstrucci´on es: <ETIQUETA> REG <EXPRESION DE REGISTROS> La expresi´on de registros es de la forma: RI/RI/RI. Define storage DS Esta pseudoinstrucci´on es equivalente a la RES del est´andar IEEE–694. . El formato de una l´ınea con esta pseudoinstrucci´on es: <ETIQUETA> DCB. palabras o palabras largas sin inicializar.<TAMA~ NO> <LONGITUD>.<TAMA~ NO> <LONGITUD> Set symbol SET Es similar a la anterior.4...-(A7) MOVEM D0/D3-D7/A1-A5/A6. El formato de una l´ınea con esta pseudoinstrucci´on es: <ETIQUETA> 3. DS.5..4.48 Proyecto de Entrada–Salida (2014–2015) Como consecuencia a partir de la direcci´on de memoria TEXTO se almacenar´a: 44 43 20 45 6A 65 6D 70 6C 6F 0D 0A 00 3. Por ejemplo: CONTEXTO REG MOVEM D0/D3-D7/A1-A5/A6 CONTEXTO..7. SET <EXPRESION> Define register set REG Se usa para definir un conjunto de registros que se van a usar en una instrucci´on MOVEM.4. El formato de una l´ınea con esta pseudoinstrucci´on es: <ETIQUETA> 3.6.

Al final del fichero se imprime el n´ umero total de errores y avisos.5. Tambi´en se pueden encontrar en ese directorio los listados de ensamblaje correspondientes. 3. .s.6. Los ficheros fuentes se llaman MatrixMultiply. La tercera columna la l´ınea correspondiente del fichero de listado.(A1)+ Sample La primera columna muestra la direcci´on de memoria correspondiente.L (A0)+. En caso de que se presente alg´ un error o aviso. Ejemplos En el directorio /usr/local/datsi/bsvc/samples/m68000 existen dos programas ejemplo que se distribuyen con el simulador.lis. El formato de una l´ınea de este fichero es: 0000102E 22D8 200 LOOP MOVE.s y example. Las columnas posteriores contienen los campos de la l´ınea correspondiente del c´odigo fuente. La segunda columna el c´odigo de operaci´on correspondiente a la instrucci´on. cuya extensi´on es .3. Programa ensamblador 68kasm 3. 49 Formato del listado ensamblador El ensamblador produce un listado del c´odigo fuente junto con su c´odigo objeto si se le invoca con la opci´on -l. ´este se muestra en la l´ınea siguiente.

50 Proyecto de Entrada–Salida (2014–2015) .

1. BSVC simula el microprocesador MC68000. En este cap´ıtulo se detalla la funcionalidad de BSVC necesaria para la realizaci´on de la pr´actica. aparece una persiana con tres opciones activas: New Setup Esta opci´on permite crear un computador virtual. memoria y controladores de perif´ericos.5 y Tk 4. Este computador consta de: Un microprocesador MC68000. permite construir computadores virtuales con procesador. Si se pulsa sobre el men´ u File. BSVC fue desarrollado por Bradford W. Quit Esta opci´on permite salir del simulador. Mott en la Universidad del Estado de Carolina del Norte para la realizaci´on de pr´acticas de sistemas de entrada/salida y constituy´o su proyecto fin de carrera1 . desarrollada en C++ y Tcl/Tk. pero no incorpora el simulador de la DUART MC68681. El manual completo de este simulador se encuentra en el directorio /usr/local/datsi/bsvc/doc/Manual/html/ en formato hipertexto HTML o en /usr/local/datsi/bsvc/doc/Manual/ps en formato PostScript. Por lo tanto. Carga de computador virtual Para ejecutar el simulador simplemente hay que ordenar bsvc. Open Setup Esta opci´on permite cargar un computador virtual previamente creado.Cap´ıtulo 4 Simulador BSVC BSVC es una plataforma para la simulaci´ on de procesadores.1. BSVC se compila y ejecuta sobre sistemas operativos Unix. Existe una versi´ on para Windows95.setup y est´a en /usr/local/datsi/bsvc/samples/m68000. Al pulsarla aparece una nueva ventana con un contenido similar a la de la figura 4. A continuaci´ on aparece el interfaz de usuario del simulador que se muestra en la figura 4. Actualmente.1.7. Se debe pulsar la opci´on Open Setup para cargar el computador virtual sobre el que se va a realizar la pr´actica. 1 Senior design project . memoria y unidades perif´ericas. con compilador de C++ gcc 2. 4. El fichero que contiene el computador de la pr´actica se llama practica. el controlador de l´ıneas series DUART MC68681 y memoria RAM.2 e interfaz gr´afico Tcl 7.2.

Adem´as aparecen dos ventanas con las etiquetas MC68681 L´ ınea A y MC68681 L´ ınea B.3).2: Ventana de b´ usqueda de ficheros Un m´odulo de memoria RAM de 32 Kbytes situado a partir de la direcci´on 0. que est´an conectados a las l´ıneas correspondientes como si de terminales alfanum´ericos se tratase. conectada a la l´ınea de petici´on de interrupci´on de nivel 4 y cuyas dos l´ıneas series est´an conectadas a dos terminales alfanum´ericos que a su vez se simulan con dos ventanas. Existe la posibilidad de cargar el fichero de configuraci´on del computador (practica. Una DUART MC68681 situada a partir de la direcci´on EFFC00.52 Proyecto de Entrada–Salida (2014–2015) Figura 4.1: Ventana inicial del simulador BSVC Figura 4. La ventana inicial cambia de aspecto y se muestra la ventana de manejo del simulador (figura 4. Al pulsar dos veces consecutivas sobre ´el se carga la configuraci´on de dicho computador.setup .setup) desde la l´ınea de comandos: bsvc /usr/local/datsi/bsvc/samples/m68000/practica.

h68 pulsando dos veces consecutivas sobre ´el. as´ı como para cargar programas y salir del simulador. Save Setup Esta opci´on permite salvar un computador virtual. crear y salvar computadores virtuales. Men´ us de la ventana de manejo del simulador En la parte superior derecha de esta ventana (figura 4.2. Simulador BSVC 53 Figura 4.4.3).3: Ventana del simulador 4. existen tres men´ us: File Es id´entica a su hom´onima correspondiente a la ventana inicial y sirve para para cargar. Edit Sirve para ver y modificar el computador virtual que se ha cargado. . La otra permite ver y alterar el contenido del mapa de direcciones. Al pulsarla aparece una ventana como la de la figura 4. Existen programas ejemplo en /usr/local/datsi/bsvc/samples/m68000. Carga de un programa objeto Ahora que se dispone de un computador. si se desea cargar alguno hay que cargar el programa objeto de extensi´on . Para familiarizarse cargue example. Pulsando en la opci´on File aparece la persiana anterior pero con dos nuevas opciones activas: Load Program Esta opci´on permite cargar un programa en la memoria del computador. que contiene el c´odigo fuente. Una muestra el listado de ensamblaje del programa cargado.h68. 4. Window Sirve para generar dos nuevas ventanas.2. se puede proceder a cargar un programa en la memoria.3.

Por defecto.4. Botones de la ventana de manejo del simulador En la parte inferior derecha. Resultados de la ejecuci´ on de un programa La implementaci´on de la herramienta bsvc original se ha modificado para permitir al usuario que le sea m´as f´acil la depuraci´on de un programa. SR). Este simulador u ´nicamente acepta puntos de ruptura de tipo fetch. para a˜ nadir un punto de ruptura basta con pulsar dos veces consecutivas sobre la instrucci´on correspondiente. Para ello se selecciona el registro en cuesti´on y a continuaci´on esta opci´on. Reset Simula la excepci´on de Reset del procesador. a˜ nadir y quitar puntos de ruptura introduciendo una direcci´on de memoria. Las modificaciones realizadas consisten en la generaci´on de tres ficheros adicionales en los que se almacena informaci´on de la ejecuci´on de un programa: Ficheros puertoa y puertob.5. el contador de programa (PC) se inicializa con el contenido de la palabra larga de la direcci´on 4 y procesador se coloca en modo supervisor con las interrupciones inhibidas (2700 en el registro de estado. se muestra la instrucci´on donde se ha detenido la ejecuci´on y los posibles errores. Single Step Permite ejecutar el programa instrucci´on a instrucci´on. 4. Sin embargo. Contienen la informaci´on que se transmite por las l´ıneas serie A y B respectivamente. bajo la ventana de traza existen 4 botones: Breakpoints Permite ver. Clear All Pone a 0 todos los registros. Del mismo modo.5.4. Estos ficheros se pueden mostrar o editar . supone la inicializaci´on del computador virtual. El mismo efecto se consigue pulsando dos veces consecutivas sobre el registro. 4.54 Proyecto de Entrada–Salida (2014–2015) Registers La columna izquierda de esta ventana muestra los registros del microprocesador MC68000. El puntero de pila de supervisor (A7’) se inicializa con el contenido de la palabra larga de la direcci´on 0. El men´ u superior etiquetado Trace permite seleccionar el tipo de informaci´on que se muestra y salvar la traza a fichero. Antes de ejecutar el programa se debe pulsar este bot´on. Trace La columna de la derecha es una zona de presentaci´ on de la traza de ejecuci´on del programa. para quitar un punto de ruptura se pulsa dos veces sobre la l´ınea correspondiente. Como se describe en la secci´on 1. En su parte superior existe un men´ u etiquetado Registers que despliega dos opciones: Alter Permite modificar el contenido de un registro. la l´ınea de c´odigo correspondiente cambiar´a al color rojo. aunque los caracteres transmitidos no sean representables en la ventana que representa la l´ınea serie. Run/Stop Permite iniciar o detener la ejecuci´on del programa.

En el ejemplo. Sin embargo. Las instrucciones ubicadas en las posiciones 0x04A2 y 0x04AA escriben en los puertos de E/S de la DUART CSRA y CSRB el valor 0xCC. Se indica la direcci´ on de la instrucci´ on que genera la escritura. Puesto que el mapa de memoria y de entrada salida es u ´nico. si se modifica el registro de estado se sigue mostrando el contenido antiguo.log.h68.6. Errores conocidos Problema Cuando se ejecuta instrucci´on a instrucci´on. Para conocer de qu´e instrucci´on se trata se debe consultar el fichero .lis mediante la opci´on Program Listing del men´ u Window de la herramienta. se debe establecer la variable de entorno TRAZA_BSVC al valor 1. en este fichero tambi´en se encontrar´ an las escrituras en los puertos de la DUART.4. Por ejemplo la ejecuci´on de od -x puertoa realiza un volcado hexadecimal por la pantalla de todos los caracteres contenidos en el fichero puertoa. La segunda columna indica la direcci´on de memoria sobre la que se ejecuta la escritura. A modo de ejemplo se muestra un posible contenido del fichero: LOG DE LAS ESCRITURAS EN MEMORIA. Para que se genere este fichero. (Registers). si se carga desde la ventana de listado no se podr´a ejecutar correctamente. Contiene informaci´on acerca de todas las escrituras que se han realizado en memoria. Problema Cuando se carga un programa desde la ventana del simulador (figura 4.3) se debe cargar el fichero con el c´odigo objeto cuya extensi´on . . Simulador BSVC 55 con cualquier editor de ficheros binarios o volcar su contenido con el comando od de linux. Posible soluci´ on Colocar un punto de ruptura en la instrucci´on siguiente a la que modifica el registro de estado y pulsar Run. La tercera columna contiene el valor que se ha escrito en la direcci´on anterior que puede ser un valor de 8. 4. Las instrucciones almacenadas en 0x8AD8 y 0x8ADE escriben los valores de 16 bits 0 y 0x0064 en las direcciones 0x00008FF6 y 0x00008FF4 respectivamente. la direcci´ on en la que se escribe y el valor PC Direcci´ on Dato 0x00008A9C 0x00008FFC 0x00008AA0 0x000004A2 0x00EFFC03 0xCC 0x000004AA 0x00EFFC13 0xCC 0x00008AD8 0x00008FF6 0x0000 0x00008ADE 0x00008FF4 0x0064 La primera columna muestra la direcci´on que ocupa la instrucci´on que realiza la escritura. Fichero traza. 16 o 32 bits. la instrucci´on contenida en la direcci´on 0x8A9C escribe el valor de 32 bits 0x00008AA0 en la direcci´on 0x00008FFC.

56 Proyecto de Entrada–Salida (2014–2015) .

ESCCAR: Inserci´on de un car´acter en un buffer interno. Adem´as. se propone la realizaci´on de las subrutinas auxiliares que se indican a continuaci´on y que facilitan la gesti´on de los b´ ufferes internos de forma independiente: LEECAR: Obtenci´on de un car´acter de un buffer interno. En el computador del proyecto la DUART est´a conectada a la l´ınea de petici´ on de interrupci´ on de nivel 4.Cap´ıtulo 5 Enunciado del proyecto: E/S mediante interrupciones El objetivo del proyecto es que el alumno se familiarice con la realizaci´on de operaciones de Entrada/Salida en un perif´erico mediante interrupciones. LINEA: Se encarga de buscar si existe una l´ınea completa en un buffer interno. Como puede apreciarse se necesitan unos b´ ufferes internos para almacenar los caracteres que se reciben as´ıncronamente por los puertos serie. Del mismo modo. .1. SCAN: Lectura de un dispositivo. Ordenar´a la escritura de una l´ınea de caracteres por el puerto correspondiente (A o B). PRINT: Escritura en un dispositivo. La estructura del proyecto se muestra en la figura 5. El proyecto implica la programaci´on de la rutina de tratamiento de las interrupciones (RTI) as´ı como de las siguientes subrutinas que constituyen la interfaz: INIT: Inicializaci´on de los dispositivos. Devolver´ a una l´ınea de caracteres que se haya recibido previamente por el puerto correspondiente (A o B). comportamiento no bloqueante de las subrutinas SCAN y PRINT. se necesitan sendos b´ ufferes internos para almacenar los caracteres pendientes de transmitirse por los puertos. existe una u ´nica rutina de tratamiento de las interrupciones de los puertos que ser´a la encargada transferir la informaci´on a o desde los mencionados b´ ufferes internos. Preparar´a los dos puertos serie para recibir y transmitir caracteres y notificar los sucesos mediante la solicitud de interrupciones. El dispositivo elegido es la DUART MC68681 operando ambos puertos serie mediante interrupciones. Como ayuda para la implementaci´ on y prueba de los b´ ufferes internos que deben manipular las subrutinas anteriores.

que ning´ un car´acter es le´ıdo dos veces y que no se pierde ninguno. Esto exige realizar un estudio de concurrencia entre la RTI y el resto de subrutinas que se pueden ejecutar de forma concurrente. Las subrutinas anteriores se depurar´an y probar´an escribiendo una serie de programas principales que llamen a estas subrutinas con un conjunto de par´ametros distintos. La forma de acceder a los b´ ufferes internos y variables compartidas entre la RTI y SCAN y PRINT debe asegurar la integridad de los datos manejados por las subrutinas. Este juego de ensayo debe asegurar el funcionamiento correcto de la RTI y las otras cuatro subrutinas. Es decir.58 Proyecto de Entrada–Salida (2014–2015) Las subrutinas deber´an tener un comportamiento no bloqueante. es decir. teniendo en cuenta qu´ e informaci´ on modifica cada subrutina y en qu´ e momento lo hace. excluyendo LEECAR. se devuelve en el registro D0.1: Estructura del proyecto. excepto LEECAR. estas subrutinas se limitar´an a almacenar o recuperar la informaci´on solicitada de los b´ ufferes internos y no esperar´an en ning´ un caso a que termine la transmisi´on de los caracteres o a que se reciban nuevos caracteres. Programa Principal INIT PRINT BUFFER INTERNO DE PRINT (LÍNEA A) SCAN BUFFER INTERNO DE PRINT (LÍNEA B) BUFFER INTERNO DE SCAN (LÍNEA A) BUFFER INTERNO DE SCAN (LÍNEA B) RTI ENTRADA SALIDA LÍNEAS A y B Figura 5. si lo tiene. PRINT y RTI realicen el acceso a los b´ ufferes internos de 2000 bytes . ESCCAR y LINEA reciben los par´ametros en la pila y el valor de retorno. En la figura 5. ESCCAR y LINEA que se utilizar´an para que SCAN. Descripci´ on de las Subrutinas Todas las subrutinas.1 se muestra la relaci´on entre las subrutinas de la pr´actica.

Enunciado del proyecto: E/S mediante interrupciones de las l´ıneas serie.5. 59 .

Es un par´ametro de entrada/salida. Tiene dos bits significativos: • Bit 0: Selecciona la l´ınea de transmisi´on. ESCCAR (Buffer. la funci´on extraer´a el primer car´acter del buffer almacen´andolo en el registro D0 y lo “eliminar´a”. Es un descriptor que indica en qu´e buffer interno se desea insertar un car´acter. 3: indica que se desea acceder al buffer interno de transmisi´on de la l´ınea B. 2: indica que se desea acceder al buffer interno de transmisi´on de la l´ınea A. Si el buffer interno est´a vac´ıo. Resultado: D0: 4 bytes. Es un par´ametro de entrada/salida. Tiene dos bits significativos: . Un 0 indica que se desea acceder al buffer de recepci´on y un 1 al de transmisi´on. Es un descriptor que indica de qu´e buffer interno se desea extraer el car´acter. 1: indica que se desea acceder al buffer interno de recepci´on de la l´ınea B. Los posibles valores de los dos bits menos significativos del par´ametro de entrada son: 0: indica que se desea acceder al buffer interno de recepci´on de la l´ınea A. Un 0 indica que se desea acceder a un buffer asociado a la l´ınea A y un 1 a la l´ınea B. Se pasa por valor en el registro D0. la funci´on devolver´ a el valor 0xFFFFFFFF y no modificar´a el buffer. Si el buffer interno contiene caracteres. • D0 es un n´ umero entre 0 y 255. • Bit 1: Selecciona el tipo de buffer. Se pasa por valor en el registro D0. Se devuelve un c´odigo que indica el resultado de la operaci´on: • D0 = 0xFFFFFFFF si no hay ning´ un car´acter disponible en el buffer interno seleccionado. Descripci´ on: La rutina LEECAR realiza la extracci´on de un car´acter del buffer interno que se selecciona en el par´ametro.Caracter) Par´ ametros: Buffer: 4 bytes. • El resto de bits no ser´an tenidos en cuenta. Se supondr´a que el programa que invoca a esta subrutina no deja ning´ un valor representativo en los registros del computador salvo el puntero de marco de pila (A6) y en el par´ametro D0. de tal forma que la siguiente llamada a la funci´on no lo vuelva a encontrar. Indicar´a el car´acter que se ha extra´ıdo del buffer interno seleccionado.60 Proyecto de Entrada–Salida (2014–2015) LEECAR (Buffer) Par´ ametros: Buffer: 4 bytes.

Se devuelve un c´odigo que indica el resultado de la operaci´on: • D0 = 0xFFFFFFFF si el buffer interno seleccionado est´a lleno. Un 0 indica que se desea acceder al buffer de recepci´on y un 1 al de transmisi´on. • El resto de bits no ser´an tenidos en cuenta. Se supondr´a que el programa que invoca a esta subrutina no deja ning´ un valor representativo en los registros del computador salvo el puntero de marco de pila (A6) y en los par´ametros D0 y D1. la funci´on devolver´ a el valor 0xFFFFFFFF y no modificar´a el buffer. Un 0 indica que se desea acceder a un buffer asociado a la l´ınea A y un 1 a la l´ınea B.5. Si el buffer no est´a lleno. Es un descriptor que indica de qu´e buffer interno se desea conocer si hay una l´ınea. Enunciado del proyecto: E/S mediante interrupciones 61 • Bit 0: Selecciona la l´ınea de transmisi´on. Caracter: 1 byte. Un 0 indica que se desea acceder al buffer de recepci´on y un 1 al de transmisi´on. • El resto de bits no ser´an tenidos en cuenta. Es un par´ametro de entrada. Es un par´ametro de entrada/salida. • D0 = 0 indicar´a que el car´acter se ha insertado en el buffer interno correctamente. • Bit 1: Selecciona el tipo de buffer. Un 0 indica que se desea acceder a un buffer asociado a la l´ınea A y un 1 a la l´ınea B. 2: indica que se desea acceder al buffer interno de transmisi´on de la l´ınea A. 3: indica que se desea acceder al buffer interno de transmisi´on de la l´ınea B. Descripci´ on: La rutina ESCCAR realiza la inserci´on de un car´acter del buffer interno que se selecciona en el par´ametro. Si el buffer interno est´a lleno. Los posibles valores de los dos bits menos significativos de D0 son: 0: indica que se desea acceder al buffer interno de recepci´on de la l´ınea A. la funci´on insertar´a el car´acter contenido en D1 como u ´ltimo car´acter del buffer. Resultado: D0: 4 bytes. . Se pasa por valor en los 8 bits menos significativos del registro D1. Tiene dos bits significativos: • Bit 0: Selecciona la l´ınea de transmisi´on. 1: indica que se desea acceder al buffer interno de recepci´on de la l´ınea B. Se pasa por valor en el registro D0. • Bit 1: Selecciona el tipo de buffer. LINEA (Buffer) Par´ ametros: Buffer: 4 bytes. Es el car´acter que se desea a˜ nadir al buffer interno como u ´ltimo car´acter.

por tanto. Al finalizar la ejecuci´on de la instrucci´on RTS.62 Proyecto de Entrada–Salida (2014–2015) Resultado: D0: 4 bytes. 3: indica que se desea acceder al buffer interno de transmisi´on de la l´ınea B. Indicar´ a el tama˜ no de la primera l´ınea contenida en el buffer interno descrito por el par´ametro. Los par´ametros de inicializaci´on de esta subrutina son los siguientes: 8 bits por car´acter para ambos puertos. Los posibles valores de los dos bits menos significativos del par´ametro de entrada son: 0: indica que se desea acceder al buffer interno de recepci´on de la l´ınea A. Descripci´ on: La rutina INIT realiza la inicializaci´on de los dos puertos disponibles en la DUART MC68681. que hay en el buffer interno indicado en el par´ametro. el puntero de pila (SP) debe apuntar a la misma direcci´on a la que apuntaba antes de ejecutar la instrucci´on BSR. Se debe solicitar una interrupci´on cada vez que llegue un car´acter. la funci´on devolver´a el valor 0. Se supondr´a que el programa que invoca a esta subrutina no deja ning´ un valor representativo en los registros del computador salvo el puntero de marco de pila (A6). 2: indica que se desea acceder al buffer interno de transmisi´on de la l´ınea A. Se supondr´a que el programa que invoca a esta subrutina no deja ning´ un valor representativo en los registros del computador salvo el puntero de marco de pila (A6) y en el par´ametro D0. Descripci´ on: La rutina LINEA cuenta el n´ umero de caracteres que componen la primera l´ınea. INIT ( ) Par´ ametros: No tiene. Resultado: Los puertos A y B deben quedar preparadas para la recepci´ on y transmisi´ on de caracteres mediante E/S por interrupciones. esta subrutina no puede devolver ning´ un error y. Si el buffer interno est´a vac´ıo o no hay ninguna l´ınea (no existe el car´acter ASCII 13). incluyendo el retorno de carro (car´acter ASCII 13). Debido a la particular configuraci´on del emulador. 1: indica que se desea acceder al buffer interno de recepci´on de la l´ınea B. No activar el eco en ninguna de los puertos. Se devuelve un c´odigo que indica el resultado de la operaci´on: • D0 es un n´ umero entre 0 y 2000. no se devuelve ning´ un valor de retorno. Si el buffer interno contiene caracteres. Esta subrutina no modifica el buffer interno involucrado. la funci´on contar´ a los primeros caracteres que conforman la primera l´ınea y almacenar´a dicha cuenta en el registro D0. .

• D0 es un n´ umero positivo. Actualizar la direcci´on de la rutina de tratamiento de interrupci´on en la tabla de vectores de interrupci´on. • 1 indica que la lectura se realizar´a del puerto B. Tama~ no) Par´ ametros: Buffer: 4 bytes. Nota: se recuerda que el registro de m´ascara de interrupci´on (IMR) de la DUART MC68681 no se puede leer. • Cualquier otro valor provocar´a que la subrutina devuelva un error. Es un n´ umero entero sin signo. Es un par´ametro de salida. Descriptor. Es el buffer en el que se van a devolver los caracteres que se han le´ıdo del dispositivo. Indicar´ a el n´ umero de caracteres que se han le´ıdo y se han copiado a partir de la posici´on de memoria indicada por el par´ametro Buffer (incluyendo el car´acter de retorno de carro). Resultado: D0: Se devuelve un c´odigo que indica el resultado de la operaci´on: • D0 = 0xFFFFFFFF si existe alg´ un error en los par´ametros pasados. Es un n´ umero entero. Las interrupciones de transmisi´on s´olo se activar´ an cuando el buffer de transmisi´on del puerto correspondiente contenga una l´ınea completa seg´ un se especifica en la descripci´on de la subrutina PRINT. se podr´ıa mantener una copia en memoria de las escrituras sobre dicho registro. Funcionamiento Full Duplex: deben estar habilitadas la recepci´on y la transmisi´on simult´aneamente. . Se pasa por direcci´on.5. Es un par´ametro de entrada. Inicializaci´on de los b´ ufferes internos de las subrutinas indicadas anteriormente. Establecer el vector de interrupci´on 40 (hexadecimal). Descriptor: 2 bytes. Tama˜ no: 2 bytes. Habilitar las interrupciones de recepci´on del puerto correspondiente en la m´ascara de interrupci´on. Indica el dispositivo sobre el que se desea realizar la operaci´on de lectura: • 0 indica que la lectura se realizar´a del puerto A. SCAN (Buffer. Si la l´ogica del programa necesitase conocer su contenido. Enunciado del proyecto: E/S mediante interrupciones 63 La velocidad de recepci´on y transmisi´on ser´a de 38400 bits/s en ambos puertos. Es un par´ametro de entrada. Indica el n´ umero m´ aximo de caracteres que se deben leer del buffer interno y copiar en el par´ametro Buffer.

la subrutina se limitar´a a copiar en el par´ametro Buffer los n primeros caracteres almacenados en el buffer interno correspondiente y “eliminarlos” de dicho buffer interno devolviendo en D0 el valor n. incluyendo el retorno de carro. sea menor o igual al par´ametro Tama~ no. Los b´ ufferes internos de la subrutina se deber´an implementar como b´ ufferes circulares. esta subrutina se limitar´a a devolver en D0 el valor 0. Tanto si la primera l´ınea almacenada en el correspondiente buffer interno es mayor que el par´ametro Tama~ no. es menor o igual que Tama~ no. Indica el dispositivo sobre el que se desea realizar la operaci´on de escritura: • 0 indica que la escritura se realizar´a del puerto A. debe dejar el puntero de pila (SP) apuntando a la misma posici´on de memoria a la que apuntaba antes de realizar la llamada a subrutina. al igual que la subrutina de inicializaci´on. Es un par´ametro de entrada. Tama~ no) Par´ ametros: Buffer: 4 bytes. la subrutina se limitar´a a indagar si en el buffer interno correspondiente hay una l´ınea v´alida y si su longitud (n). Se copiar´an a lo sumo tantos bytes como indique el par´ametro Tama~ no. Si es as´ı. Para ello la subrutina SCAN dispondr´a de sendos bufferes internos de 2000 bytes (a los que tienen acceso dicha subrutina y la rutina de tratamiento de interrupci´on) que contendr´an los caracteres le´ıdos de los puertos y no consumidos por ninguna llamada a SCAN. Es un par´ametro de entrada. La lectura se deber´a realizar de forma no bloqueante. • 1 indica que la escritura se realizar´a del puerto B. como si los caracteres almacenados en el correspondiente buffer interno no constituyen una l´ınea. Descriptor: 2 bytes. Adem´as se deber´a tener en cuenta lo siguiente: El comportamiento no bloqueante es resultado de gestionar los puertos serie mediante E/S por interrupciones. Si no. Se supondr´a que el programa que invoca a esta subrutina habr´a reservado espacio suficiente en el buffer que se pasa como par´ametro (Buffer) y no deja ning´ un valor representativo en los registros del computador salvo el puntero de marco de pila (A6). incluyendo el car´acter de retorno de carro. es decir.1). sino que basta con que dichos caracteres no se vuelvan a entregar. . Es un n´ umero entero. Esta subrutina deber´a dejar el dispositivo preparado para realizar lecturas posteriores y. Se pasa por direcci´on. En ning´ un caso esta subrutina debe esperar a que lleguen nuevos caracteres del dispositivo. La “eliminaci´on” de estos caracteres del buffer no implica la sobreescritura de los mismos. Es el buffer en el que se pasa el conjunto de caracteres que se desea escribir en el dispositivo. Descriptor. En particular esta subrutina debe asegurar que ning´ un car´acter es le´ıdo dos veces y que no se pierde ninguno (v´ease la figura 5. PRINT (Buffer.64 Proyecto de Entrada–Salida (2014–2015) Descripci´ on: La rutina SCAN realiza la lectura de una l´ınea completa de caracteres del puerto correspondiente (A o B) siempre y cuando el tama˜ no total de la l´ınea.

Es un n´ umero entero sin signo. Adicionalmente. Tama˜ no: 2 bytes. la subrutina PRINT dispondr´a de sendos bufferes internos de 2000 bytes (a los que u ´nicamente tienen acceso dicha subrutina y la rutina de tratamiento de interrupci´on) que contendr´ a los caracteres pendientes de ser enviados por los puertos serie. La transmisi´on efectiva de los caracteres encolados ser´a activada s´olo si existe una l´ınea en el buffer interno. si alguno de los caracteres del buffer que se pasa como par´ametro es el retorno de carro (ASCII 13) se activar´ a la transmisi´on de caracteres para que se transmitan los caracteres del correspondiente buffer interno hasta el u ´ltimo car´acter de retorno de carro que se ha copiado en el buffer interno. Adem´as se deber´a tener en cuenta lo siguiente: Al igual que en la subrutina SCAN el comportamiento no bloqueante es resultado de gestionar el puerto serie mediante E/S por interrupciones. La escritura se deber´a realizar de forma no bloqueante. es decir. Indica el n´ umero de caracteres que se deben leer del par´ametro Buffer y a˜ nadir al buffer interno. Los b´ ufferes internos de la subrutina se deber´an implementar como b´ ufferes circulares. la subrutina finalizar´a inmediatamente despu´es de copiar los caracteres pasados en el par´ametro Buffer al buffer interno. la subrutina finalizar´a tras activar la transmisi´on de caracteres. es decir. Debido al comportamiento no bloqueante exigido. . Resultado: D0: Se devuelve un c´odigo que indica el resultado de la operaci´on: • D0 = 0xFFFFFFFF si existe alg´ un error en los par´ametros pasados. En ning´ un caso esta subrutina debe esperar a que finalice la transmisi´on de caracteres del dispositivo. En el caso de que los caracteres que se desean transmitir no quepan en su totalidad en el buffer interno. • D0 es un n´ umero positivo. Enunciado del proyecto: E/S mediante interrupciones 65 • Cualquier otro valor provocar´a que la subrutina devuelva un error. Es un par´ametro de entrada. se “encolar´an” los que quepan. Una llamada a PRINT para uno de los puertos se limitar´a a copiar del par´ametro Buffer los datos que se desean escribir al buffer interno correspondiente y “encolarlos” al conjunto de caracteres que est´an pendientes de transmitirse.1). por tanto. Esto indica que el MC68681 generar´ a una interrupci´ on cuando alguna de los puerto est´ e preparada para transmitir y. Para permitir este comportamiento. la rutina de tratamiento de interrupci´on ser´a la encargada de ir transmitiendo los caracteres por el puerto correspondiente (v´ease la figura 5. Indicar´a el n´ umero de caracteres que se han aceptado para su escritura en el dispositivo. Descripci´ on: La rutina PRINT realiza la escritura en el correspondiente buffer interno de tantos caracteres como indique el par´ametro Tama~ no contenidos en el buffer que se pasa como par´ametro. si se ha encontrado un retorno de carro despu´es de encolar los caracteres que se pasan como par´ametro.5.

• Si la interrupci´on es de “recepci´on” indica que la cola FIFO de recepci´on del puerto no est´a vac´ıa (v´ease la p´agina 38). esta subrutina debe identificar cu´al de las cuatro posibles condiciones ha generado la solicitud de interrupci´on. al igual que la subrutina de inicializaci´on. se debe realizar el tratamiento de la interrupci´on. Esta subrutina deber´a dejar el dispositivo preparado para realizar escrituras posteriores y. se transmitir´a un salto de l´ınea (c´odigo ASCII 10). no se puede a˜ nadir el car´acter que se recibe por el puerto. • Si la interrupci´on es de “transmisi´on” indica que el puerto serie est´a preparado para transmitir un car´acter. Este comportamiento implica que la RTI solo transmite l´ıneas completas. debe dejar el puntero de pila (SP) apuntando a la misma posici´on de memoria a la que apuntaba antes de realizar la llamada a subrutina. En este caso si quedan caracteres en el buffer interno de transmisi´on que conforman una l´ınea. Puesto que el MC68681 activa una misma se˜ nal de interrupci´on para las cuatro condiciones posibles. Una vez identificada la fuente. pero se debe leer el car´acter del buffer de recepci´on del MC68681 para desactivar la petici´on de interrupci´on. Si no es as´ı. Tratamiento de la interrupci´ on. no hay un conjunto de caracteres finalizados con el car´acter 13. se debe transmitir un nuevo car´acter por el puerto y “eliminarlo” del buffer interno. En este caso se debe a˜ nadir el car´acter que se recibi´o por el puerto al buffer interno correspondiente. es decir. Este car´acter no se a˜ nade al buffer interno (se “tira”). Situaciones “especiales”.66 Proyecto de Entrada–Salida (2014–2015) La DUART solicitar´a interrupciones cada vez que el puerto correspondiente est´e listo para transmitir si se han activado en el registro de m´ascara de interrupciones (IMR). Se supondr´a que el programa que invoca a esta subrutina habr´a reservado espacio suficiente en el buffer que se pasa como par´ametro (Buffer) y no deja ning´ un valor representativo en los registros del computador salvo el puntero de marco de pila (A6). Entre otras acciones esta subrutina debe realizar las siguientes acciones: Identificaci´ on de la fuente de interrupci´ on. Hay situaciones en las que el tratamiento de la interrupci´on no se puede asociar al tratamiento general: • Si la interrupci´on es de “recepci´on” y el buffer interno est´a lleno. • Si la interrupci´on es de “transmisi´on” y el u ´ltimo car´acter que se transmiti´o fue un salto de l´ınea provocado por la aparici´on de un retorno de carro en el buffer interno. se debe comprobar si queda una l´ınea completa en dicho buffer. • Si la interrupci´on es de “transmisi´on” y el u ´ltimo car´acter que se transmiti´o por el puerto serie es el retorno de carro. RTI Descripci´ on: La invocaci´on de la rutina de tratamiento de interrupci´on es el resultado de la ejecuci´on de la secuencia de reconocimiento de interrupciones expuesta en la p´agina 8. se deben .

L -4(A6). No obstante.2.5. El procesador MC68000 dispone de dos instrucciones que ayudan a la creaci´on y destrucci´on del marco de pila de una subrutina: LINK y UNLK. La estructura de la pila se muestra en la figura 5. habitualmente se suele utilizar el registro de direcciones A6 para que realice estas funciones. El espacio asignado para variables locales se reserva en el marco de pila de la correspondiente rutina. UNLK A6 RTS *Se destruye el marco de pila . #-8 MOVE. Las dos primeras acciones son realizadas mediante la instrucci´on UNLK. crear el nuevo marco de pila y reservar espacio en la pila para las variables locales. Sup´ongase que una rutina SCAN necesita utilizar dos variables locales de 32 bits (i y j). Se retorna a la subrutina llamante. Obs´ervese que todas estas funciones son realizadas por la instrucci´on LINK. Nota: como complemento a la descripci´on de estas subrutinas. Por tanto. #-8 *Se crea el marco de pila Si en el c´odigo posterior de la rutina SCAN se desea cargar en el registro D2 la variable i y en D3 la variable j se realiza con el siguiente c´odigo ensamblador: SCAN: LINK A6. Si no se realizara esta operaci´on el dispositivo no desactivar´ıa la se˜ nal de interrupci´on puesto que sigue estando preparado para transmitir. Para construir dicho marco de pila basta con salvaguardar el valor que tuviera el registro que act´ ua como puntero al marco de pila (A6). Enunciado del proyecto: E/S mediante interrupciones 67 deshabilitar las interrupciones de transmisi´on para el puerto que ha interrumpido en el registro IMR del MC68681. Se restaura el valor que tuviera el puntero de marco antes de entrar en la subrutina. Estas instrucciones permiten gestionar f´acilmente la creaci´on y destrucci´on de las variables locales de una subrutina.D2 MOVE. el c´odigo de salida de una subrutina que utilice marco de pila se muestra a continuaci´ on.L -8(A6). en la secci´on Ejemplos se proporcionan distintos casos de uso. Variables locales y paso de par´ ametros El procesador MC68000 no dispone de un registro de prop´osito espec´ıfico que realice las tareas de puntero de marco de pila (FP). La reserva de este espacio de variables (8 bytes) se realizar´a al entrar en la rutina: SCAN: LINK A6.D3 *Se crea el marco de pila Para deshacer el marco de pila creado a la entrada de la subrutina se deber´an realizar las siguientes acciones: Se copia el valor del puntero de marco al puntero de pila.

68 Proyecto de Entrada–Salida (2014–2015) Asignaci´ on de etiquetas y de memoria Los puntos de entrada de las subrutinas deber´an ir asociados a las etiquetas INIT. SCAN y PRINT. La pila se situar´a en las posiciones altas de memoria. El alumno debe ubicar todo el c´odigo (datos y variables globales privadas a las subrutinas) a partir de la direcci´on hexadecimal 0x0000400 hasta la 0x00007FFF. El rango de direcciones 0 a la 0x00003FF se reservar´ an para ubicar la tabla de vectores de interrupci´on. .

5. Puesto que en este procesador el direccionamiento es a nivel de byte. no como los casos de prueba con los que se evaluar´ a la pr´actica. Ejemplos Como aclaraci´on a la especificaci´on de las subrutinas.2: Gesti´on de variables locales. Enunciado del proyecto: E/S mediante interrupciones A7 (SP) 69 I_byte_3 I_byte_2 I_byte_1 I_byte_0 J_byte_3 J_byte_2 J_byte_1 J_byte_0 A6 (FP) Antiguo_FP_byte_3 Antiguo_FP_byte_2 Antiguo_FP_byte_1 Antiguo_FP_byte_0 Dir_Ret_byte_3 Dir_Ret_byte_2 Dir_Ret_byte_1 Dir_Ret_byte_0 Buffer_byte_3 Buffer_byte_2 Buffer_byte_1 Buffer_byte_0 Descriptor_byte_1 Descriptor_byte_0 Tamaño_byte_1 Tamaño_byte_0 Figura 5. Este conjunto de casos debe ser utilizado como ejemplo de la especificaci´on a subrutinas. a continuaci´ on se incluye una serie de ejemplos con los argumentos que se pasan a cada una de las subrutinas y direcciones de memoria que se modifican. cada una de las direcciones que se muestran en este apartado contendr´ an un byte. .

0x72. 0x65. 0x6F. 0x64. 0x6F. 0x74. 0x6F. 0x74. 0x75. 0x6D. 0x6D. 0x20. 0x20. 0x72. D0 = 0 Caracteres recibidos por la l´ınea A y almacenados en el buffer interno Representaci´on ASCII: de computadores y mas 0x64. 0x65. 0x73 . A7 = 32000 Resultado: A7 = 32000 Debe dejar los puertos serie A y B preparados para la recepci´on y transmisi´on de caracteres. 0x61. 0x20 0x79. 0x6D. 0x6F. 0x65. INIT Caso 1. 0x70. 0x64. 0x73. se habr´a establecido correctamente el vector de interrupci´on. se habr´a actualizado la entrada de la tabla de vectores de interrupci´on y se habr´a inicializado como buffer vac´ıo dos b´ ufferes de 2000 caracteres para cada una de los puertos. 0x61. 0x73 Resultado: D0 = 0x64 Caracteres recibidos por la l´ınea A y almacenados en el buffer interno Representaci´on ASCII: e computadores y mas 0x65. 0x61. LEECAR Caso 2. 0x6D. 0x20. 0x63. se habr´a habilitado la recepci´on y transmisi´on en ambos puertos.70 Proyecto de Entrada–Salida (2014–2015) NOTA: Los n´ umeros que comienzan con 0x est´an representados en hexadecimal. 0x73. 0x20 0x79. 0x63. 0x70. 0x20. 0x61. 0x75.

5. Enunciado del proyecto: E/S mediante interrupciones

71

Caso 3.
D0 = 0x03040503
Caracteres a enviar por
la l´ınea B y almacenados
en el buffer interno
Representaci´on ASCII:

interrupci´on

0x69, 0x6E, 0x74, 0x65, 0x72, 0x72, 0x75,
0x70, 0x63, 0x69, 0xF3, 0x6E

Resultado:
D0 = 0x69
Caracteres a enviar por
la l´ınea B y almacenados
el buffer interno
Representaci´on ASCII:

nterrupci´on
0x6E, 0x74, 0x65, 0x72, 0x72, 0x75,
0x70, 0x63, 0x69, 0xF3, 0x6E

Obs´ervese que los 30 bits m´as significativos del par´ametro de entrada de D0 se ignoran.
Caso 4.
D0 = 0x00000003
Caracteres a enviar por
la l´ınea B y almacenados
en el buffer interno

<vac´
ıo>

Resultado:
D0 = 0xFFFFFFFF
Caracteres a enviar por
la l´ınea B y almacenados
el buffer interno

<vac´
ıo>

72

Proyecto de Entrada–Salida (2014–2015)

ESCCAR
Caso 5.
D0 = 1

D1 = 0x41

Caracteres recibidos por la
l´ınea B y almacenados
en el buffer interno

COS

Representaci´on ASCII:

0x43, 0x4F, 0x53

Resultado:
D0 = 0
Caracteres recibidos por la
l´ınea B y almacenados
en el buffer interno

COSA

Representaci´on ASCII:

0x43, 0x4F, 0x53, 0x41

Caso 6.
D0 = 2

D1 = 0x62

Caracteres a enviar por la
l´ınea A y almacenados
en el buffer interno

Buffer lleno (2000 caracteres)

Resultado:
D0 = 0xFFFFFFFF
Caracteres a enviar por la
l´ınea A y almacenados
en el buffer interno

Buffer lleno (2000 caracteres)

LINEA
Caso 7.
D0 = 0x00000003
Caracteres a enviar por
la l´ınea B y almacenados
en el buffer interno

<vac´
ıo>

5. Enunciado del proyecto: E/S mediante interrupciones
Resultado:
D0 = 0
Caracteres a enviar por
la l´ınea B y almacenados
el buffer interno

<vac´
ıo>

Caso 8.
D0 = 1
Caracteres a enviar por
la l´ınea A y almacenados
en el buffer interno

COS

Representaci´on ASCII:

0x43, 0x4F, 0x53

Resultado:
D0 = 0
Caracteres a enviar por
la l´ınea A y almacenados
en el buffer interno

COS

Representaci´on ASCII:

0x43, 0x4F, 0x53

Caso 9.
D0 = 2
Caracteres recibidos por la
l´ınea B y almacenados
en el buffer interno

COS<retorno_carro>

Representaci´on ASCII:

0x43, 0x4F, 0x53, 0x0D

Resultado:
D0 = 4
Caracteres recibidos por la
l´ınea B y almacenados
en el buffer interno

COS<retorno_carro>

Representaci´on ASCII:

0x43, 0x4F, 0x53, 0x0D

73

0x65. 5008: 0x74. ?? de computadores <retorno_carro> 0x64. 0x6F. 0x6F. ??. 0x61. 0x0D 0x79. 0x6F. 32006: 0x00. 0x88. 0x6D. 0x65. 0x20. 0x00. . 0x6D. 0x72. 0x70. 0x73. 0x6F. 32004: 0x00. 0x75. 0x73. 0x61. A7 = 32000 Caracteres recibidos por la entrada del puerto A y almacenados en el buffer interno Representaci´on ASCII: Direcciones de Memoria: 32000: 0x00. 0x22. 0x02. 0x61. A7 = 32000 Caracteres recibidos por la entrada del puerto B y almacenados en el buffer interno Representaci´on ASCII: Direcciones de Memoria: 32000: 0x00. 0x13. 0x70. 0x72. 0x65. ??. 0x6F. 0x74. 0x20. 0x64. 0x64. 0x6F. 0x01. 0x00. . . 0x0D . 5000: ??. 0x6D. 5000: ??. 0x74. 0x73 Resultado: A7 = 32000 D0 = 16 Direcciones de Memoria: 5000: 0x64. 0x65. 0x64. 0x6D. 0x63. 0x20. . 0x00. ??. 0x0D Resultado: A7 = 32000 D0 = 0 Direcciones de Memoria: No se han copiado caracteres en el par´ametro de SCAN porque no hay espacio suficiente para almacenar una l´ınea. 0x72. 32006: 0x00. 0x75. . ?? de computadores <retorno_carro> y mas 0x64. 0x75. . 0x61. 0x63. ??. Caso 11. ??. 0x20. ??. 0x70. 0x63. El estado del buffer interno no se altera.74 Proyecto de Entrada–Salida (2014–2015) SCAN Caso 10. 0x88. 32004: 0x00. 0x65. 0x13. . 0x65. 0x73. .

0x01. 0x00. 0x00. 5000: ??. . 32006: 0x00. 0x73 Caso 12. . 0x20. ??. 5000: ??. 0x88. . ??. 0x11. ?? . 32004: 0x00. A7 = 32000 Caracteres recibidos por la entrada del puerto B y almacenados en el buffer interno Representaci´on ASCII: Direcciones de Memoria: 32000: 0x00. ??. . A7 = 32000 Resultado: A7 = 32000 D0 = 0xFFFFFFFF Direcciones de Memoria: 32000: 0x00. 0x10. 0x22. 32006: 0x00. 0x13. ??. ??. 32004: 0x00. Enunciado del proyecto: E/S mediante interrupciones Caracteres recibidos por la entrada del puerto B y almacenados en el buffer interno Representaci´on ASCII: 75 y mas 0x79. 0x65 Resultado: A7 = 32000 D0 = 0 Direcciones de Memoria: No se han copiado caracteres en el par´ametro de SCAN porque no hay una l´ınea completa en el buffer interno. . PRINT Caso 13. El estado de ´este no se altera. . . 0x6D. 0x13. ?? de 0x64.5. 0x88. ??. . 0x61.

76 Proyecto de Entrada–Salida (2014–2015) Caso 14. 0x65. 0x70. 0x6E. 0x72. 32006: 0x00. 0x70 0x63. 0x0D. 0x6E. 0x65. 0x63. 0x32 Representaci´on ASCII: interrupci´on <retorno_de_carro>12 . 32004: 0x00. 0x13. 0x88. 0x74. 5000: 0x69. 0x72. 0x0D. 5007: 0x70. 5007: 0x70. 0x00. 0x65. 32006: 0x00. 0x6E. 0xF3. 32004: 0x00. 0x31. 0x6E. 0x01. 0x74. 0x6E. 0x75. 0x69. 0xF3. A7 = 32000 Direcciones de Memoria: 32000: 0x00. 0x0F. 0x00. 0x72. 0x13. 0x32 Resultado: A7 = 32000 D0 = 15 Caracteres a enviar por el puerto B y almacenados en el buffer interno 0x69. 0x6E. 0x72. 5000: 0x69. 0x6E. 0x75. 0x31. 0x63. 0x0D. 0x01. 0x69. 0x0D Representaci´on ASCII: interrupci´on <retorno_de_carro> Caso 15. 0x88. A7 = 32000 Direcciones de Memoria: 32000: 0x00. 0x75. 0x72. 0x72. 0x72. 0x72. 0xF3. 0x69. 0x6E. 0x0D Resultado: A7 = 32000 D0 = 13 Caracteres a enviar por el puerto B y almacenados en el buffer interno 0x69. 0x74. 0x75. 0x74. 0xF3. 0x65. 0x63. 0x69.

al no existir una l´ınea completa en el buffer interno. 0x00. ??. 0x00. 0x00. 0x6E Representaci´on ASCII: pein En este caso. ?? . ??. . Enunciado del proyecto: E/S mediante interrupciones 77 Caso 16. . 0x13. 0x00. A7 = 32000 Resultado: A7 = 32000 D0 = 0 Direcciones de Memoria: 32000: 0x00. . 32004: 0x00. 32004: 0x00. 0x65. 32006: 0x00. 0x13. Caso 17. no se activa la transmisi´on de caracteres. . 32006: 0x00. 0x02.5. ??. 0x65 Representaci´on ASCII: pe Resultado: A7 = 32000 D0 = 2 Caracteres a enviar por el puerto A y almacenados en el buffer interno 0x70. 0x88. 0x88. 0x69. 0x6E Caracteres a enviar por el puerto A y almacenados en el buffer interno 0x70. 5000: ??. 5000: 0x69. 0x00. A7 = 32000 Direcciones de Memoria: 32000: 0x00.

puesto que se decrementa en una unidad por cada iteraci´on. de tal forma que se repite indefinidamente. Adem´as de lo anterior hay que tener en cuenta los siguientes puntos: La variable BUFFER se utiliza para almacenar todos los caracteres que se van a leer de la l´ınea A. Esta situaci´on consiste en que el n´ umero de caracteres que quedan por transmitir sea menor que el tama˜ no de la iteraci´on. Una vez que se ha finalizado con las lecturas se queda un bucle de llamadas a PRINT hasta que se consigue transmitir por la l´ınea B todos los caracteres le´ıdos en bloques de tama˜ no TAMB. De esta forma se realizar´an iteraciones en el bucle hasta que esta variable alcance el valor 0. Estos manejadores se limitan a parar la ejecuci´on del programa. En la primera lectura se pasar´a como par´ametro la direcci´on de comienzo de esta variable y en las sucesivas lecturas se pasar´a la direcci´on de comienzo incrementada en el n´ umero de caracteres que se han le´ıdo (variable CONTC). En cada iteraci´on del bucle se resta el n´ umero de caracteres que la rutina PRINT ha aceptado para la transmisi´on. El programa comienza invocando a la rutina INIT y estableciendo los manejadores de las excepciones que se pueden producir. Si no se ha escrito todo el bloque se repite la llamada a PRINT con el conjunto de caracteres que no se ha transmitido. La variable CONTL contiene el n´ umero total de l´ıneas que quedan por leer. Una vez que se ha finalizado con el bloque de lecturas. PRINT y la RTI. En este caso se carga el n´ umero de caracteres que quedan por transmitir en TAME y se salta a la etiqueta ESPE. A continuaci´on se realiza la iteraci´on del bucle tal y como se ha indicado en el comienzo de esta secci´on.78 Proyecto de Entrada–Salida (2014–2015) Dise˜ no y codificaci´ on de casos de prueba Los ejemplos que se han expuesto anteriormente intentan aclarar la especificaci´on de la pr´actica. . se ejecuta el bloque de escrituras que consiste en escribir todos los caracteres le´ıdos en el bloque anterior en bloques de TAME caracteres. SCAN. Si no es as´ı se salta al comienzo del bucle (etiqueta OTRAL). pero para asegurar el correcto funcionamiento de las subrutinas de la pr´actica es necesario realizar un conjunto de casos de pruebas que cubran el mayor n´ umero posible de situaciones que se puedan presentar. Cuando ha finalizado el env´ıo de todos los caracteres le´ıdos se salta al inicio del bucle principal. Para mostrar c´omo se puede construir un caso de prueba se incluye un programa principal que hace funcionar de forma concurrente las rutinas. Las constantes DESA y DESB contienen los descriptores de lectura y escritura que se pasar´ an como par´ametros a SCAN y PRINT respectivamente. en el que cada iteraci´on primero se queda en un bucle de llamadas a SCAN hasta que se consigue leer del puerto serie A NLIN l´ıneas de caracteres de tama˜ no menor o igual a TAML. Este programa principal tiene un bucle principal. El caso especial se trata al final del bucle. Se comprueba si quedan l´ıneas por leer.

W MOVE.W BNE CMP.8 * Bus error handler MOVE.DIRLEC #TAMB.W EQU EQU EQU EQU EQU 2100 0 0 0 0 0 0 1 10 30 5 * * * * * * * * * * * Buffer para lectura y escritura de caracteres Contador de l´ ıneas Contador de caracteres Direcci´ on de lectura para SCAN Direcci´ on de escritura para PRINT Tama~ no de escritura para print Descriptor l´ ınea A Descriptor l´ ınea B N´ umero de l´ ıneas a leer Tama~ no de l´ ınea para SCAN Tama~ no de bloque para PRINT INICIO: * Manejadores de excepciones MOVE. Enunciado del proyecto: E/S mediante interrupciones 79 A continuaci´on se muestra el programa de prueba: BUFFER: CONTL: CONTC: DIRLEC: DIRESC: TAME: DESA: DESB: NLIN: TAML: TAMB: DS.-(A7) SCAN #0.W BNE #0. Si no se han le´ ıdo todas las l´ ıneas se vuelve a leer * * * * * Direcci´ on Tama~ no de Tama~ no de Puerto B Direcci´ on * * * * * * * * Restablece la pila Calcula la nueva direcci´ on del buffer Actualiza el contador de caracteres Si no quedan caracteres se acaba Actualiza el tama~ no de escritura Si no se ha escrito todo el bloque se insiste Si el no de caracteres que quedan es menor que el tama~ no establecido se transmite ese n´ umero de lectura = comienzo del buffer escritura = Tama~ no de bloque escritura de lectura .W MOVE.CONTC #1.16 * Illegal instruction handler MOVE.W DC.W MOVE.L MOVE.DIRLEC D0.12 * Address error handler MOVE.W #BUFFER.CONTL OTRAL MOVE.CONTC #NLIN.5.W DC.L BSR ADD.W MOVE.SR MOVE.W MOVE.W MOVE.-(A7) PRINT #8.TAME TAME.-(A7) #DESB.L SUB.CONTC SALIR D0.TAME ESPE #TAMB.L BEQ ADD.L BSR CMP.L #ILLEGAL_IN.32 * Privilege violation handler BUCPR: OTRAL: ESPL: OTRAE: ESPE: BSR MOVE.W SUB.L #ADDRESS_ER.-(A7) DIRLEC.W INIT #$2000.L ADD.A7 D0.L #BUS_ERROR.L #PRIV_VIOLT.W BEQ SUB.D0 ESPL #8.-(A7) #DESA.L DC.CONTC * Permite interrupciones * * * * * * Inicializa contador de caracteres Inicializa contador de L´ ıneas Direcci´ on de lectura = comienzo del buffer Tama~ no m´ aximo de la l´ ınea Puerto A Direcci´ on de lectura * * * * * * Si no se ha le´ ıdo una l´ ınea se intenta de nuevo Restablece la pila Calcula la nueva direcci´ on de lectura Actualiza el n´ umero de caracteres le´ ıdos Actualiza el n´ umero de l´ ıneas le´ ıdas.L ADD.-(A7) DIRLEC.DIRLEC D0.B DC.A7 D0.CONTL #BUFFER.L ADD.L DC.W MOVE.DIRLEC #TAML.L MOVE.

80 Proyecto de Entrada–Salida (2014–2015) BHI MOVE.W BRA OTRAE CONTC.TAME ESPE SALIR: BRA BUCPR FIN: BREAK BUS_ERROR: BREAK NOP ADDRESS_ER: BREAK NOP ILLEGAL_IN: BREAK NOP PRIV_VIOLT: BREAK NOP * Siguiente bloque * Siguiente bloque * Bus error handler * Address error handler * Illegal instruction handler * Privilege violation handler .

Dicha memoria se podr´a entregar hasta el 17 de Noviembre a las 12:00 en formato electr´onico. Para solicitar una correcci´on basta con realizar correctamente la entrega del proyecto. 25 de Marzo y el 7 de Abril. CONVOCATORIA DE FEBRERO El plazo de entrega del proyecto terminar´a el d´ıa 12 de Noviembre de 2014 a las 21:00. A partir del 16 de Abril el sistema de entrega se configurar´a de tal forma que permita entregar u ´nicamente la memoria del proyecto. De estas correcciones. El examen del proyecto se realizar´ a el d´ıa 14 de Noviembre a las 19:00 en las aulas que se especificar´ an en su momento en la p´ agina Web del proyecto. Para solicitar una correcci´on basta con realizar correctamente la entrega del proyecto. Para solicitar una correcci´on basta con realizar correctamente la entrega del proyecto. Desde el 21 al 23 de Octubre y del 28 de Octubre al 11 de Noviembre se realizar´an correcciones de proyectos todos los d´ıas h´abiles a las 21:00. CONVOCATORIA DE JUNIO El plazo de entrega del proyecto terminar´a el d´ıa 15 de Abril de 2015 a las 21:00. Dicha memoria pr´actica se podr´a entregar hasta el 17 de Abril a las 18:00 en formato electr´onico. el alumno podr´a disponer de tres correcciones (en las fechas que el alumno estime conveniente).fi. Desde el 16 al 24 de Marzo. En este momento se realizar´a una correcci´on del proyecto para todos los grupos que lo hayan entregado y no se les haya corregido. De estas correcciones.datsi. Enunciado del proyecto: E/S mediante interrupciones 81 ´ NORMAS DE PRESENTACION Se recomienda a los alumnos que consulten peri´odicamente la p´agina Web del proyecto: http://www. La planificaci´on de las correcciones autom´aticas se realizar´a seg´ un el calendario que se especifica a continuaci´on: Se realizar´an tres correcciones los d´ıas 13. 24 y 27 de Octubre. La planificaci´on de las correcciones autom´aticas se realizar´a seg´ un el calendario que se especifica a continuaci´on: Se realizar´an tres correcciones los d´ıas 20. el alumno podr´a disponer de tres correcciones (en las fechas que el alumno estime conveniente). .upm. Para solicitar una correcci´on basta con realizar correctamente la entrega del proyecto. En este momento se realizar´a una correcci´on del proyecto para todos los grupos que lo hayan entregado y no se les haya corregido.es/docencia/Arquitectura_09/Proyecto_E_S En esta p´agina se publicar´an noticias relacionadas con este proyecto. el 26 y 27 de Marzo y desde el 8 al 14 de Abril se realizar´an correcciones de proyectos todos los d´ıas h´abiles a las 21:00.5. A partir del 13 de Noviembre el sistema de entrega se configurar´a de tal forma que permita entregar u ´nicamente la memoria del proyecto.

es 11–13 11–13 16–17 16–17 15–17 11:30– 13:30 15–17 aperez@fi. 4108 Dir.fi. En la tabla que aparece a continuaci´ on se muestra el horario de atenci´on personal a los alumnos para cuestiones relacionadas con esta pr´actica en periodo lectivo. En este momento se realizar´a una correcci´on del proyecto para todos los grupos que la hayan entregado y no se les haya corregido.upm.1: Horario de tutor´ıas. en la que deber´an figurar claramente el nombre y apellidos de los autores de la pr´actica. Listado comentado de las subrutinas en ensamblador.es Viernes Tabla 5.es. El 2 de Julio se configurar´a el sistema de entrega de tal forma que permita entregar u ´nicamente la memoria del proyecto. en formato DINA4. . El examen del proyecto se realizar´ a el mismo d´ıa que el examen final de la asignatura (2 de Julio) una vez finalizado el examen de teor´ıa. Dicha memoria deber´a contener los siguientes puntos: Diagrama de flujo o pseudoc´odigo y comentario de los algoritmos utilizados. Email Lunes Martes Mi´ercoles Jueves srodri@fi.upm. Santiago Rodr´ıguez D. CONVOCATORIA DE JULIO El plazo de entrega del proyecto terminar´a el d´ıa 1 de Julio de 2015 a las 21:00. Se recomienda a los alumnos que fuera de dicho periodo (mes de Julio).upm. Dicha memoria se podr´a entregar hasta el 6 de Julio a las 11:00 en formato electr´onico. 4107 Antonio P´ erez D. Los d´ıas 22 y 26 de Junio se realizar´an correcciones a las 21:00 para todos los alumnos que hayan realizado la entrega del proyecto correctamente.82 Proyecto de Entrada–Salida (2014–2015) El examen del proyecto se realizar´ a el d´ıa 16 de Abril en el horario de evaluaci´ on seg´ un la planificaci´ on que se publique en la p´ agina Web de la asignatura. No se atender´a ninguna duda fuera de este horario. establezcan una cita con el profesor al que desean consultar mediante correo electr´onico. ´ ENTREGA DE LA PRACTICA La entrega se compone de: 1. Una memoria. Las consultas por correo electr´onico se deber´an dirigir a la direcci´on pr ent sal 09@datsi. TUTOR´IAS DEL PROYECTO Las posibles preguntas relacionadas con la pr´actica se atender´an personalmente o por correo electr´onico.

s: Contendr´ a las subrutinas que componen la parte segunda de la pr´actica. matricula): 990999 .pdf: Es un fichero PDF que deber´a contener la memoria de la pr´actica. Observaciones finales y comentarios personales de esta pr´actica. n´ umero de matr´ıcula y DNI de los autores de la pr´actica. Adem´as. nombre. Para ejecutar este programa se deber´a teclear. Esta memoria se entregar´ a exclusivamente en formato electr´onico seg´ un se indica en el siguiente apartado. memoria. as´ı como consultar los resultados de la ejecuci´on de un conjunto de tests de pruebas utilizados por el corrector. Este fichero solo se entrega cuando se registra el grupo. La entrega de los ficheros que contienen la pr´actica. La pr´actica se realizar´a individualmente o en grupos de dos personas. Ser´a obligatorio entregar los siguientes ficheros: autores: Es un fichero ASCII que deber´a contener los apellidos. ´este pide la identificaci´ on del usuario. Tomaremos como identificaci´on de usuario el n´ umero de matr´ıcula de uno de los integrantes del grupo. Se utilizar´a un programa de entrega denominado “ent68000”. dir. apellido apellido. es int. desde el int´erprete de comandos de ”batman”. nombre. DNI.5. Este programa principal se utilizar´a para indagar sobre posibles errores que se puedan producir. FORMA DE ENTREGA DE LOS FICHEROS Sistema de entrega en batman. estimando asimismo el tiempo empleado en su realizaci´on. IMPORTANTE: Se recomienda al alumno que antes de realizar una entrega de la pr´actica ensamble el fichero es int. Enunciado del proyecto: E/S mediante interrupciones 83 Descripci´on del juego de ensayo (conjunto de casos de prueba) que el alumno haya dise˜ nado y utilizado para probar el correcto funcionamiento de la pr´actica.s. este fichero deber´a incluir un programa principal que se haya utilizado para la depuraci´on de la pr´actica. Cada l´ınea de este fichero contendr´ a los datos de uno de los autores de la pr´actica. se asegure de que no generan ning´ un error y ejecute la pr´actica con sus propios casos de prueba. 2. Al entrar en el programa. Dicho programa. la palabra “ent68000”. El programa mostrar´a el mensaje: Introduzca su identificador (Num. correo electr´ onico El n´ umero de matr´ıcula que se debe indicar en el fichero es el que asigna la secretar´ıa de la Facultad (por ejemplo 990999) y no el que se utiliza como identificador para abrir cuentas en el Centro de C´alculo (por ejemplo a990999). permite entregar los ficheros indicados anteriormente. de acuerdo al siguiente formato: No Matr´ıcula.

. Para confirmar que no se ha producido ning´ un error al introducir el ”password”se vuelve a pedir: Repita el password tecleado anteriormente: Si se ha producido alg´ un error se reintentar´ a establecer el password de nuevo. Despu´es de mostrar este mensaje el programa termina. 123433342.NO LO APUNTE . PEREZ PEREZ JESUS Si dicho alumno no aparece en las listas en poder del departamento o no ha introducido correctamente alguno de los datos. Si el comando se ha ejecutado con ´exito se mostrar´an los datos que ha registrado el sistema de cada uno de los integrantes del grupo de pr´acticas. q Abandonar. 990999).e.NO LO OLVIDE . >>>> A continuaci´on se explica cada una de las opciones del men´ u. 5. 2. Cancelar Entregas.84 Proyecto de Entrada–Salida (2014–2015) El usuario deber´a introducir el n´ umero de matr´ıcula de uno de los integrantes del grupo (p. Password: El usuario deber´a introducir una palabra clave (no se mostrar´a en pantalla). Noticias. 3. . Mandar Ficheros. se mostrar´a un mensaje de error. Si es la primera vez que el usuario entra en el sistema de entrega.NO LO DIVULGUE suponiendo que el grupo de pr´acticas est´e compuesto por un u ´nico alumno (Jes´ us P´erez o P´erez con DNI n. 123433342 y n´ umero de matr´ıcula 990999) y la informaci´on que aparece en el fichero autores es: 990999 . Consultar Resultados. Ayuda !!!! 6. el programa le invitar´ aa que introduzca una palabra clave (”password”) mostrando el siguiente mensaje: Se va a establecer password. A continuaci´ on se mostrar´a el siguiente men´ u: OPCIONES: 1. Bloquear la Entrega. Seguidamente aparecer´a el siguiente mensaje: SE HAN DADO DE ALTA LOS SIGUIENTES ALUMNOS: 990999 123433342 PEREZ PEREZ JESUS Se ha asignado password al usuario A990999. 4. 7. Fichero Adicional.

.OK. Nombre del fichero (ENTER para salida por pantalla) ?? result. No se puede abrir el fichero es int. La realizaci´on de una entrega anula todas las entregas anteriores pendientes de correcci´on.. Si alguno de los ficheros no se encuentra.s . El programa pide el nombre de fichero en el que se copiar´an los resultados de la ejecuci´on del conjunto de tests de pruebas que componen el corrector. Si se desea realizar una nueva entrega se volver´ a a teclear el comando. Se mostrar´a el siguiente mensaje: La salida ser´ a redirigida a un fichero.txt .5.s . Por ejemplo: MANDANDO EL FICHERO es int. En el caso de que se genere un error en la entrega de los ficheros. El servidor de entregas intenta asegurar que cada uno de los ficheros tiene el formato correcto. Si dicha entrega es err´ onea. El programa pedir´a un nombre de fichero donde escribir los datos generados. En nuestro caso esto se traduce en que el fichero se va a poder ensamblar cuando se realice la correcci´on. el programa lo comunicar´ a al usuario. tambi´en se anula esta entrega. Si el comando de ensamblado no ha finalizado con ´exito se mostrar´a un mensaje: EL FICHERO es int. el programa de entrega termina la ejecuci´on del programa y se muestra el ”prompt”del sistema operativo. Si se han realizado varias entregas se cancelar´an todas las entregas. que deber´an estar en el directorio de trabajo del usuario.s NO TIENE EL FORMATO CORRECTO ENTREGA NO REALIZADA En este caso el alumno deber´a comprobar que se puede ensamblar correctamente el fichero y comprobar que contiene todas y cada una de las etiquetas que es obligatorio que aparezcan en dicho fichero. El grupo de pr´acticas ser´a eliminado de la lista de proyectos pendientes de corregir.. CONSULTAR RESULTADOS Esta opci´on permite consultar los resultados de la correcci´on de la entrega de una proyecto.. CANCELAR ENTREGAS Esta opci´on permite cancelar todas las entregas realizadas desde la u ´ltima correcci´on. Enunciado del proyecto: E/S mediante interrupciones 85 MANDAR FICHEROS Esta opci´on permite mandar los ficheros de una pr´actica.s Entrega abortada. Si el comando se ejecuta correctamente se mostrar´an los siguientes mensajes: MANDANDO EL FICHERO es int.

en general. NOTICIAS Esta opci´on es puramente informativa. Debe ser el propio alumno el que construya su conjunto de pruebas que le permita comprobar que la pr´actica funciona correctamente.txt En este caso se grabar´a la informaci´on relativa a la asignatura en el fichero noticias. La salida ser´ a redirigida a un fichero. puede bloquear la entrega para mayor seguridad. los resultados ser´an mostrados por pantalla. AYUDA Esta opci´on mostrar´a en pantalla una breve descripci´on de cada una de las opciones del programa de entrega.txt. Esta opci´on se incluye para permitir la correcci´on autom´atica de los proyectos. Para identificar dicha instrucci´on debe acceder al fichero del programa con extensi´on . Nombre del fichero (ENTER para salida por pantalla) ?? noticias. Direcci´on de memoria en la que se ha escrito el dato. Su formato se compone de tres columnas de n´ umeros hexadecimales: Direcci´on de memoria que ocupa la instrucci´on que ha provocado la escritura. Si se ejecuta esta opci´on no se podr´a volver a realizar una nueva entrega de los ficheros asociados a la pr´actica. . FICHERO ADICIONAL Esta opci´on recupera un fichero binario que es complementario al fichero de consultas. El programa pide el nombre de fichero en el que se copiar´an las noticias. la informaci´on ser´a mostrada por pantalla. Esta es la raz´on por la que los casos de prueba utilizados para la correcci´on de la pr´actica no se ponen a disposici´on del alumnado. Estas trazas permiten conocer qu´e dato se escribe en una posici´on de memoria y desde qu´e instrucci´on.txt. Es un fichero comprimido en formato ZIP que contiene el log de las escrituras en memoria de las pruebas que han fallado. No significa que se vaya a proporcionar ayuda para la realizaci´on de la pr´actica. Si el comando se ejecuta satisfactoriamente se mostrar´a el mensaje: ENTREGA BLOQUEADA.txt) no debe existir en el disco. BLOQUEO DE LA ENTREGA Si el usuario se compromete a no entregar m´as veces el proyecto. Si como respuesta al mensaje se teclea ENTER.86 Proyecto de Entrada–Salida (2014–2015) En este caso se grabar´an los resultados de las pruebas en el fichero result. El nombre del fichero que se proporciona al programa (result. noticias de inter´es de la asignatura asociada a la pr´actica. Permite notificar al alumno modificaciones en la especificaci´on de la pr´actica o. El alumno no debe utilizar este programa para depurar su pr´actica. Si como respuesta al mensaje se teclea ENTER.lis.

Dependiendo del n´ umero de d´ıgitos hexadecimales que aparezcan en esta columna el dato sera 1 byte (dos d´ıgitos). Enunciado del proyecto: E/S mediante interrupciones 87 Datos que se ha escrito en la direcci´on anterior. una palabra (cuatro d´ıgitos) o una doble palabra (ocho d´ıgitos). La URL en la que se encuentra es http://www. El formato de estos ficheros es el mismo que el del fichero traza.upm. ´ NINGUN ´ PROYECTO QUE NO SE ATENNOTA: NO SE CORREGIRA ´ POR LO TANTO COMO NO GA A ESTAS NORMAS Y SE CONSIDERARA PRESENTADO.log y est´a descrito en el cap´ıtulo 4.es/Practicas . ABANDONAR Termina la ejecuci´on del programa de entrega. Si se realiza con ´exito se mostrar´a el mensaje: Cerrando la conexion y a continuaci´on aparecer´a el ”prompt”del sistema operativo. PROCEDIMIENTO DE ENTREGA V´IA WEB Se ha desarrollado una aplicaci´on Web que permite realizar las mismas operaciones que la aplicaci´on descrita en el apartado anterior.fi.datsi.5.

88 Proyecto de Entrada–Salida (2014–2015) .

Adem´as del sistema operativo Linux se debe tener instalado el sistema de ventanas X y el entorno Tcl/Tk.Ap´ endice A Instalaci´ on del entorno de la pr´ actica en un computador con sistema operativo Linux El entorno de la pr´actica compuesto por el ensamblador 68kasm y el emulador bsvc.tar.1+_Estatica.fi. por lo que se recomienda intentar esta instalaci´on antes de compilar los fuentes de la distribuci´on.1. Obtenci´ on del entorno La distribuci´on de versiones compiladas para plataformas Linux se realiza conect´andose al URL http://www. A.1. Instalaci´ on en Linux La versi´on que se proporciona se ha probado en algunas distribuciones de Linux. se puede instalar en un computador personal con un sistema operativo Linux.1. Instalaci´ on del paquete Se puede instalar siguiendo los pasos siguientes: Obtenga el fichero con la distribuci´on de bsvc para Linux ya compilada: http://www.es/docencia/Arquitectura_09/Proyecto_E_S/bsvc-2.fi.1. El entorno se ha compilado para ser instalado en el directorio /usr/local. Inst´alelo utilizando la utilidad tar como administrador de sistema.datsi.es/docencia/Arquitectura_09/Proyecto_E_S/ A.upm.datsi.upm. A.2. para ello sit´ uese en la ra´ız del sistema de ficheros: .gz y c´opiela en un directorio temporal (/tmp).

la documentaci´on y los ejemplos se encuentran en /usr/local/bsvc.gz.1-src.1 pero. Si tiene el fichero bsvc-2.7.3.1.profile o . Para compilar los fuentes se necesita el compilador de C++ gcc 2.tar.tar. A. Para ello.90 Proyecto de Entrada–Salida (2014–2015) cd / umask 22 sudo tar zxvf /tmp/bsvc-2.2 o superior y para ejecutarlo tcl 7. se debe incorporar este directorio a dicha variable a˜ nadiendo la siguiente l´ınea al final del fichero . teclee: .7. no podr´a ejecutar el simulador. Los programas ejecutables. Compilaci´ on de bsvc en Linux En esta secci´on se describe el procedimiento para instalar el entorno a partir de los ficheros fuente. El procedimiento que se describe se ha verificado con la versi´ on de gcc 2.1-src.gz en un disquete con formato MS-DOS ins´ertelo y c´opielo en un directorio de trabajo (por ejemplo /tmp). Instalaci´ on del paquete Se puede instalar siguiendo los pasos siguientes: Entre en el computador Linux como administrador (root).gz Aseg´ urese de que el directorio /usr/local/bsvc/bin est´a en la variable PATH.2.2 o con´ectese a la Facultad y realice la pr´actica en batman seg´ un se indica en la secci´on A.tar.2. compruebe que los ejecutables est´an instalados en el directorio /usr/local/bsvc/bin y que tienen permisos de ejecuci´on.1. Si no es as´ı. Si no se notifica ning´ un error. A. en este caso.6 y tk 4. el fichero se llama bsvc-2. Si utiliza el int´erprete de comandos bash. Si se produce alg´ un error en la instalaci´on o no puede ejecutar el programa siga las indicaciones de la secci´on A. En la secci´on de Anuncios de la p´agina del proyecto puede encontrar soluciones a los problemas m´as habituales. al ejecutar el programa bsvc aparece el error: /usr/local/bsvc/bin/bsvc: 7: exec: wish: not found Inst´alelas correctamente y el problema desaparecer´a.2. Obtenci´ on del entorno Siga lo indicado en la secci´on A. ya que el sistema de ficheros MS-DOS habr´a acortado el nombre.1.bashrc de la ra´ız de la cuenta desde la que se desee ejecutar bsvc: export PATH=$PATH:/usr/local/bsvc/bin Abra una nueva sesi´on y ejecute los comandos bsvc y 68kasm. el entorno de pr´acticas queda instalado. Adem´as debe tener instaladas las versiones correctas de TCL y TK.1+_Estatica.2. Si no funciona.2. A.1 y se ejecuta correctamente con tcl 7.5 y tk 4.2. Si no las tiene correctamente instaladas.

1): cd bsvc-2. debe estar en el path para que bsvc se ejecute correctamente. Conexi´ on remota a batman Si no ha conseguido instalar el simulador en su computador personal.A.gz Sit´ uese en el directorio que se acaba de crear (bsvc-2. El procedimiento de instalaci´on es sencillo y lo u ´nico a tener en cuenta es que. Para conectarse a batman arranque el servidor Xming y a continuaci´ on con´ectese a batman utilizando putty. instalaci´on y comprobaci´on del entorno. .gz Sit´ uese en el directorio de trabajo y descomprima el fichero: cd /tmp tar zxvf bsvc-2.net/projects/xming/ Inst´ alelo siguiendo las instrucciones del proceso de instalaci´on.gz /tmp/bsvc-2.uk/~sgtatham/putty/ Esta aplicaci´on no necesita instalaci´on. si bien el directorio de instalaci´on (INSTALL_DIR) puede ser cualquiera.tar. A.doc.1-src.org.3. Instalaci´ on en Linux 91 mcopy a:/bsvc-2~1. pero debe asegurarse de que en la pesta˜ na de configuraci´on de la conexi´on SSH/X11 debe estar marcada la opci´on Enable X11 forwarding. puede conectarse al computador batman del centro de c´alculo de la Facultad y ejecutar el simulador de forma remota.chiark.1 En este directorio existe un fichero llamado Unix. donde se describe el procedimiento de compilaci´on.1-src. Se puede obtener el cliente ssh putty desde http://www.tar.greenend. Para poder ejecutarlo debe instalarse un servidor X y un cliente ssh en su computador que ejecuta Windows 7 o Windows XP: Se puede obtener el servidor X de libre distribuci´on Xming desde http://sourceforge.

92 Proyecto de Entrada–Salida (2014–2015) .

De esta forma si se produce cualquiera de las excepciones manejadas se detiene el simulador y el PC se˜ nalar´ a a la instrucci´on siguiente a BREAK del manejador correspondiente. Si el programa se ha ensamblado correctamente se suele producir cuando se pretende ejecutar datos. El programa de la figura B. El manejador de instrucci´on ilegal se ha instalado tambi´en en las entradas de la tabla de vectores (v´ease la figura 1. Cuando se desarrolla c´odigo para un computador sin sistema operativo (“computador desnudo”) estas excepciones no se manejan a menos que lo haga el propio programa.1 instala estos manejadores y genera una excepci´on de error de direcci´on.5) correspondientes a las instrucciones para los coprocesadores. Illegal instruction: se produce cuando se intenta ejecutar un c´odigo de instrucci´on inexistente. Una buena pr´actica consiste en instalar manejadores para estas excepciones. .Ap´ endice B Depuraci´ on de fallos que se manifiesten como excepciones en el procesador MC68000 Una de las funciones del sistema operativo es capturar las excepciones que se producen debido al mal funcionamiento de los programas. ya que el computador simulado carece de ellos. Los manejadores se limitan a una instrucci´on BREAK que detiene el procesador simulado y una instrucci´on NOP cuyo prop´osito es servir de separador. Privilege violation: se produce cuando se intenta ejecutar en modo usuario una instrucci´on privilegiada. Address error: se produce cuando se utiliza una direcci´on impar para acceder a una palabra o doble palabra (error de alineamiento). Las excepciones m´as frecuentes se pueden producir con un procesador de la familia M68000 cuando se desarrolla c´odigo para un computador desnudo son: Bus error: se produce cuando se direcciona fuera del rango de la memoria f´ısica disponible.

Identificaci´ on la instrucci´ on que provoc´ o la excepci´ on En el programa anterior resulta muy f´acil identificar la instrucci´on que provoc´o la excepci´on. sin embargo si se trata de una excepci´on no se puede proceder a la ejecuci´on de la instrucci´on.L MOVE. .L MOVE. el procesador espera a que se complete la instrucci´on para reconocer una interrupci´on.L #BUS_ERROR. En este marco de pila se almacena el PC que apuntar´ a a la instrucci´on que provoc´o la excepci´on.W EVEN.44 Install Install Install Install Install Install bus error handler address error handler illegal instruction handler privilege violation handler illegal instruction handler illegal instruction handler LEA ADDQ.32 #ILLEGAL_IN. El caso m´as claro es quiz´as el de una instrucci´on ilegal.8 #ADDRESS_ER.L MOVE.12 #ILLEGAL_IN. El porqu´e de esta diferencia es clara.L CLR.94 START EVEN Proyecto de Entrada–Salida (2014–2015) ORG DC. El formato del marco de pila para todas las excepciones excepto los errores de bus y direcci´on se muestra en la figura B.L DC.L MOVE.L $0 $8000 START Stack pointer value after a reset Program counter value after a reset ORG $2000 Start at location 2000 Hex MOVE.16 #PRIV_VIOLT.A0 (A0) Generate an address error exception ORG DS. Si se tratase de una interrupci´on el PC apuntar´ıa a la siguiente instrucci´on.A0 #1. es obvio que el procesador no puede ejecutarla.40 #ILLEGAL_IN.1: Programa con c´odigo para el manejo de excepciones B. La soluci´on es bastante f´acil: basta con indagar en el marco de pila que cre´o la secuencia de procesamiento de la excepci´on.2.L MOVE.1.W $3000 1 Reserve one word for even BUS_ERROR: BREAK NOP ADDRESS_ER: BREAK NOP ILLEGAL_IN: BREAK NOP PRIV_VIOLT: BREAK NOP Bus error handler Address error handler Illegal instruction handler Privilege violation handler Figura B. Sin embargo en un programa m´as complejo esto no resulta tan obvio.

En cualquier caso. Lo que ha ocurrido es que se ha producido una excepci´on de error de direcci´on. La zona de traza nos muestra un mensaje diciendo que la ejecuci´on del programa se ha detenido al alcanzar una instrucci´on BREAK. Si se echa un vistazo a la ventana de listado de programa (figura B. Si ejecutamos dicho programa obtendremos los datos en la ventana de manejo del simulador que se muestran en la figura B. Para obtener informaci´on de d´onde se ha producido dicha excepci´on.5). entre otras cosas. se puede indagar en el .3: Marco de pila de procesamiento de las excepciones de bus y address error En este marco de pila se almacena mucha m´as informaci´on para identificar claramente cuando se produjo la excepci´on.B. la informaci´on restante es suficiente para identificar el problema.2.3. SSP Additional word Access address +2 +4 Instruction register +6 Status register +8 Program counter +10 +12 Figura B. T´engase en cuenta que la ejecuci´on de una instrucci´on puede suponer varios accesos a memoria. Ejemplo Para ilustrar el procedimiento utilizaremos el programa de la figura B. Depuraci´ on de fallos que se manifiesten como excepciones en el procesador MC68000 95 Status register Program counter SSP +2 +4 Figura B.1. la direcci´on que provoc´o la excepci´on y una palabra adicional donde se indica. si el ciclo de bus era de lectura o escritura. se observa que el PC apunta a la instrucci´on siguiente de la instrucci´on BREAK del manejador de la excepci´on de error de direcci´on (ADDRESS_ER). Desafortunadamente.2: Marco de pila de procesamiento de excepci´on El formato del marco de pila para las excepciones de errores de bus y direcci´ on se muestra en la figura B. As´ı se salva el PC y el SR como en el caso anterior pero adem´as el contenido del registro de instrucci´on. se ha ejecutado el manejador correspondiente y se ha alcanzado la instrucci´on BREAK que contiene dicho manejador. el simulador falla y el campo correspondiente a la direcci´on que provoc´o la excepci´on siempre est´a a cero.4. B.

Instruction register (42 50): Contiene el c´odigo de operaci´on de la instrucci´on que provoc´o la excepci´on (CLR. En la ventana de manejo del simulador se muestra el contenido del puntero de pila de supervisor A7’. ya que el contador de programa se incrementa durante la ejecuci´on de instrucciones.4: Ventana del simulador correspondiente marco de pila. En este caso es obvio . con las interrupciones inhibidas y el flag Z a 1. El contenido de la posici´on apuntada por A7’= 007ff2 y las 14 siguientes posiciones de memoria se corresponden con el marco de pila de procesamiento de la excepci´on de error de direcci´on que se muestra en la figura B. Por lo tanto. puesto que se conoce el contenido de los registros. Access address (00 00 00 00): Un fallo en el simulador provoca que sea siempre cero. se puede mostrar el correspondiente marco de pila mediante la ventana de listado de posiciones de memoria.6.3. n´otese que el hecho de que la direcci´on accedida est´e siempre a cero no impide determinarla. Por u ´ltimo. Estos datos son m´as que suficientes para identificar la instrucci´on que provoc´o la excepci´on y a partir de aqu´ı identificar el fallo del programa.W (A0)) Status register (27 04): Indica que se encontraba en modo supervisor. si estuviese a 0 se tratar´ıa de un ciclo de escritura. Program counter (00 00 20 3a): Apunta a la instrucci´on que provoc´o la excepci´on m´as dos.96 Proyecto de Entrada–Salida (2014–2015) Figura B. Additional word (00 09): El bit 5 a 1 indica que se abort´o un ciclo de lectura. El resultado se refleja en la figura B.

B. Depuraci´ on de fallos que se manifiesten como excepciones en el procesador MC68000 97 Figura B.6: Contenido del marco de pila para la excepci´on Address Error determinar que esa direcci´on es 3001 pero en otros casos con un modo de direccionamiento m´ as complejo se necesitar´a trabajo extra.5: Ventana de listado del programa Figura B. .