You are on page 1of 38

Leccin 7

Algortmez: la periferia

7.1. Propsito el uso de un controlador de interrupciones externo


a la UCP. Y nos detendremos en la programacin
Si en la Leccin anterior hemos descrito con en ensamblador de rutinas para la consulta y el
bastante detalle la UCP y el ensamblador de Algo- servicio de interrupciones.
rtmez a fin concretar los conceptos sobre repre- Presentaremos tambin un controlador de dis-
sentacin, procesamiento, repertorios de instruc- quetes, con el que ilustraremos cmo se pueden
ciones y modos de direccionamiento que haba- programar las transferencias de bloques entre un
mos explicado en las Lecciones 3 y 4, en sta trata- disco y la MP, y que ser un componente necesario
remos de concretar, siguiendo con Algortmez, al- para los sistemas operativos de las Lecciones 18
gunos de los modos de comunicacin de la UCP y a 20.
la MP con la periferia estudiados en la Leccin 5. Despus veremos un sencillo controlador para
Empezaremos con un asunto ya tratado en Sm- una pantalla grfica que puede funcionar tanto en
plez: la comunicacin entre los registros de la modo de texto como en modo grfico, y que,
UCP y los puertos de entrada/salida (Aparta- aunque tiene una resolucin pequea (320240
do 1.12). Aunque aqu no introduciremos nada pixels) y un nmero reducido de colores (16), per-
nuevo (la nica diferencia con Smplez, como ya mite captar las ideas esenciales de la programa-
hemos adelantado en los Apartados 4.7 y 5.4, es cin de grficos (incluyendo imgenes animadas)
que en Algortmez los puertos se direccionan en en bajo nivel.
un espacio independiente del de la MP) aprove- Terminaremos describiendo una unidad de ges-
charemos para insistir con un ejemplo sobre las tin de memoria para Algortmez. Por coherencia
transferencias con perifricos de caracteres me- temtica, ste es el lugar adecuado para hacerlo,
diante el procedimiento de espera activa. pero como no la utilizaremos hasta la Leccin 20
Generalizando el esquema trivial de Smplez+i4 (aunque tambin servir como elemento de refe-
(Apartado 2.8), analizaremos varias posibilidades rencia para introducir el concepto de memoria vir-
para la atencin de las interrupciones mediante tual, en el Apartado 15.8), su estudio puede pos-
combinaciones de hardware y software, entre ellas tergarse hasta ese momento.

249
250 Leccin 7. Algortmez: la periferia

7.2. Comunicacin con los puertos Veamos algunos ejemplos de programacin de


operaciones de entrada/salida. Tomaremos como
A diferencia de Smplez y de Smplez+i4, en los referencia dos perifricos, un teclado y una panta-
que los puertos de entrada/salida comparten con lla de texto, cuyos puertos tienen las direcciones 0,
la MP el espacio de direccionamiento (y, por tan- 1, 2 y 3 (0 y 2 para estado, 1 y 3 para datos). De
to, las transferencias entre los registros de la UCP momento seguiremos con el modelo de pantalla ya
y los puertos se realizan mediante instrucciones usado con Smplez (Apartado 1.2). De los puertos
LD y ST), en Algortmez existen instruccio- de estado nicamente nos interesa saber para es-
nes especficas (IN y OUT), porque el espacio tos primeros ejemplos que el bit menos significa-
de direccionamiento de la entrada/salida es inde- tivo (al que llamaremos PRTEC en el puerto 0 y
pendiente del de la MP. Concretamente, pueden PRPAN en el 2) es el que indica si el perifrico
direccionarse 256 puertos con una direccin de est preparado (bit con el valor 1) o no (bit con el
ocho bits, comprendida entre D0 y D255 (Apar- valor 0) para una transferencia.
tado 6.2). Cada puerto es un registro de ocho bits
incluido en el controlador correspondiente.
Iniciacin de los perifricos
Instrucciones de entrada/salida
Las instrucciones IN y OUT pueden usar-
Las dos instrucciones de entrada/salida son del se para hacer lo mismo que en Smplez (Aparta-
tipo 1 (Tabla 6.3), y, por tanto, tienen dos bytes. En do 1.12), aunque all, al considerar un esquema
el segundo byte se consideran dos campos, CRX con espacio de direccionamiento compartido, uti-
y CR (Figura 6.5), que direccionan a dos regis- lizbamos las instrucciones LD y ST sobre las
tros de la ML, RX y R. En las dems instruccio- direcciones asignadas a los perifricos. Si un pro-
nes del tipo 1 RX no interviene para nada, pero en grama ha de leer del teclado, pondr en PRTEC el
IN y OUT RX debe contener (en sus ocho bits valor inicial 0 mediante una instruccin OUT
menos significativos) la direccin del puerto. En el sobre el puerto 0, y si va a escribir en la pantalla
caso de IN el byte que hay ese puerto se trans- pondr 1 en PRPAN mediante OUT sobre el
fiere a los ocho bits menos significativos de R, y puerto 2:
en el caso de OUT los ocho bits menos significa-
tivos de R se transfieren al puerto direccionado.
----
En ensamblador se escribir, por ejemplo,
LD.B .0, #0 ; se inician
IN .0,[.1] para efectuar la operacin de en- LD.B .1, #1 ; los registros
trada sobre R0 (en sus ocho bits de menor peso, LD.B .2, #2 ; R0 a R3 con las
dejando intactos los otros ocho) del puerto direc- LD.B .3, #3 ; direcciones de
cionado por R1 (en sus ocho bits de menor peso), y ; los puertos 0 a 3
el mismo convenio se deber seguir para la salida: CLR .4 ; se inicia PRTEC
OUT .4,[.7] escribe el byte menos significati- OUT .4, [.0]; a cero
LD.B .4, #1 ; se inicia PRPAN
vo del registro R4 en el puerto cuya direccin est
OUT .4, [.2]; a uno (y los
en el byte menos significativo de R7. ; dems bits del
Por tanto, para programar la transferencia en- ; puerto 2 a cero)
tre un puerto de entrada/salida y un registro de la ----
ML es preciso poner previamente la direccin del
puerto en otro registro de la ML1 . puerto indirecto a registro. En otras UCP se hace un di-
reccionamiento directo, incluyendo en la misma instruccin
1
Es decir, se trata de un modo de direccionamiento de directamente la direccin del puerto.
7.2. Comunicacin con los puertos 251

Lectura y escritura de caracteres aislados MODULE LEE_ESC_CAR


ORG H'FD00
Para leer un carcter mediante espera activa LEECAR IN .4, [.0] ;comprueba
(procedimiento que ya hemos explicado en Sm- AND .4, #1 ; estado
plez, Apartado 1.12) podemos escribir la siguiente BZ LEECAR ; teclado y
secuencia de instrucciones (en la que R4 se utiliza IN .5, [.1] ; lee
para probar el estado de PRTEC y R5 para intro- CALL ESCCAR
ducir el dato en la UCP): RET
ESCCAR IN .4, [.2] ;comprueba
---- AND .4, #1 ; estado
LEER IN .4, [.0] BZ ESCCAR ; pantalla y
AND .4, #1 OUT .5, [.3] ; escribe
BZ LEER RET
IN .5, [.1] END
----
A partir de la instruccin etiquetada LEER Programa 7.1. Rutinas para leer y escribir caracteres.
el programa comprueba el estado del bit PRTEC.
Mientras no se pulse una tecla el bit estar a cero,
por lo que se bifurcar a LEER; cuando se pulse, ROM. Hemos puesto ORG H'FD00 suponiendo
el controlador pondr en el puerto 1 la codifica- que sa es la direccin a partir de la cual se gra-
cin del carcter y en el bit PRTEC un 1, y la bar (aunque esta informacin es innecesaria para
UCP pasar a ejecutar IN .5, [.1]. El carcter el ensamblador, puesto que el programa es inde-
enviado no se escribe automticamente en la pan- pendiente de su ubicacin). Como est permanen-
talla, por lo que es conveniente poner inmediata- temente en la MP, no es necesario montarla con
mente despus de la instruccin de entrada otras el programa que la llama: ste puede, simplemen-
instrucciones que lo hagan (comprobando previa- te, hacer las llamadas a las direcciones absolutas
mente que PRPAN est a uno): HFD00 y HFD0F (direccin correspondiente a
ESCR IN .4, [.2] ESCCAR en el programa fuente). As, si en un pro-
AND .4, #1 grama se necesita leer un carcter del teclado, se
BZ ESCR pondr la instruccin CALL /H'FD00; cuando se
OUT .5, [.3] pulse una tecla, la codificacin del carcter apare-
De este modo, con el eco se tiene una com- cer cargada en los ocho bits de menor peso de R5,
probacin de que no ha habido error en la transmi- y escrito en la pantalla. Anlogamente, para escri-
sin (si aparece escrito un carcter diferente al de bir un carcter, pondremos su codificacin en R5
la tecla pulsada es que se ha producido error). y utilizaremos la instruccin CALL /H'FD0F.
Las anteriores instrucciones pueden englobarse Observe que este programa que llama a la rutina
en dos subprogramas: LEECAR para leer un carc- tiene que estar ejecutndose en modo supervisor,
ter, y ESCCAR (que puede utilizarse independiente- porque la rutina hace uso de instrucciones privi-
mente, pero tambin es llamado por LEECAR) para legiadas. Normalmente, ser un programa del sis-
escribirlo. El resultado (siguiendo con el convenio tema operativo. Los programas de usuario (que se
de que previamente se han puesto las direcciones ejecutan en modo usuario) piden las operaciones
de los puertos 0 a 3 en los registros R0 a R3) es el de entrada y salida indirectamente, a travs del sis-
Programa 7.1. tema operativo, como veremos en las Lecciones 17
ste es el tipo de rutina bsica que, nor- y siguientes. La misma observacin es aplicable al
malmente, estar grabada en la zona de memoria resto de programas de esta Leccin.
252 Leccin 7. Algortmez: la periferia

MODULE LEELIN
EXPORT LEELIN_ENT
;Este subprograma lee sucesivamente caracteres introducidos por el
; teclado, hace "eco" y los introduce en una zona ("buffer") de
; la MP de 80 caracteres. La lectura termina al llegar a 80
; caracteres, o al teclear "ret" (codificacin ASCII: H'0D).
;
;Entrada: debe llamarse con:
; * direcciones de puertos de estado y datos del teclado y
; de la pantalla en R0, R1, R2 y R3, respectivamente
; * bit PRTEC del teclado a "0" y bit PRPAN de la pantalla a "1"
; * direccin de comienzo (ms baja) de la zona de MP en R6
;Salida: caracteres almacenados en la zona
;
;Registros afectados: R4 (para comprobacin estado), R5 (para almacenamiento
; temporal de caracteres) y R6 (para direccionar la zona)
; (ver Ejercicio 1)
;Variable local: DIRFIN (direccin final de la zona)
;
LEECAR EQU H'FD00 ;puntos de entrada de las rutinas de
ESCCAR EQU H'FD0F ; lectura y escritura de caracteres
LEELIN_ENT ADD .6, #80 ;calcula direccin final
ST .6, DIRFIN ; y la pone en DIRFIN
SUB .6, #80 ;restituye direccin en R6
BUCLE CMP .6, DIRFIN ;compara (R6) con (DIRFIN)
BZ LLENO ;si se ha llenado, fin
CALL /LEECAR ;lee carcter (con "eco")
ST.B .5, [.6++] ; lo almacena en direccin apuntada
; por R6 e incrementa ste
CMP.B .5, #H'0D ;si es "ret",
BZ FIN ; fin
BR BUCLE ;vuelve (con (R6) ya incrementado)
LLENO LD.B .5, #H'0D ;#H'0D: "CR", o "ret"
CALL /ESCCAR ; (cursor a principio de lnea)
FIN LD.B .5, #H'0A ;#H'0A: "line feed"
CALL /ESCCAR ; (salta a lnea siguiente)
RET
DIRFIN RES 1
END

Programa 7.2 Subprograma para leer una lnea de ochenta caracteres.

Subprograma para leer una lnea ta bytes de la MP cuya direccin se le pasa como
argumento por el registro R6.
Como ltimo ejemplo de subprograma de entra- Otros detalles se explican en los comentarios.
da/salida con espera activa, el Programa 7.2 sirve Observe que LEECAR y ESCCAR estn definidos co-
para leer una sucesin de hasta ochenta caracteres mo direcciones absolutas (con sendas EQU), con
del teclado y almacenarlos en una zona de ochen- los valores fijados en el ejemplo anterior.
7.4. Consulta por software 253

7.3. Esquemas de interrupciones la direccin leda en el CP) a la rutina de servicio.


