Escolar Documentos
Profissional Documentos
Cultura Documentos
Manejador de consola
MANEJADOR DE CONSOLA
Manejador de consola
ndice
1.- Introduccin 2.- Terminales con mapa de memoria 2.1.- Terminales orientados a carcter 2.2.- Terminales orientados a bit 3.- Software de salida 4.- Generalidades del controlador. Salida a terminales 4.1.- Funcionamiento de la memoria 5.- Diagrama de relacin de llamadas a console desde tty 6.- Console.c 6.1.- Estructura de datos bsica 6.2.- Funcin cons_write 6.3.- Funcin out_char 6.4.- Funcin flush 6.5.- Funcin cons_echo 6.6 Funcin scroll_screen 6.7 Funcin parse_escape 6.8 Funcin do_escape 6.9 Funcin beep 6.10 Funcin stop_beep 6.11 Funcin src_init 6.12 Funcin putk 6.13 Funcin toggle_scroll 6.14 Funcin cons_stop 6.15 Funcin select_console 6.16 Funcin cons_org0 6.17 Funcines con_loadfont y ga_program pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg. pg.
Manejador de consola
1.- Introduccin.
Los ordenadores de propsito general disponen de una o mas terminales que sirven para comunicarse con ellas. Debido a que existe un nmero muy grande de tipos de terminales distintos, le corresponde al controlador de la terminal (tty) ocultar todas las diferencias a la parte del sistema operativo independiente del dispositivo y los programas de usuario. Este controlador utiliza unas rutinas determinadas para el tratamiento de las consolas, que es el caso que nos ocupa. Para entender completamente el funcionamiento de las consolas, en las siguientes secciones examinaremos primero el hardware de las terminales y luego estudiaremos el software implicado.
Manejador de consola
Figura 1
Manejador de consola
Usuario
File System
do_write
handle_events
out_char
pause_escape
Secuencia escape
scrool_screen
Caracteres Especiales
beep
flush
La funcion cons_write utiliza un buffer local para copiar bloques de 64 bytes desde la zona de datos del proceso que llamo. Cuando ste se llena, cada byte de 8 bits se trasnfiere a otro buffer, ramqueue, que es un arreglo de palabras de 16 bits. Cada segundo byte se llena con el valor actual de atributo. Si es posible, los caracteres se van transfiriendo directamente a ramqueue, pero los caracteres de control o los que formasn parte de una secuencia de escape necesitan un manejo especial. En estos casos se invoca out_char, que se encarga de realizar las acciones adecuadas y actualizar los parmetros correspondientes (scrolls, posicin del cursor, ete.). El bffer ramqueue es copiado posteriormente en memoria vdeo RAM mediante flush.
Manejador de consola
phys_copy (Buffer, datos si tratar) tbuf Caracteres Tratados Datos por tratar Caracteres Normales (Buffer ramqueue). c_rowrds Caracteres tratados 160 bytes
c_row c_cur
c_colunm
Podemos tener asociada a cada monitor varias pantallas virtuales. Los parmetros c_start y c_limit identifican la direccin de memoria vdeo RAM de inicio y final para cada una de estas terminales virtuales. En el parmetro c_org se introduce la direccin a partir de la cual queremos mostrar en pantalla, el chip 6845 visualizara desde esta posicin hasta los siguientes 4000 bytes (modo carcter). Al arranque de la computadora, la pantalla de despeja, se exriben salidas en RAM de vdeo comenzando en la posicion c_start, y se asigna a c_org el mismo valor que tiene c_start. Por lo tanto, la primera lnea aparece en la lnea superior de la pantalla. Cuando es necesario exhibir salidas en una nueva lnea, las salidas se escriben en al posicion dada por c_start mas 80. Tarde o temprano se llenan las 25 lneas, y es necesario desplazar, haciendo avanzar la pantalla hacia arriba (SCROLL UP )
Manejador de consola
Algunos programas, como los editores, requieren tambin desplazamiento hacia abajo (SCROLL DOWN), cuando el cursor est en la lnea superior y es necesario moverse ms hacia arriba dentro del texto. Hay dos formas de manejar el desplazamiento de la pantalla:
Manejador de consola
tty echo
tty
keyboard
impresora
cons_echo
do_ioctl
funkey
wereboot
putk
con_loadfont
togle_scroll
cons_stop
cons_org0 ga_program
select_console
6.- Console.c
Este apartado se encargar de describir con detalle las estructuras de datos y las funciones pertenecientes a console.c. Para cada funcin existente, se mostrar su diagrama de flujo, los datos ms utilizados y se detallar su funcionamiento.
Manejador de consola
No
RETORNAR
Si
Si secuencia de escape o nmero de columna mayor que el ancho de la pantalla o ramqueue est lleno
Si
OUT_CHAR
No
Introducir en ranqueue junto con el atributo
Si
No
Si
No
FLUSH
RETORNAR
Manejador de consola
DEFINE scr_width STRUCT TTY tty_priv puntero a los datos particulares de un device. 80 (caracteres en una lnea).
caracteres pendientes de salida caracteres a los que ya se ha dado salida. 1 si (^S) para parar la salida Direccin virtual desde donde vienen los datos.
STRUCT CONSOLE c_column c_rowrds c_ramqueue c_attr c_esc_state PARAMETROS ENTRADA Struct tty *tp VARIABLES Buf tbuf Cont buffer intermedio (64 bytes) donde se almacena datos por tratar. puntero a caracteres en buf nmero de caracteres por tratar de buf La terminal con la que trabajaremos Posicin actual de la columna nmero de palabras (WORD) en ranqueue buffer para vdeo RAM atributo del carcter 0=normal, 1=ESC, 2=ESC[
10
Manejador de consola
Si
PARSE__ESCAPE RETORNAR
No
Carcter 7 (beep)
Carcter 0 (nada)
FLUSH
Envo ONLCR
LINEWRAP
Si
No No
Col>=Width
BEEP
No
Si
Aumenta Lnea, si necesario SCROLL_SCREEN
Si
Col=Col-Anc ho
FLUSH
col++
FLUSH
Si
Ramqueue Lleno
No
11
Manejador de consola
DEFINE scr_lines scr_width TAB_SIZE LINEWRAP (25) nmero de filas de la terminal (80) nmero de columnas de la terminal tamao de la tabulacin indica si se ha completado la salida de una lnea en la pantalla.
STRUCT CONSOLE c_row c_column c_rowrds c_ramqueue c_attr c_esc_state PARMETROS DE ENTRADA Console_t *cons int c Puntero a la estructura consola. Carcter que vamos a tratar posicin actual de la fila posicin actual de la columna nmero de palabras (WORD) en ranqueue buffer para video RAM atributo del carcter 0=normal, 1=ESC, 2=ESC[
12
Manejador de consola
STRUCT CONSOLE c_row c_column c_cur c_org c_rowrds c_ramqueue PARAMETROS console_t *cons VARIABLES cur Para calcular la posicin del cursor. Puntero a la estructura consola. Posicin actual de la fila Posicin actual de la columna posicin actual del cursor en Vdeo RAM. Posicin Vdeo RAM desde la que el chip 6845 mostrar los caracteres. nmero de palabras (WORD) en ranqueue buffer para vdeo RAM
13
Manejador de consola
14
Manejador de consola
FLUSH
Scrooll UP
Scrooll Down
Por SoftWare
Por SoftWare
Si Si wrap y espacio disponible Si Movemos memoria desde c_org+ src_width a c_start chars palabras
No
No
Cambiamos c_org
Cambiamos c_org
Nueva Linea=c_org
15
Manejador de consola
DEFINE scr_size scr_width BLACK_MEM STRUCT CONSOLE c_start c_limit c_org Direccin de comienzo de memoria para la consola. Direccin limite de memoria para la consala. Direccin origen desde donde el chip 6845 empieza a visualizar en pantalla. Tamao de la pantalla (25*80). Ancho de la pantalla (80). Se utiliza para rellenar de negro la nueva lnea.
PARAMETROS DE ENTRADA cons dir VARIABLES new_line new_org chars Direccin de la nueva a ser rellenada en negro. Direccin del nuevo org. Nmero de bloques de memoria a mover. Estructura de la consola. Direccin del scroll (up o down).
16
Manejador de consola
estado de escape=1
estado de escape=2
estado de escape=0
retornar Actualiza estructura console_t y comprueba el carcter 'c' No 'c' es un nmero? S c='[' c='M' estado de escape=0 Almacena el nmero en el vector de parmetros DO_ESCAPE Incrementa el puntero del vector de parmetros e introduce un cero en el vector de parmetros retornar DO_ESCAPE c=';'? S No
17
Manejador de consola
STRUCT CONSOLE c_esc_state c_esc_intro c_esc_parmp c_esc_parmv PARAMETROS DE ENTRADA Console_t *cons char c Puntero a la estructura console. Siguiente carcter en la secuencia de escape. 0=normal, 1=ESC, 2=ESC[ Carcter siguiente al ESC Puntero al siguiente parmetro de ESC Lista de los parmetros de ESC
18
Manejador de consola
esc M?
'@ c? 'p'
N 'M 'B 'A 'C Mueve n lneas hacia abajo Mueve a la izquierda n espacios Limpia la pantalla desde el cursor 'D 'H 'J' 'k 'L' Inserta n lneas en el cursor Borra n lneas en el cursor
retornar FLUSH
19
Controlador de Consola
DEFINICIONES src_size BLANK_MEM scr_width scr_lines color scroll_down scroll_up STRUCT CONSOLE c_esc_intro c_row c_esc_paramv c_column c_cur c_org c_blank c_attr ENTRADA DE PARAMETROS cons c puntero a la estructura console_t char que contiene el carcter de la secuencia de escape carcter siguiente al ESC fila actual lista de los parmetros de ESC columna actual posicin actual del cursor en la video RAM base en la video RAM para el 6845 atributo blank atributo del carcter Nmero de caracteres de la pantalla (80*25). Valor del carcter negro para el uso en mem_vid_copy. Nmero de caracteres por lnea (80). Nmero de lneas de la pantalla (25). Color usado por el controlador (vid_port==c_6845). Scroll hacia atrs (1). Scroll hacia delante (0).
VARIABLES src dst count N value Direccin origen Direccin destino Cantidad de palabras a transferir Nmero de desplazamientos del cursor el primer parmetro de la secuencia ESC[
20
Controlador de Consola
DEFINE BEEP_FREQ B_TIME VARIABLES message beeping mensaje que se le pasa a sendrec. Es un flag que indica si se esta beepeando. (0x0533) Frecuencia del sonido. Duracin en ticks del sonido.
21
Controlador de Consola
DEFINICIONES COLOR_BASE COLOR_SIZE MONO_BASE MONO_SIZE EGA_SIZE VIDEO_SELECTOR NR_CONS STRUCT CONSOLE c_esc_intro c_row c_esc_paramv c_column c_cur c_org c_blank c_attr VARIABLES GLOBALES nr_cons vid_port vid_base vid_size vid_mask vid_seg src_size page_size nmero actual de consolas Puerto I/O para el chip 6845 base de la vdeo RAM (0xB000 o 0xB800) tamao de la vdeo Ram para mono (0x2000=8M para color o 0x800=2M para mono) mscara 0x1FFF color 0x0800 selector de la RAM de vdeo 0xB0000 0xB8000 nmero de caracteres por pantalla (80*25) tamao de pgina. Carcter siguiente al ESC Fila actual Lista de los parmetros de ESC Columna actual Posicin actual del cursor en la video RAM base en la video RAM para el 6845 atributo blank atributo del carcter base de la memoria de vdeo (0xB8000L) tamao de la memoria vdeo 16k (0x4000) base de la memoria de vdeo( 0xB0000L) tamao de la memoria vdeo 4k (0x1000) 32k (deben soportar al menos 32k las VGA y EGA) selector de vdeo nmero de consolas permitidas
22
Controlador de Consola
STRUCT TTY tp tty_devwrite tty_echo tty_table STRUCT CONSOLE c_start c_limit c_org c_attr ENTRADA DE PARAMETROS tp VARIABLES cons vid_base bios_ctrbase page_size puntero a una estructura conole_t Direccin base de la memoria de vdeo Valor del puerto I/O para el 6845 Determina el tamao de pgina para la consola puntero a la estructura tty_t comienzo en la memoria de vdeo para la consola lmite de la consola en la memoria de vdeo localizacin en la RAM del punto base para el 6845 atributo del carcter puntero a tty_t rutina comienzo de salida del dispositivo actual rutina de entrada para los caracteres echo vector se puntero a la estructura tty_t
23
Controlador de Consola
VARIABLES GLOBALES Softscroll Si su valor es 1 indica scroll por sofware y 0 scroll hecho por hardware.
24
Controlador de Consola
DEFINICIONES BLANK_COLOR VARIABLES GLOBALES softscroll cons_table Si su valor es 1 indica scroll por sofware y 0 scroll hecho por hardware. vector de puntero a la estructura console_t y contiene la configuracin de cada una de las consoles que podemos disponer. Determina el color del cursor para el atributo blank.
25
Controlador de Consola
DEFINICIONES VID_ORG CURSOR Registro del 6845donde contiene el origen. Registro d el 6845 que contiene la posicin del cursor .
STRUCT CONSOLE vid_size scr_size cons_table VARIABLES GLOBALES c_start c_org comienzo en la memoria de vdeo para la consola localizacin en la RAM del punto base para el 6845 tamao de la video RAM tamao de la pantalla (80*25) vector de punteros a las diferentes consolas
26
Controlador de Consola
PARMETROS DE ENTRADA user_phys Direccin de memoria donde se encuentran los datos del usuario.
PARMETROS DE ENTRADA seq Estructura que contiene los parmetros para poder realizar la transferencia al controlador.
27