# Practica 13
## Paso 1: Habilitación de interrupciones y modo de funcionamiento
### Cuestión 1. Código de inicio correcto.
```sh
#############################################################
## Starting code ##
#############################################################
.text
.globl __start
__start:
la $t0, 0xffff0000
li $t1, 0x2
sb $t1, 0($t0)
li $t1, 0x101
mtc0 $t1, $12
```
### Cuestión 2. ¿Por qué se producen los mensajes de error?
Porque la dirección de retorno es la 0x00000000 ($k0 nunca se llega a modificar)
## Paso 2: Obtención de la dirección de retorno al programa de usuario
### Cuestión 3. Copia aquí la línea de código que escribe en $k0 la dirección de retorno
```sh
#############################################################
## CÓDIGO DEL MANEJADOR ##
#############################################################
.ktext 0x80000080
## Preserva el contexto del programa de usuario
## (nada de momento)
## Identifica y trata excepciones
## (nada de momento)
## Restaura el contexto
## (nada de momento)
## Restaura el modo usuario y vuelve al programa
## (falta algo)
##----
mfc0 $k0, $14 # $k0 <- EPC
##---
rfe
jr $k0
```
## Paso 3: Tratamiento provisional de la interrupción de teclado

### Cuestión 4. ¿Por qué se escriben tantos asteriscos al pulsar una tecla?
Porque no hemos cancelado la interupción
## Paso 4: Cancelación de la interrupción
### Cuestión 5. Líneas de código que cancelan la interrupción.

### Cuestión 6. ¿Por qué acaba el programa de usuario antes de lo esperado?
Porque el manegador modifica $t0 a 0xffff0000 que es un número negatvio y sale de del doble bule de bules.asm
## Paso 5: Gestión del contexto
### Cuestión 7. Modificaciones:
#### En el segmento de datos del manejador:
#### En el código de inicio del sistema:
#### Al principio del código del manejador:
#### Al final del código del manejador:
## Paso 6: Habilitación de las interrupciones del reloj
### Cuestión 8. Archivo teclado-y-reloj.handler.
#### En el código de inicio: instrucciones que habilitan la interrupción del reloj
#### En el código de inicio: instrucciones que habilitan la interrupción del reloj
### Cuestión 9. Explica por qué la consola mostrará asteriscos sin parar.
## Paso 7: Análisis de la causa de excepción
### Cuestión 10. Archivo teclado-y-reloj.handler
#### Código a partir de retexc:
#### Tratamiento de la interrupción del teclado
#### Tratamiento del reloj.
#### Instrucciones que leen y aíslan el código de causa de excepción
#### Instrucciones que analizan los bits IP0 e IP2 de la palabra de estado