Professional Documents
Culture Documents
Algortmez: la periferia
249
250 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
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
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
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
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"
---
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
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
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
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
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
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
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
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
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
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
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
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
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
PF0 Tabla de
pginas
19 1
PF8 0
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
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
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?