Teclados y terminales

Anuncio
Teclados y terminales
Entrada/Salida
o Un terminal es un sistema de
Entrada/Salida
o Entrada -> Teclado, Ratón, Tableta
digitalizadora…
o Salida -> Pantalla, Impresora,
Plotter…
Tipos de Terminales
o Interfaz mapeada a memoria
n Orientado a carácter
n Orientado a pixel
o Interfaz vía red (serie, ethernet, etc.)
n Tipo tty
n Tipo “inteligente”
Teclado, construcción física
o El teclado es esencialmente una
matriz en cuyos nodos puede cerrarse
un contacto eléctrico.
o Un procesador integrado en el teclado
obtiene un número de 7 bits que
depende SÓLO de la posición de la
tecla pulsada (no del carácter que
tenga dibujado)
25 millones de pulsaciones
0/50º operación
-20/-60º almacenaje
Teclado, comunicación
o El teclado envía el número asociado a
la tecla si un semáforo hardware “ad
hoc” se lo permite.
o El número se envía bit a bit, en serie.
Los bits se acumulan en un registro.
o Cuando el registro se llena, se
comunica una interrupción al CPI.
Teclado, interfaz (1)
o La interrupción de teclado pasa el
control a la rutina de la BIOS o a la
rutina de usuario encargado de leer el
código
o Esta rutina toma el código del puerto
0x60, LO TRADUCE y lo deposita en
un “buffer” del S.O.
Teclado, interfaz (2)
void interrupt TEC(){
/* leer código del puerto 0x60 */
/* traducir código */
/* colocarlo en el “buffer” */
outportb(0x20,0x20);
}
void interrupt TEC_irq9(){
static char flag=0;
char t;
t=inportb(0x60);
switch (t){
case 42: flag=1; break; /* mayusculas */
case -86: flag=0; break;
case 56: flag=2; break; /* alt */
case -72: flag=0; break;
case 29: flag=3; break; /* control */
case -99: flag=0; break;
default :{
if (t>0){
t=tabla[t][flag];
switch (t){
case 1: { QUIT=1;
break; }
case 5: { TERM_siguiente(); break; }
default:{ TEC_procesar_tecla(t);
}
}
}
}
}
outportb(0x20,0x20);
}
Teclado, interfaz (3)
#include <dos.h>
int *p=(int *)MK_FP(0,36);
…
asm cli;
*p=FP_OFF(TEC_irq9);
*(p+1)=FP_SEG(TEC_irq9);
asm sti;
char tabla[117][4]={
0,
0,
0,
0,
27,
0,
0,
0,
49,
33, 124,
0,
50,
34,
64,
0,
51,
0,
35,
0,
52,
36, 126,
0,
53,
37,
0,
0,
54,
38,
0,
0,
55,
47,
0,
0,
56,
40,
0,
0,
57,
41,
0,
0,
48,
61,
0,
0,
39,
63,
0,
0,
0,
0,
0,
0,
8,
0,
0,
0,
9,
0,
0,
0,
113, 81,
0,
1,
119, 87,
0,
2,
….
t=inportb(0x60);
t=tabla[flag][t];
Programación mediante BIOS
AH=0x03; L=0x05; BL=frec; BH=ret.
00H
01
02
03
04
05
06
07
08
09
0A
30.0
26.7
24.0
21.8
20.0
18.5
17.1
16.0
15.0
13.3
12.0
0BH
0C
0D
0E
0F
10
11
12
13
14
15
10.9
10.0
9.2
8.6
8.0
7.5
6.7
6.0
5.5
5.0
4.6
16H
17
18
19
1A
1B
1C
1D
1E
1F
20
4.3
4.0
3.7
3.3
3.0
2.7
2.5
2.3
2.1
2.0
Res.
00H 250 ms
01 500
02 750
03 1000
Programación mediante BIOS
#include <stdio.h>
#include <dos.h>
main(){
union REGS pseudo;
/* AH|AL */
pseudo.h.al=0x05;
/* ------- */
pseudo.h.ah=0x03;
/*
AX */
pseudo.h.bl=0;
pseudo.h.bh=0;
int86(0x16,&pseudo,&pseudo);
return(0);
}
Ergonomía
Teclado Sholes, 1876
Ergonomía
Teclado Dvorak, 1930
Ergonomía
Mejor teclado
Terminales
o Locales o remotos
o Pasivos o activos
o Por interfaz de memoria, puerto serie
o red
o Textuales o gráficos
o Modo canónico (a línea con
confirmación) o modo no canónico (o
inmediato)
Terminal ANSI
Termcap, terminfo, curses (1)
o termcap es una base de datos y
librería para acceder a esa base de
datos
o termcap contiene las descripciones de
miles de terminales distintos
o Estas descripciones incluyen
información sobre las capacidades del
terminal y forma de activarlas
Termcap, terminfo, curses (2)
http://www.catb.org/~esr/terminfo/termtypes.master.gz
Termcap, terminfo, curses (3)
o “curses.h” es una librería UNIX para
definir ventanas, escribir en ellas, leer
de teclado, cambiar atributos, etc.
o Existe una capa de más alto nivel
implementada en “panel.h
o ”curses.h” es fácil de portar a otros
sistemas. Esto permite portar los
programas que se apoyen en ella
Programación en “curses”, 1
Programación en “curses”, 2
Ejemplo de implementación (1)
o En el AT la memoria de video en
modo 80x25, color, se corresponde
con la dirección física 0xb8000000
o Cada carácter se codifica en dos
bytes: el carácter en sí y el atributo
o El byte de atributos se divide en texto
y fondo
Ejemplo de implementación (2)
o El byte que codifica el carácter indexa
una tabla que se encuentra en ROM
o Cada entrada de la tabla es un
conjunto de 16 bytes, que forma una
matriz de 16*8 bits que codifican el
dibujo del carácter asociado
o Esta tabla puede copiarse a RAM,
modificarse y usarse
Ejemplo de implementación (3)
o El byte de atributos (cada una de sus
partes) indexa una tabla de 16
entradas
o Cada una de esas entradas indexa
una tabla de 256 entradas
o Cada una de esas 256 codifica el trío
RVA que especifica el color
Descargar