CMOS PROGRAMAS RESIDENTES Y MANEJO DE INTERRUPCIONES
ndice
1. Traer programas residentes tipeados de los textos especializados en algn lenguaje pequeo portable.(Assembler, Basic, c std, pascal, etc.) ................................................................... 2 1.1. PROGRAMAS RESIDENTES ...................................................................................................... 2 1.2. LOCALIZACIN DE UN PROGRAMA RESIDENTE .............................................................. 3 1.3. EJEMPLOS DE PROGRAMAS RESIDENTES ........................................................................ 3 2. Describa la direccin base del reloj de tiempo real de la PC y realizar un programa para poder tener acceso a dicho reloj en lectura y escritura. ..................................................................... 7 MOTOROLA MC146818: ........................................................................................................................... 7 REGISTROS DEL MC146818 ................................................................................................................... 8 FUNCIONAMIENTO DE LA ALARMA ................................................................................................ 10 PROGRAMA DE ACCESO ESCRITURA RELOJ DE TIEMPO REAL: .......................................... 12 3. Como podemos programar alarmas de acuerdo al uso del reloj de tiempo real de la PC. Traer programa de alarmas. ..................................................................................................................... 18 4. Describir las interrupciones por hardware usadas en la PC cuales estn ocupadas y cuales disponibles. ..................................................................................................................................... 19 5. Describir el procedimiento para acceder a una interrupcin. ................................................. 20 6. Describir las interrupciones por software usadas en la PC cuales estn ocupadas y cuales disponibles. ..................................................................................................................................... 22 7. Realizar el diseo de un sistema de forma que podamos probar las interrupciones de ambos tipos. Traer programa probado fuente y compilado ............................................................. 25 7.1. Programa de interrupcin por hardware.............................................................................. 25 7.2. Programa de Interrupcin por software ............................................................................... 26 8. Describir el SETUP de la PC, las opciones de configuracin y los parmetros. ............... 26 Configuracin bsica (Estndar Cmos Setup) ......................................................................................... 28 Opciones de la BIOS (Bios Feature Setup) ............................................................................................... 29 Configuracin avanzada y del chipset ............................................................................................... 31 Administracin de energa ......................................................................................................................... 32 Configuracin de PNP y slots PCI ............................................................................................................ 33 Autoconfiguracin de la BIOS ................................................................................................................... 34 Perifricos integrados ................................................................................................................................. 34 Control por password................................................................................................................................. 35 Autodeteccin de discos duros IDE ........................................................................................................... 35 Formateo de disco duro a bajo nivel ......................................................................................................... 36 Salir de la BIOS ........................................................................................................................................ 36 9. BIBLIOGRAFIA .................................................................................................................................... 36
2
CMOS PROGRAMAS RESIDENTES Y MANEJO DE INTERRUPCIONES
1. Traer programas residentes tipeados de los textos especializados en algn lenguaje pequeo portable. (Assembler, Basic, c std, pascal, etc.)
1.1. PROGRAMAS RESIDENTES
Un programa residente o TSR es un programa normal y corriente que, tras ser cargado, permanece parcial o totalmente en memoria al finalizar su ejecucin. Ello es posible utilizando una funcin especfica del sistema operativo. Los programas residentes pueden ser activados mediante una combinacin de teclas o bien actuar con cierta periodicidad, asociados a la interrupcin del temporizador. Tambin pueden interceptar funciones del DOS o de la BIOS para cambiar o modificar su funcionamiento. Al final, casi siempre resulta totalmente inevitable desviar alguna interrupcin hacia una nueva rutina que la gestione, con objeto de activar el programa residente. Como en casi todos los aspectos de la programacin, existen unos cuantos principios fundamentales que conviene respetar: 1. Los programas residentes no deben alterar el funcionamiento normal del resto del ordenador. Esto significa que deben preservar el estado de todo lo que van a modificar durante su ejecucin, restaurndolo despus antes de retornar al programa principal, lo cual no se limita por supuesto a los registros de la CPU, sino que incluye tambin la pantalla, los discos, el estado de la memoria expandida y extendida, etc. Cuando se produce la interrupcin que activa el programa residente, los registros de la CPU pueden tener un valor que hay que interpretar o bien pueden ser aleatorios. Este ltimo es el caso de la interrupcin peridica del temporizador: el programa residente slo puede fiarse de CS: IP, los dems registros debern ser inicializados antes de empezar a operar (lgicamente, habrn de ser primero preservados para ser restaurados al final). 2. No se pueden invocar libremente desde un programa residente los servicios del sistema operativo. Si el lector es la primera vez que oye esto, quiz se quede extraado. Tal vez se pregunte qu sucedera si desde un programa residente se llama (pongamos por ejemplo, una vez cada segundo) a la funcin de impresin del DOS para sacar una 'A' por la pantalla. Lo que puede suceder -y acabar sucediendo, si no a la primera 'A', a la segunda o la tercera- es que el ordenador se cuelgue. Esto es debido a que el DOS es un sistema operativo no reentrante, entre otras razones porque conmuta a una pila propia al ser invocado. Por ello, si se llama a un servicio del DOS desde un programa residente, es posible que en ese momento el DOS ya estuviese realizando otra funcin del programa principal y lo que vamos a conseguir es que se vuelva loco y pierda el control cuando se acabe la tarea residente (el contenido previo de la pila ha sido destrozado). Para utilizar el DOS desde un programa residente hay que conocer cmo estn organizadas las pilas del sistema operativo, as como determinar el estado del DOS para saber si se puede interrumpir en ese momento o si hay que esperar. Utilizar el DOS es prcticamente indispensable a la hora de acceder al disco, por lo que ms adelante en este captulo lo veremos con detenimiento. Para utilizar el DOS hay que emplear funciones ms o menos secretas del sistema no documentadas por Microsoft, si bien esto no es peligroso: esta empresa las utiliza y las ha utilizado 3
siempre profusamente en sus propios programas, por lo que resulta ms que seguro esperar que futuras versiones del DOS sigan soportndolas. 3. La BIOS no es tampoco completamente reentrante. Por fortuna, la BIOS utiliza la pila del programa que le llama. Por ello, para utilizar funciones de la BIOS desde un programa residente basta con asegurar que el sistema no est ya ejecutando una funcin BIOS incompatible (normalmente, una interrupcin 10h en el caso de las funciones de vdeo o la 13h en las de disco). 4. El hardware puede ser accedido sin limitaciones desde los programas residentes, si bien el nivel de uso que puede hacerse est limitado por el sentido comn (puede haber problemas, por ejemplo, si un programa residente cambia la posicin del cabezal de un disquete cuando el programa principal estaba ejecutando una funcin del DOS o la BIOS para acceder al disquete). 5. Los programas residentes tienen una causa que provoca su activacin. Si cuando ya estn activos, se vuelve a reproducir la causa, estamos ante un problema de reentrada que compete exclusivamente al programador. Por lo general, se suele denegar una demanda de activacin cuando el programa residente ya estaba activo (si el programa tiene pila propia esto es adems obligatorio). Pongamos por caso que se pulsa CTRL-ALT-R para mostrar un reloj residente en pantalla, qu suceder si se vuelve a pulsar CTRL-ALT-R con el reloj ya activado? Para solucionar esto, existen dos caminos: uno de ellos es utilizar una variable que indique que el programa ya est activo. El otro, es utilizar para desactivar el programa la misma secuencia de teclas que para activarlo. Lgicamente, los programas que realicen algo peridicamente (pongamos por caso 18,2 veces por segundo) basta con que se limiten a no pillarse los dedos, esto es, utilizar menos de 1/18,2 segundos de tiempo de CPU para sus tareas.
1.2. LOCALIZACIN DE UN PROGRAMA RESIDENTE
Un programa residente que ya est instalado en memoria puede volver a ser cargado desde disco y esto hay que tenerlo en cuenta. Puede que el programa sea de stos que se cargan una sola vez y carecen de parmetros. En ese caso, no suceder nada porque sea creada en memoria una nueva copia del mismo: es problema del usuario. Sin embargo, si una recarga posterior puede provocar un cuelgue del sistema o, simplemente, el programa tiene opciones y se pretende modificar los parmetros de la copia ya residente, entonces se hace necesario que el programa tenga capacidad para buscarse en memoria y encontrarse a s mismo en el caso de que ya estuviera cargado.
1.3. EJEMPLOS DE PROGRAMAS RESIDENTES
El siguiente programa residente no realiza tarea alguna, tan slo es una demostracin de la manera general de proceder para crear un programa residente. En principio, el cdigo de instalacin est colocado al final, con objeto de no dejarlo residente y economizar memoria. La rutina de instalacin (MAIN) se encarga de preservar el vector de la interrupcin peridica y desviarlo para que apunte a la futura rutina residente. Tambin se instala una rutina de control de la interrupcin 10h. Finalmente, se libera el espacio de entorno para economizar memoria y se termina residente. El procedimiento CONTROLA_INT8 puede ser modificado por el lector para que el programa realice una tarea til cualquiera 18,2 veces por segundo: de la manera que est, se limita a llamar al anterior vector de la INT 8 y a comprobar que no se 4
est ejecutando ninguna funcin de vdeo de la BIOS (que no se ha interrumpido la ejecucin de una INT 10h). Esto significa que el lector podr utilizar libremente los servicios de vdeo de la BIOS, si bien para utilizar por ejemplo los de disquetes habra que desviar y monitorizar tambin INT 13h; por supuesto adems que no se puede llamar al DOS en este TSR (no se puede hacer INT 21h directamente desde el cdigo residente). Por cierto, si se fija el lector en la manera de controlar la INT 10h ver que al final se retorna al programa principal con IRET: los flags devueltos son los del propio programa que llam y no los de la INT 10h real. Con la INT 10h se puede hacer esto, ya que los servicios de vdeo de la BIOS no utilizan el registro de estado para devolver ninguna condicin. Sin embargo, con otras interrupciones BIOS (ej. 16h) o las del DOS habra que actuar con ms cuidado para que la rutina de control no altere nada el funcionamiento normal. Puede que el lector haya visto antes programas residentes que no toman la precaucin de monitorizar la interrupcin 10h o la 13h de la BIOS, y tal vez se pregunte si ello es realmente necesario. La respuesta es tajantemente que s. Como se ver en el futuro en otro programa de ejemplo, reentrar a la BIOS sin ms puede provocar conflictos.
demores SEGMENT ASSUME CS:demores, DS:demores ORG 100h inicio: JMP main controla_int08 PROC PUSHF CALL CS:ant_int08 ; llamar al gestor normal de INT 8 STI CMP CS:in10,0 JNE fin_int08 ; estamos dentro de INT 10h ; ; Colocar aqu el proceso a ejecutar 18,2 veces/seg. ; que puede invocar funciones de INT 10h fin_int08: IRET controla_int08 ENDP controla_int10 PROC INC CS:in10 ; indicar entrada en INT 10h PUSHF CALL CS:ant_int10 DEC CS:in10 ; fin de la INT 10h IRET controla_int10 ENDP in10 DB 0 ; mayor de 0 si hay INT 10h ant_int08 LABEL DWORD ant_int08_off DW ? ant_int08_seg DW ? ant_int10 LABEL DWORD ant_int10_off DW ? ant_int10_seg DW ? ; Dejar residente hasta aqu. main: PUSH ES MOV AX,3508h INT 21h ; obtener vector de INT 8 MOV ant_int08_seg,ES MOV ant_int08_off,BX 5
MOV AX,3510h INT 21h ; obtener vector de INT 10h MOV ant_int10_seg,ES MOV ant_int10_off,BX POP ES LEA DX,controla_int08 MOV AX,2508h INT 21h ; nueva rutina de INT 8 LEA DX,controla_int10 MOV AX,2510h INT 21h ; nueva rutina de INT 10h PUSH ES MOV ES,DS:[2Ch] ; direccin del entorno MOV AH,49h INT 21h ; liberar espacio de entorno 3 de 38 12/10/00 19:13 PROGRAMAS RESIDENTES file:///C|/librosVirtuales/UniversoDigital/10.html POP ES LEA DX,main ; fin del cdigo residente ADD DX,15 ; redondeo a prrafo MOV CL,4 SHR DX,CL ; bytes -> prrafos MOV AX,3100h ; terminar residente INT 21h demores ENDS END inicio
Este programa emite un sonido en la PC al pulsar una tecla FIRMA1 equ 2387h FIRMA2 equ 7A8Dh codigo segment assume cs:cdigo org 100h ;Inicio de programa .COM
inicio: jmp short verif_instalac ;Saltar al codigo de instalacion. viejo_int9 label dword offset_int9 dw 0 segmento_int9 dw 0 Estado db 1 ;1: Habilitado; 0: No habilitado. Firma dw FIRMA1,FIRMA2 ; Manejador de la interrupcion 9 (teclado) int9handler: cmp Estado,0 ;Sonido habilitado? jz ir_a_viejo_INT9 ;Saltar si no es asi. push ax ;Preservar registros utilizados. push cx push dx mov al,182 ;Generar onda cuadrada en timer 2 out 67,al ;para poder producir sonido. in al,96 ;Leer el controlador de teclado. cmp al,128 ;Ver si se apreto o solto una tecla. jnc silencio ;Saltar si se solto. 6
add al,al ;Ajustar el codigo de exploracion: jns hallar_frec ;cada dos valores se debe incrementar sub al,127 ;un semitono. hallar_frec: mov cl,al ;CX = Cantidad de medios semitonos xor ch,ch ; por encima del LA (55 Hz). mov ax,21690 ;AX = 55 Hz (LA) ciclo_frec: mov dx,63670 ;DX = Medio semitono. mul dx ;DX = Siguiente medio semitono. mov ax,dx ;AX = Siguiente medio semitono. loop ciclo_frec ;Continuar calculando frecuencia. jmp short sonar ;Ir a poner la nota. silencio: mov ax,40 ;Silencio. sonar: out 66,al ;Poner la parte baja del contador. mov al,ah out 66,al ;Poner la parte alta del contador. in al,97 ;Habilitar salida del parlante. or al,3 out 97,al pop dx ;Restaurar registros utilizados. pop cx pop ax ir_a_viejo_INT9: jmp viejo_int9 ;Ir al viejo manejador de la ;interrupcion del teclado. ; ; Instalacion del TSR. ; verif_instalac: xor ax,ax ;Apuntar a la tabla de interrupcion. mov es,ax lds bx,es:9*4 ;DS:BX = Puntero al manejador de la ;interrupcion del teclado. cmp word ptr [bx-4],FIRMA1 ;Si la firma no coincide, jne instalar ;instalar el TSR. cmp word ptr [bx-2],FIRMA2 ;Si la firma no coincide, jne instalar ;instalar el TSR. xor ds:Estado,1 ;Cambiar estado: sonido si/no. push cs pop ds ;DS = Segmento de codigo. mov dx,offset sonido_si ;Puntero a texto de sonido activado. jnz mostrar_texto mov dx,offset sonido_no ;Puntero a texto de sonido desactivado. mostrar_texto: mov ah,9 int 21h ;Llamar a funcion DOS para mostrarlo. in al,97 ;Deshabilitar sonido. and al,252 out 97,al 7
mov ax,4c00h ;Fin del programa. int 21h instalar: mov offset_int9,bx ;Preservar offset vieja interrupcion 9. mov segmento_int9,ds ;Preservar segmento vieja int 9. cli ;Deshabilitar interrupciones. mov es:9*4,offset int9handler ;Nuevo offset interrupcion 9. mov es:9*4+2,cs ;Nuevo segmento interrupcion 9. sti ;Habilitar interrupciones. push cs pop ds ;DS = Segmento de codigo. mov dx,offset sonido_si ;Mostrar texto de sonido habilitado. mov ah,9 int 21h mov dx,offset verif_instalac ;Instalar TSR. int 27h sonido_si db "Sonido activado.",13,10,"$" sonido_no db "Sonido desactivado.",13,10,"$" codigo ends end inicio
2. Describa la direccin base del reloj de tiempo real de la PC y realizar un programa para poder tener acceso a dicho reloj en lectura y escritura.
Para comprender mejor el problema es necesario entender bsicamente como se maneja la fecha y hora en las computadoras personales. En general una computadora personal (PC) tiene dos relojes, uno interno, que llamaremos RTC (real-time clock) que est en el hardware, y uno externo, reloj del sistema (RSO), que es mantenido por el sistema operativo (SO). El RTC funciona an cuando la PC est apagada, mediante una batera interna. Cuando la PC se enciende, el RSO, se inicializa con el valor del RTC, a travs de funciones del BIOS (Basic Input Output System). El BIOS, adems de permitir el arranque de la PC, provee interfaces para la comunicacin entre el sistema operativo y el hardware en forma de varios servicios (ej. obtener fecha/hora, inicializar fecha/ hora, etc.).
MOTOROLA MC146818:
DESCRIPCIN DEL INTEGRADO. El MC146818 incorpora un completo reloj con alarma, calendario, interrupcin peridica programable, generador de onda cuadrada y 64 bytes libres de RAM esttica de bajo consumo. Los primeros 10 bytes de esta RAM son empleados para gestionar la fecha y la hora y los 4 siguientes son registros (A, B, C y D); los 50 restantes quedan a disposicin del usuario.
8
La lnea OSC1 (de entrada) puede conectarse a seales cuadradas de 4.194304 Mhz, 1.048576 Mhz y 32768 Hz. La frecuencia de esta base de tiempos, como se ver, ha de indicarse en el registro A (bits DV0 a DV2). El chip provee una til salida de reloj en CKOUT dependiente del nivel de la entrada CKFS, segn la siguiente tabla:
La salida SQW genera una onda cuadrada, cuya frecuencia es programable (til para alarmas). La lnea -IRQ seencarga de solicitar las interrupciones peridicas si estn habilitadas. La lnea de entrada -RESET reinicializa el integrado asignando valores por defecto a ciertos bits de los registros B y C, aunque no afecta a la fecha/hora ni a la memoria. La entrada PS debe mantenerse a nivel bajo cuando se alimenta el chip hasta que la tensin se estabilice, ponindose despus en alto; esta entrada est asociada al bit VRT del registro D que indica si el integrado est en condiciones de operar. El bus bidireccional de direcciones y datos est multiplexado (lneas AD0..AD7): en los flancos de bajada de la entrada de validacin de direcciones (lnea AS) contiene direcciones, y datos en los flancos de subida de la entrada de validacin de datos (lnea DS). La lnea -R/-W indica si la operacin es de entrada o salida; -CE permite habilitar el chip o desconectarlo de los buses.
El cuadro de la derecha refleja la estructura de la memoria del MC146818. Los primeros 14 bytes son empleados para la fecha y hora.
REGISTROS DEL MC146818 REGISTRO A (lectura/escritura, excepto UIP). Este registro sirve para indicar al integrado qu tipo de reloj lo gobierna, as como elegir la frecuencia de la interrupcin peridica programable y la de la salida SQW. Tambin contiene un bit que indica si hay una actualizacin del reloj en curso, lo que sucede una vez cada segundo, ya que en ese preciso instante no se pueden leer los registros con objeto de evitar lecturas incorrectas. 9
El bit UIP (Update In Progress), de slo lectura, se pone a 1 mientras se actualizan los primeros 14 bytes de la memoria y poco tiempo antes de que comience dicha actualizacin. Antes de acceder a estos bytes, hay que esperar a que el bit UIP se ponga a cero (si no lo estaba ya): con el bit UIP a 0, es seguro que en un intervalo de al menos 244 microsegundos no se va a producir ninguna actualizacin, por lo que hay tiempo suficiente para acceder (sin prisas, pero tampoco con pausas). La actualizacin dura 248 microsegundos (1984 con relojes de 32768 Hz).
REGISTRO B (lectura/escritura). En este registro hay bits tiles, entre otros, para controlar la inicializacin de la fecha y hora, para habilitar o inhibir las diversas interrupciones y para establecer ciertas caractersticas de operacin.
El bit SET puede ser establecido a 1, con lo que cualquier ciclo de actualizacin de los primeros 14 bytes de la RAM resulta abortado: de este modo, es factible proceder a inicializar la fecha y la hora sin el riesgo de que se produzca en medio una actualizacin. Este bit no se ve afectado por la seal -RESET.
El bit PIE (Periodic Interrupt Enable) sirve para permitir la interrupcin peridica cuando es puesto a 1; tras una seal -RESET es puesto a 0. El bit AIE (Alarm Interrupt Enable) ha de estar a 1 para habilitar la interrupcin de alarma; tambin es puesto a cero tras un -RESET. El bit UIE (Update Interrupt Enable) sirve para habilitar o inhibir la interrupcin de fin de actualizacin, que se producira tras cada actualizacin del reloj; la seal -RESET baja el bit UIE. Por ltimo, el bit SQWE (Square Wave Enable) permite habilitar o inhibir la seal de onda cuadrada de la salida SQW; tambin es borrado ante una seal -RESET.
El bit DM (Data Mode) permite seleccionar datos en binario (1) o BCD (0) en los bytes de fecha y hora; la seal -RESET no afecta a este bit. El bit 24/12 sirve para elegir entre el modo 12 horas del reloj (bit a 0) o el de 24 (bit a 1): en el modo de 12 horas, el bit ms significativo del byte de la hora estar activo para indicar "PM". Si bit DSE est activo, el ltimo domingo de abril la hora pasa de 1:59:59 AM a 3:00:00 AM; en el ltimo domingo de octubre pasa de 1:59:59 AM a 1:00:00 AM (slo la primera vez, claro) para ajustarse al cambio de hora oficial; este bit no es afectado por -RESET.
REGISTRO C (slo lectura). Este registro contiene bits que informan de las interrupciones que se producen. Permite identificar al ordenador qu o cules interrupcin(es) se ha(n) producido. 10
El bit IRQF (Interrupt ReQuest Flag) se activa cuando el bit PF y el PIE (registro B) estn activos, o bien cuando el bit AF y el AIE (registro B) estn activos, o bien cuando UF y el bit UIE (registro B) estn activos. Es decir, IRQF se pone en alto cuando es necesario que se produzca una interrupcin: la lnea -IRQ se encarga de pedirla entonces. Por su parte: PF (Periodic Flag), AF (Alarm Flag) y UF (Update Flag) indican si es necesario que se produzca la interrupcin correspondiente. Todos los bits de este registro son borrados ante una seal -RESET, pero tambin ante una lectura por software del registro C.
REGISTRO D (slo lectura). Este registro contiene slo el bit VRT (Valid RAM and Time). Este bit est a cero cuando la patilla PS est a cero (PS se eleva a 1 cuando la tensin de alimentacin es correcta). Por software, el bit VRT puede ser puesto a 1 mediante una simple lectura del registro D (si la patilla PS=1), con objeto de indicar que la fecha y hora establecidas son correctas; si fallara la alimentacin, al caer la tensin en la patilla PS este bit pasara de nuevo a cero. VRT no es afectado por -RESET.
FUNCIONAMIENTO DE LA ALARMA La interrupcin de alarma se produce todos los das cuando llega la hora en que ha sido programada y el bit que permite esta interrupcin est habilitado. Existe un mtodo alternativo para programar la alarma, basado en los cdigos indiferentes almacenables en los bytes de la alarma. Un cdigo indiferente es cualquier valor comprendido entre 0C0h y 0FFh. Si la hora de alarma es un cdigo indiferente, la alarma se producir cada hora. Si la hora y minuto de alarma son cdigos indiferentes, sta se producir cada minuto. Si tanto la hora como el minuto y segundo de la alarma son cdigos indiferentes, la alarma se producir cada segundo.
EL MC146818 DENTRO DEL ORDENADOR. El MC146818 es por lo general exclusivo de los AT y PS/2. En muchos ordenadores, la implementacin fsica se realiza con circuitos totalmente compatibles que incluyen 128 bytes de RAM en lugar de 64. En la RAM que sobra por encima de los primeros 14 bytes se almacenan parmetros de la configuracin del sistema, modificables con el programa SETUP durante el arranque.
Por defecto, la BIOS inicializa el chip para trabajar con un reloj de 32768 Hz y a un ritmo de 1024 interrupciones peridicas por segundo (cuando estn habilitadas), al escribir el valor 26h en el registro A. De la misma manera, el registro B se carga con 2 (modo 24 horas, datos en BCD y sin horario verano/invierno).
El MC146818 est diseado para ser conectado a un bus multiplexado, por lo que la circuitera de apoyo de los AT se encarga de gestionar la comunicacin con el microprocesador, estableciendo dos puertos de entrada/salida en las direcciones 70h 11
y 71h. Para leer o escribir cualquier registro de la RAM CMOS, basta con enviar al puerto 70h el nmero de registro y, a continuacin, leer o escribir del puerto 71h. Entre los accesos a ambos puertos debe mediar un tiempo mnimo; de lo contrario la operacin fallar. En particular, las ltimas versiones de los compiladores de Borland no permiten acceder al reloj de tiempo real en la mayora de las mquinas a travs de las funciones outportb() e inportb(). La razn es que esas funciones estn en una librera y es preciso llamarlas con paso de parmetros a travs de la pila, lo que ralentiza excesivamente el proceso. Desde el lenguaje ensamblador, nunca hay problemas, aunque como es costumbre es conveniente insertar algn estado de espera (JMP SHORT $+2) entre dos operaciones E/S consecutivas, precaucin necesaria en los ordenadores ms antiguos.
A nivel de interrupciones, la salida -IRQ del MC146818 est conectada a IRQ8 (INT 70h) a travs del segundo controlador de interrupciones (vase la documentacin del mismo). Desde la interrupcin 1Ah, la BIOS implementa una serie de servicios para acceder al reloj de tiempo real, incluyendo la posibilidad de programar la alarma (que invoque una INT 4Ah cuando llegue la hora). Las funciones de retardo de la INT 15h se apoyan tambin en el reloj de tiempo real. Conviene tener presente que es de vital importancia acceder a los primeros 14 bytes de la CMOS slo si el bit UIP del registro A (bit 7) est a cero. Tambin es necesario poner a 1 el bit SET del registro B (bit 7) antes de modificar dichos bytes, devolvindolo a 1 despus. No respetar este principio puede provocar la lectura de fechas u horas incorrectas o una errnea asignacin de valores. Para los dems bytes de la CMOS no es necesario tomar esta precaucin.
UN MTODO PARA AVERIGUAR LA CONFIGURACIN DEL AT Y PS/2. Como se dijo antes, los AT y superiores almacenan en los 50 114 ltimos bytes de RAM libres de la CMOS informacin relativa a la configuracin del sistema. Los bytes ms importantes y comunes a todas las mquinas se muestran a continuacin.
Byte 0Eh: Diagnostics Status Byte. El bit 7 indica (si vale 1) que el MC146818 tiene un dficit de corriente elctrica. El bit 6 indica (si es 1) que el chechsum o suma de comprobacin de la CMOS ha fallado. El bit 5 indica (si vale 1) que la configuracin del sistema es incorrecta (no hay al menos una disquetera presente o el modo de vdeo de la configuracin no coincide con el detectado en el hardware). El bit 4 es puesto a 1 si el tamao de la memoria detectado no coincide con el indicado en la configuracin. El bit 3 activo indica que el adaptador o el disco fijo C: fall en la inicializacin, siendo imposible botar desde l. El bit 2 activo indica que la hora del reloj es incorrecta. Los bits 1 y 0 estn reservados. Byte 0Fh: Shutdown Status Byte. Los bits de este byte son asignados durante la inicializacin del sistema por parte de la BIOS, informando de su desarrollo (vase listado de la BIOS). Byte 10h: Diskette Drive Type Byte. Los bits 7..4 indican el tipo de la disquetera A y los bits 3..0 el tipo de la disquetera B. Los valores posibles son 0 (no existe esa disquetera), 1 (5-360K), 2 (5-1.2M), 3 (3-720K), 4 (3-1.44M) y 5 (3-2.88M en BIOS AMI) 6 (3-2.88M en BIOS IBM). Byte Reservado. 12
11h: Byte 12h: Fixed Disk Type Byte. Los bits 7..4 indican el tipo del primer disco fijo y los bits 3..0 el tipo del segundo. Existe una tabla definida por IBM cuando lanz el AT con 14 tipos de disco; ninguno que se vende hoy en dia est en la tabla, por lo que es frecuente que estos campos estn inicializados con el valor 1111b ( 0 si no hay disco duro instalado) para indicar simplemente la presencia de disco duro. Byte 13h: Reservado. Byte 14h: Equipment Byte. Los bits 7 y 6 indican el nmero de disquetes instalados; los bits 5 y 4 el tipo de adaptador de vdeo primario (00: EGA/VGA, 01: CGA-80, 10: CGA-40, 11: MDA); los bits 3 y 2 no se emplean. El bit 1 indica si hay coprocesador aritmtico y el bit 0 est activo para confirmar que hay disqueteras. Byte 15h- 16h: Low and High Base Memory Bytes. El 15h es el bajo y el 16h el alto. Entre ambos forman una palabra de 16 bits que indica la cantidad de memoria convencional (tpicamente 640 Kb). Byte 17h- 18h: Low and High Memory Expansion Bytes. El 17h es el bajo y el 18h el alto. Entre ambos forman una palabra de 16 bits que indica la cantidad de memoria extendida, en Kbytes. Byte 19h: Nmero del primer disco duro. Nmero de identificacin que la BIOS asigna al primer disco duro instalado. Byte 1Ah- 2Dh: Reservados. Byte 2Eh- 2Fh: Checksum. El 2Eh es el alto y el 2Fh el bajo. Entre ambos forman una palabra de 16 bytes que constituye el checksum o suma de comprobacin de los bytes 10h-20h. Byte 30h- 31h: Low and High Memory Expansion Bytes. Habitualmente es el mismo valor que el almacenado en los bytes 17h y 18h; esta variable refleja slo la memoria extendida ubicada por encima del primer megabyte que detecta la BIOS en el momento de arrancar. Byte 32h: Date Century Byte. Valor BCD del siglo actual-1. Para 1992, por ejemplo, es 19h. Byte 33h: Information Flag. El bit 7 indica si est instalada la vieja opcin de ampliacin de 128 Kb (hasta los 640 Kb) del IBM AT original: hoy en da suele estar siempre activo. El bit 6 es empleado por el programa SETUP para eliminar el mensaje inicial al usuario tras el primer SETUP. Los dems bits estn reservados. Byte 34h- 3Fh: Reservados.
PROGRAMA DE ACCESO ESCRITURA RELOJ DE TIEMPO REAL:
; Programa de reloj residente
13
.MODEL TINY ; .COM ; Se ensambla con TASM RELOJRES ; TLINK RELOJRES /t = COM (ver TLINK para ayuda)
.CODE
PushA Macro PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH DS PUSH ES EndM
POPA Macro POP ES POP DS POP DI POP SI POP DX POP CX POP BX POP AX EndM
ORG 100h Start: JMP Inicializa
; Variables Horas DB ? Minutos DB ? Segundos DB ? PMFlag DB 0 DivHi DW 0 DivLo DW 0 ResultHi DW 0 ResultLo DW 0 Actual DB 0 Divisor DB 0 Contador DB 0
LeeReloj Proc Near ; Regresa en DX:AX el valor actual del reloj contador interno de BIOS. PUSH ES MOV AX,40h MOV ES,AX MOV DI,6Ch MOV AX,ES:[DI] PUSH AX ADD DI,2 MOV AX,ES:[DI] POP DX POP ES 14
RET LeeReloj EndP
DobleDiv Proc Near ; Hace una divisin de Doble Palabra entre Byte dejando Doble Palabra ; Rutina para estar orgulloso, fue latosa y est basada en corrimientos, tal ; como se divide binario a mano. XOR AX,AX MOV Actual,AL MOV ResultLo,AX MOV ResultHi,AX MOV CX,33 ; 32 ciclos Ciclo: MOV AL,Actual CMP AL,Divisor PUSHF JB NoCarry STC ; Encender el Carry si es mayor o igual JMP SHORT Rotar NoCarry: CLC ; Apagar el Carry Rotar: RCL ResultLo,1 RCL ResultHi,1 POPF JB ContCiclos ; Si Actual es menor al Divisor, restar Divisor al Actual SUB AL,Divisor MOV Actual,AL ContCiclos: ; Rotar el dividendo ROL DivLo,1 RCL DivHi,1 ; El bit m s significativo entra a Actual RCL Actual,1 LOOP Ciclo ; En Actual qued el residuo RET DobleDiv EndP
; Calcular la hora en base al valor del contador de reloj de BIOS
Calcula2 Proc Near ; Primero multiplicar DX:AX por 5 XCHG AX,DX PUSH DX PUSH AX PUSH DX PUSH AX ROL AX,1 RCL DX,1 ROL AX,1 RCL DX,1 POP BX POP CX ADD AX,BX ADC DX,CX ; Ahora, dividir DX:AX entre 91 15
MOV DivHi,DX MOV DivLo,AX MOV Divisor,91 CALL DobleDiv ; Calcular el factor de correccin como Ciclos/50269 ; Aproximadamente cada 50000 ciclos se adelanta un segundo ; Las pruebas que hice dan resultados entre 50200 y 50300 ; Como factor promedio usar 50260 ; Con esto el error se reduce a 1 segundo, 1 segundo y medio ; El factor es m s exacto por la noche, mientras que el ; c lculo de Ciclos*5/91 es m s exacto temprano, lo que los ; equilibra bastante. POP AX POP DX MOV CX,50260 DIV CX MOV BX,AX ; Sacar el resultado de la doble divisin MOV DX,ResultHi MOV AX,ResultLo CLC SUB AX,BX ; Restar factor de correccin SBB DX,0 ; Dividir entre 60 para obtener minutos y segundos. MOV CX,60 DIV CX MOV Segundos,DL DIV CL MOV Minutos,AH MOV Horas,AL ; Establecer la bandera de AM/PM MOV PMFlag,0 CMP Horas,12 JL FinCalcula INC PMFlag CMP Horas,12 JE FinCalcula SUB Horas,12 FinCalcula: RET Calcula2 EndP
; Pintar el valor de dos dgitos en la posicin actual ES:DI DespByte Proc Near MOV CL,10 XOR AH,AH DIV CL ADD AX,3030h MOV BL,AH MOV AH,31 ; Blanco sobre azul MOV ES:[DI],AX ADD DI,2 MOV AL,BL MOV ES:[DI],AX ADD DI,2 RET DespByte EndP 16
; Pintar el reloj por acceso directo a memoria Despliega Proc Near PUSH ES MOV AX,0B800h MOV ES,AX MOV DI,138 ; Columna 80-11 de ancho=69*2 bytes c/columna=138 MOV AL,Horas CALL DespByte MOV AL,':' MOV ES:[DI],AX ADD DI,2 MOV AL,Minutos CALL DespByte MOV AL,':' MOV ES:[DI],AX ADD DI,2 MOV AL,Segundos CALL DespByte MOV AL,' ' MOV ES:[DI],AX ADD DI,2 MOV AL,'a' CMP PMFlag,1 JNE ImpAMPM MOV AL,'p' ImpAMPM: MOV ES:[DI],AX ADD DI,2 MOV AL,'m' MOV ES:[DI],AX POP ES RET Despliega EndP
; Rutina residente!!! ; Podra ser PROC
Inicio: PUSHA ; Guardar todos los registros PUSHF ; y adems las banderas CALL LeeReloj CALL Calcula2 CALL Despliega Salir: POPF ; Restaurar banderas POPA ; y registros IRET ; Terminar rutina de interrupcin; esto solamente porque es la ; interrupcin 1Ch, que no tiene una funcin predefinida. Si fuera ; otra, habra que saltar a la rutina que anteriormente atenda la ; interrupcin
; Parte no residente del programa; debe ponerse al final, para que se use la ; Interrupcin 27h
17
Inicializa: ; Ajustar DS PUSH DS PUSH CS POP DS PUSH ES ; Apuntar ES al segmento 0 XOR AX,AX MOV ES,AX ; Muy importante: Desactivar Interrupciones cuando vamos a ajustar el vector CLI LEA BX,Inicio MOV AX,CS ; Ajustar el vector de interrupcin del Reloj: en BX el desplazamiento de la ; rutina que atiende al reloj, en AX el segmento. MOV ES:[1Ch*4],BX MOV ES:[1Ch*4+2],AX STI ; Restaurar ES POP ES ; DS:DX apuntan al final de la zona que va a quedar residente LEA DX,Inicializa INT 27h ; Terminar pero dejar parte residente END Start
18
3. Como podemos programar alarmas de acuerdo al uso del reloj de tiempo real de la PC. Traer programa de alarmas.
La interrupcin de alarma se produce cada da cuando llega la hora en que ha sido programada y el bit que permite esta interrupcin est habilitado. Una forma de programar la alarma, basado en los cdigos indiferentes almacenables en los bytes de la alarma; un cdigo indiferente es cualquier valor comprendido entre 0C0h y 0FFh. Si el valor de la hora de alarma es un cdigo indiferente, la alarma se producir cada hora. Si el valor de la hora y minuto de alarma son cdigos indiferentes, sta se producir cada minuto. Si el valor de la hora como el minuto y segundo de la alarma son cdigos indiferentes, la alarma se producir cada segundo. Para configurar la alarma tenemos que tener en cuenta las direcciones de la CMOS:
Como vemos entonces almacenando los valores especificados en los bytes 01, 03 y 05 podremos activar las alarmas, pero adems debemos configurar el registro B.
REGISTRO B (lectura/escritura) En este registro se encuentran los bits para controlar la inicializacin de la fecha y hora, para habilitar o inhibir las diversas interrupciones y para establecer ciertas caractersticas de operacin.
El bit PIE (Periodic Interrupt Enable) sirve para permitir la interrupcin peridica cuando es puesto a 1; tras una seal -RESET es puesto a 0. El bit AIE (Alarm Interrupt Enable) ha de estar a 1 para habilitar la interrupcin de alarma; tambin es puesto a cero tras un -RESET. El bit UIE (Update Interrupt Enable) sirve para habilitar 19
o inhibir la interrupcin de fin de actualizacin, que se producira tras cada actualizacin del reloj. El MC146818 est diseado para ser conectado a un bus multiplexado, por lo que la circuitera de apoyo se encarga de gestionar la comunicacin con el microprocesador, estableciendo dos puertos de entrada/salida en las direcciones 70h y 71h. Para leer o escribir cualquier registro de la RAM CMOS, basta con enviar al puerto 70h el nmero de registro y a continuacin leer o escribir del puerto 71h. Entre los accesos a ambos puertos debe mediar un tiempo mnimo; de lo contrario la operacin fallar.
A nivel de interrupciones, la salida -IRQ del MC146818 est conectada a IRQ8 (INT 70h) a travs del segundo controlador de interrupciones. Desde la interrupcin 1Ah, la BIOS implementa una serie de servicios para acceder al reloj de tiempo real, incluyendo la posibilidad de programar la alarma (que invoque una INT 4Ah cuando llegue la hora). Las funciones de retardo de la INT 15h se apoyan tambin en el reloj de tiempo real.
Conviene tener presente que es de vital importancia acceder a los primeros 14 bytes de la CMOS slo si el bit UIP del registro A (bit 7) est a cero. Tambin es necesario poner a 1 el bit SET del registro B (bit 7) antes de modificar dichos bytes, devolvindolo a 1 despus. No respetar este principio puede provocar la lectura de fechas u horas incorrectas o una errnea asignacin de valores. Para los dems bytes de la CMOS no es necesario tomar esta precaucin. Otra forma de realizar es con la programacin directa del hardware de la computadora, estableciendo un flag, dentro de un programa residente que se encargue de la programacin del timer de la computadora.
4. Describir las interrupciones por hardware usadas en la PC cuales estn ocupadas y cuales disponibles.
Durante la ejecucin de un programa, el procesador debe interactuar con una serie de dispositivos de entrada/salida: El teclado, las unidades de disco, los puertos serie y paralelo, la tarjeta de red, etc. Normalmente, la velocidad de procesamiento de estos dispositivos es inferior a la del procesador. As que el procesador tendr que esperar un tiempo para que el dispositivo se desocupe antes de hacerle una nueva solicitud. Cmo sabe el procesador que el dispositivo ya est listo para la nueva peticin? Tambin, algunos dispositivos requieren la atencin del procesador en forma asncrona, es decir, no en forma peridica. Cmo sabe el procesador que el dispositivo requiere que se le atienda? Hay dos formas en que el procesador puede saber si el dispositivo est listo o si el dispositivo requiere atencin: La primera forma es que el procesador est peridicamente sondeando al dispositivo en cuestin. A fin de asegurarse de poder atender rpidamente a un dispositivo cuando se lo solicita, la frecuencia con el que procesador sondea a los dispositivos debe ser muy alta. Lo anterior produce que el procesador ocupa mucho tiempo interrogando a los dispositivos y en la mayora de las veces stos no estn listos o requieren de la atencin del procesador. La segunda forma, una ms eficiente, es hacer que sea el dispositivo el que le avise al procesador cuando est listo o requiera atencin, interrumpiendo al procesador. El procesador dejar de hacer lo que est haciendo para atender al dispositivo para posteriormente regresar a la tarea que estaba ejecutando antes de ser interrumpido. Los dispositivos utilizan una de las lneas del procesador para interrumpirlo. A este tipo de interrupcin se le conoce como 20
Interrupcin por Hardware. Para atender a un dispositivo el procesador ejecuta una rutina especial llamada Rutina de Servicio a Interrupciones. Las rutinas de servicio a interrupciones, por lo general, se cargan a la memoria RAM como parte del proceso de iniciacin de la computadora. Las interrupciones de cada dispositivo estn priorizadas de tal manera que si dos dispositivos desean interrumpir al procesador al mismo tiempo, slo la de mayor prioridad interrumpir al procesador.
Estas interrupciones no son enviadas directamente a la UCP, sino que se mandan a un circuito integrado cuya funcin es exclusivamente manejar este tipo de interrupciones. El circuito, llamado PIC 8259A, si es controlado por la UCP utilizando para tal control una serie de vas de comunicacin llamadas puertos.
5. Describir el procedimiento para acceder a una interrupcin.
Las interrupciones del procesador, hardware y software son invocadas de diferente manera: Procesador: Las interrupciones del procesador o interrupciones lgicas son invocadas por el procesador como consecuencia de un resultado inusual del programa, tal como un intento de divisin por cero. Hardware: Las interrupciones de hardware son invocadas por mecanismos perifricos estos fijan sus respectivas lneas de peticin de interrupcin (IRQ). Cada vez que una tecla es presionada, por ejemplo, el teclado genera una interrupcin. Las interrupciones de hardware son vectoreadas a rutinas de servicio de interrupcin (ISRs) estas generalmente residen en el BIOS. Software: Las interrupciones de software son invocadas a travs de la instruccin INT del 8086. La mayora de las interrupciones de software son vectoreadas a (DSRs) localizado en el BIOS, o en programas de aplicacin Una interrupcin puede ser iniciada especficamente por un proceso en ejecucin (en cuyo caso se suele denominar trampa (trap), y se dice que est sincronizada 21
con la operacin del proceso) o puede ser causada por algn evento que puede estar relacionado o no con el proceso en ejecucin (en cuyo caso se dice que es asncrona con la operacin del proceso).
Los sistemas orientados hacia las interrupciones pueden sobrecargarse. Si ests llegan con mucha frecuencia, el sistema no ser capaz de atenderlas. En algunos sistemas orientados hacia el teclado, cada tecla presionada almacena en la memoria un cdigo de un byte y genera un interrupcin para informar a la UCP que un carcter est listo para ser procesado. Si la UCP no puede procesar el dato antes de que se presione la siguiente tecla, se pierde el primer carcter. A partir del offset 0 del segmento 0 hay una tabla de 256 vectores de interrupcin, cada uno de 4 bytes de largo (lo que significa que la tabla tiene una longitud de 1KB). Cada vector est compuesto por dos partes: offset (almacenado en la direccin ms baja) y segmento (almacenado en la direccin ms alta). Cuando se llama a una interrupcin (no importa si es por hardware o por software), el procesador ejecuta las siguientes operaciones:
1. PUSHF (guarda las banderas en el stack) 2. CTF/DI (borra la bandera de Trap y deshabilita interrupciones) 3. CALL FAR [4 * INT#] (salta a nueva CS:IP, almacenando direccin de retorno en stack)
La expresin 4 * INT# es la forma de calcular la direccin de inicio del vector de interrupcin a utilizar en el salto. Por ejemplo, el vector de la INT21h estar en la direccin 84h Al efectuarse el salto, la palabra almacenada en la direccin ms baja del vector sustituye al contenido del registro IP (que previamente fue salvado en el stack) y la palabra almacenada en la direccin ms alta sustituye al contenido del registro CS (tambin salvado en el stack). Por ejemplo: La instruccin INT 21h es la usada para efectuar llamadas a las funciones del DOS. Supongamos que en la posicin de memoria 0000:0084 est almacenada la palabra 1A40h y en la direccin 0000:0086 est almacenada la palabra 208Ch. La prxima instruccin que se ejecute es la que est en la posicin 20C8:1A40 (nuevo CS:IP). El final de una rutina de interrupcin debe terminarse con la instruccin IRET, que recupera del stack los valores de CS, IP y Flags. Notemos que un llamado a interrupcin implica el cambio de estado automtico de la bandera de habilitacin de interrupciones. En pocas palabras, esto significa que al producirse una interrupcin, esta bandera inhabilita futuras interrupciones. Como la instruccin IRET restablece el registro de flags al estado anterior que tenia antes de producirse la interrupcin, las prximas interrupciones se habilitan en el mismo momento en que se produce el retorno desde la rutina de servicio. Pasos durante una interrupcin El CPU suspende lo que estaba realizando. El hw transfiere el control al sistema de operacin. Deshabilita las interrupciones. Mientras se atiende una interrupcin no se puede atender otra que llegue. Algunas arquitecturas con manejo de interrupciones sofisticadas permiten, mediante un esquema de prioridades, interrumpir un servicio de interrupcin para atender otra de mayor prioridad. Aquellas interrupciones de menor o igual prioridad son deshabilitadas. El kernel del sistema de operacin salva el estado actual del proceso interrumpido Transfiere su ejecucin a una direccin fija. Esta direccin por lo general contiene la direccin de comienzo donde la rutina de servicio de la interrupcin se 22
encuentra. Cada diseo de computador tiene su propio mecanismo de interrupciones. Una forma de manejar las interrupciones es invocando una rutina general que examine la informacin de la interrupcin y determine el tipo de interrupcin ocurrida, y de alli llama a la rutina que se encarga de atender dicha interrupcin. Por lo general se maneja mediante un vector de interrupciones, indexado por el tipo de interrupcin. En este vector se encuentra la direccin de comienzo de la rutina que da servicio a dicho tipo. Se le conoce como vector de interrupcin. Otra forma de localizar la rutina apropiada es mediante el pooling, es decir, preguntando a cada dispositivo pare ver quien requiri el servicio. Se ejecuta la rutina de interrupcin Se restaura el estado anterior Se habilitan las interrupciones. La arquitectura de interrupciones debe tambin almacenar la direccin de la instruccin interrumpida.
Los sistemas de operacin modernos operan por interrupciones (interrupt driven). Es decir, el sistema de operacin estar ocioso esperando a que algn evento ocurra (proceso a ejecutar, servicio de E/S, etc). Los eventos son indicados por la ocurrencia de una interrupcin o trap. Un trap es una excepcin causada por software.
6. Describir las interrupciones por software usadas en la PC cuales estn ocupadas y cuales disponibles.
Las interrupciones software son provocadas por los programas usando una funcin especial del lenguaje. Tienen como objetivo el que la CPU ejecute algn tipo de funcin. Al terminar de ejecutarse esta funcin, se seguir ejecutando el programa que provoc la interrupcin. Este tipo de interrupciones es la forma mas importante que tendrn los programas de ejecutar funciones especiales del DOS (Disk Operating System) o del BIOS (Basic Input Output System).
Las interrupciones de software pueden ser activadas directamente por el ensamblador invocando al nmero de interrupcin deseada con la instruccin INT. El uso de las interrupciones nos ayuda en la creacin de programas, usndolas, nuestros programas son ms cortos, es ms fcil entenderlos y usualmente tienen un mejor desempeo debido en gran parte a su menor tamao. Este tipo de interrupciones podemos separarlas en dos categoras: las interrupciones del sistema operativo DOS y las interrupciones del BIOS. La diferencia entre ambas es que las interrupciones del sistema operativo son ms fciles de usar pero tambin son ms lentas ya que estas interrupciones hacen uso del BIOS para lograr su cometido, en cambio las interrupciones del BIOS son mucho ms rpidas pero tienen la desventaja que, como son parte del hardware son muy especficas y pueden variar dependiendo incluso de la marca del fabricante del circuito. La eleccin del tipo de interrupcin a utilizar depender nicamente de las caractersticas que le quiera dar a su programa: velocidad (utilizando las del BIOS) o portabilidad (utilizando las del DOS). 23
Este tipo de interrupciones son de prioridad ms alta que las de hardware (enmascarables y no enmascarables), de forma que si se recibe una interrupcin hardware mientras que se ejecuta una software, esta ltima tiene prioridad. Niveles de IRQ (Lneas de interrupcin) Para ganar la atencin de la CPU, se utilizan lneas de solicitud de interrupcin (IRQ- Interrupt Request). El bus de la PC ofrece las lneas 2 a 7. Respetan prioridades, siendo la lnea 2 ms importante que la lnea 7. Cuando se activa una lnea, el procesador deja todo lo dems y carga una subrutina especial para encargarse de (dar servicio a) esa lnea de interrupcin en particular. Interrupciones ms usuales:
Int 21H (interrupcin del DOS) Int 10H (interrupcin del BIOS) Int 16H (Interrupcin del BIOS) Int 17H (Interrupcin del BIOS) Interrupcin 21H Propsito: Llamar a diversas funciones del DOS. Int 21H Nota: Cuando trabajamos en MASM es necesario especificar que el valor que estamos utilizando es hexadecimal. Esta interrupcin tiene varias funciones, para accesar a cada una de ellas es necesario que el registro AH se encuentre el nmero de funcin que se requiera al momento de llamar a la interrupcin. Funciones para desplegar informacin al video. 02H Exhibe salida 09H Impresin de cadena (video) 40H Escritura en dispositivo/Archivo Funciones para leer informacin del teclado. 01H Entrada desde teclado 0AH Entrada desde teclado usando buffer 3FH Lectura desde dispositivo/archivo Funciones para trabajar con archivos. En esta seccin nicamente se expone la tarea especfica de cada funcin, para una referencia acerca de los conceptos empleados refirase a la unidad 7, titulada: "Introduccin al manejo de archivos". Mtodo FCB 0FH Abrir archivo 24
14H Lectura secuencial 15H Escritura secuencial 16H Crear archivo 21H Lectura aleatoria 22H Escritura aleatoria Handles 3CH Crear archivo 3DH Abrir archivo 3EH Cierra manejador de archivo 3FH Lectura desde archivo/dispositivo 40H Escritura en archivo/dispositivo 42H Mover apuntador de lectura/escritura en archivo Interrupcin 10H Propsito: Llamar a diversas funciones de video del BIOS. Int 10H Esta interrupcin tiene diversas funciones, todas ellas nos sirven para controlar la entrada y salida de video, la forma de acceso a cada una de las opciones es por medio del registro AH. Funciones comn de la interrupcin 10H. 02H Seleccin de posicin del cursor 09H Escribe atributo y caracter en el cursor 0AH Escribe caracter en la posicin del cursor 0EH Escritura de caracteres en modo alfanumrico
El controlador de interrupciones genera 15 interrupciones. Interrupcin 16H Propsito: Manejar la entrada/salida del teclado. Int 16H Veremos dos opciones de la interrupcin 16H, estas opciones, al igual que las de otras interrupciones, son llamadas utilizando el registro AH. Funciones de la interrupcin 16H 00H Lee un caracter de teclado 01H Lee estado del teclado Interrupcin 17H Propsito: Manejar la entrada/salida de la impresora. Int 17H 25
Esta interrupcin es utilizada para escribir caracteres a la impresora, inicializarla y leer su estado. Funciones de la interrupcin 16H 00H Imprime un caracter ASCII 01H Inicializa la impresora 02H Proporciona el estado de la impresora
7. Realizar el diseo de un sistema de forma que podamos probar las interrupciones de ambos tipos. Traer programa probado fuente y compilado
void interrupt PORT1INT(__CPPARGS) { printf("Se ha producido una interrupcin.\n"); outportb(0x20,0x20); // pic }
void main(void) { int c;
oldport1isr = getvect(INTVECT);
outportb(0x37A,(inportb(0x37A) | 0x10)); //Seteamos el bit C4 egisto de contol pto
setvect(INTVECT, PORT1INT);
/* Habilitamos la interrupcion del puerto */ outportb(0x21,(inportb(0x21) & 0x77)); setea con pic clrscr(); printf("\nPrueba de la interrupcion del puerto paralelo.\n"); do {} while (!kbhit());
/* Deshabilita la interrupcion del puerto */ outportb(0x21,(inportb(0x21) | 0x80)); outportb(0x37A,(inportb(0x37A) & 0xEF)); 26
setvect(INTVECT, oldport1isr); /* Restaura el vector de interrupcion */ } /s6 a tie mas o manos 14 15 o 16 al 25
7.2. Programa de Interrupcin por software
#include <stdio.h> #include <dos.h> #include <conio.h> //18.5 ms #define INTR 0X1C /* Interrupcion del timer */
int main(void) { char key,px,py; oldhandler = getvect(INTR);
setvect(INTR, handler); printf("\nPresione ESC para salir.\n"); py=wherey(); px=wherex(); gotoxy(1,1);clreol(); do key=getch(); while (key!=27); gotoxy(px,py); setvect(INTR, oldhandler); return 0; }
8. Describir el SETUP de la PC, las opciones de configuracin y los parmetros. Es el programa que modifica la BIOS y se denomina "CMOS Setup". 27
El Setup se activa en la mayora de los casos en los equipos clnicos pulsando la tecla DEL, DELETE ( Supr en teclados en castellano), CTRL-ALT-ESC y F2, F1, el "Esc" u otra combinacin de teclas (Alt-Esc, Alt-F1...). Algunas placas madre muestran claramente en pantalla la opcin para abrir el Setup (como: pulse SPACEBAR para entrar al Setup, etc.). La pantalla principal de una BIOS clsica es algo as:
Mientras que la de una WinBIOS tiene este aspecto:
28
De cualquier modo, observamos que existen varios apartados comunes a todas las BIOS: Configuracin bsica, llamado generalmente "Standard CMOS Setup" o bien "Standard Setup". Opciones de la BIOS, llamado "BIOS Features Setup" o "Advanced Setup". Configuracin avanzada y del chipset, "Chipset Features Setup". Otras utilidades, en uno o varios apartados (autoconfiguracin de la BIOS, manejo de PCI, introduccin de contraseas -passwords-, autodeteccin de discos duros...). Configuracin bsica (Estndar Cmos Setup) Bajo el nombre de Standard CMOS Setup o similar, se suele englobar la puesta al da de la fecha y hora del sistema, as como la configuracin de discos duros y disqueteras. La pantalla de manejo suele ser similar a sta:
Para cambiar la fecha y hora se debe situarse sobre ella e introducir la nueva, bien mediante el teclado, el ratn, los cursores o las teclas de avance y retroceso de pgina.De acuerdo a la sealizacin en la parte inferior de la pagina. El tipo de disquetera y pantalla es tambin sencillo de entender y manejar. Lo ms interesante y difcil est en la configuracin de los discos duros. En general sern nicamente discos del tipo IDE (incluyendo los EIDE, Ata-4, Ultra-DMA y dems ampliaciones del estndar). Los campos a rellenar suelen ser: 29
Tipo (Type): o uno predefinido, o Auto para que calcule el ordenador los valores correctos, o User para introducir los valores a mano, o bien None para indicar que no hay ningn disco. Tamao (Size): lo calcula el ordenador a partir de los datos que introducimos. Cilindros (Cylinders): Cuantos cilindros son. Cabezas (Heads): La cantidad de cabezas. Precompensacin de escritura (WritePrecomp): un parmetro muy tcnico, usado sobre todo en los discos antiguos. En los modernos suele ser cero. Zona de aparcado de las cabezas (LandZone): otro tecnicismo, que modernamente suele ser cero o bien 65535 (que en realidad significa cero). Sectores (Sectors): Cuntos sectores hay por cada pista. Modo de funcionamiento (Mode): para discos pequeos, de menos de 528 MB, el modo Normal. Para discos de ms de 528 MB (cualquiera moderno tiene 4 5 veces esa capacidad), el modo LBA o bien el Large, menos usado y slo recomendado si no funcionara el LBA. En muchos casos se permite la autodeteccin (opcin Auto). Opciones de la BIOS (Bios Feature Setup): Generalmente, en ingls, BIOS Features. Se trata de las diversas posibilidades que ofrece la BIOS para realizar ciertas tareas de una u otra forma, adems de habilitar (enable) o deshabilitar (disable) algunas caractersticas. Las ms importantes son: CPU Internal cache: el habilitado o deshabilitado de la cach interna del microprocesador. Debe habilitarse (poner en Enabled) para cualquier chip con cach interna (todos desde el 486). External Cach: La cach externa o de segundo nivel. No tiene tanta trascendencia como la interna, pero influye bastante en el rendimiento. Quick Power On Self Test: que el test de comprobacin al arrancar se haga ms rpido. Si estamos seguros de que todo funciona bien, merece la pena hacerlo para ganar unos cuantos segundos al arrancar. Boot Sequence: para que el ordenador busque primero el sistema operativo en un disquete y luego en el disco duro si es "A,C" o al revs si es "C,A". til para arrancar o no desde disquetes, o en BIOS modernas incluso desde una unidad Zip o SuperDisk internas. Swap Floppy Drive: si tenemos dos disqueteras (A y B), las intercambia el orden temporalmente. Boot Up NumLock Status: para los que prefieran arrancar con el teclado numrico configurado como cursores en vez de cmo nmeros. IDE HDD Block Mode: un tipo de transferencia "por bloques" de la informacin del disco duro. Casi todos los discos duros de 100 MB en adelante lo soportan. 30
Gate A20 Option: un tecnicismo de la RAM; mejor conectado. Above 1 MB Memory Test: por si queremos que verifique slo el primer MB de RAM o toda (above = "por encima de"). Lo primero es ms rpido pero menos seguro, evidentemente, aunque si no ha fallado nunca. Memory Parity Check: verifica el bit de paridad de la memoria RAM. Slo debe usarse si la RAM es con paridad, lo que en la actualidad es muy raro, tanto en FPM como EDO o SDRAM. Las nicas memorias con paridad suelen estar en 486s o Pentium de marca, como algunos IBM. Typematic Rate: para fijar el nmero de caracteres por segundo que aparecen cuando pulsamos una tecla durante unos instantes sin soltarla. Numeric Processor: para indicar al ordenador que existe un coprocesador matemtico. Puesto que desde la aparicin del 486 DX esto se da por supuesto, est en proceso de extincin. Security Option: aunque a veces viene en otro men, esta opcin permite elegir si queremos usar una contrasea o password cada vez que arranquemos el equipo (System), slo para modificar la BIOS (Setup o BIOS) o bien nunca (Disabled). IDE Second Channel Option: indica si vamos a usar o no el segundo canal IDE (slo en controladoras EIDE, claro), en cuyo caso le reserva una IRQ, generalmente la 15. PCI/VGA Palette Snoop: se suele utilizar cuando tenemos dos tarjetas de vdeo (o una tarjeta aadida sintonizadora de televisin) y los colores no aparecen correctamente. Remtase al manual de su tarjeta grfica para ver si debe habilitarlo. Video Bios ROM Shadow: si se habilita, copiar la BIOS de la tarjeta grfica desde la lenta ROM en la que est a la rpida RAM del sistema, lo que acelera el rendimiento. Suele estar habilitada sin dar problemas, salvo quiz en Linux. (Adaptor) ROM Shadow: lo mismo pero para otras zonas de la BIOS. En este caso se suelen deshabilitar, para evitar problemas innecesarios, aunque puede probar y ver si aumenta la velocidad. 31
Configuracin avanzada y del chipset Son parmetros que indican qu caractersticas del chipset deben habilitarse y cmo. Afecta habitualmente a la memoria RAM, a las cachs (interna y externa) y a veces al micro, a los buses ISA, Vesa, PCI y AGP y a otros dispositivos como los puertos serie y paralelo. Este terreno puede ser algo peligroso, as que apunte todo antes de cambiar nada; lo ms fcil es dejar las ms opciones que pueda en Auto, aunque con eso puede que no saque el mximo de rendimiento. Y es que para ganar hay que sufrir...
Auto Configuration: pues eso, configuracin automtica; la tabla de salvacin cuando no se consigue hacer a mano. Los valores que da tras una primera autoconfiguracin pueden ser vlidos como punto de partida. ISA Bus Clock: la velocidad del bus ISA, que en teora debe ser unos 8 MHz. A veces se introduce como una cifra en MHz y otras veces en funcin del bus del sistema (el PCLK. Velocidad de la RAM: en esto existen mltiples formas de proceder. Evidentemente, cuanto mayor le indiquemos que es la velocidad de la RAM ms rpido ir el sistema, pero en muchas ocasiones la RAM no es tan rpida o de calidad como sera deseable y la estabilidad del sistema se resiente, sobre todo al cargarlo de trabajo. Los valores que indican esta velocidad son los ciclos de acceso a RAM, los ciclos de espera (Clock Cycles o, a veces, Wait States) que el rpido microprocesador concede a la lenta RAM antes de mandarle o leer de ella la informacin. Ajustes de la cach: similares a los de la RAM. Algunos consisten en modificar los tiempos de acceso, otros en modificar la forma de acceder a la cach. De cualquier forma, esto depende enteramente de las capacidades de la cach misma. 32
Vdeo y System Cacheable (Shadow): como se coment en el apartado de opciones de la BIOS, copiar la BIOS de la tarjeta de vdeo o del sistema de la lenta ROM a la rpida RAM o, en este caso, usar la cach para lo mismo. Manejo de dispositivos: hoy en da los chipsets deben manejar las controladoras de dispositivos tales como discos duros, puertos serie, etc., que suelen estar incorporadas a la placa base. Configuracin por software de la CPU: en la actualidad, bastantes placas base han dejado de lado el mtodo clsico para configurar la CPU y han optado por soluciones jumperless (literalmente, "sin jumpers"), autodetectando los valores correctos de velocidad de bus, multiplicador y voltaje y/o permitiendo que el usuario los seleccione mediante un sencillo men en la BIOS.
Administracin de energa En este men (no se implant hasta bien entrada la poca de los 486), es donde se configuran las caractersticas de ahorro de energa del ordenador. Esto puede ser algo totalmente superfluo, por ejemplo si vamos a usar el ordenador de forma continuada al mximo de potencia, o bien algo fundamental, como ocurre en ordenadores porttiles o sencillamente si tenemos la mala costumbre de encender el ordenador al llegar a la oficina y no apagarlo hasta la hora de salir, tanto si lo vamos a usar como si no. Power Management: literalmente, administracin de energa. Es donde se selecciona si queremos habilitar el ahorro de energa y de qu forma; generalmente se ofrecen Disable (deshabilitado), User define (definido por el usuario) y algunas opciones predeterminadas para un ahorro mnimo o mximo. PM Control by APM: una opcin muy importante; determina si el control de energa deber hacerse segn el estndar APM (Advanced Power Management, administracin avanzada de energa), lo que entre otras cosas permite que Windows sea capaz de suspender el equipo a voluntad . Video Off Method: ofrece diversas opciones para reducir el consumo del sistema de vdeo, de las cuales la ms interesante es DPMS, aunque no todos los monitores y tarjetas grficas la soportan 33
PM Timers: para controlar el tiempo que debe permanecer inactivo el ordenador (System) o el disco duro (HDD) antes de que se active el ahorro de energa. Existen 3 grados de ahorro de energa: PM Events: una larga serie de eventos o sucesos que deben ser controlados para saber si el ordenador est inactivo o trabajando. Es habitual no controlar (Disable) la actividad de la IRQ8 (reloj de la BIOS), ya que rara vez se la puede considerar como totalmente inactiva. CPU Fan Off in Suspend: si el ventilador de la CPU va conectado a la placa base, lo apaga cuando el equipo est en suspenso, ya que en ese momento la CPU est prcticamente parada. Modem Wake Up: activa el equipo cuando se detecta una llamada entrante en el mdem. Necesita que el mdem soporte esta caracterstica y que est conectado a la placa base mediante un cable especial. LAN Wake Up: igual que la anterior, pero para la tarjeta de red. Tambin necesita estar conectado a la placa base mediante un cable.
Configuracin de PNP y slots PCI Resulta raro la sentencia PNP con PCI; pues bien, la gran mayora de dispositivos PCI soportan PNP, a diferencia de las tarjetas ISA, mucho ms problemticas El Plug&Play, PNP o P&P, es una tecnologa que facilita la conexin de dispositivos, ya que se supone que basta con enchufar y listo. PNP OS Installed: informa al sistema de si hay un sistema operativo PNP instalado. Resources Controlled by: Recursos controlados bien manual, bien automticamente. IRQx/DMAx assigned to: una lista de las interrupciones (IRQs) 34
y canales DMA que podemos asignar manualmente, bien a tarjetas PCI/ISA PnP (compatibles con PNP), bien a tarjetas Legacy ISA (tarjetas ISA no PNP, que son las ms conflictivas). Necesitaremos conocer los valores de IRQ y/o DMA a reservar, que vendrn en la documentacin del dispositivo problemtico. PCI IDE IRQ Map to: algo que muy probablemente no necesite cambiar nunca, ya que slo afecta a controladoras IDE no integradas en la placa base, sino en forma de tarjeta, que no sean PNP. Assign IRQ to USB: pues eso, si el puerto USB debe tener una interrupcin asignada o no. Si no tiene ningn dispositivo USB conectado, puede liberar esa IRQ para otros usos; suele ser la misma interrupcin que para uno de los slots PCI o ISA. Autoconfiguracin de la BIOS Este apartado comprende diversas opciones que se proporcionan para facilitar la configuracin de la BIOS, de las cuales las ms comunes son: LOAD BIOS DEFAULTS: carga una serie de valores por defecto con poca o nula optimizacin, generalmente tiles para volver a una posicin de partida segura y resolver problemas observados al arrancar. LOAD SYSTEM DEFAULTS: una opcin cuyos efectos varan de unas BIOS a otras. En unos casos carga unos valores por defecto seguros (como LOAD BIOS DEFAULTS), en otros carga unos valores ya optimizados para conseguir un rendimiento adecuado, o incluso puede servir para cargar la ltima serie de valores guardados por el usuario. LOAD TURBO DEFAULTS: carga los valores que estima ptimos para incrementar el rendimiento. En cualquier caso, debe tenerse en cuenta que los cambios no suelen ser guardados automticamente, sino que deben confirmarse al salir de la BIOS. Perifricos integrados Las placas base modernas (desde las de los ltimos 486) suelen tener integrados los chips controladores del disco duro, y en muchas ocasiones manejan tambin las disqueteras, los puertos serie y el puerto paralelo. Por ello, las BIOS tienen diversos apartados para manejar estos dispositivos, entre ellos: Conexin o desconexin de dichas controladoras: de especial importancia en el caso del segundo canal IDE, que en ocasiones est deshabilitado por defecto, y que deberemos habilitar para conectar ms de dos dispositivos IDE (o bien uno lento y uno rpido sin mezclarlos en el mismo canal, lo que baja el rendimiento). Modos de acceso a discos duros (PIO y/o UltraDMA): los discos modernos admiten 5 modos PIO, del ms lento, el PIO-0 o no soporte de este tipo de acceso (en discos antiguos, de 100 MB o menos), hasta el ms rpido, el modo PIO-4. Adems, recientemente ha aparecido el modo UltraDMA, an ms rpido. Si la controladora est integrada en la placa base, aqu debe especificar esos datos. Bsquelos en el manual de su disco duro, en Internet en la pgina del fabricante o bien seleccione Auto y no se complique ms. Direcciones e interrupciones (IRQs) de los puertos: bien sean los puertos serie o el paralelo. Resulta muy raro necesitar cambiar los valores por defecto, pero podra ser necesario para evitar conflictos con otros dispositivos que usen esos mismos valores. 35
Tipo de puerto paralelo: el antiguo estndar de puerto paralelo se ha quedado un tanto anticuado hoy en da, sobre todo si lo que queremos conectar no es una impresora sino un escner o una unidad Zip; por ello, se suele poder seleccionar otras posibilidades ms avanzadas como ECP o EPP. Busque en el manual del perifrico para saber qu modo debe escoger. Control del puerto de infrarrojos: aunque muy pocas placas base incluyen los adaptadores y cables necesarios, modernamente casi todas traen los conectores para instalar un puerto de infrarrojos en su sistema. Generalmente deber habilitarse y seleccionar su tipo, direccin de memoria, IRQ y si debe redireccionar la informacin de COM2 a este puerto.
Control por password Se suele poder seleccionar, bien en un men especfico o en las BIOS Features, entre tener que introducir la clave cada vez que se arranca el ordenador o slo cuando se van a cambiar datos de la BIOS. Lo primero es el mtodo ideal para seguridad, y adems es gratis; lo segundo es til cuando gente inexperta. Autodeteccin de discos duros IDE Esta opcin permite detectar los discos duros que estn conectados al sistema, as como su configuracin. Resulta muy til para simplificar la tarea de instalar un disco nuevo, as como cuando los datos del disco no estn completos o no parecen funcionar en nuestra BIOS.
36
Formateo de disco duro a bajo nivel O, en ingls, HDD Low Level Format. Se trata de un formateo mucho ms intenso que el normal; no slo elimina los datos, sino que reorganiza la propia estructura del disco. Generalmente slo debe usarse cuando el disco est fallando muy a menudo o ha sido infectado por un virus tremendamente resistente, y aun as no resulta recomendable. Salir de la BIOS Save and Exit Setup: o bien Write to CMOS and Exit o algo similar; pues eso, grabar los cambios y salir, con lo cual se reinicia el equipo. Debera pedirle confirmacin, en forma de "Y/N?" (Yes o No). Exit Without Saving: o Do Not Write to CMOS and Exit o Discard Changes and Exit o similar; lo contrario, salir sin grabar los cambios.
9. BIBLIOGRAFIA
EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2 Edicin 4.0 (4) Autor: Ciriaco Garca de Celis Interrupciones del Microprocesador, Ing. Jos Francisco Andaluz Guzmn, U NIVERSIDAD CATLICA DE OCCIDENTE Interrupciones en la arquitectura Intel IA-32, Jose Blzquez Soriano, Diciembre del 2004 EL RELOJ DE TIEMPO REAL (RTC), Departamento de Ingeniera Electrnica, Universidad de Madrid Conceptos generales de Sistemas Operativos, Escuela Universitaria de Informtica (Segovia) Manual Bsico BIOS, www.netspacesoluciones.com