Por ejemplo, si era el perifrico 1, su controlador
Ilustraremos con Algortmez algunas variantes habr puesto 2 en el bus, y la UCP introducir
de las muchas que, como decamos en el Apar- en CP el contenido de la palabra de direccin 2.
tado 3.6, pueden encontrarse en los esquemas de Es, por tanto, un esquema con consulta por hard-
interrupciones de los ordenadores. ware.
En el Apartado 6.14 hemos detallado el proceso Con cualquiera de los dos esquemas anterio-
que realiza la UCP cuando aparece una interrup- res, la gestin de prioridades para permitir el ani-
cin, sea externa o interna. Decamos al final de damiento de interrupciones (Apartado 3.6) tendra
ese Apartado que el tratamiento de las interrup- que hacerse mediante software. El tercer esque-
ciones de los perifricos depende del hardware ex- ma consiste en introducir un controlador de in-
terno a la UCP. Estudiaremos tres esquemas: terrupciones externo.
El hardware mnimo no identifica en absolu-
to al perifrico. Se limita, al recibir de la UCP la 7.4. Consulta por software
seal de reconocimiento, o acuerdo de inte-
rrupcin, a poner sobre el bus A la direccin de De los tres esquemas, el primero es el que ms
un vector comn, que fijaremos como 266 (re- software requiere (porque es el que menos hard-
cuerde la Tabla 6.10). Por tanto, la UCP seguir ware tiene). Veamos primero las rutinas necesarias
ejecutando instrucciones a partir de la direccin para ese esquema, y luego comentaremos los otros
que previamente se haya puesto en la palabra de dos casos.
direccin 266 (bytes de direcciones 266 y 267).
En esa direccin debe estar cargada una rutina
de consulta de interrupciones, que identifica al Rutina de consulta de interrupciones
perifrico. Para ello, explora (mediante instruccio- La funcin de la rutina de consulta de interrup-
nes IN sobre los puertos de estado) los perifricos, ciones, a la que en adelante llamaremos RCI, es
y cuando encuentra al causante de la interrupcin averiguar la causa de la interrupcin (una de las
bifurca a su rutina de servicio (RS), cuya direc- 128 externas) y pasar control a la RS correspon-
cin estar puesta previamente en su vector de in- diente, adems de salvaguardar y restaurar los re-
terrupcin. En el siguiente Apartado veremos c- gistros que utilice, y de permitir interrupciones al
mo puede programarse esa rutina. (En Smplez+i4 final (recuerde que la UCP inhibe automticamen-
tambin hacamos una consulta por software, pe- te las interrupciones en el momento en que pasa a
ro tan sencilla que no merece el nombre de ru- atender a una).
tina: como slo hay dos causas de interrupcin, Concretando un poco ms, las operaciones a
basta comprobar si ha sido una de ellas). realizar por la RCI son las indicadas en la Figu-
En el segundo esquema, los perifricos estn ra 7.1 (pgina siguiente). Los contenidos de los
conectados a la UCP en forma de cadena (unos registros a salvar se pueden introducir en variables
ms cerca y otros ms lejos). La seal de reconoci- locales o en la pila. Las posibles causas se con-
miento que genera la UCP viaja por esa cadena, sultan sucesivamente, con un orden prefijado en
y el primero de los perifricos (el ms cercano) la RCI, hasta encontrar una que est pendiente de
de los varios que pueden haber pedido interrup- servicio.
cin coloca la direccin de su vector en el bus A. Antes de proceder a la programacin de la RCI
La UCP recoge esa direccin, hace la lectura del haremos algunas observaciones en torno al diagra-
vector y automticamente bifurca (introduciendo ma de la Figura 7.1.
254 Leccin 7. Algortmez: la periferia

Variantes
Salvar registros En la Figura 7.1 hemos dispuesto que tras ser-
A vir a una interrupcin, con la RS correspondiente,
i := 127
se salga de la RCI. Tambin podramos proceder
de otra manera: volver desde la RS al punto A,
lo que tiene la ventaja de que si haba varias in-
terrupciones pendientes no es preciso salir de la
RS i
si
(PR)=(IT)=1 RCI para volver a entrar inmediatamente. La elec-
cin entre una u otra disposicin depender de la
B no frecuencia prevista para la aparicin de interrup-
ciones: si es muy grande interesa ms la segun-
Restaurar reg. si no da solucin, pero si son espordicas se preferir la
i=0 i := i1
primera.
Otra posible variante est en la forma de reco-
RETI menzar la consulta tras servir a una interrupcin.
Tanto el esquema de la Figura 7.1 como la variante
comentada en el prrafo anterior son de prioridad
Figura 7.1 Algoritmo de la RCI. absoluta: se recomienza siempre por la ms prio-
ritaria. Esto puede conducir a que los perifricos
Causas a explorar por la RCI rpidos monopolicen el uso de la UCP y no dejen
nunca entrar a los lentos. Un esquema alternativo
El nmero total de causas de interrupcin es
es el de prioridad circular: tras ejecutar la rutina
133, pero la RCI slo se ocupa de las 128 exter-
correspondiente a la causa de interrupcin nme-
nas que comparten la lnea enmascarable, ya que
ro i no se vuelve a consultar desde la primera i,
las otras cinco generan directamente la direccin
sino desde la causa de prioridad inmediatamente
de comienzo de la RS gracias al hardware previsto
inferior a la que se ha servido. En el diagrama, pa-
en la UCP. Veremos enseguida que, al contrario de
ra implementar este otro esquema basta con hacer
lo que sugiere el diagrama, no es necesario que la
el retorno de la RS al punto B. Para elegir en-
RCI explore exhaustivamente todas las causas.
tre uno u otro esquema habra que tener en cuenta
el nmero y los tipos de perifricos, las tasas de
Prioridades transferencia, las frecuencias de interrupcin, etc.
En el caso de que haya varias interrupciones
pendientes (porque, por ejemplo, han aparecido La tabla de perifricos
mientras se serva a otra), la prioridad viene de-
terminada por el orden en que se exploren las cau- Normalmente slo se utiliza un nmero redu-
sas, desde la correspondiente a i = 127 hasta la cido de los 128 perifricos que en teora podran
correspondiente a i = 0 en el diagrama. Convie- estar simultneamente conectados. El explorarlos
ne atribuir ms prioridad a los perifricos rpidos. uno a uno hasta encontrar al responsable de la inte-
Anteriormente hemos asignado las direcciones 0 a rrupcin representara una prdida de tiempo in-
4 al teclado y a la pantalla (los ms lentos), y si til. Adems, el intento de ejecucin de una ins-
hay otros les asignaramos direcciones mayores a truccin de entrada/salida sobre un puerto que no
sus puertos, de modo que la RCI comenzase siem- existe fsicamente podra provocar el bloqueo de la
pre preguntando por el ms rpido. UCP (depende de cmo estn implementados los
7.4. Consulta por software 255

protocolos de comunicacin en el nivel de micro- decimal, 18, 16, 14, 2 y 0). El segundo y el tercero
mquina, Apartados 9.5 y 14.3). no estn operativos (el bit ms significativo de su
Veamos de qu manera se pueden organizar los segundo byte es 0); los otros tres, s.
datos sobre los perifricos para que la RCI slo La RCI deber recorrer esta tabla, identificar
explore a los que estn conectados y operativos. qu perifricos estn operativos y nicamente para
Uno de los mdulos del sistema operativo con- stos (los que estn en la tabla y, adems, operati-
tiene una tabla de perifricos (tambin llamada vos) indagar si tienen interrupcin pendiente.
tabla de dispositivos) que se carga en el proceso
de arranque y permanece residente en la MP. En
el Apartado 19.4 veremos qu datos se guardan en Codificacin de la RCI
esta tabla. De momento, basta saber lo siguiente: Si el lector tiene en cuenta todo lo anterior no
la tabla est almacenada en la MP en una suce- debera tener dificultades para analizar y compren-
sin de bytes; der el funcionamiento de la RCI que, escrita en
para cada perifrico reconocido en el arranque ensamblador (y siguiendo la versin de prioridad
hay una fila en la tabla que ocupa veinte bytes; absoluta con salida tras la ejecucin de la RS), pro-
el primero de esos bytes contiene la direccin ponemos como Programa 7.3 en la pgina si-
del puerto de estado del perifrico; guiente. Aunque va acompaada de comentarios,
hay tres detalles que merecen una explicacin adi-
el programa de arranque ha introducido los da-
cional:
tos en la tabla ordenando los perifricos segn sus
direcciones, de modo que los de direccin ms alta La direccin de la tabla de perifricos se impor-
estn antes (en direcciones ms bajas de la tabla); ta del mdulo en el que est definida: GP, gesto-
res de perifricos. El cdigo fuente de este mdulo
el segundo de los bytes contiene datos sobre
puede contener esto:
el tipo de perifrico, tipo de operaciones posibles,
etc., y su bit ms significativo indica si el perifri-
EXPORT TBPRF
co est operativo o no; ...
el final de la tabla queda identificado por el he- TBPRF RES.B 20
cho de que todos los bits del primer byte tienen el PRF1 RES.B 20
valor 1. PRF2 RES.B 20
...
As, en un determinado momento, la tabla po-
dra tener estos contenidos (nicamente indica- En el montaje de todos los mdulos que compo-
mos, en hexadecimal, los que son relevantes para nen el sistema operativo (que veremos con detalle
la RCI; en los dems ponemos ): en el Apartado 18.8), TBPRF recibir un valor, que
dir MP +0 +1 +2 +3 ... +19 ser importado por la RCI. En la inicializacin del
d 12 A ... sistema los datos de cada perifrico se introduci-
d+20 10 5 ... rn en los veinte bytes reservados para l.
d+40 0E 0 ... El smbolo RCI_ENT, direccin de comienzo de
d+60 02 8 ...
la RCI, se exporta. Esta direccin es el vector de
d+80 00 8 ...
d+100 FF ... interrupcin comn del que hablbamos en el
Apartado anterior, que debe estar siempre alma-
Estos valores indican que hay cinco perifricos cenado en la palabra de direccin D266. Como
reconocidos: los que tienen direcciones de puerto veremos en el Apartado 18.9, uno de los mdu-
de estado H12, H10, H0E, H02 y H00 (o, en los del sistema operativo, llamado INICIA, se
256 Leccin 7. Algortmez: la periferia

MODULE RCI
EXPORT RCI_ENT ; direccin de comienzo
FROM GP IMPORT TBPRF ; direccin de la tabla de perifricos
MSKOP EQU H'0080 ; para comprobar si est operativo
MSKIT EQU H'0003 ; para comprobar si (PR)=(IT)=1
MSKFIN EQU H'FF ; para comprobar si fin tabla
RCI_ENT PUSH .0 ; guarda los registros
PUSH .1 ; que va a utilizar:
PUSH .2 ; R0, R1 y R2
LD .0,#TBPRF ; R0 es puntero a la tabla
CLR .1 ; R1 es puntero al vector
BUCLE LD.B .1, [.0++] ; carga byte0 en R1
CMP.B .1, #MSKFIN ; mira si fin de tabla
BZ FIN
LD.B .2, [.0++] ; carga byte1 en R2
AND .2, #MSKOP ; mira si operativo
BZ SIGUE
IN .2, [.1] ; lee estado perifrico
NOT .2
AND .2, #MSKIT ; mira si interrupcin
BNZ SIGUE ; pendiente
CALL [[.1++]] ; bifurca a RS
FIN POP .2 ; restaura los registros
POP .1
POP .0
RETI ; retorno de interrupcin
SIGUE ADD .0, #18 ; actualiza R0 para que
BR BUCLE ; apunte al byte0 siguiente
END

Programa 7.3 Rutina de consulta de interrupciones.

encarga, al arrancar el ordenador, de poner los va- gortmez (Apartado 6.14), esa direccin de entra-
lores de los vectores de interrupcin, y, concreta- da/salida es igual a la direccin de la MP donde se
mente, dos de las instrucciones de ese programa guarda el vector de interrupcin. Si, por ejemplo,
(Programa 18.7) son: la causa de interrupcin es la de nmero 4 (Ta-
LD .2,#RCI_ENT bla 6.10), el perifrico en cuestin es el que tie-
ST .2,[.0++] ne el puerto de estado de direccin 8, y (R1) = 8.
(Antes ejecutar la primera instruccin R0 contiene La instruccin, por su modo de direccionamiento,
el valor D266). bifurca a la direccin contenida en la palabra de
CALL [[.1++]] (modo autoincremento in- la MP cuya direccin es 8, que es, justamente, el
directo) es, en cierto modo, la instruccin ms im- vector de interrupcin para la causa de nmero 4.
portante del programa. En el momento en que esta (Adicionalmente, el contenido de R1 se incremen-
instruccin se ejecuta, R1 contiene la direccin del ta en dos unidades, pero, en este caso, ni sirve para
puerto de estado correspondiente al perifrico que nada ni es perjudicial. Si no se desea este efec-
hay que pasar a servir. Ahora bien, tal como es- to secundario, la instruccin puede sustituirse por
tn asignados los vectores de interrupcin en Al- CALL [/0[.1]]).
7.5. Rutinas de servicio 257

7.5. Rutinas de servicio 6. Permitir interrupciones de la pantalla.


7. Realizar el clculo 2.
Slo desarrollaremos dos ejemplos, uno relativo
a un perifrico de caracteres y otro a la interrup- En cuanto a la RS, cada vez que se ejecute deber:
cin por desbordamiento. Presentaremos tambin 1. Escribir el carcter almacenado en la direccin
el principio de las interrupciones de reloj, dejando apuntada por el puntero.
al lector como ejercicio el diseo de su RS.
2. Si el carcter era ret, inhibir sus interrup-
ciones, escribir tambin H0A (salto de lnea) y
Presentacin de mensajes avisar a PU de que se ha terminado de escribir
el mensaje.
Como primer ejemplo, programaremos una RS
3. Si no, incrementar el puntero.
para escribir por la pantalla (puertos 2 y 3) men-
sajes de hasta ochenta caracteres, siendo siempre El PU y la RS tienen que intercambiar dos in-
el ltimo ret (H0D). Los caracteres se supo- formaciones: por una parte, el PU debe iniciar a
nen almacenados en una zona de la memoria para la RS, comunicndole en qu direccin de la me-
cada mensaje. (Este ejemplo es una trasposicin a moria se encuentra el primer carcter del mensaje;
Algortmez, y una generalizacin, del desarrollado por otra, la RS debe indicar al PU si ha terminado
para Smplez+i4 en el Apartado 2.8). de escribir el mensaje. Para establecer esta comu-
Para comprender cmo se utiliza la RS, conside- nicacin utilizaremos dos variables globales com-
raremos un programa de usuario, PU2 , que ha- partidas por ambos (es decir, variables a las que
ce dos clculos (cuyos detalles no vienen al ca- tendrn acceso tanto el PU como la RS):
so). Mientras se est ejecutando cada uno de esos PUNT (dos bytes): puntero que apunta en todo
clculos, la RS debe ir interrumpiendo para escri- momento a la direccin donde se encuentra el
bir sucesivamente los caracteres correspondientes prximo carcter a imprimir;
a los mensajes Estoy con clculo 1 y Estoy con
clculo 2, respectivamente. SMENS (un byte): seal que vale 0 mientras no
se ha terminado de escribir un mensaje, y que
Las operaciones a realizar por parte del PU son:
la RS pone a 1 cuando termina.
1. Iniciar la RS, poniendo en un puntero la direc- Incluiremos estos tres bytes en la RS. La inicia-
cin del primer byte correspondiente al mensa- cin de la rutina por parte del programa que la lla-
je 1. ma consiste en poner en PUNT la direccin donde
2. Permitir interrupciones de la pantalla. comienza la cadena de caracteres que componen
3. Realizar el clculo 1. el mensaje, y poner a cero SMENS. Supondremos
4. Al terminar el clculo, comprobar si el mensaje que el PU se monta con la RCI, con el mdulo GP,
se ha terminado de escribir; si no es as, esperar. y con un mdulo, RS, que contiene a todas las RS,
y entre ellas, RS_PAN, la rutina de servicio de la
5. Volver a iniciar la RS, ahora con la direccin
pantalla. Como hemos advertido en la ltima no-
del primer byte del mensaje 2.
ta a pie de pgina, la disposicin que se describe,
2
Le llamaremos as para este ejemplo, aunque es un tanto aunque posible, es poco real. El PU normalmente
abusivo. En efecto, este programa va a hacer uso de instruc- pedir la operacin al sistema operativo (que con-
ciones privilegiadas y, por tanto, tendr que ejecutarse en mo- tiene, entre otras muchas cosas, a la RCI y a los
do supervisor. Como ya hemos dicho (Apartados 4.2 y7.2), y
estudiaremos con detenimiento a partir de la Leccin 17, los
mdulos RS y GP, como veremos en las Leccio-
verdaderos programas de usuario piden las operaciones de en- nes 18 y 19) mediante una interrupcin de progra-
trada y salida indirectamente, a travs del sistema operativo. ma (instruccin BRK).
258 Leccin 7. Algortmez: la periferia

MODULE PU
FROM RCI IMPORT RCI_ENT
FROM RS IMPORT RS_PAN, SMENS, PUNT
---
MENS1 DATA.B "Estoy con clculo 1",H'0D
MENS2 DATA.B "Estoy con clculo 2",H'0D
---
LD .0, #RCI_ENT ; pone el vector de interrupcin
ST .0, /266 ; de RCI
LD .0, #RS_PAN
ST .0, /2 ; y el de la pantalla
CLR .0
ST.B .0, /SMENS ; pone 0 en SMENS
LD .0, #MENS1 ; pone direccin del mensaje 1
ST .0, /PUNT ; en un puntero dentro de la RS
LD.B .1, #2
IN .0, [.1]
OR .0, #3 ; inicia "preparado" y permite
OUT .0, [.1] ; interrupciones de pantalla
EI ; permite interrupciones
---
--- ; operaciones de "clculo 1"
---
ESPERA LD.B .0, /SMENS ; si no se ha terminado de
BZ ESPERA ; escribir, espera
CLR .0
ST.B .0, /SMENS
LD .0, #MENS2
ST .0, /PUNT ; inicia ahora la RS para
LD.B .1, #2 ; el segundo mensaje
IN .0, [.1]
OR .0, #2
OUT .0, [.1] ; permite interrupciones de pantalla
--- ; operaciones de "clculo 2"
---

Programa 7.4 Programa que usa la RS de la pantalla.

Inicialmente, las interrupciones estn inhibidas del PU, la RCI y la RS_PAN ser el siguiente:
((PIN) = 0), as como las particulares de los con-
El PU pone las direcciones de comienzo de la
troladores de los perifricos (bit 1 de los puertos
RCI y la RS_PAN en los correspondientes vecto-
de estado a 0), y el modo es (SUP) = 1. El PU
res de interrupcin, pone el valor inicial 0 en
debe empezar iniciando a la RS y permitiendo las
SMENS (donde la RS_PAN pondr 1 cuando
interrupciones de la pantalla (puerto de estado 2),
termine de escribir todos los caracteres que com-
y las interrupciones en general.
ponen el mensaje) e introduce la direccin de co-
De acuerdo con todo lo dicho, podemos analizar mienzo del primer mensaje en el puntero PUNT.
cmo el Programa 7.4 maneja a la RS_PAN incluida Luego, pone 1 en los bits de pesos 0 y 1 del
en el Programa 7.5, y cmo sta va interrumpiendo puerto 2, dejando la pantalla preparada y permi-
al PU cada vez que la pantalla est preparada. tiendo que interrumpa. Esto lo hace cargando en
A grandes rasgos, el funcionamiento conjunto R0 el contenido del puerto 2, realizando una ope-
7.5. Rutinas de servicio 259

MODULE RS
EXPORT RS_TEC, RS_PAN ; y otros puntos de entrada a otras RS
EXPORT SMENS, PUNT
---
RS_PAN PUSH .0
PUSH .1
PUSH .2
PUSH .3
LD .0, PUNT
LD.B .3, #3 ; 3 = puerto de datos
LD.B .1, [.0++]
OUT .1, [.3] ; escribe el carcter
CMP.B .1, #H'0D ; era "ret"?
BZ FIN
ST .0, PUNT ; actualiza el puntero
SALIR POP .3
POP .2
POP .1
POP .0
RET
FIN LD.B .2,#2 ; bucle de espera
ESP IN .1,[.2] ; hasta que termine
AND .1,#1 ; de escribir
BZ ESP ; "ret"
LD.B .1, #H'0A
OUT .1, [.3] ; salto de lnea
IN .1, [.2]
AND .1, #H'FD ; inhibe interrupciones
OUT .1, [.2] ; de la pantalla
LD.B .0, #1
ST.B .0, SMENS ; avisa de que ha terminado
BR SALIR
SMENS RES.B 1
PUNT RES 1
---
END

Programa 7.5 Rutina de servicio para la pantalla.

racin OR con el valor 3 (B00000011) (que de- tar en la tabla de dispositivos hasta llegar a la de
ja los dems bits como estuvieran) y llevando el la pantalla, que es la que est pendiente. Enton-
resultado al puerto 2. En cuanto se ejecuta la ins- ces, pasa control a la RS_PAN, que empieza en
truccin EI la pantalla interrumpe. la direccin previamente guardada en el vector de
La UCP detecta la interrupcin y pasa a aten- direccin 2. Cuando la RS_PAN ejecuta OUT el
derla, guardando la direccin de retorno (conteni- controlador de la pantalla pone automticamente a
do de CP) y el contenido del registro RE en la pila, 0 el bit preparado y no vuelve a ponerlo a 1
lee la palabra de direccin 266 y bifurca a la direc- hasta que no ha completado la escritura del carc-
cin contenida en ella, empezando as la RCI. ter, de modo que en ese intervalo no puede haber
interrupciones de la pantalla (aunque sus interrup-
La RCI hace la consulta, comenzando con las ciones estn permitidas, es decir, el bit siguiente,
interrupciones de mayor prioridad que puedan es-
260 Leccin 7. Algortmez: la periferia

el de peso 1, sigue con el valor 1). Mientras tan- los salva la RCI. Pero si esta RS_PAN ha de servir
to, la RS_PAN, tras comprobar que no se trataba tambin para el caso de que se utilice el controla-
todava del fin del mensaje (carcter ret) ac- dor de interrupciones o la consulta por hardware,
tualiza PUNT y devuelve control a la RCI; sta res- entonces es preciso proceder as.
taura los registros y retorna al PU, que ejecutar Otra observacin ms importante conceptual-
las instrucciones siguientes a EI. mente es que hay tres programas residentes en la
Cada vez que la pantalla termine de escribir un MP: el PU, la RCI y la RS_PAN. Como slo hay
carcter su controlador pone 1 en el bit prepa- un procesador (la UCP), en cada momento slo
rado, con lo que interrumpe y el proceso vuelve uno de los tres procesos estar activo. El proce-
a comenzar. so correspondiente a la RS_PAN, si no est acti-
As, igual que en el ejemplo similar del Aparta- vo, puede estar bloqueado (bien porque el bit de
do 2.8, la UCP sigue ejecutando instrucciones del peso 0, preparado, del puerto de estado tiene el
PU, interrumpindose peridicamente para enviar valor 0, o porque lo tiene el de peso 1, permiso de
un carcter al controlador de la pantalla. interrupcin) o en espera de que se le pase control
Cuando en el PU se llega a la instruccin eti- (cuando ha interrumpido y la RCI est averiguan-
quetada ESPERA puede ocurrir que se haya ter- do la causa de la interrupcin). Vemos as que un
minado de escribir el mensaje, pero tambin pue- proceso puede estar en varios estados en cuanto a
de que an queden caracteres. En el primer caso, su relacin con el procesador: ejecutndose (acti-
la RS_PAN, tras comprobar que el ltimo carc- vo), esperando, etc. Volveremos sobre este asunto
ter recibido ha sido ret, habr puesto 0 en en la Leccin 17.
el bit de interrupcin de su puerto de estado (bit
de peso 1 del puerto 2)3 , y habr puesto 1 en Tratamiento del desbordamiento
SMENS; por tanto, el proceso del PU comprueba
que (SMENS) 6= 0 y pasa a iniciar a la RS_PAN pa- Para cada una de las cinco interrupciones que
ra imprimir los caracteres de MENS2, tras lo cual tienen el vector cableado (la de la lnea no en-
pone a uno el permiso de interrupciones de la pan- mascarable y las cuatro internas) habr una RS
talla y comienzan de nuevo a escribirse caracteres cargada en la MP.
mediante interrupciones. Sin embargo, si al llegar Veamos una posible RS para la interrupcin por
a ESPERA an no se ha terminado de escribir el desbordamiento. Se ejecutar siempre que, estan-
primer mensaje, el PU entrar en un bucle de es- do las interrupciones permitidas, aparezca en el
pera activa, interrumpido peridicamente, del que programa una instruccin BRKV y en ese momento
no saldr hasta que la RS_PAN detecte el fin del (V) = 1 (tal cosa ocurrir, por ejemplo, en la eje-
mensaje y se lo comunique al PU poniendo a uno cucin del Programa 6.15, si se produce desborda-
la seal SMENS. Es evidente que no podemos miento en la suma de los diecisis bits ms signi-
proceder de otro modo si queremos que el primer ficativos), y deber escribir en la pantalla:
mensaje se escriba por completo antes de empe- Error de desbordamiento. (CP)=D'
zar a ejecutar las instrucciones que corresponden
al clculo 2. y a continuacin el contenido, en decimal, que tu-
Un detalle a observar en el Programa 7.5 es que viese el contador de programa en el momento de
la rutina salva en la pila, y restaura antes de re- producirse la interrupcin. Para ello, la RS tendr
tornar, los registros que utiliza. En principio, slo que:
necesitara hacerlo con R3, porque los otros dos 1. Guardar (en la pila o en variables locales, es de-
cir, palabras reservadas en la RS) los registros
3
Mediante AND con la mscara HFD=B11111101. que esta RS utilice.
7.5. Rutinas de servicio 261

MODULE RS
FROM RUTINAS IMPORT BINASC
; BINASC es una rutina que pone en cinco bytes, a partir del apuntado por R0,
; los caracteres ASCII correspondientes a la representacin decimal del
; contenido binario de R1 (interpretado como una direccin)
---
RS_DES PUSH .0
PUSH .1
LD .0, #MENS2
LD .1, /6[.14] ; lee (CP) de la pila
CALL /BINASC
LD .0, #MENS1
ST .0, /PUNT ; inicia a la rutina de
LD.B .1, #2 ; la pantalla y
IN .0, [.1] ; permite interrupciones
OR .0, #2 ; de la pantalla
OUT .0, [.1]
POP .1
POP .0
RETI
MENS1 DATA "Error de desbordamiento. (CP)=D'"
MENS2 RES.B 5
FINMENS DATA H'0D
---
END

Programa 7.6 Rutina de servicio para el desbordamiento.

2. Recuperar (CP). Sabemos que cuando la inte- el momento de producirse la interrupcin merece
rrupcin se atiende el secuenciador guarda (CP) un comentario. Cuando atiende a la interrupcin,
y (RE) en la pila. la UCP guarda primero (CP) y luego (RE) en la
3. Construir el mensaje, encontrando los caracte- pila (en dos bytes cada uno). Luego, la RS apila
res ASCII que correspondan a la representacin (R0) y (R1). Por tanto, la pila queda como indica
decimal del contenido binario de CP. Supondre- la Figura 7.2. La instruccin LD .1,/6[.14]
mos que hay disponible una rutina que recibe carga en el registro R1 el contenido de la palabra
este contenido por el registro R1 y una direc- de la MP de direccin DE = 6+(R14), que es, pre-
cin por R0 y devuelve los cinco caracteres en cisamente, (CP).
cinco bytes de la MP a partir del apuntado por
R0 (Ejercicio 25 de la Leccin 6).
zona de la MP reservada para la pila

4. Iniciar a la rutina de la pantalla para que escriba d


d (R1)
(mediante interrupciones) el mensaje.
d+2 (R0) PP = R14
5. Antes del retorno, recuperar los contenidos de
los registros guardados en el primer paso. d+4 (RE)
De acuerdo con esto, la RS puede codificarse d+6 (CP)
como muestra el Programa 7.6. El programa que
haga uso de esta RS deber importar la direccin
de comienzo (RS_DES) y almacenarla en la direc-
cin D258. Figura 7.2. Estado de la pila tras ejecutarse las dos
La forma de recuperar el valor que tena (CP) en PUSH del Programa 7.6.
262 Leccin 7. Algortmez: la periferia

Interrupciones de reloj tro de estado) se van guardando, una sobre otra, en


la pila.
Disponer de una interrupcin que aparece siste-
Para que una RS pueda ser interrumpida por otra
mticamente con una periodicidad fija resulta til
de prioridad superior y para que pueda interrumpir
para cosas diversas. Por ejemplo, para mantener
a otra de prioridad inferior hay que implementar
actualizada la hora, o, en un sistema multiusuario,
las siguientes operaciones en todas las RS:
para repartir la UCP entre los programas de los
1. Salvar los registros que se vayan a utilizar en
usuarios (Apartado 20.6).
esta RS.
A tal efecto, puede disponerse de un circuito
temporizador que, desde el punto de vista del sis- 2. Inhibir todas las interrupciones de prioridad in-
tema de entrada/salida, es un perifrico ms que ferior a sta que no estuviesen ya inhibidas
solicita interrupciones. En el Ejercicio 13 de la (y tambin esta misma) mediante ejecucin de
Leccin 2 se propona la programacin de una RS instrucciones OUT sobre los puertos de esta-
de reloj para Smplez+i4 que cada segundo actua- do.
liza variables con los valores de horas, minutos y 3. Ejecutar una instruccin EI.
segundos. En el Ejercicio 6 de sta se sugiere un 4. Comenzar la ejecucin de las operaciones ne-
posible modelo funcional del circuito temporiza- cesarias para servir la interrupcin. A partir de
dor para Algortmez. este momento, cualquier otra interrupcin se
atender, siempre que su prioridad sea superior,
gracias a lo previsto en los pasos 2 y 3. Obser-
Anidamiento de interrupciones
ve, adems, que las interrupciones pueden en-
La RCI del Programa 7.3 asegura la prioridad cadenarse, o anidarse, sin que en ningn caso se
de las interrupciones, en el sentido de que si hay pierdan las direcciones de retorno y los valores
ms de una pendiente se ejecutar la RS corres- que tiene el registro de estado en cada RS (que
pondiente a la de mayor prioridad. Sin embargo, la se guardan en la pila) ni los contenidos de los
ejecucin de una rutina no puede verse interrum- dems registros (que salvamos en toda RS, pre-
pida por otra interrupcin que aparezca posterior- viendo que pueda interrumpir a otra de inferior
mente, aunque la prioridad de sta sea mayor. Es- prioridad).
te hecho puede ocasionar la prdida de datos de 5. Terminadas las operaciones especficas de ser-
un perifrico rpido (o, en general, la desatencin vicio, inhibir las interrupciones (instruccin
a una causa de interrupcin que requiere atencin DI) (para evitar otras interrupciones durante
urgente) que interrumpa mientras se ejecuta la RS el cambio de contexto que sigue), restaurar los
de uno lento. registros, permitir las interrupciones que se ha-
Es posible un arreglo por software que permi- ban inhibido en el paso 2 (poniendo 1 en los
ta la interrupcin temporal de una RS para pasar bits de los puertos de estado correspondientes),
a ejecutar otra de mayor prioridad, permitiendo y volver a la RCI, que devolver el control al
as anidamientos como ilustraba la Figura 3.14. Es programa interrumpido (que poda haber sido
fundamental tener en cuenta que no deben perder- un programa ordinario u otra RS de prioridad
se las direcciones de retorno (al programa princi- inferior a sta).
pal, a la RS de la primera interrupcin, a la de la Se comprende fcilmente que todas estas opera-
segunda, que puede verse a su vez interrumpida ciones, realizadas mediante software, conducen a
por otra de mayor prioridad, etc.). Esto no es pro- rutinas de servicio bastante complicadas, y, consi-
blema en Algortmez, gracias a que las direcciones guientemente, a un tiempo de respuesta a las inte-
de retorno (acompaadas de los valores del regis- rrupciones que puede resultar inaceptable.
7.7. Controlador de interrupciones 263

7.6. Consulta por hardware Bit 2: modo de funcionamiento, M. El controla-


dor puede funcionar en dos modos: En el modo
Con el segundo de los esquemas explicados en de vector programado (M = 0), cuando genera
el Apartado 7.3 (consulta por hardware) no hace una interrupcin pone en el bus A la direccin
falta RCI, ya que el hardware externo a la UCP (el del vector, de acuerdo con lo que hayamos es-
controlador del primer perifrico que haya pedido crito en el campo DV (bits 7 a 4). En el modo de
interrupcin) deposita sobre el bus A la direccin consulta por hardware (M = 1), el controlador
del vector. Las RS seran, esencialmente, las mis- no accede al bus A; es el perifrico quien pone
mas del Apartado anterior. La respuesta a una inte- en l la direccin de su vector (el contenido del
rrupcin es mucho ms rpida, pero para permitir campo DV es indiferente cuando M = 1).
el anidamiento de interrupciones seguiran siendo Bits 7-4 (campo DV): bits de pesos 7 a 4 de los
necesarias las mismas manipulaciones de software ocho vectores de interrupcin correspondientes
indicadas ms arriba. El controlador de interrup- a las lneas INT0 a INT7. El controlador los
ciones permite gestionar las prioridades y el ani- completar con 0000 para INT0, 0010 pa-
damiento mediante hardware. ra INT1,..., 1110 para INT7 en los bits de pe-
sos 3 a 0, y con 00000000 en los de pesos 8
a 15. Si hemos puesto, por ejemplo, 1111 en
7.7. Controlador de interrupciones DV y el controlador recibe una peticin por la
lnea INT1, pondr en el bus A la direccin bi-
El controlador de interrupciones contiene dos naria 0000000011110010 para que la reco-
puertos de entrada/salida a los que asignaremos
las direcciones 254 y 255 (es decir, hace de pe-
rifrico 127). La programacin del controlador bus A
16
consiste en poner valores en estos puertos median- 8 16
(IN y OUT) (si M = 0)
te instrucciones OUT. Tiene ocho lneas de entrada,
INT0
por las que puede recibir peticiones de interrup- puerto 254
INT
cin de perifricos, y una lnea de salida por la INT1
(a la UCP) puerto 255
que puede pedir una interrupcin a la UCP (Figu-
ra 7.3). aint
(de la UCP)
INT7

Modelo funcional
(IN y OUT)
bus D
El controlador interpreta lo que escribamos en
16
el puerto 254 de acuerdo con el siguiente formato
(Figura 7.4): Figura 7.3 Controlador de interrupciones.
Bit 0: preparado. Se le da el valor inicial 0,
7 4 2 1 0
y el controlador lo pone a 1 cuando aparece
una peticin de interrupcin por alguna de las 254: DV M IT PR

lneas.
7 0
Bit 1: permiso de interrupciones. Mientras est
255: I7 I0
a 0 el controlador no puede pedir interrup-
cin a la UCP (aunque haya perifricos pidin-
doselas a l) Figura 7.4. Puertos del controlador de interrupciones.
264 Leccin 7. Algortmez: la periferia

ja la UCP y bifurque al vector de interrupcin Uso del controlador


(que, en este ejemplo, estara en la direccin
HF2 = D242). Lo normal ser poner 0000 Supondremos que no hay ms de ocho perif-
en estos cuatro bits, para que los ocho vectores ricos, cuyas peticiones de interrupcin se conec-
estn en las direcciones bajas de la MP. tan a las lneas de entrada del controlador4 . In-
dependientemente del modo (vector programado,
Qu ocurre si el controlador recibe peticiones M = 0, o consulta por hardware, M = 1), la gestin
por dos o ms lneas? En principio, hay una prio- de prioridades es ahora realmente sencilla: en cada
ridad fija: la lnea de mayor prioridad es INT7 y la RS, antes de la instruccin EI y tras salvar los
de menor prioridad INT0. Supongamos que reci- registros que la RS utilice, se cargar la mscara
be una peticin de interrupcin por INT1. Enton- de interrupciones que se desee (con una instruc-
ces genera su peticin a la UCP por la lnea INT. cin OUT sobre el puerto 255).
La UCP sigue el proceso explicado al final del La mscara deber tener ceros en los bits que
Apartado 6.14 y genera la seal de reconocimien- correspondan a niveles de prioridad igual o infe-
to, o acuerdo para interrumpir (aint), que llega rior a la de la RS, y unos en los de prioridad
al controlador. En este intervalo de tiempo (des- superior. Por ejemplo, para una RS del nivel 3 la
de la peticin en INT1 hasta la llegada de la se- mscara deber ser, en principio: 11110000 (para
al) pueden haber aparecido otras peticiones, por permitir las interrupciones de los niveles 7, 6, 5 y
ejemplo, por INT4 y por INT6. En tal caso, y si el 4 e inhibir la de los niveles 3, 2, 1 y 0). Pero ob-
controlador est en el modo de vector programa- serve que a la RS puede drsele la prioridad que se
do, pone en el bus A 00000000xxxx1100, di- desee: si queremos que no pueda ser interrumpida
reccin del vector correspondiente a la lnea INT6 por ningn otro nivel, aunque sea ms alto, bastar
(xxxx es lo que hayamos puesto en DV al pro- con cargar en el puerto 255 la mscara 00000000.
gramar el puerto 254). En la misma situacin, y La manipulacin de la mscara en cada RS ha
si est en el modo de consulta por hardware, el de hacerse de tal modo que al salir de la rutina su
controlador avisa al perifrico conectado a la lnea valor sea el mismo que tena al entrar. Para que as
INT6 para que ponga la direccin de su vector en sea, en el cambio de contexto al empezar la rutina,
el bus A. se guardar el valor actual de la mscara en algu-
Pero hasta ahora no hemos hablado del puer- na posicin de la memoria o en la pila5 (al igual
to 255. El controlador interpreta su contenido co- que los otros registros de la UCP) y se cargar una
mo una mscara de interrupciones. Cada bit de mscara consistente en unos para los biestables
la mscara corresponde a una de las lneas de en- correspondientes a los niveles superiores que no
trada (el menos significativo a INT0, el siguiente quieran inhibirse y ceros para los dems. En el
a INT1, etc.), y permite (si es 1) o inhibe (si es cambio de contexto del final de la RS se restaurar
0) las interrupciones de su lnea. Si la msca- el valor salvado al principio.
ra es 11111111 entonces lo dicho en el prrafo
4
anterior sigue siendo vlido, pero si con la misma De haber ms, algunos se conectaran en cadena, y pa-
situacin all considerada tuvisemos la mscara ra cada lnea con ms de un perifrico se hara una consulta
por software (si el controlador est programado con el modo
10101111, que inhibe a las lneas INT4 e INT6, M = 0) o por hardware (si est con M = 1). Otra posibilidad
entonces el controlador atendera a la INT1. es disponer varios controladores conectados en cadena a la
Esta complejidad en el hardware introducida lnea de interrupciones de la UCP.
5
En los ordenadores que incluyen la funcin del contro-
por el controlador de interrupciones simplifica no- lador de interrupciones dentro de la UCP (como Regstrez,
tablemente el software necesario para permitir el Apartado 8.7) la mscara est contenida en el registro RE, y
anidamiento de interrupciones. Veamos cmo. se guarda cuando se salva ste.
7.7. Controlador de interrupciones 265

Supongamos, por ejemplo, que la mscara es siguiente:


11110111 (interrupcin de nivel 3 inhibida), y que
se pasa a una RS del nivel 2, en la que nos intere- 1. Al aparecer la interrupcin del teclado, como
sa inhibir todas las posibles interrupciones salvo, est permitida, el controlador de interrupciones
justamente, las de nivel 3. En esta rutina se ten- solicita interrupcin a la UCP.
drn al principio las instrucciones necesarias pa- 2. Se termina de ejecutar la instruccin D2.100,
ra salvar el contenido del puerto 255 (11110111) incrementndose el contador de programa, que
y para cargarlo con la mscara 00001000; como queda con el valor D2.102. La UCP pasa a
consecuencia, esta rutina slo podr ser interrum- atender la interrupcin: guarda (CP) = D2.102
pida por la de nivel 3. En el cambio de contexto de y (RE) en la pila, inhibe interrupciones y avisa
salida, se restaurar el valor 11110111. al controlador de interrupciones de que recono-
Hay bastante parecido entre este modo de ges- ce la peticin.
tionar prioridades y el explicado al final del Apar- 3. El controlador, que tiene una peticin del ni-
tado 7.4. La gran diferencia es que es mucho ms vel 0, pero ninguna del nivel 1 ni del 4,
rpido ejecutar un par de instrucciones IN y pone en el bus A la direccin del vector:
OUT sobre el puerto 255 que toda una sucesin 00000000xxxx0000, de acuerdo con lo explica-
de instrucciones sobre los puertos de estado de to- do al final del Apartado 6.14 (suponiendo que
dos los perifricos. est en modo 0, es decir, vector programa-
Veamos con ayuda de un ejemplo el proceso do; si estuviese en modo 1, consulta por
que se desarrolla cuando se anidan interrupciones. hardware, avisara al controlador del teclado
Imaginemos que hay un programa cargado a partir para que la pusiera l).
de la direccin D2.048 y que se dan las siguientes
4. La UCP recoge la direccin del vector, hace
circunstancias:
una lectura en la MP de su contenido (direc-
El programa, entre otras cosas, lee caracteres cin de la RS, rutina de servicio del teclado) y
del teclado (que supondremos conectado a la li- bifurca a esa direccin.
nea INT0 del controlador, es decir, asociado al 5. En la RS del teclado se completa el cambio de
nivel de prioridad 0) y escribe en la pantalla (ni- contexto, salvando los registros que se vayan
vel 1) y en una impresora (nivel 4). Para permi- a utilizar y la mscara y cargando como nueva
tir interrupciones de los tres perifricos (y slo mscara 00010010 (para que el teclado no inte-
de ellos), el programa deber ejecutarse con la rrumpa a su propia RS). Despus ejecutar una
mscara inicial 00010011. instruccin EI.
Cuando el programa est ejecutando la instruc- 6. La UCP est ejecutando la instruccin almace-
cin almacenada en D2.100 (supongamos que nada en las direcciones D600 a D602 cuan-
tiene dos bytes) aparece una interrupcin del te- do aparece la interrupcin de la impresora por
clado. En este momento, las instrucciones es- la lnea INT4. El controlador de interrupciones
tn permitidas (es decir, se ha ejecutado previa- vuelve a pedir interrupcin a la UCP, ya que es
mente la instruccin EI). de nivel superior a la actual y est permitida por
Cuando se est ejecutando la instruccin que la mscara.
est en la direccin D600 (supongamos que 7. La UCP, tras terminar con la instruccin en cur-
tiene tres bytes) de la rutina de servicio del te- so e incrementar adecuadamente (CP), que que-
clado aparece una interrupcin procedente de la da con el valor D603, reconoce la interrupcin
impresora. y se repiten acciones similares a las de los pa-
La sucesin de acontecimientos en la UCP ser la sos 2, 3 y 4.
266 Leccin 7. Algortmez: la periferia

8. Si durante la ejecucin de la RS de la impreso- rar la eficiencia del sistema consiste en estructu-


ra aparece una interrupcin de la pantalla sta rar la rutina en varias partes con distinta prioridad
queda inhibida por el controlador de interrup- relativa. Por ejemplo, la primera parte tendra la
ciones hasta el final del paso siguiente. mayor prioridad, y todas las interrupciones esta-
9. Al final de la RS de la impresora habr una ran inhibidas, pero al terminar esa parte es posible
instruccin DI para proteger el cambio de con- que, por el diagnstico efectuado, se sepa que cier-
texto, instrucciones para restaurar los regis- tas interrupciones pueden permitirse; al comien-
tros y la mscara 00010010, y la ltima ins- zo de la segunda parte se modificara la msca-
truccin, RETI, restaura los valores de (RE) y ra de interrupciones de modo que se permitieran
(CP) = D603 salvados en la pila y vuelve a esas interrupciones (pero no otras). Y as, a medi-
permitir interrupciones. De este modo, y si no da que progresa la ejecucin de la rutina, y confor-
hay interrupcin pendiente de la pantalla (si la me se pasa de una parte a otra, ella misma, median-
hubiera se repetiran las operaciones de salvar te manipulaciones de la mscara, va modificando
(RE) y (CP), etc.), la UCP pasa a ejecutar la ins- la prioridad relativa de la UCP con respecto a las
truccin de la RS del teclado que sigue a aque- otras causas de interrupcin.
lla en la que se produjo la interrupcin.
10. Del mismo modo, al terminar la RS del te- 7.8. Controlador de disquetes
clado se restauran los registros y la msca-
ra inicial 00010011 y la instruccin RETI re- Para no ofuscar la comprensin de los concep-
pone los contenidos originales de (RE) y de tos con el gran nmero de sectores que hay en una
(CP) = D2.102 (y permite interrupciones), vol- unidad de disco, presentaremos un controlador pa-
viendo as al programa interrumpido. ra unidades de disquetes (dos superficies, 80 pis-
La posibilidad de manipular la mscara de in- tas, 18 sectores por pista y 512 bytes por sector).
terrupciones (escribiendo en el puerto 255) permi- Es un controlador de ADM selector (Apartado 5.7)
te hacer una reasignacin dinmica de priorida- al que se pueden conectar cuatro unidades. Tiene
des. Esto confiere al sistema de interrupciones una los siguientes registros (Figura 7.5):
flexibilidad muy til, especialmente para progra- 7 0
ADM

mar aplicaciones de tiempo real. L/E IT PR

EP (estado perifrico y controlador)


Sin entrar ya en los detalles, comentaremos, en
15 0
lneas generales, un ejemplo ilustrativo de esa uti-
lidad. En los sistemas de conmutacin telefnica, DAT (dato de entrada o de salida)
ciertos errores producen una interrupcin para eje- 15 14 13 12 11 5 4 0
cutar una rutina que analiza su causa. En prin-
sup.

disco pista sector


cipio, esta rutina tiene un nivel de prioridad al- (4 unidades, (80 pistas) (18 sectores/pista)
2 superf./unidad)
to, de modo que todas las interrupciones de en- LOC (localizacin en el disco)
trada/salida quedan inhibidas cuando empieza su 15 0

ejecucin. Pero tal ejecucin puede consumir bas- 32Kpalabras (mximo)

tante tiempo (el programa suele ser relativamente CDP (cuenta de palabras)
15 0
complejo), durante el cual probablemente se per-
H0 a HFFFF
deran muchos datos de entrada/salida (por ejem-
DEC (direccin en curso)
plo, muchas llamadas telefnicas), que quizs pu-
dieran procesarse correctamente porque el fallo no Figura 7.5. Registros del controlador de disquetes para
afecte a ese procesamiento. Una forma de mejo- Algortmez.
7.8. Controlador de disquetes 267

Un registro de estado, EP, que, adems de PR es el inverso: va leyendo palabras de la MP en DAT


(preparado) e IT (permiso de interrupciones), y escribiendo en el disquete los dos bytes.
contiene otros indicadores: ADM (permiso pa-
ra robo de ciclo), L/E (operacin de lectura o
Modelo estructural
de escritura) y bits de errores.
Un registro de datos, DAT, de diecisis bits: en Como es preciso acceder (con instrucciones
cada robo de ciclo se va a transferir una palabra OUT) no slo al puerto de estado, sino a los tres
(dos bytes) entre el registro DAT y la MP. registros CDP, LOC y DEC, cada uno de ellos de
Un registro de localizacin, LOC, con los datos diecisis bits, podramos asignar a nuestro contro-
sobre la ubicacin del sector en el disquete. lador siete puertos de entrada/salida de ocho bits.
Pero para no perder la homogeneidad de nuestro
Un registro de cuenta de palabras, CDP.
diseo, en el que cada controlador slo tiene dos
Un registro de direccin en curso, DEC, que puertos (lo que, como hemos visto en el Aparta-
contendr inicialmente la direccin de la pri- do 7.4, simplifica la rutina de consulta de interrup-
mera palabra de la zona de la MP. ciones), vamos a suponer la existencia de unos cir-
cuitos en el controlador que le permiten funcio-
Modelo procesal nar con slo dos puertos, los de direcciones de en-
trada/salida D18 y D19. (Ahora tenemos cuatro
El programa que pone valores iniciales para una perifricos accesibles con las mismas direcciones,
operacin de ADM, tras poner los valores de CDP, seleccionndose uno u otro segn el contenido del
LOC y DEC, escribir 1 en los bits ADM e IT, registro LOC en el controlador).
0 en PR, y 0 o 1 en L/E. A partir de ese mo- La direccin D18 corresponde al puerto de es-
mento, el controlador ir robando ciclos de la MP, tado, es decir, al registro EP. Pero la direccin
de acuerdo con lo explicado en el Apartado 5.8. D19 no corresponde ahora a un puerto de datos
Si se trata de una operacin de lectura, antes de de ocho bits (el registro de datos es DAT, de die-
cada robo el controlador ensambla en DAT dos by- cisis bits, y no se accede a l con instrucciones
tes ledos del disquete y pide un ciclo de la MP al de entrada/salida), sino a los registros LOC, CDP
rbitro del bus (que en Algortmez est incluido en y DEC, en los que la UCP tiene que poner valo-
la UCP). El rbitro genera una seal que significa res iniciales antes de comenzar las transferencias.
de acuerdo, puedes robar un ciclo, la UCP espe- Como cada uno de estos registros tiene diecisis
ra. Al recibir esta seal, el controlador pone la bits, y todos comparten el mismo puerto, es preci-
direccin de la MP (contenido del registro DEC) so un convenio y un esquema hardware para poder
en el bus A y el contenido de DAT en el bus D, cargarlos o leerlos desde la UCP. El convenio es
y da una orden de escritura a la MP (la lectura que para transferir valores de la UCP a estos regis-
del disquete implica escritura en la MP). Luego tros se utilizan seis instrucciones OUT consecutivas
incrementa DEC y decrementa CDP. Si el resulta- sobre el mismo puerto D19: la primera enva los
do en CDP es cero pone 0 en el bit ADM (para ocho bits menos significativos de LOC, la segunda
no seguir pidiendo ciclos) y 1 en el bit PR (lo los ocho ms significativos, la tercera y la cuarta
que provoca una interrupcin, cuya RS comprue- envan el valor de CDP, y la quinta y la sexta el de
ba, mirando el registro EP, si ha habido errores en DEC6 .
la transferencia). Si no ha resultado cero en CDP, 6
Para lectura sera al revs: primero se leen los ocho bits
ensambla los dos bytes siguientes del disquete en
ms significativos de DEC, y as hasta la sexta instruccin IN,
DAT, y as sucesivamente. que lee los ocho bits menos significativos de LOC. Pero esta
Para escribir en el disquete (L/E = 0) el proceso operacin tiene poca utilidad.
268 Leccin 7. Algortmez: la periferia

bus A Cuanta del robo


(IN y OUT) 8 16 en robo de ciclo
Qu porcentaje de ciclos de la MP le quita el
LOC0 controlador a la UCP? Hagamos un pequeo an-
LOC 16
LOC1 lisis de tiempos similar al del Apartado 1.13.
CDP0 Como en Smplez, supondremos que el tiempo
CDP
CDP1 de ciclo de la MP es 200 ns. Por otra parte, la tasa
DEC0 de transferencia del disquete es 46.080 B/s (Apar-
DEC
EP DEC1 DAT tado 5.6), es decir, iniciada la transferencia de un
8 8 8 8 16
bloque de palabras, el controlador enva o recibe
OUT IN OUT IN en robo 23.040 palabras por segundo, por lo que roba un
(a 18) (de 18) (a 19) (de 19) bus D de ciclo
ciclo cada 106 /23.040 = 43,4 s., o sea, cada
16
43.400/200 = 217 ciclos de memoria. En este in-
Figura 7.6. Controlador de disquetes para Algortmez. tervalo entre robo y robo la UCP puede ejecutar
unas cien instrucciones, suponiendo que, para el
El esquema hardware que permite implementar programa que se est ejecutando, CPI = 2 (Apar-
este convenio es sencillo: basta con que los seis tado 4.8).
bytes que forman los tres registros estn cableados Pero la tasa de transferencia de un disquete es
como una pila, como indica la Figura 7.6. pequea. El lector puede comprobar que la de un
disco (Apartado 5.5) excede la inversa del modesto
tiempo de ciclo que hemos supuesto para la MP. Y
Modelo funcional si se aproxima (lo cual en nuestro caso ocurre para
una tasa de 8 MB/s) sera preferible un controlador
El modelo funcional (es decir, cmo programar
que funcionase mediante robo de bus en lugar de
el controlador) se deduce de la explicacin ante-
robo de ciclo (Apartado 5.8).
rior: al registro de estado se accede por el puer-
to 18, y a los otros tres registros mediante instruc-
ciones OUT sobre el puerto 19. La primera OUT in- Uso del controlador
troduce ocho bits en la cabeza (la parte ms baja en
la figura), la siguiente desplaza esos ocho bits ha- Teniendo presente la descripcin funcional an-
cia arriba e introduce otros ocho en su lugar, etc., terior, escribir un programa para transferir datos
de modo que despus de ejecutarse esta secuencia entre un disquete y la MP resulta conceptualmen-
de instrucciones: te trivial: basta con introducir los datos adecuados
en los registros LOC, CDP y DEC e inicializar el
LD.B .0, #19 registro de estado, y para ello slo se requiere una
OUT .1, [.0] ; (R1) = LOC0 secuencia de instrucciones OUT. Sin embargo, la
OUT .2, [.0] ; (R2) = LOC1 necesidad de conocer la localizacin fsica de los
OUT .3, [.0] ; (R3) = CDP0
datos en el disquete y de traducir esa localizacin
OUT .4, [.0] ; (R4) = CDP1
OUT .5, [.0] ; (R5) = DEC0 al formato adecuado hacen muy tediosa la tarea.
OUT .6, [.0] ; (R6) = DEC1 De ah que rara vez se tengan que programar es-
tas operaciones en el nivel de mquina convencio-
la pila queda como indica la Figura 7.6. Como s- nal. Para eso est el sistema de gestin de fiche-
lo hay seis registros de ocho bits en la pila, si se ros (Apartado 17.7). Veamos, no obstante, alguna
vuelve a ejecutar una OUT el que est en la cabeza sugerencia sobre cmo habra que proceder en el
se pierde. nivel de mquina convencional.
7.8. Controlador de disquetes 269

Supongamos, por ejemplo, que se trata de im- disquete 0, donde se encuentra almacenado el pro-
plementar el seudocdigo del Apartado 5.9 (lectu- grama de arranque, y copiarlo a partir de la direc-
ra de diez sectores de un disco), y que el primer cin HF600 de la MP. Esta rutina debe ejecutarse
sector es el sector 6 de la pista 20 de la superfi- antes de haber cargado el sistema operativo, es de-
cie 1 del disco 2. La programacin en ensambla- cir, sin que estn cargados los vectores de interrup-
dor es muy sencilla (tanto para el caso de una sola cin ni las rutinas de servicio. Por tanto, se trata
zona como para el de dos). Lo ms laborioso es de un caso especial: las interrupciones estn inhi-
iniciar(RLOC): bidas, y aunque el controlador genera una al termi-
--- nar la transferencia, la UCP no la atiende; hay que
LD .0,#2 ; disquete vigilar el bit ADM mediante la lectura del puerto
LD .1,#2 de estado para detectar el final de la lectura.
CALL /DESPL_IZQ Antes de inicializar el controlador comprobare-
OR .0,#1 ; superficie
mos que est preparado y, una vez empezada la
SHL .0
LD.B .1,#7 transferencia, esperaremos hasta que termine co-
CALL /DESPL_IZQ rrectamente o hasta detectar un error. Los errores
OR .0,#20 ; pista durante la transferencia provocan que alguno de
LD.B .1,#5 los bits de error del registro de estado (bits 4 al 7,
CALL /DESPL_IZQ Figura 7.5) tome el valor 1.
OR .0,#6 ; sector Al finalizar la transferencia, si la operacin se
; ya est la localizacin en R0 ha realizado correctamente se bifurca a la direc-
LD .2,#19
cin HF600 para empezar la ejecucin de este
OUT .0,[.2]
LD.B .1,#8 programa que se acaba de leer del disquete. Si se
CALL /DESPL_DER ha detectado algn error, se guarda en el registro
OUT .0,[.2] R0 un cdigo del tipo de error (un 1 si el contro-
--- lador no estaba preparado, un 2 si hay un error
Donde DESPL_IZQ y DESPL_DER son subprogra- durante la lectura) y se pasa a escribir un mensaje
mas que desplazan a la izquierda y a la derecha y el cdigo por la pantalla.
el contenido de R0 tantas veces como indique R1 Es decir, en seudocdigo:
(Ejercicio 15 de la Leccin 6). Est el controlador preparado?
Naturalmente, es mejor si esta operacin se es- si no, 1 R0 y bifurcar a ERROR
cribe como una rutina que reciba como argumen- si esta preparado entonces
tos los datos de disquete, superficie, pista y sector, cargar los registros LOC, CDP y DEC
o, mejor an, que los argumentos sean el disquete inicializar el registro EP
y el nmero absoluto del sector y que la rutina cal- esperar a que termine la lectura,
o a que se produzca un error
cule los otros tres datos (Ejercicio 10). Esto es lo si hay xito, bifurcar a H'F600
que (entre otras cosas) hace un programa llamado si hay error,
gestor del disco (Apartado 19.8). 2 R0 y bifurcar a ERROR
Pasemos ahora a un ejemplo concreto en el que
la inicializacin del registro LOC es muy fcil. Puede comprobarse fcilmente que el Progra-
Como veremos al estudiar el diseo de un sistema ma 7.7 (en la pgina siguiente) es una implemen-
operativo para Algortmez (Apartado 18.9), entre tacin en ensamblador. (No se han incluido las ins-
las rutinas bsicas almacenadas en la parte ROM trucciones que han escribir el mensaje de error me-
de la MP debe haber una que permita leer el blo- diante espera activa, lo que se propone como Ejer-
que 0 (sector 0 de la pista 0 de la superficie 0) del cicio 2).
270 Leccin 7. Algortmez: la periferia

MODULE LEC_SEC0
ORG H'FC00 ; suponemos que est al principio de la ROM
MPR EQU 1 ; mascara de PR (bit 0)
MADM EQU 4 ; mascara de ADM (bit 2)
MFIN EQU H'F4 ; mascara de fin (bits 2, y 4 a 7)
INIEP EQU H'0C ; 1 L/E, 1 ADM, 0 resto
; (las interrupciones no funcionan an)
LS0_ENT LD .1,#18 ; dir. puerto estado R1
LD .2,#19 ; dir. puerto datos R2
IN .3,[.1]
AND .3,#MPR
BZ ERROR1 ; si PR=0, error
CLR .4
OUT .4,[.2] ; 0 LOC0
OUT .4,[.2] ; 0 LOC1
OUT .4,[.2] ; 0 CDP0 Con esto se
OUT .3,[.2] ; 1 CDP1 introduce D'256 en CDP
OUT .4,[.2] ; 0 DEC0
LD.B .3,#H'F6 ; Y con esto,
OUT .3,[.2] ; H'F6 DEC1 H'F600 en DEC
LD.B .3,#INIEP
OUT .3,[.1] ; inicializa EP
ESPERA IN .3,[.1] ; estado R3
AND .3,#MFIN
BZ /H'F600 ; si bits-error=0, ADM=0, fin
CMP.B .3,#MADM
BZ ESPERA ; si ADM=1, seguir en espera
LD .0,#2 ; si error transferencia, 2 R0
BR ERROR
ERROR1 LD .0,#1 ; si no preparado, 1 R0
ERROR ---
---
END LS0_ENT

Programa 7.7 Lectura del primer sector del disquete 0

7.9. Controlador de grficos Memoria de vdeo

Lo mismo que hicimos para los discos en el Siguiendo el principio explicado en el Aparta-
Apartado anterior, describiremos un controlador do 5.2, nuestro controlador incluye una memoria
muy simplificado, pero que permite captar las que forma parte del espacio de direccionamiento
ideas bsicas. Entre otras cosas, los controladores de la UCP, concretamente, entre las direcciones
reales pueden programarse para distintos mo- HD280 (D53.888) y HF7FF (D63.487) inclusi-
dos de texto (caracteres con distintos tamaos, ve, es decir, 9.600 bytes. Supondremos, para sim-
fundiciones, etc.) y de grficos (distintas resolu- plicar, que toda esta memoria se dedica a mantener
ciones, nmeros de colores, paletas, etc.). El nues- una imagen, es decir, es una memoria de fotogra-
tro slo tiene un modo de texto y otro grfico, con ma. Al final de este Apartado veremos la conve-
una resolucin fija de 320240 pixels, y 16 colo- niencia de dotar al controlador de una memoria de
res distintos, tambin fijos. Es decir, cada imagen vdeo de capacidad mayor que la de fotograma.
en la pantalla est compuesta por 240 lneas, cada Como cada imagen tiene 320240 = 76.800 pi-
lnea tiene 320 pixels y cada pixel puede tener uno xels y el espacio reservado para la memoria de fo-
de entre 16 colores. tograma tiene 9.6008 = 76.800 bits, a cada pixel
7.9. Controlador de grficos 271

palabra de direccin palabra de direccin


de la imagen le corresponde un bit de ese espacio
DBMF = D53.888 = HD280 DBMF + 38
de direccionamiento: al bit menos significativo de 15 0 15 0
la palabra de direccin D53.888 le corresponde
el primer pixel (el primero por la izquierda) de la
(0,0) (15,0) (304,0) (319,0)
primera lnea (lnea 0), y al bit ms significativo de
la palabra de direccin D63.487 le corresponde el
ltimo pixel de la ltima lnea (lnea 239). A cada
columna c
lnea le corresponden 320/16 = 20 palabras. La Fi-
gura 7.7 ilustra esta correspondencia entre bits de
pixel (c,l)
la memoria de fotograma y pixels de la imagen. lnea l
Qu bit de qu direccin le corresponde al
pixel (c, l), es decir el que est en la colum-
na c de la lnea l? Si llamamos DBMF (di-
reccin de base de la memoria de fotograma) columna 319
a D53.888, las direcciones de las veinte pala-
lnea 239
bras correspondientes a la lnea 0 son DBMF,
DBMF + 2, DBMF + 4... DBMF + 38; las de la l- Figura 7.7 Correspondencia entre pixels y bits.
nea 1, DBMF + 40, DBMF + 42..., y las de la l-
nea l, DBMF + 40l, DBMF + 40l + 2.... Para
la lnea l, la palabra de direccin DBMF + 40l
contiene los bits de los pixels c = 0 a c = 15, la
de direccin DBMF + 40l + 2, los de los pixels
c = 16 a c = 31, etc. Por tanto, la direccin de la
palabra en la que se encuentra el bit correspon-
diente al pixel (c, l) es7 :
d = DBMF + 40 l + (c/16) 2
En cuanto al nmero de bit dentro de la pa-
labra, hay que tener en cuenta que los menos
significativos (los de peso 0) de las direcciones
DBMF, DBMF + 40, DBMF + 80, etc., correspon-
Figura 7.8 MP y memoria de vdeo.
den a los pixels (0,0), (0,40), (0,80), etc. los de pe-
so 1, a (1,0), (1,40), (1,80) etc. As, a las columnas Hemos dicho que a cada pixel le corresponde
c = 0 a c = 15 les corresponden los bits de peso de un bit del espacio de direccionamiento reservado
0 a 15. A las diecisis siguientes columnas (c = 16 para la memoria de video. Segn esto, parece que
a c = 31) les vuelven a corresponder los bits de pe- las imgenes tendran que ser en blanco y negro.
so de 0 a 15. Y en general, a la columna c le co- Pero tambin hemos dicho que cada pixel puede
rresponde el bit de peso tener uno de entre diecisis colores. Esto es posi-
b = c md 16 ble porque, como indica la Figura 7.8, aunque la
operacin muy fcil de realizar en binario median- memoria de vdeo slo ocupa 9.600 bytes del es-
te un AND con la mscara H000F. pacio de direccionamiento de la UCP, en realidad
Ms adelante utilizaremos estas frmulas para tiene 49.600 bytes, organizados en cuatro pla-
dibujar un pixel en una determinada posicin de 7
Observe que se trata de una divisin entera, por lo que
pantalla. (c/16) 2 no es lo mismo que c/8.
272 Leccin 7. Algortmez: la periferia

nos a los que llamaremos I (intensidad), R (rojo), grfico se escribe en l, en los cuatro bits menos
G (verde) y B (azul). Cuando con una instruccin significativos, la mscara de color.
ST se manda escribir 1 en un bit de la memoria Para hacer uso del controlador en modo grfico,
de vdeo en realidad se est diciendo activar ese en principio slo hay que tener en cuenta que des-
pixel. El controlador tiene en cuenta una msca- de un programa se puede escribir (con una ins-
ra de color de cuatro bits que previamente se le ha truccin ST o ST.B) en cualquier direccin de la
puesto en un registro. Si el valor de esta mscara memoria de vdeo y que el controlador va leyen-
es 0000, se escribe 0 en los cuatro bits (uno de do sucesivamente todos los bits de esta memoria,
cada plano), resultando el color negro; si la ms- volviendo al primero cuando ha llegado al ltimo.
cara es 0001 resulta el color azul, etc. (Tabla 7.1). Supondremos que la memoria no permite opera-
ciones simultneas (lectura y escritura al mismo
Msc. Color Msc. Color tiempo), por lo que el controlador tiene que ir ro-
0000 Negro 1000 Gris oscuro
bando ciclos a la UCP peridicamente. Como lue-
0001 Azul 1001 Azul claro
0010 Verde 1010 Verde claro go veremos, estos robos de ciclo se producen al
0011 Cian 1011 Cian Claro final de cada lnea de pantalla, para leer las veinte
0100 Rojo 1100 Rojo claro palabras correspondientes a la lnea siguiente. Y al
0101 Magenta 1101 Magenta claro final de cada pantalla completa el controlador po-
0110 Marrn 1110 Amarillo ne a uno el bit PR. De acuerdo con esto, al puerto
0111 Gris claro 1111 Blanco de estado se le pondrn inicialmente estos valores:
Tabla 7.1 Mscaras de colores. GR = 0 para el modo de texto, GR = 1 para el
Veremos primero el modelo funcional y su uso, modo grfico.
y luego estudiaremos con detalle los modelos es- L/E = 0, es decir, operacin de escritura. Esto
tructural y procesal; con respecto a stos, baste de- es coherente con lo que ese bit significaba en el
cir, de momento, que cuando termina de enviar el controlador de disquetes: operacin de lectura
ltimo pixel de una lnea a la pantalla, el controla- de la memoria para escribir en el disquete; aqu
dor accede a la memoria de fotograma, y, robando es para escribir en la pantalla8 .
veinte ciclos a la UCP, lee de cada plano las veinte
ADM = 1, para permitir el robo de ciclo. Los
palabras que contienen los pixels de la siguiente
circuitos del controlador se encargan de direc-
lnea y rellena los registros que forman la SAM
cionar inicialmente al principio de la memoria
(memoria de acceso serial, Apartado 5.2).
de vdeo, y luego van automticamente ponien-
do este bit a cero (cuando han terminado los
Modelo funcional y programacin veinte accesos para la lectura de una lnea) o a
El controlador slo tiene dos registros vi- uno (cuando necesitan leer otra lnea).
sibles (accesibles mediante instrucciones IN y IT en modo de texto se pondr inicialmente a
OUT): EP y RD/MK. uno, ya que funciona como el modelo de pan-
EP es el puerto de estado, y tiene asignada la talla de texto que venamos considerando hasta
direccin 22. Tiene los mismos bits que el EP ahora: cuando se hace una OUT sobre el puer-
del controlador de disquetes (Figura 7.5) y un to 23 el controlador pone PR a cero, y cuando
bit adicional, GR, para poner el modo de texto ha terminado de escribir el carcter lo vuelve
(GR = 0) o grfico (GR = 1). a poner a uno para generar una interrupcin.
RD/MK, de direccin 23, en modo de texto es 8
L/E = 1 permitira leer de los registros internos del con-
el puerto de datos (se escribe en l, con OUT, trolador hacia la memoria de vdeo, lo que puede ser intere-
la codificacin de un carcter), y para el modo sante para ciertos usos en los que aqu no entraremos.
7.9. Controlador de grficos 273

Sin embargo, en modo grfico IT se pondr, en MODULE DIBPIXEL


principio, a cero, para que el controlador no ge- ; Dibuja el pixel de coordenadas (R1,R2)
; con el color dado en R0
nere interrupciones. Si se pone a uno, genera ; (Los tres registros quedan modificados)
una interrupcin al final de la ltima lnea de FROM RUTINAS IMPORT DESPL_IZQ
cada imagen. Luego comentaremos lo que pue- EXPORT DIBPIX, PIX
DBMF EQU H'D280
de hacer la rutina de servicio, pero en cualquier LIN RES 1
caso deber reponer un cero en el bit PR. COL RES 1
CD16P2 RES 1
PR a uno en modo de texto (preparado para re- DIBPIX PUSH .3
cibir un carcter) y a cero en modo grfico (el LD.B .3,#23
controlador lo pone a uno al final de la ltima OUT .0,[.3] ; pone el color
CALL PIX ; escribe el pixel
lnea, y si IT = 1 genera interrupcin). LD.B .3,#22
Aqu es aplicable lo mismo que decamos pa- LD.B .0,#H'14; modo grfico, sin
OUT .0,[.3] ; interrupciones
ra el controlador de disquetes: la programacin de POP .3
grficos es conceptualmente trivial, pero compli- RET
cada en sus detalles. Por ejemplo, para escribir un PIX ST .1,COL ; coordenada x
ST .2,LIN ; coordenada y
pixel de un determinado color en una lnea y una SHL .2 ; 2*y
columna determinadas hay que: SHL .2 ; 4*y
Poner en el puerto 23 la mscara correspon- ADD .2,LIN ; 5*y
SHL .2 ; 10*y
diente al color. SHL .2 ; 20*y
Calcular la direccin de palabra y el nmero SHL .2 ; 40*y
AND .1,#H'FFF0 ; (x/16)*16
de bit dentro de la palabra, de acuerdo con las SHR .1 ; (x/16)*8
frmulas anteriores. SHR .1 ; (x/16)*4
Escribir en la palabra direccionada ceros en to- SHR .1 ; (x/16)*2
ST .1,CD16P2
dos los bits (para no alterar los otros pixels) y ADD .2,CD16P2 ; 40*y + (x/16)*2
uno en el bit calculado. Obviamente, tambin ADD .2,#DBMF ; dir. palabra
podemos hacerlo escribiendo un byte (o sea, LD .1,COL
AND .1,#H'000F ; x md 16
con ST.B en lugar de ST), pero en este caso hay LD .0,#H'0001 ; primer bit = 1
que modificar ligeramente las frmulas. CALL /DESPL_IZQ ; desplaza (R0)
El Programa 7.8 implementa justamente estas ST .0,/0[.2] ; escribe el pixel
RET
operaciones. Recuerde que DESPL_IZQ desplaza a END
la izquierda R0 tantas veces como indique R1.
Haciendo uso de este subprograma podramos Programa 7.8 Subprograma para dibujar un pixel
dibujar cualquier imagen. Pero no tiene sentido ha-
cerlo pixel a pixel, ya que la operacin de escritura Programa 7.9 (pgina siguiente) las dibuja en pan-
en la memoria puede afectar de una sola vez a die- talla completa, pero se puede modificar fcilmente
cisis bits. Por ejemplo, poner un color de fondo para que reciba otros dos argumentos: las coorde-
no requiere las operaciones de desplazamiento y nadas de origen y final.
enmascaramiento necesarias para un pixel: basta Dibujar lneas inclinadas es algo ms complica-
poner la mscara del color en el puerto 23 y es- do: hay que tener en cuenta la discretizacin de
cribir, mediante un bucle, HFFFF en todas las pa- las coordenadas y activar los pixels adecuados pa-
labras de direcciones comprendidas entre HD280 ra que la lnea quebrada resultante se aproxime
y HF7FE. Tambin ms sencillo que dibujar un lo ms fielmente posible a la recta a representar
pixel es trazar lneas horizontales o verticales. El (Ejercicio 12).
274 Leccin 7. Algortmez: la periferia

MODULE DIBLINEAS nido permite dibujar los caracteres en el modo de


FROM RUTINAS IMPORT DESPL_IZQ texto. La Figura 7.9 presenta un modelo estructu-
FROM DIBPIXEL IMPORT PIX
EXPORT HORIZ, VERT ral esquemtico, en el que se ha hecho abstraccin
; (R0): color de detalles que seran ya propios del nivel de mi-
; (R1): columna (x); (R2): lnea (y) croarquitectura.
DBMF EQU H'D280
LIN RES 1
HORIZ PUSH .3 Modelo procesal: escritura en la RAM
LD.B .3,#23
OUT .0,[.3] ; pone el color Para estudiar el funcionamiento, consideremos
ST .2,LIN
SHL .2 ; 2*y separadamente las dos caras de la RAM: la que
SHL .2 ; 4*y se comunica con el exterior (buses A y D y registro
ADD .2,LIN ; 5*y RD/MK) y la que enlaza con la SAM, empezando
SHL .2 ; 10*y con la primera, que depende del modo.
SHL .2 ; 20*y
SHL .2 ; 40*y En el modo de texto (bit GR del registro EP a ce-
ADD .2,#DBMF; direcc. primera ro), el registro RD/MK es el registro de datos, y el
LD .0,#H'FFFF ; palabra modelo funcional es, como hemos dicho, igual al
LD .3,#20 que ya conocemos desde Smplez (Apartado 1.12)
BUCHOR ST .0,[.2++]; escribe pixels
SUB .3, #1 y desde Smplez+i4 por lo que respecta a las inte-
BNZ BUCHOR rrupciones (Apartado 2.8), y que hemos recordado
BR FIN en los primeros Apartados de esta Leccin.
La ROM contiene los mapas de bits de todos
VERT PUSH .3
LD.B .3,#23 los caracteres. El mapa de bits de un carcter es,
OUT .0,[.3]; pone el color simplemente, una cadena de bits que indica qu
CLR .2 ; lnea 0 pixels deben iluminarse y cules no (en este modo
BUCVER CALL /PIX
ADD .2,#1 ; lnea siguiente de texto los caracteres son blancos sobre un fon-
CMP .2,#240 do cuyo color puede haberse puesto previamente
BN BUCVER en el modo grfico). Cada carcter ocupa en la
BR FIN pantalla un rectngulo de ocho pixels horizonta-
FIN LD.B .3,#22
LD.B .0,#H'14; modo grfico, sin les y diez verticales (resultan as 240/10 = 24 l-
OUT .0,[.3] ; interrupciones neas de texto de 320/8 = 40 caracteres). Dejando
POP .3 un pixel como separacin entre caracteres conti-
RET guos y otro como separacin entre lneas, cada ca-
END
rcter tendr un mapa formado por una cadena de
79 = 63 bits. Estas cadenas estn ordenadas en
Programa 7.9. Subprograma para dibujar lneas hori- la ROM (que, en total, necesita 25663/8 = 2.016
zontales y verticales bytes, algo menos de 2 KB), de modo que cada
codificacin de carcter en RD/MK direcciona al
Modelo estructural principio de su cadena. Unos circuitos que contie-
nen un contador de filas (de 0 a 23) y de columnas
El controlador tiene tres componentes de me- (de 0 a 39) determinan la posicin actual del cur-
moria: la RAM de fotograma, con 49.600 bytes, sor, situado en los 63 pixels del carcter a escribir,
la SAM (memoria de acceso serial, Apartado 5.2), y las direcciones de palabras que les corresponden.
formada por cuatro registros de 320 bits (20 pala- Habr que escribir, como minimo, en nueve pala-
bras) cada uno, y una pequea ROM cuyo conte- bras o en nueve bytes, puesto que son nueve pixels
7.9. Controlador de grficos 275

bus A
8 (IN y OUT ) 16 16
16

RAM
contadores de circuitos de contadores de
columnas direccionamiento palabras
y filas y lneas
de caracteres de pixels
B
SAM
G 20 lecturas de la RAM en robos de ciclo
B
T hsync
R 20 lecturas de la RAM en robos de ciclo vsync
G
T circuitos
I 20 lecturas de la RAM en robos de ciclo de vdeo
R
T
20 lecturas de la RAM en robos de ciclo
ROM de I
caracteres circuitos de T
enmascaramiento

RD/MK EP
16 (en modo
grfico)
8 8 8 8

OUT IN OUT IN
(a 23) (de 23) (a 22) (de 22) bus D
16

Figura 7.9 Controlador grfico para Algortmez.

en vertical. Naturalmente, slo se escribe en los quince ceros y un solo uno, el que corresponde al
bits que corresponden al carcter, y en todos los pixel. Pero el controlador no tiene que escribir los
planos (texto blanco). quince ceros, porque entonces estara modificando
El funcionamiento en el modo grfico es ms pixels que deben permanecer como estn. El con-
sencillo, puesto que no hay que hacer ninguna tra- trolador tiene que interpretar que 0 significa no
duccin de codificacin a pixels, pero el uso de tocar ese bit (en ninguno de los planos). Como
este modo es ms difcil, como ya hemos compro- no vamos a entrar aqu en el nivel de microarqui-
bado en los ejemplos anteriores. tectura, en la Figura 7.9 se indica simplemente la
En ambos modos hay un detalle importante con necesidad de unos circuitos de enmascaramien-
respecto a los circuitos que realizan las operacio- to. Hay dos operaciones de enmascaramiento: la
nes de escritura en la RAM: no se deben escribir que acabamos de explicar, referente a los bits que
todos los bits de una palabra (o de un byte), co- estn a cero en el dato procedente del bus D o de
mo se hace en una escritura normal en una RAM. la ROM de caracteres, y la que, en el modo grfi-
Cuando dibujamos un pixel (Programa 7.8) prepa- co, hay que hacer para escribir slo en los planos
ramos previamente en un registro un contenido de indicados por el contenido del registro RD/MK.
276 Leccin 7. Algortmez: la periferia

Modelo procesal: lectura de la RAM tih


th
Analicemos ahora la otra cara de la RAM, la
de la derecha en la Figura 7.9, que es independien-
te del modo. Los cuatro registros de desplazamien- tvh
to se rellenan peridicamente con veinte palabras tpth tpdh
seguidas que se leen de la RAM. La palabra de
Figura 7.10 Seales de sincronizacin horizontal.
menor direccin debe quedar a la derecha del re-
gistro. Una vez rellenos, estos registros se leen se-
rialmente y sus contenidos se van desplazando a la Seales de sincronizacin
derecha, con un perodo (T en la Figura 7.9) que Como vemos en la Figura 7.9, los circuitos de
es igual al perodo de presentacin sucesiva de los vdeo generan, entre otras, las seales llamadas
pixels en la pantalla. hsync y vsync, que deben estar ajustadas a las
Las seales de vdeo y los circuitos que las ge- especificaciones de la pantalla. En realidad, cada
neran dependen de la tecnologa de la pantalla, pe- una de ellas est formada por dos seales: un tren
ro hay algo comn para todas: los pixels se activan de impulsos, cuya frecuencia es el nmero de l-
de izquierda a derecha en la superficie de la pan- neas o de imgenes por segundo, y otra que deter-
talla, y cuando se llega al ltimo de una lnea se mina cundo empieza y cundo termina el dibujo
pasa al primero de la lnea siguiente. Este retorno de una lnea o de una imagen completa.
de lnea necesita un cierto tiempo, durante el cual La Figura 7.10 muestra las seales de sincro-
el controlador hace la transferencia de la RAM a nizacin horizontal; las de sincronizacin vertical
la SAM de las veinte palabras de cada uno de los son similares, cambiando th por tv, tih por
planos, cuyos contenidos determinan los pixels de tiv, etc. En la Tabla 7.2 se definen los nombres
la lnea siguiente. Similarmente, al terminar con el de los intervalos de tiempo (las definiciones se
ltimo pixel de la ltima lnea, el retorno al primer aplican de manera obvia a la sincronizacin ver-
pixel de la primera lnea requiere un tiempo duran- tical) , y se indican sus valores9 en funcin de un
te el cual, si el controlador est en el modo grfico perodo de pixels T = 100 ns (frecuencia 10 MHz).
con las interrupciones permitidas, puede ejecutar- Observe que el nmero de imgenes por segun-
se la rutina de servicio. do (o tasa de refresco vertical) es aproximada-
Suponemos que los circuitos de la RAM permi- mente 70: 1/tv = 1/(14, 3 103 ) = 69, 93
ten leer simultneamente una palabra en cada pla-
no, pero que estos accesos no pueden ser simul- Cuanta del robo y tiempo para la rutina de
tneos con accesos de la UCP a la MP. Por tanto, servicio
en el tiempo que transcurre desde que termina una
lnea hasta que empieza la siguiente el controlador Hay tiempo suficiente para robar veinte ciclos?
tiene que robar veinte ciclos a la UCP. Tres pre- Como tpdh + tih + tpth = 18 s > 4 s, la respuesta
guntas surgen inmediatamente: es suficiente ese es afirmativa.
tiempo para los veinte ciclos (20200 ns = 4 s)?, Qu porcentaje de ciclos de memoria le roba
qu porcentaje de ciclos le roba el controlador a el controlador a la UCP? En cada lnea, cuya du-
la UCP?, y cunto tiempo hay disponible para la racin total es 50 s, se utilizan 4 s para robar
rutina de servicio? Slo podemos responder a ellas ciclos. La proporcin de ciclos que se le roban a
con datos concretos sobre las seales de sincroni- 9
Aunque no estamos describiendo un controlador real, pa-
zacin que han de generar los circuitos de vdeo ra establecer estos valores se han redondeado los que dan va-
para presentar las imgenes en la pantalla. rios fabricantes de controladores para pantallas de LCD.
7.9. Controlador de grficos 277

Horizontal Vertical
Nombre Valor Definicin Nombre Valor
th 500 T Perodo de sincronizacin horizontal: desde que se ac- tv 143.000 T
(50 s) tiva el primer pixel de una lnea hasta que se activa el (14,3 ms)
primer pixel de la lnea siguiente
tih 20 T Duracin del impulso de sincronizacin horizontal tiv 3.000 T
(2 s) (0,3 ms)
tpdh 80 T Prtico delantero horizontal tpdv 10.000 T
(8 s) (1 ms)
tpth 80 T Prtico trasero horizontal (ajustando tpth y tpdh se tptv 10.000 T
(8 s) puede desplazar la imagen a derecha e izquierda, y (1 ms)
modificar su ancho)
tvh 320 T Duracin de la parte visible de una lnea (320 pixels) tvv 120.000 T
(32 s) (12 ms)
Tabla 7.2 Intervalos de tiempo en la sincronizacin horizontal y vertical

la UCP es, por tanto, 4/50, es decir, 8 %. Este por- guiente es solamente el desplazamiento de algu-
centaje puede reducirse a 0,4 % con un cableado nos trozos pequeos, independientes del resto de
en la memoria de vdeo que permita transferir en la imagen. A estos pequeos fragmentos, mate-
paralelo las veinte palabras a cada uno de los re- rizalizados como mapas de bits, les llamaremos
gistros de la SAM. Y puede reducirse a cero con monos (sprites). Supongamos que queremos
una memoria VRAM autntica, en la que opera- ver desplazarse por la pantalla en sentido diago-
cin de transferencia de la RAM a la SAM puede nal una bolita de ocho pixels de dimetro. El
ser simultnea con la escritura en la RAM. subprograma propuesto como Ejercicio 13 dibuja
Cunto tiempo hay disponible para la rutina de este mono, y slo tendramos que llamarlo dentro
servicio? La respuesta es tan fcil como las ante- de un bucle en el que iramos incrementando las
riores: tpdv + tiv + tptv = 2,3 ms. coordenadas del vrtice. Pero esto tiene dos incon-
venientes:
Uso del controlador Ajustar la velocidad del desplazamiento no es
Ya hemos visto cmo proceder para dibujar fi- fcil: habra que incluir dentro del bucle un bucle
guras elementales. Y, con un poco de paciencia, de espera de tal modo que el cambio de un foto-
no resulta difcil escribir programas para figuras grama al siguiente se haga con el ritmo adecuado.
complejas. Pero en muchas aplicaciones (los jue- Mientras escribimos en la RAM pueden apa-
gos, por ejemplo) es necesario dotar de movimien- recer los robos de ciclo que transfieren lneas a
to a las figuras. De hecho, la idea est implcita en la SAM. Y aunque se tratase de una VRAM, sin
el nombre memoria de fotograma. Estudiemos robos de ciclo, es probable (especialmente si no
cmo podramos conseguir este efecto y veremos hay un solo mono, sino varios o muchos) que las
aparecer las limitaciones de nuestro controlador, transferencias ocurran coincidiendo con las escri-
lo que nos llevar a sugerir una posible mejora de turas en esa lnea o en las adyacentes. Esto provoca
su diseo. un efecto de parpadeo (flickering) normalmente
En principio, uno puede pensar en escribir un inadmisible. Como norma general, nunca se debe
programa que dibuje repetidamente imgenes es- modificar el contenido de la memoria de fotogra-
cribiendo en la memoria de fotograma. Con fre- ma mientras la imagen se est dibujando, es decir,
cuencia, la diferencia entre un fotograma y el si- durante el intervalo tvv (Tabla 7.2).
278 Leccin 7. Algortmez: la periferia

Esto nos deja como intervalo de tiempo adecua- rrado implica el trazado de una lnea vertical com-
do para escribir en la memoria de fotograma el for- pleta con el color del fondo. Es decir, multiplicar
mado por la secuencia tpdv + tiv + tptv = 2,3 ms, los accesos a memoria por dos. Aun as, en este
que es, precisamente, el tiempo disponible para la caso parece que s da tiempo: la operacin se hace
rutina de servicio. Es decir, o bien utilizamos esa en menos de 2 ms, aunque estamos cerca del lmite
rutina de servicio para actualizar la memoria de de 2,3 ms. Es obvio que en un caso general (varios
fotograma, o, mejor (puesto que las rutinas de ser- monos con formas y colores diferentes, diferentes
vicio son para operaciones generales, no para apli- velocidades, etc.) no es posible generar el nuevo
caciones particulares), desde el programa se vi- fotograma en el tiempo disponible.
gila el bit PR del puerto de estado (Ejercicio 14),
La solucin es fcil, pero implica un rediseo
y se comienza la actualizacin cuando se pone a
del controlador. Se trata de la misma idea de las
uno. Esto resuelve tambin el primer inconvenien-
dos zonas explicada para el caso del acceso a dis-
te: sabemos que el bit PR se pone a uno cada 1/70
cos con ADM en el Apartado 5.9. Para ello, la me-
segundos, aproximadamente.
moria de vdeo necesita el doble de capacidad: en
Ahora bien, da tiempo en 2,3 ms para actuali- lugar de ocupar 9.600 bytes del espacio de direc-
zar la memoria de fotograma? La respuesta, natu- cionamiento ocupara 19.200. La memoria de fo-
ralmente, depende del nmero y tipo de instruccio- tograma sigue teniendo 9.600 bytes. Un bit adicio-
nes necesarias. Si el lector resuelve el Ejercicio 13 nal del registro EP le dice al controlador si la me-
puede calcularlo para el mono bolita. Utilice- moria de fotograma est en la primera parte o en
mos el Programa 7.9 que ya est escrito, y supon- la segunda de la memoria de vdeo10 . De esta ma-
gamos que el mono es una lnea vertical que ha nera, mientras el controlador transfiere a la SAM y
de desplazarse horizontalmente. En principio, ca- enva las seales para dibujar lo que hay en la me-
da vez que se escribe el mono deberan ejecutarse moria de fotograma (lo que lleva un tiempo no ya
las instrucciones comprendidas entre la que tiene de 2,3 ms, sino de 14,3 ms), el programa puede ir
la etiqueta VERT y la RET, pero las tres primeras y rellenando la otra zona. Cuando el bit PR se pone
las cuatro ltimas no es necesario incluirlas (el co- a uno el programa se limita a cambiar el nuevo bit
lor y el modo grfico pueden ponerse una sola vez, del puerto EP para que la memoria de fotograma
al principio). Desde la ST .1,COL hasta la etique- pase a ser la de la zona recin rellenada.
tada BUCVERT ocupan 46 bytes y su ejecucin re-
quiere 52 accesos a memoria (sin contar los del Aun as, preparar una imagen complicada puede
subprograma DESPL_IZQ). Pero lo que ms influ- llevar bastante tiempo. Normalmente, la capacidad
ye en el cmputo del tiempo es el bucle BUCVERT, de la memoria de vdeo es an mayor, y en una
que se ejecuta 240 veces. Cada una de esas veces tercera zona se tienen permanentemente los mo-
hace 15 accesos. Por tanto, el nmero total de ac- nos estticos (de manera parecida a como en la
cesos, o sea, de ciclos de memoria, es mayor que ROM se tienen los monos estticos de los ca-
52 + 15240 = 3.652, lo que supone un tiempo de racteres). La preparacin del siguiente fotograma
3.652200 ns 0,73 ms. A esto hay que aadir consiste simplemente en copiar monos.
que cada vez que se llama al subprograma hay que
calcular las nuevas coordenadas del mono y pa-
10
srselas. Y otra cosa importante: hay que borrar De nuevo, estamos simplificando. Para que fuese ms
el mono anterior (de lo contrario, en este caso, en general, y ms parecido a los controladores reales, debera
ser posible programarlo con una direccin de comienzo de la
lugar de una lnea vertical desplazndose a la de- memoria de fotograma. Esto requiere ms puertos de entra-
recha veramos cmo la pantalla se va rellenando da/salida (que podran ser accesibles con un esquema de pila
por la izquierda con el color de la lnea). Este bo- similar al del Apartado anterior).
7.10. Unidad de gestin de la memoria 279

7.10. Unidad de gestin de la me- direccin direccin


UCP UGM MP
moria lgica fsica

La unidad de gestin de la memoria (UGM) es Figura 7.11 Funcin de traduccin de la UGM.


un subsistema hardware que opcionalmente pue-
de ponerse entre la MP y los buses A y C (Figu- Sealemos tambin que, en ambos casos, y con
ra 6.1). Su funcin es traducir las direcciones de un sistema de multiprogramacin, se consigue otro
diecisis bits generadas por la UCP (direcciones objetivo no menos importante: que la MP que-
lgicas) a direcciones de veinte bits para una MP de protegida, en el sentido de que un programa
de 1 MB (direcciones fsicas). Es decir, trans- no pueda impedir el buen funcionamiento de los
forma un espacio de direccionamiento de 64 KB otros. En la Leccin 20 veremos cmo se imple-
en un espacio de direccionamiento de 1 MB. menta esta proteccin en el caso de Algortmez.
Antes de seguir adelante con nuestra UGM con-
viene tener una perspectiva general sobre la ges- Paginacin y traduccin
tin de memoria, una combinacin de tcnicas
implementadas en hardware y en software que En esta UGM, una pgina es una sucesin de
puede tener uno u otro de estos dos objetivos: 8 KB. El espacio lgico tiene ocho pginas, y el
Si el espacio de direccionamiento de la UCP fsico, ciento veintiocho (Figura 7.12). Una direc-
es pequeo comparado con la capacidad de la MP cin lgica tiene dos partes: los tres bits ms sig-
que se desea, poder utilizar esa MP que la UCP no
PL0
puede direccionar directamente. O bien:
15 PL1
2
Si el espacio de direccionamiento de la UCP es 13
direccin lgica

12 PL2
mayor que la capacidad de la MP disponible, ha-
PL3 64 KB
cer que los programas funcionen como si esa MP
3212

(Espacio de
existiese fsicamente. PL4 direccionamiento
lgico)
Algortmez est en el primer caso (espacio de PL5

direccionamiento de slo 64 KB), pero en muchas 0 PL6


UCP el caso es el segundo: es frecuente que las PL7
direcciones lgicas generadas por la UCP tengan
PF0
32 (o, incluso, 64) bits, lo que nos da un espacio
de direccionamiento de 4 GB (o de 4.096 TB). En 19
PF1

este segundo caso, la UGM y el software asocia- 87


do para la gestin de la memoria son ms com-
direccin fsica

plicados, porque se tienen que ocupar de trasiegos 13


12 1 MB
entre la MP y el disco que resulten transparentes
(Espacio de
para el programador. ste dispone de una memo- direccionamiento
3212

PF87 fsico)
ria virtual mayor que la realmente disponible. En
el Apartado 15.8 presentaremos estas tcnicas de
memoria virtual. 0
En cualquiera de los dos casos es aplicable la
idea de la Figura 7.11: la UGM traduce una direc- PF127

cin lgica generada por la UCP en una direccin


fsica para la MP. Figura 7.12 Direcciones fsicas y lgicas.
280 Leccin 7. Algortmez: la periferia

PF0 Tabla de
pginas
19 1
PF8 0

direccin fsica: HAEC8C


1
PF9 1 1010111 0
15

direccin lgica: H4C8C


0 1
1 1
13 0 13 1

PL0 12 0 12 0
1 1
PL1 9 PF65 1 1
0 0
PL2 118 0 0
87 1 1
0 0
PL3 8 PF87 0 0
88 0 0
PL4 PF88 1 1
65 1 1
PL5 119 0 0
0 0 0 0
PL6 96
PF96
PL7 Tabla de
pginas Figura 7.14. Ejemplo de traduccin de direccin lgica
Espacio de
direccionamiento a direccin fsica.
lgico (64KB) PF118
PF119

PF127 correspondencia concreta: a la pgina lgica 0 le


Espacio de
direccionamiento
corresponde la pgina fsica 9, etc.
fsico (1MB)
Dada una funcin de correspondencia, la tra-
Figura 7.13. Correspondencia entre direcciones lgi- duccin de una direccin lgica a una direccin
cas y fsicas a travs de la tabla de pginas. fsica es muy fcil: los tres bits ms significativos
de la direccin lgica conducen a la fila de la tabla
de pginas que contiene el nmero de pgina f-
nificativos dan el nmero de la pgina, y los trece
sica; este nmero, en binario, consta de siete bits,
menos significativos la direccin dentro de la pgi-
que son los ms significativos de la direccin fsi-
na. Anlogamente, los siete bits ms significativos
ca. Los trece bits menos significativos representan
de una direccin fsica dan el nmero de pgina
la direccin relativa dentro de la pgina, que es la
del espacio fsico, y los trece menos significativos
misma para la pgina lgica y la fsica.
la direccin dentro de esa pgina. Esta particin
del espacio de direccionamiento es la misma que La Figura 7.14 ilustra este mecanismo de con-
se hace con el direccionamiento relativo a pgi- versin de una direccin en otra para el caso
na (Apartado 4.5); lo nuevo ahora es la distincin particular de la traduccin de la direccin lgi-
entre un espacio de direccionamiento lgico y un ca H4C8C: como los tres bits ms significativos
espacio de direccionamiento fsico. son 010, est en la pgina lgica 2. El elemen-
La traduccin de una direccin lgica a una di- to correspondiente de la tabla de pginas contie-
reccin fsica se establece a travs de una tabla ne H57 = D87, es decir, todas las direcciones de
de pginas, formada por ocho filas, una para ca- esta pgina lgica se traducen direcciones fsicas
da pgina lgica. El contenido de cada fila es un de la pgina fsica 87. El resultado es la direccin
nmero comprendido entre 0 y 127: el nmero de fsica HAEC8C.
pgina fsica que le corresponde a la pgina lgi-
ca. Los contenidos de la tabla de pginas en un Aparentemente, la tabla de pginas de la Figu-
momento dado establecen una funcin de corres- ra 7.14 tiene un bit de ms (el ms significativo,
pondencia entre las direcciones lgicas y las fsi- separado por una raya). Es el bit de validez, cuya
cas. En la Figura 7.13 se muestra una funcin de funcin explicaremos ms adelante.
7.10. Unidad de gestin de la memoria 281

Modelos funcional y estructural bus A


16 8 direccin
16 lgica
En nuestra UGM, la tabla de pginas se mate- (IN y OUT)
rializa con un conjunto de ocho registros de ocho
H80
bits, P0 a P7, que se manejan como puertos de en- P0 T0

trada/salida (con instrucciones IN y OUT). Tiene


H81
lec P1 T1
lec
H82
tambin un puerto de estado, al que asignaremos esc P2 T2 esc
_ H83 _
la direccin de entrada/salida D20. Lo mismo que b/p P3 T3
b/p
hacamos para el controlador de disquetes, supon- modo P4
H84
T4 (a la MP)
dremos que los registros P0 a P7 estn cableados (de la UCP) P5
H85
T5
como una pila y se accede a ellos por la direccin P6
H86
T6
de puerto 21. As, para cambiar los contenidos de H87
INT P7 T7 direccin
todos los registros se debern ejecutar ocho ins- fsica
trucciones OUT seguidas sobre este puerto. (a la UCP) puerto 21
C IT PR 20
Ahora bien, la modificacin del contenido de puerto 20
(a la MP)
los registros no debe afectar inmediatamente a la
8
funcin de correspondencia, porque tras la primera (IN y OUT)
bus D
OUT habra cambiado ya esta funcin. Si la funcin
16
es, por ejemplo, la indicada por la Figura 7.13 y
las ocho instrucciones OUT estn en pgina lgica Figura 7.15 UGM de Algortmez.
PL1, esas instrucciones estn fsicamente almace-
nadas en la pgina fsica PF118. Si en el momen- lo que contenga el registro de la tabla direccionado
to en que se ejecutase la primera OUT los regis- por los tres bits ms significativos de la direccin
tros que establecen la funcin de correspondencia lgica. Si el bit ms significativo de ese registro
cambiasen, el contenido del correspondiente a PL2 tiene el valor 1, el controlador deja pasar la or-
(D87) se copiara en el de PL1, y la UCP ira a den de lectura o escritura a la MP, y pone la di-
leer la siguiente instruccin en una direccin fsica reccin fsica de veinte bits en la lnea de salida.
de la PF87, que nada tiene ya que ver con aquella Pero si es 0 entonces no enva la orden a la MP;
en la que se encuentra la segunda OUT. en su lugar, pone 1 en PR, lo que tiene el efecto
Por eso, los registros que realmente forman la de generar una interrupcin (las instrucciones IN
tabla de pginas (y establecen la funcin de corres- sobre el puerto 21 que estarn incluidas en la ru-
pondencia) no son los del puerto 21. Como mues- tina de servicio restaurarn luego el 0 en PR).
tra el esquema de la UGM (Figura 7.15), en los Este bit se llama bit de validez, y resulta esencial
registros de la tabla, T0 a T7, se copian los conte- como mecanismo de proteccin en un sistema de
nidos de P0 a P7 cuando stos son ya definitivos. multiprogramacin.
El registro de estado tiene los bits PR e IT, Del registro de estado se utiliza otro bit, el
como los otros controladores de perifricos. Al se- ms significativo, llamado C en la Figura 7.15.
gundo (permiso de interrupciones) se le dar el va- Cuando se escribe 0 en este bit es cuando los
lor inicial 1, y, normalmente, PR tendr el valor contenidos de los registros P0 a P7 se copian en
0. Dada una peticin de acceso de la UCP a la T0 a T7. Por tanto, el cambio de funcin de co-
MP (con lec o esc y b/p, que indica si el acceso rrespondencia se realiza con las ocho instruccio-
es a un byte o a una palabra), los circuitos toman nes OUT sobre el puerto 21, terminadas con otra
la direccin lgica puesta en el bus A y realizan la OUT que escriba H02 (C = 0, IT = 1, PR = 0) en el
traduccin a direccin fsica, que ser funcin de puerto 20.
282 Leccin 7. Algortmez: la periferia

Los registros T0 a T7 pueden cargarse tambin registros de la UGM, una instruccin slo puede
con los valores H80 a H87, escribiendo 1 en acceder, en principio, a una direccin dentro de las
C (es decir, H82 en el puerto 20). Observe que pginas que tiene asignadas. Ahora bien, para ac-
la funcin de correspondencia que establecen es- ceder a otra pgina de la MP basta con cambiar
tos valores es tal que a las ocho pginas lgicas el valor de uno de los registros. El programa ten-
les corresponden las ocho primeras pginas fsi- dr que hacer, por tanto, un uso adecuado de es-
cas, PF0 a PF7 (con los ocho bits de validez a 1). tos registros para bifurcar de un mdulo a otro o
En la Leccin 20 utilizaremos ese espacio fsico para leer datos almacenados en distintos mdulos.
para contener al sistema operativo. Como este uso se realiza con instrucciones OUT
Como puede verse en la figura, la UGM recibe sobre el puerto 21, y como esta instruccin es pri-
otra informacin de la UCP: modo. Es una se- vilegiada, esto implica que el programa se ejecute
al que coincide con el estado del indicador SUP: en modo supervisor.
modo = 0 cuando la UCP est en modo usuario, Pero hay otra manera ms interesante de utilizar
y modo = 1 cuando est en modo supervisor. El la UGM. Sabemos (Apartado 4.2) que en un siste-
efecto del cambio de 1 a 0 o de 0 a 1 es ma operativo con multiprogramacin puede haber
el mismo de escribir 0 o 1 en C. Es decir, si la varios programas cargados en la MP, de los que
UCP pasa a modo usuario, la UGM transfiere auto- en cada momento slo uno est ejecutndose. Su-
mticamente a los registros T0 a T7 los contenidos pongamos que tenemos un sistema as (de hecho,
de P0 a P7, y si la UCP pasa a modo supervisor, la lo estudiaremos en la Leccin 20), en el que el ta-
UGM escribe en T0 a T7 los valores H80 a H87. mao de los programas se limita a 64 KB. Enton-
ces, se pueden tener hasta diecisis programas de
64 KB en la MP (quince de aplicaciones, que se
Uso de la UGM
ejecutan en modo usuario, y el sistema operativo,
Tenemos ya la posibilidad de conectar a nues- que se ejecuta en modo supervisor). Solamente el
tra UCP una memoria de 1 MB. Pero cmo se sistema operativo puede manejar a los registros de
maneja esa memoria? Porque, por lo que respecta la UGM: cuando decide que el programa de usua-
a las instrucciones, seguimos teniendo un espacio rio que se estaba ejecutando quede suspendido y
de direccionamiento de 64 KB. Dados unos valo- ceda la UCP a otro, cambia la funcin de corres-
res cargados en los registros de la tabla de pginas, pondencia, poniendo en los registros los valores
estos 64 KB estn esparcidos en ocho pginas que correspondan a las pginas del nuevo progra-
distribuidas por la MP de 1 MB, y no hay modo ma. Naturalmente, el sistema operativo mantiene
de acceder a otras pginas, si no es cambiando los una tabla con los valores de los registros para cada
contenidos de esos registros. uno de los programas que tiene cargados en la MP.
Una primera posibilidad para poder utilizar ese Como los programas de aplicaciones funcionan
espacio de 1 MB es la siguiente. Imaginemos un en modo usuario, no pueden cambiar los valo-
programa que requiere, sea para el cdigo, para los res de los registros (cualquier intento de ejecutar
datos, o para ambas cosas, ms de 64 KB, y que es- OUT genera la interrupcin por violacin del modo
t estructurado modularmente, de modo que cada usuario, que suspende al programa y hace entrar en
mdulo de programa o de datos ocupa como mxi- juego al sistema operativo), y as se asegura que un
mo 64 KB. La relacin entre el espacio fsico y el programa no pueda acceder a las pginas reserva-
lgico es 1.024 KB/64 KB = 128 pg/8 pg = 16, das para otro.
es decir, podemos tener hasta diecisis mdulos En esta situacin, cada programa puede ocupar
cargados simultneamente en la MP. En un mo- 64 KB (ocho pginas) como mximo. Pero si es
mento dado, con unos determinados valores en los ms pequeo, no es razonable asignarle este mxi-
7.11. Resumen 283

mo. A un programa de 6 KB le basta con una pgi- 7.11. Resumen


na; las otras siete se pueden aprovechar para otro
u otros. Pero si no hubiese una precaucin adicio- El procedimiento de comunicacin con los peri-
nal, este programa de 6 KB podra acceder a las fricos mediante espera activa es el mismo que ha-
pginas de esos otros. Para eso est el bit de va- bamos estudiado con Smplez, con la nica salve-
lidez: cuando el sistema operativo asigna menos dad de que en Algortmez, al estar diseado con un
de ocho pginas a un programa, pone 1 en los espacio de direccionamiento de la entrada/salida
bits de validez de los registros que traducen a las independiente del espacio de direccionamiento de
pginas asignadas, y pone 0 en los del resto de la MP, utilizamos las instrucciones IN y OUT para
los registros. Como hemos visto ms arriba, el in- acceder a los puertos.
tento de acceso a una de las pginas no asignadas
provoca una interrupcin, cuya rutina de servicio Gran parte de esta Leccin se ha dedicado a ana-
tomar las acciones oportunas (por ejemplo, en- lizar tres variantes para el sistema de interrupcio-
viar un mensaje avisando de que la operacin no nes. Con el hardware mnimo exterior a la UCP,
est permitida). un simple circuito que pone una direccin (la 266)
en el bus A, se hace necesaria una rutina de con-
Finalmente, es de destacar que con esta disposi-
sulta de interrupciones que identifique, mediante
cin la reubicacin es trivial. Cada programa dis-
software, al perifrico que ha pedido interrupcin.
pone de su propio espacio de direccionamiento (de
Con un esquema de consulta por hardware el pe-
n 8 KB, donde n es el nmero de pginas que
rifrico se identifica enviando la direccin de su
tiene asignadas), y puede ejecutarse como si estu-
vector por el bus A y ya no es necesaria la rutina de
viese cargado en una MP para l solo, a partir de
consulta de interrupciones. Y con el controlador
la direccin (relativa) 0. La reubicacin, totalmen-
de interrupciones es posible gestionar fcilmente
te transparente para el programa de usuario, se ha-
las prioridades.
ce cuando el sistema operativo carga (con un car-
gador absoluto) las pginas lgicas del programa El controlador de disquetes descrito permite
en las pginas fsicas asignadas y pone los valores conectar cuatro unidades e implementar los pro-
adecuados en los registros de la UGM antes de pa- cedimientos explicados de manera general en el
sarle control a ese programa. Y la reubicacin di- Apartado 5.9, y con el controlador grfico pode-
nmica no plantea ningn problema: el lector pue- mos dibujar imgenes sencillas, pero la obtencin
de comprobarlo analizando el mismo ejemplo (en de imgenes en movimiento precisara ampliar el
el ensamblador de Smplez+i4) que ponamos en controlador, dotndole de ms memoria de video.
el Apartado 4.5 para ilustrar cmo se consegua Por ltimo, se ha presentado una sencilla uni-
la reubicacin dinmica con registros de base. De dad de gestin de memoria que nos servir en la
hecho, la traduccin de direcciones que hacemos Leccin 20 como apoyo para implementar un sis-
con la UGM es una generalizacin del direcciona- tema operativo de multiprogramacin sobre Algo-
miento relativo a base. rtmez. Esta UGM nos permite trabajar con direc-
Para el sistema operativo de la Leccin 20 nos ciones fsicas de veinte bits, para acceder a una
basaremos en esta UGM. Antes, en el Aparta- MP de 1 MB, a partir de las direcciones lgicas
do 15.8, las ideas de paginacin y espacios lgi- de diecisis bits que genera la UCP. Adems, es-
co y fsico nos servirn para, generalizando, ver tablece una funcin de correspondencia entre las
cmo puede implementarse una memoria virtual pginas de un espacio de direccionamiento lgico
(que significa una situacin inversa a la que hemos y un espacio de direccionamiento fsico que, co-
estudiado aqu: el espacio lgico es mayor que el mo veremos, es muy til para la implementacin
espacio fsico). del sistema operativo.
284 Leccin 7. Algortmez: la periferia

7.12. Observaciones terminolgicas el esquema es suficiente en la mayora de los casos, y


simplifica el hardware necesario, por lo que se encuen-
Hemos visto dos formas de organizar la exploracin tra en muchas UCP. Veremos un ejemplo concreto en
o consulta (o sondeo, que es otra traduccin de po- la Leccin 8.
lling) de las causas de interrupcin: prioridad abso- Los controladores grficos tienen una historia de
luta (fixed priority) o prioridad circular (round evolucin muy rpida desde los MDA y CGA (Mo-
robin). Aunque aqu nos hemos centrado en la imple- nochrome/Color Graphics Adapter) que acompaaban
mentacin software, tambin en las implementaciones a los primeros pecs a partir de 1981. Despus de al-
hardware puede seguirse una u otra estrategia. gunas mejoras de vida ms efmera (HGA, EGA...) el
En el entorno de la programacin de grficos se lla- VGA (Video Graphics Array), aparecido en 1987 (y sus
ma sprite a lo que hemos definido: una pequea fi- variantes: SVGA, XVGA...), se convirti en el estndar
gura, implementada como un mapa de bits, que pue- que sigue siendo la base de muchos sistemas grficos,
de insertarse en una imagen. La figura es esttica, pero aunque para los equipos de sobremesa la tradicional
modificando las coordenadas de su insercin fotogra- placa VGA ya ha sido sustituida por los controla-
ma a fotograma se consigue la ilusin del movimiento. dores basados en el AGP (Apartado 5.4). Un derivado
Literalmente, sprite es una especie de duende, pero del VGA es el QVGA (Quarter size VGA), orientado a
uno de los significados del trmino mono (dibujo dispositivos porttiles pequeos con pantalla de LCD,
rpido y poco elaborado segn el D.R.A.E.) se ajusta con resolucin 320240. Las informaciones tcnicas
muy bien a la idea. de algunos fabricantes de estos controladores nos han
La UGM es ms conocida como MMU (Me- servido de gua para disear el de Algortmez.
mory Management Unit).
7.14. Orientaciones bibliogrficas
7.13. Notas histricas En Wakerly (1981) pueden consultarse detalles del
software de sistemas de interrupciones para micropro-
Algunos hitos histricos sobre la evolucin de la pe- cesadores. Una edicin posterior (Wakerly, 1989) se
riferia se han mencionado en el Apartado 5.16. centra en la familia M680x0.
A medida que ha ido avanzando la tecnologa, con- Una explicacin detallada de los distintos modos
troladores que se implementaban con circuitos externos grficos y de vdeo, desde el punto de vista del hardwa-
a la UCP se han ido integrando en el mismo micro- re, se da en Garca Guerra (1995). El libro ms citado
procesador. As ocurre, por ejemplo, con el controlador sobre programacin de controladores VGA y SVGA es
de interrupciones: muchos microprocesadores incluyen el de Ferraro (1994), pero el ms completo de los que
el hardware de gestin de prioridades en la UCP, y en conocemos sobre programacin de grficos en bajo ni-
ellos la mscara suele estar incluida en el registro de vel (que, adems, est disponible en la Red) es el de
estado (por lo que se salva automticamente en la pila Abrash (1997).
al atender a una interrupcin, y se restaura con la ins- La UGM es, como siempre, una simplificacin de
truccin RETI). En estos casos generalmente se utiliza las reales, que normalmente dan soporte tambin pa-
una mscara codificada: en lugar de un bit para ca- ra implementar memoria virtual (Apartado 15.8). Por
da nivel de interrupcin, un nmero ms reducido de ejemplo, la diseada para los 680x0 permite un espa-
bits codifican los niveles. As, con cuatro bits se co- cio de direccionamiento lgico de 4 GB y en lugar de
difican diecisis niveles. Este esquema es algo menos dos niveles (supervisor y usuario) tiene un mecanismo
flexible, ya que no se pueden inhibir individualmen- de proteccin de ocho niveles (Freer, 1989). Una UGM
te los niveles. Si, por ejemplo, el valor de la mscara comercial muy parecida a la nuestra (para un proce-
es B0100 = D4, podrn interrumpir las causas de ni- sador tambin parecido a Algortmez) se describe en
vel 5 y las de niveles superiores, pero no se puede inhi- Rabbit (2004)12 .
bir, digamos, el nivel 6 sin inhibir el 511 . No obstante,
12
A diferencia del diseo del controlador grfico, esta
11
Aunque siempre se podr inhibir individualmente una UGM no ha sido fuente de inspiracin para la de Algort-
causa manipulando el bit que corresponda en el puerto de es- mez: la nuestra apareca ya en la tercera edicin de este libro
tado de su controlador. (1998), antes de la introduccin de ese producto.
7.15. Ejercicios 285

7.15. Ejercicios primero N (segn sea el perodo con el que que-


ramos que se sucedan las interrupciones) y luego
1. Modifique el Programa 7.2 de modo que: 0 en PR y 1 en IT y en AR. Escriba
reciba la direccin de comienzo de la zona por una RS que vaya actualizando tres bytes reserva-
la pila; dos para llevar la cuenta de horas, minutos y
segundos.
cuente el nmero de caracteres y lo devuelva
por la pila; 7. Escriba una RS para la interrupcin de rastreo. La
utilice la pila para la variable local DIRFIN, y rutina deber escribir en la pantalla los contenidos
de todos los registros (incluidos CP y RE) y espe-
en el programa invocador no haya que tener en
rar a que se teclee ret.
cuenta que se modifican registros.
8. La RS propuesta para el desbordamiento (Progra-
2. Escriba un subprograma para presentar en la pan- ma 7.6) tiene un pequeo inconveniente. Imagi-
talla, mediante espera activa, mensajes de error. ne que en el ejemplo que ilustraba el uso de la
Recibir, por el registro R0, un nmero natural RS de la pantalla, en el que un programa ejecu-
que ser el cdigo del error. Tendr definidos, taba algunos clculos mientras se escriba Estoy
mediante DATA.B, los nombres de los mensajes. con clculo 1, aparece un desbordamiento antes
Por ejemplo, para (R0) = 1, perifrico no prepa- de que haya terminado de escribirse ese mensa-
rado, para (R0) = 2, error de lectura. El pro- je. Qu ocurrira? Modifique la RS del desbor-
grama deber escribir una lnea con: Error: , y damiento para que detecte si la de la pantalla est
a continuacin el nombre del error. ocupada con algn mensaje y, en caso afirmativo,
3. Escriba un subprograma, IMPR, que recoja los termine de escribir ese mensaje y luego el corres-
caracteres de una zona de 132 bytes de la MP (que pondiente al error de desbordamiento.
previamente habr llenado el programa que lla- 9. Consideremos a Algortmez acompaado del
ma a IMPR) y los escriba en una lnea de una im- controlador de interrupciones, al cual estn co-
presora. Suponga que los puertos de estado y de nectados un teclado, una pantalla, una impreso-
datos del controlador de la impresora tienen di- ra y un disco por las lneas INT0, INT1, INT4
recciones 4 y 5. e INT7, respectivamente. El controlador funcio-
nar en el modo vector programado (M = 0).
4. Haga un anlisis de tiempos en el Programa 7.1
Para cada uno de los cuatro perifricos menciona-
similar al realizado para Smplez en el Aparta-
dos hay una rutina de servicio, y las direcciones
do 1.13.
de los vectores de interrupcin (coincidentes con
5. Modifique la RCI para las dos versiones alternati- las direcciones de los puertos de estado) respecti-
vas (variantes) comentadas en el Apartado 7.4. vas son D0, D2, D8 y D14:
6. Suponga que existe un dispositivo perifrico tem- Causa Dir.(Dec./Hex.) Lnea
porizador con las siguientes especificaciones. Sus teclado 0/0 INT0
puertos de estado y de datos tienen asignadas pantalla 2/2 INT1
las direcciones D10 y D11, respectivamente. El impresora 8/8 INT4
puerto de estado contiene, en orden de menor a disco 14/E INT7
mayor peso, los bits PR, IT, AR (arran-
que) y PA (parada). En el puerto de datos se a) Escriba un programa de inicializacin que,
puede escribir un valor que el controlador del pe- entre otras cosas, acceda al puerto 254 para
rifrico interpreta como un nmero N compren- poner el modo vector programado y per-
dido entre 0 y 255. El perodo de base del tem- mitir interrupciones, y al puerto 255 para
porizador es 50 ms, y genera interrupciones cada que slo puedan interrumpir las lneas indi-
(N + 1) 50 ms. Cada 50 ms el controlador de- cadas.
crementa el contenido del puerto de datos, y cuan- b) Escriba las operaciones iniciales y finales
do llega a cero interrumpe (poniendo PR a uno) de las cuatro RS. Se supone que las inte-
y restituye el valor N . Para iniciarlo se escribir rrupciones pueden anidarse, conservndose
286 Leccin 7. Algortmez: la periferia

