Puertos de entrada/salida

14 

Texto completo

(1)

Puertos de entrada/salida

INRdat, [Rdir]: puerto direccionado por Rdir (bits 0–7) → Rdat (bits 0–7) OUTRdat, [Rdir]: (Rdat) (bits 0–7)→ puerto direccionado porRdir (bits 0–7)

Ejemplo: Iniciación del teclado (puertos 0 y 1) y la pantalla (puertos 2 y 3):

----LD.B .0, #0 LD.B .1, #1 LD.B .2, #2 LD.B .3, #3 CLR .4 OUT .4, [.0℄; 0 → PRTEC LD.B .4, #1 OUT .4, [.2℄; 1 → PRPAN ----c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 1

Espera activa

Rutinas para lectura y escritura de caracteres:

LEECAR IN .4, [.0℄ ; omprueba

AND .4, #1 ; estado

BZ LEECAR ; te lado y

IN .5, [.1℄ ; lee

CALL ESCCAR ; ha e e o

RET ESCCAR IN .4, [.2℄ ; omprueba AND .4, #1 ; estado BZ ESCCAR ; pantalla y OUT .5, [.3℄ ; es ribe RET END

(2)

Causas de interrupción

Externas

Línea enmascarable, INT

Línea no enmascarable, NMI (interrumpe aunque (PIN) = 0) Normalmente, interrupciones de periféricos por la línea enmascarable.

Internas

VMU (violación del modo usuario) BK (instrucción BRK) BKV (instrucción BRKV) RS (si (RAS) = 1) Z V N C PIN RAS H SUP 0 1 2 3 4 8 9 10 15 c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 3

Vectores de interrupción

Causa Dir (Dec./Hex.)

0 periférico 0 0/0 1 periférico 1 2/2 ... ... ... ... ... ... ... ... ... 127 periférico 127 254/FE 128 rastreo 256/100 129 instrucción BRKV 258/102 130 instrucción BRK 260/104 131 no enmascarable 262/106 132 violación modo 264/108

(3)

Interrupciones: modelo procesal de la UCP

Cuando no enmascarable (NMI, VMU, BK o BKV), o bien otra y (PIN)=1:

1. Si VMU, aborta ejecución y pasa a 3

2. Termina de ejecutar la instrucción en curso

3. (PP)

−2 →

PP; (CP)

(PP);

(PP)

−2 →

PP; (RE)

(PP);

4. 0

PIN; 1

SUP;

5. Si NMI o causa interna, pone contenido del vector en CP. Si no, genera señal, recoge dirección del vector por el bus A, lee contenido y lo pone en CP 6. Sigue ejecutando instrucciones

c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 5

Esquemas para las interrupciones de periféricos

Para explorar las causas externas, varias posibilidades hardware (externo a la UCP)/software:

Consulta por software:

V=D’266 a bus A siempre (hardware mínimo) La palabra 266 contiene la dirección de una

rutina de consulta de interrupciones

Consulta por hardware:

La causa externa pone la dirección de su vector en el bus A

Controlador de interrupciones:

Gestiona ocho líneas de interrupcion y genera la dirección del vector

(4)

Consulta mediante software Salvar registros i := 127 RS i Restaurar reg. RETI (PR)=(IT)=1 i = 0 i := i−1 si no si no A B El hardware externo (mínimo) pone D’266 en el bus A; si (266) = X, en [MP(X)] empieza la RCI La RCI consulta puertos de estado hasta encontrar (PR) = (IT) = 1 Variantes:

(a)

De RSi a A

(b)

De RSi a B (prioridad circular, o «round robin») c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 7

Tabla de periféricos

La construye el sistema operativo al arrancar, y contiene datos sobre los periféricos

Ejemplo:

dir MP +0 +1 +2 +3

. . .

+19

d 12 A

φ φ φ

. . .

φ

d +20 10 5

φ φ φ

. . .

φ

d +40 0E 0

φ φ φ

. . .

φ

d +60 02 8

φ φ φ

. . .

φ

d +80 00 8

φ φ φ

. . .

φ

d +100 FF

φ φ φ

. . .

φ

H’12, H’02 y H’00 operativos; H’10 y H’0E no operativos

(5)

Rutina de consulta de interrupciones (1)

MODULE RCI

EXPORT RCI_ENT ; dir. relativa de omienzo

FROM GP IMPORT TBPRF ; dir. tabla periféri os

MSKOP EQU H'0080 ; para ver si operativo

MSKIT EQU H'0003 ; para ver si (PR)=(IT)=1

MSKFIN EQU H'FF ; para ver 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: puntero a la tabla

CLR .1 ; R1: puntero al ve tor

BUCLE LD.B .1, [.0++℄ ; arga byte0 en R1

CMP.B .1, #MSKFIN; mira si fin de tabla

BZ FIN

c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 9

Rutina de consulta de interrupciones (2)

LD.B .2, [.0++℄ ; arga byte1 en R2

AND .2, #MSKOP ; mira si operativo

BZ SIGUE

IN .2, [.1℄ ; lee estado periféri o

NOT .2

AND .2, #MSKIT ; mira si interrup ión

BNZ SIGUE ; pendiente

CALL [[.1++℄℄ ; bifur a a RS

FIN POP .2 ; restaura los registros

POP .1

POP .0

RETI ; retorno de interrup ión

SIGUE ADD .0, #18 ; a tualiza R0 para que

BR BUCLE ; apunte al byte0 siguiente

(6)

Controlador de interrupciones INT (a la UCP) INT0 INT1 INT7 puerto 254 puerto 255 bus A

bus D (IN y OUT)

16 16 16 8 (IN y OUT) (de la UCP) aint (si M = 0) 0 1 2 4 7 0 7 255: I7 I0 254: DV M IT PR

Puerto 254: PR, IT, M (modo), DV (direcc. vectores) Puerto 255: máscara de interrupciones

c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 11

Uso del controlador de interrupciones

Inicialmente se «programa», poniendo en el puerto 254 (campo «DV») los cuatro bits más significativos de las direcciones de los vectores (normalmente, 0000)

Cada RS incluye una máscara de 8 bits que se introduce en el

puerto 255 antes de permitir interrupciones (con EI)

Anidamiento y gestión de prioridades mucho más eficaz que con la consulta por software o por hardware

(7)

Controlador de ADM

0 15

H’0 a H’FFFF

DEC (dirección en curso)

15 0

32Kpalabras (máximo)

CDP (cuenta de palabras)

0 15

DAT (dato de entrada o de salida)

ADM IT PR

0 7

EP (estado periférico y controlador)

L/E

LOC (localización en el disco)

0 4 5 11 12 13

disco pista sector

(4 unidades, (80 pistas) (18 sectores/pista) 14 sup. 2 superf./unidad) 15 DAT bus D bus A 16 16 16 LOC0 CDP0 DEC0 LOC1 CDP1 DEC1 16 LOC CDP DEC EP 8 8 IN (de 18) OUT (a 18) 8 IN (de 19) OUT (a 19) 8 en robo de ciclo en robo de ciclo (IN y OUT) 8 c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 13

Ejemplo de programación del ADM (1)

Leer primer sector del disco 0 y cargarlo en la MP entre las direcciones H’F600 y H’F7FF (512 bytes)

¾Está el ontrolador de ADM preparado?

si no, 1

R0 y bifur ar a AVISO_ERROR si está preparado enton es

argar los registros LOC, CDP y DEC

ini ializar el registro EP

esperar a que termine la le tura,

o a que se produz a un error

si hay éxito, bifur ar a H'F600

si hay error,

(8)

Ejemplo de programación del ADM (2)

MODULE LEC_SEC0

ORG H'FC00 ; suponemos que está al prin ipio de la ROM

MPR EQU 1 ; mas ara de PR (bit 0)

MADM EQU 4 ; mas ara de ADM (bit 2)

MFIN EQU H'F4 ; mas ara de fin (bits 2, y 4 a 7)

INIEP EQU H'0C ; 1 → L/E, 1 → ADM, 0 → resto

; (las interrup iones no fun ionan aún)

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 introdu e D'256 en CDP

OUT .4,[.2℄ ; 0 → DEC0

LD.B .3,#H'F6 ; Y on esto,

OUT .3,[.2℄ ; H'F6 → DEC1 H'F600 en DEC

; ( ontinúa...)

c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 15

Ejemplo de programación del ADM (3)

; ya se han ini ializado LOC, CDP y DEC...

LD.B .3,#INIEP

OUT .3,[.1℄ ; ini ializa EP

ESPERA IN .3,[.1℄ ; estado → R3 AND .3,#MFIN ; MFIN = 11110100

BZ /H'F600 ; si bits-error=0, ADM=0, fin

CMP.B .3,#MADM MADM = 00000100

BZ ESPERA ; si ADM=1, seguir en espera

LD .0,#2 ; si error transferen ia, 2→ R0 BR ERROR ERROR1 LD .0,#1 ; si no preparado, 1→ R0 ERROR ---END LS0_ENT

(9)

Controlador gráfico

Controlador para una pantalla CRT o LCD

Recoge algunas características de VGA (QVGA: 320

×

240)

Modo gráfico: 320

×

240 = 76.800 pixels, 16 colores

Modo de texto: 24 líneas de 40 caracteres

Contiene una memoria de vídeo de 4

×

9.600 bytes

(4

×

76.800 bits)

Toda la memoria de vídeo es una memoria de fotograma

La memoria de vídeo ocupa 9.600 bytes del espacio de direccionamiento de la UCP

La UCP puede escribir en la memoria de vídeo

El controlador la lee periódicamente (robando ciclos)

c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 17

Pixels – bits 0 15 línea l pixel (c,l) columna c columna 319 línea 239 DBMF + 38 (319,0) (15,0) 15 0 palabra de dirección DBMF = D’53.888 = H’D280 palabra de dirección (304,0) (0,0)

Dirección de la palabra que contiene el bit del pixel (c, l):

d =DBMF+ 40 × l + (c/16) × 2

Número de bit dentro de la palabra:

(10)

Espacio de direccionamiento y memoria de vídeo 320 bits 320 bits 320 bits I ROM pila 9.600 B rojo verde azul 9.600B 9.600B 9.600B B 9.600B G intensidad máscara de color R B G R I H’0000 H’D280 H’FC00 320 bits SAM memoria de fotograma

(= memoria de vídeo, RAM) en el controlador MP

H’F800

Másc. Color Másc. Color

0000 Negro 1000 Gris oscuro 0001 Azul 1001 Azul claro 0010 Verde 1010 Verde claro 0011 Cian 1011 Cian Claro 0100 Rojo 1100 Rojo claro 0101 Magenta 1101 Magenta claro 0110 Marrón 1110 Amarillo 0111 Gris claro 1111 Blanco

Para poner amarillo el tercer pixel (bit 2) de la primera línea:

1110

máscara de color

0000000000000100

MP[H’D280]

(«0» a un bit de la memoria de vídeo significa

«no modificar ese bit en ninguno de los planos»)

c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 19

Controlador gráfico: modelo funcional

ADM IT PR GR 0 7 L/E puerto 22:

(estado) Inicialización del registro EP (puerto 22):

GR = 0 (texto) o GR = 1 (gráficos) L/E = 0 (escritura)

ADM = 1 (permite robos de ciclo) IT = 1 para texto; para gráficos, 0 o 1 PR = 1 (texto), PR = 0 (gráficos) 0 0 7 7 puerto 23: puerto 23: (GR = 0) (GR = 1) dato (carácter) máscara Registro RD/MK (puerto 23):

En modo de texto, registro de datos En modo gráfico, máscara de color

(11)

Programación del controlador gráfico: dibujar un pixel (1)

(R0) = color; (R1) =

x

(columna,

c

); (R2) =

y

(línea,

l

)

Primero, calcular dirección de la palabra:

d

=

DBMF

+ 40 × y + (x/16) × 2

ST .1,COL

ST .2,LIN SHR .1 ; x/2

SHL .2 ; 2*y SHR .1 ; x/4

SHL .2 ; 4*y SHR .1 ; x/8

ADD .2,LIN; 5*y SHR .1 ; x/16

SHL .2 ; 10*y SHL .1 ; (x/16)*2

SHL .2 ; 20*y ST .1,CD16P2

SHL .2 ; 40*y ADD .2,CD16P2

ADD .2,#H'D280

Ahora tenemos en R2 la dirección de la palabra, y (R1) =(x/16) × 2

c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 21

Programación del controlador gráfico: dibujar un pixel (2) (R0) = color; (R1) =(x/16) × 2; (R2) = dirección palabra; (COL) = x

Segundo: calcular el número de bit y colocarlo dentro de la palabra:

b= x mód 16= x − (x/16) × 16

LD.B .3,#23 ; ponemos ya el olor

OUT .0,[.3℄ ; (para dejar libre R0)

LD .0,#H'0001; primer bit = 1

SHL .1 ; (x/16)*4

SHL .1 ; (x/16)*8

SHL .1 ; (x/16)*16

NEG .1 ; -(x/16)*16

ADD .1,COL ; número de bit

CALL /DESPL_IZQ ; desplaza (R0)

ST .0,/0[.2℄; es ribe el pixel

Tercero: Poner modo gráfico, permitir ADM, sin interrupciones:

LD.B .3,#22

LD.B .0,#H'14

(12)

Programación del controlador gráfico: línea horizontal

; (R0): olor; (R1): número de línea (y)

...

LD.B .2,#23

OUT .0,[.2℄ ; pone el olor

ST .1,LIN

SHL .1 ; 2*y

SHL .1 ; 4*y

ADD .1,LIN ; 5*y

SHL .1 ; 10*y

SHL .1 ; 20*y

SHL .1 ; 40*y

ADD .1,#DBMF; dire . primera palabra

LD .0,#H'FFFF

LD .3,#20

BUCHOR ST .0, [.1++℄; es ribe pixels

SUB .3,#1

BNZ BUCHOR

LD.B .2,#22

LD.B .0,#H'14 ; modo gráfi o, sin

OUT .0,[.2℄ ; interrup iones

c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 23

Controlador gráfico: modelo estructural

IN ( yOUT) 16 bus A hsync vsync G B R I B G R I circuitos de vídeo bus D 16 8 8 (a 22) (de 22) OUT IN contadores de circuitos de direccionamiento circuitos de enmascaramiento 8 OUT (a 23) caracteres RD/MK 8 IN (de 23) EP palabras y líneas de pixels

20 lecturas de la RAM en robos de ciclo

20 lecturas de la RAM en robos de ciclo

20 lecturas de la RAM en robos de ciclo

20 lecturas de la RAM en robos de ciclo T T T T ROM de contadores de columnas y filas de caracteres 8 RAM SAM 16 16 16 (en modo gráfico)

(13)

Controlador gráfico: escritura en la RAM

Modo gráfico:

ST(escribe 16 bits) oST.B(escribe 8 bits)

Modo de texto:

• Cada carácter ocupa 8×10 pixels 24 líneas de 40 caracteres

ROM contiene mapas de bits de los caracteres: 7×9 = 63 bits/carácter

• RD/MK direcciona a un mapa de bits

• Contadores de filas y columnas determinan posición del cursor (direcciones de bytes o palabras)

• Circuitos de direccionamiento y de enmascaramiento escriben en los bits adecuados

En todo caso, sólo se escribe en los bits que deben modificarse

c

2009 DIT-ETSIT-UPM Algorítmez: la periferia transp. 25

Controlador gráfico: RAM

SAM

th tih tpth tpdh tvh horizontal vertical th = 50

µ

s tv = 14,3 ms tih = 2

µ

s tiv = 0,3 ms tpdh = 8

µ

s tpdv = 1 ms tpth = 8

µ

s tptv = 1 ms tvh = 32

µ

s tvv = 12 ms

Duración de una línea: th = 50

µ

s

Retorno de línea: tpdh + tpth + tih = 18

µ

s

Al terminar tvh el controlador hace 20 robos de ciclo:

20

×

200 ns = 4

µ

s 4/50 = 8 % de UCP

Duración de una imagen:

tv = 14,3 ms 1.000/14,3

70 img/seg.

(14)

Uso del controlador gráfico

Para imágenes en movimiento:

No escribir en la RAM durante tvv (para evitar parpadeo) 2,3 ms pueden ser insuficientes para preparar toda la imagen Una solución: memoria de vídeo de doble capacidad que la de fotograma y uso de dos zonas: mientras se escribe en MV0 se

dibuja MV1 tv = 14,3 ms para preparar la imagen

Si memoria de vídeo aún mayor, una tercera zona donde se tienen preparados los «monos» (sprites) que forman la imagen

la preparación de la siguiente imagen consiste en copiar los monos a las coordenadas adecuadas

c

Figure

Actualización...

Referencias

Actualización...