la prioridad (disco, impresora, pantalla y te- 13. Escriba un subprograma para dibujar un mono
clado). consistente en un crculo de 88 pixels. Natu-
c) Suponga que en el instante t = 0 interrum- ralmente, deber activar los pixels adecuados pa-
pe el teclado (cuya rutina de servicio tarda ra que la figura se aproxime lo mejor posible al
3 seg), en el instante t = 1 interrumpe la crculo. Los argumentos de entrada sern las coor-
impresora (duracin de la RS: 2 seg) y en denadas del vrtice superior izquierdo y el color.
el instante t = 2 el disco (duracin de la 14. En principio, la vigilancia del bit PR para de-
RS: 1 seg). Dibuje un diagrama de tiempos tectar el final del ltimo pixel de la imagen y as
similar al de la Figura 3.14. comenzar la actualizacin de la memoria de foto-
d) Considere ahora la misma secuencia de grama se realiza con un bucle de espera en el que
acontecimientos, pero suponiendo que en la se lee el puerto de estado y se comprueba si ese bit
rutina de servicio del teclado se ha puesto la se ha puesto a uno. Pero la rutina de servicio po-
mscara H00 en el puerto 255, y dibuje el ne PR a cero. Cul es el problema? Resulvalo.
nuevo diagrama de tiempos. (Sugerencia: manipule el bit IT dentro del bucle).

10. Escriba una rutina para leer o escribir un sector 15. Calcule la tasa de transferencia de la pantalla gr-
arbitrario de uno de los cuatro disquetes. El pro- fica en modo texto, suponiendo que el tiempo ne-
grama que le llama habr introducido previamen- cesario para escribir un carcter es el que requie-
te en la pila los siguientes datos, cada uno en una ren las operaciones de escritura en la memoria de
palabra: vdeo, y dependiendo de que, segn cmo se ha-
ya diseado el secuenciador, se escriban palabras
Tipo de operacin: 1 para lectura, 0 para escri-
u octetos. Tenga en cuenta que, segn sea su po-
tura.
sicin en la pantalla, los pixels de cada lnea del
Nmero absoluto del sector: entre 0 y 2879. carcter pueden estar en la misma palabra (o byte)
Direccin de comienzo de la zona (de 512 by- o en dos seguidas.
tes) en la MP.
16. Analice el resultado de la ejecucin del siguiente
La rutina deber calcular, a partir del nmero ab- programa:
soluto del sector, la superficie (los primeros 1440
sectores estn en la superficie 0, y los siguientes MODULE ATILA
en la 1), la pista y el sector dentro de la pista, para PR-ATI CLR .0
componer el dato a enviar al registro LOC. Lue- CLR .1
go inicializar adecuadamente, con instrucciones ARRIBA CMP .0,#PR-ATI
OUT, los registros LOC, CDP y DEC, y finalmen- BZ SALTA
te, el registro de estado. ST.B .1,[.0++]
11. En el estndar QVGA la resolucin es tambin BR ARRIBA
320240 pixels, pero tiene al menos 256 colores. SALTA CMP .0,#FIN+3
Para 256 colores cada pixel se puede codificar en BZ ABAJO
un byte, no hay necesidad de recurrir a los planos ADD.B .0,#1
de colores y la programacin se simplifica. Por BR SALTA
qu cree que no hemos adoptado este modelo para ABAJO ST.B .1,[.0++]
Algortmez? Estudie soluciones para hacerlo. FIN BR ABAJO
END PR-ATI
12. Escriba un subprograma para dibujar en la panta-
lla grfica segmentos de rectas horizontales, verti- 17. Escriba un programa que intente hacer lo mismo
cales e inclinadas, recibiendo seis argumentos de que hace el anterior, pero en la memoria fsica de
entrada: las coordenadas de los puntos inicial y 1 MB. En qu condiciones podra ejecutarse este
final, el grosor (en pixels) y el color. segundo programa?

You might also like