      ASM POR AEsoft. (leccin 10).
      --------------------------------------------------------------------
     - funciones DOS:
     - INT 21H (DOS-API)

     - funciones BIOS:
     - INT 10H (FUNCIONES DEL DRIVER DE VIDEO)
     - INT 16H (FUNCIONES DEL DRIVER DE TECLADO)
      --------------------------------------------------------------------

      Hola de nuevo a todos los seguidores del CURSO DE ASM.

      En las lecciones 7 y 8 hemos visto las ms importantes instrucciones
      con que contamos en Ensamblador del 8086. En prximas lecciones iremos
      viendo el resto de instrucciones, segn las vayamos necesitando.

      En esta leccin vamos a ver algo tan importante como ese conjunto de
      instrucciones.
      vamos a ver las principales interrupciones software (funciones) que
      tenemos disponibles para usar en nuestros programas.

      Mediante la llamada a una de estas funciones podemos leer un fichero,
      cambiar de modo de vdeo, aceptar un carcter desde teclado, etc, etc.

      Estas interrupciones software nos permiten trabajar con los distintos
      subsistemas (teclado, vdeo, discos duros y disqueteras, etc..) de
      una forma relativamente cmoda. Nos ofrecen las rutinas bsicas para
      trabajar con ellos.

      Para cada uno de los tres servicios ms importantes de cara al
      programador (funciones DOS, funciones de pantalla y funciones de teclado),
      vamos a enumerar las funciones fundamentales para empezar a trabajar.

      Repito, la lista de funciones que se expone a lo largo de la leccin,
      no es completa. Para eso existen libros y manuales especiales.
      Al final de la leccin se ofrece bibliografa suficiente.

      Conforme vaya avanzando el nivel del curso iremos viendo nuevos servicios
      como la INT 33H (controlador del ratn), la INT 13H (Controlador de
      disco), etc...



      - funciones DOS
      ---------------
      Las funciones DOS son todas aquellas interrupciones software de las que
      est provisto el Sistema Operativo.
      Estas funciones, entre las que se encuentra la INT 21H (la ms importante
      de todas), son utilizadas por el programador, y por el propio sistema
      operativo para acceder a los distintos subsistemas del procesador como
      son discos, teclado, etc...

      Usaremos estas funciones cuando queramos: crear ficheros, borrar ficheros,
      leer ficheros, solicitar memoria libre para trabajar con los datos de
      nuestros programas, dejar programas residentes, etc, etc...

      En definitiva, las funciones del DOS nos proporcionan un vnculo de
      comunicacin cmodo y seguro entre nuestro programa y los diferentes
      subsistemas con los que podemos trabajar.

      Veremos que esto tambin nos lo proporcionan las funciones BIOS, pero
      a otro nivel ms bajo.
      Por ejemplo, mientras que las funciones DOS nos permiten trabajar con
      ficheros, las funciones BIOS slo nos permiten trabajar con discos en
      funcin a pistas, sectores, etc. Es decir, ms a bajo nivel.

      En una prxima leccin veremos la estructura interna de los discos:
      Tanto la estructura fsica: cabezas (caras), cilindros (pistas),
      sectores.... Como la estructura lgica que usa el MS-DOS:
      BOOT RECORD, FAT, DIRECTORIO, CONTENIDO DE FICHEROS.
                   +---------------+
      (sector de arranque) (tabla de localizacin de ficheros)

      Y volviendo a lo que nos ocupa: las funciones BIOS nos facilitan el
      trabajo con la parte fsica: pistas, sectores, etc... Mientras que
      las funciones DOS, nos permiten trabajar con la parte lgica: ficheros.

      Por supuesto, al trabajar con la parte lgica (ficheros), el DOS debe
      hacer uso de la parte fsica  sectores (que es donde estn almacenados
      los ficheros). Para este trabajo, las mismas funciones DOS usan las
      funciones BIOS.

      Hemos dicho que la ms importante de las funciones DOS es la INT 21H.
      Pues bien, aparte de sta, hay algunas ms como son:
      - INT 20H (Terminacin de proceso).
      - INT 22H (Direccin del gestor de terminacin del programa en curso).
      - INT 23H (Direccin del gestor de CTRL+C).
      - INT 24H (Direccin del gestor de errores crticos).
      - INT 25H (Lectura de sectores de disco).
      - INT 26H (Escritura de sectores a disco).
      - INT 27H (Dejar programa residente y salir).
      - INT 28H a INT 2EH (Reservadas. No est permitido su uso al programador).
      - INT 2FH (Interrupcin mltiple  Interrupcin del Multiplexor).

      La INT 20H es una de las muchas maneras de finalizar un programa.

      Las interrupciones 22H, 23H y 24H las estudiaremos en la prxima leccin,
      cuando estudiemos la construccin de programas en ASM, y la gestin de
      los mismos por parte del DOS.

      Las interrupciones 25H y 26H se utilizan para leer y escribir sectores
      de disco. Hemos visto antes que era la BIOS la que tena este cometido.
      La razn de ser de estas dos funciones es que utilizan un diferente
      formato de referencia a los sectores. La BIOS trata a los sectores
      del disco de forma fsica: Sector X del Cilindro Y de la Cabeza Z...
      Mientras que el DOS enumera secuencialmente todos los sectores del
      disco, desde (el sector 1 del cilindro 0 de la cabeza 0), hasta
      el ltimo sector del disco. Referenciando as a cada sector mediante un
      slo nmero de sector lgico.

      La INT 27H es un mtodo antiguo de dejar programas residentes en memoria.
      No se suele utilizar. En su lugar, disponemos de la funcin 31h de la
      INT 21H, que veremos a continuacin.

      Las funciones reservadas han sido pensadas por los programadores del
      DOS, para uso exclusivo del mismo DOS, o son funciones vacas (sin
      contenido) en previsin para un aumento de funciones en una prxima
      versin del DOS.

      La interrupcin 2FH  interrupcin del Multiplexor, proporciona
      informacin acerca del estado de ciertos programas residentes del DOS,
      como son DOSKEY, PRINT, APPEND, SHARE, etc.
      Podremos saber si estn instalados o no, y en caso de que estn
      instalados, la INT 2FH nos sirve como un interfaz  vnculo de
      comunicacin con estos programas residentes.


      - INT 21H (DOS-API)
      -------------------
      La mayora de servicios  funciones del sistema operativo MS-DOS se
      obtienen a travs de la interrupcin software 21H.
      Es por esto que se le denomina DOS-API:
      DOS-APPLICATION-PROGRAM-INTERFACE,  Interfaz entre programas de
      aplicaciones y el MS-DOS.

      La INT 21H est compuesta por un grupo de funciones.
      Cuando se accede a la INT 21H, hay que indicar el nmero de funcin
      que queremos ejecutar.
      En determinadas casos, una funcin es tan compleja que necesita de
      varias subfunciones para poder desempear todo su trabajo.
      En este caso, deberemos indicar el nmero de esa funcin, y tambin el
      nmero de la subfuncin a la que queremos acceder dentro de esa funcin.

      La llamada a la INT 21H se realizar como sigue:

      + Introducimos en (AH) el nmero de funcin a la que deseamos acceder.
      + En caso de que deseemos acceder a una subfuncin dentro de una
        funcin, debemos indicarlo introduciendo en (AL) el nmero de esa
        subfuncin.
      + Llamar a la INT 21H.

      Aparte de los registros mencionados (AH y AL), la mayora de funciones
      requieren de otros registros para realizar su trabajo.
      En estos registros se puede almacenar el comienzo de un buffer de disco
      al trabajar con ficheros; el comienzo de una cadena de texto para sacar
      por pantalla; etc..


      Un ejemplo: Queremos usar la funcin 9h de la INT 21H para sacar por
      pantalla una cadena de texto. Dicha cadena de texto se encuentra
      almacenada a continuacin de la etiqueta Cadena_De_Texto.

      Procederemos como sigue:

      Mov AH,9 ;indicamos nmero de funcin a ejecutar.
      Mov DX,offset cadena_de_texto ;introducimos en DX la direccin donde
                                    ;se encuentra la cadena en cuestin.
      INT 21H ;llamamos a la INT 21H, la cual ejecutar la funcin 9h.


      A continuacin vamos a ver las funciones bsicas dentro de cada grupo
      para empezar a programar en ensamblador.
      No las vamos a ver todas, porque muchas de ellas ya no se usan, como son
      las funciones de acceso a ficheros por el mtodo FCB (que veremos cuando
      hablemos de la estructura de los discos).
      Tampoco veremos en un principio aquellas funciones que no vamos a utilizar
      hasta pasado un buen tiempo, como son funciones relacionadas con la
      informacin sobre el pas, pgina de cdigos, y unas pocas ms que
      slo rara vez se utilizan.

      De cualquier modo, siempre es interesante poder conocerlas todas, as
      que si teneis oportunidad, hay por ah manuales, libros, etc, en los
      que vienen todas las funciones detalladas.


      ---------------   Funciones de la INT 21H  -------------------


      * Funciones de Entrada/Salida de caracteres *


      +---------------------------------------------------------------------+
       INT 21H   Funcin 01H                                              
      +-----------------------------------------                           
       Entrada de Carcter con Eco ( salida)                             
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 01H                                                  
                                                                           
      + DEVUELVE:                                                           
                 AL = Cdigo ASCII del Carcter ledo.                     
                                                                           
      + EFECTO:                                                             
                                                                           
       Se lee un carcter del dispositivo de entrada estndar, y se        
       enva al dispositivo estndar de salida. Si al llamar a la          
       funcin no haba ningn carcter disponible, se esperar a que      
       lo haya.                                                            
                                                                           
       Normalmente el dispositivo estndar de entrada es el teclado,       
       y el dispositivo estndar de salida es la pantalla. Es lo que       
       se conoce en MS-DOS como CON (de consola: teclado y pantalla).      
                                                                           
       Tanto la Entrada como la Salida pueden ser redireccionadas.         
       Ya veremos lo que eso significa con ms detalle. Sirva ahora que    
       es posible que los caracteres se puedan tomar de un dispositivo     
       diferente al teclado, y se puedan enviar a un dispositivo           
       diferente de la pantalla.                                           
                                                                           
       Es decir, que como entrada podemos tener los caracteres de un       
       fichero, y como salida podramos tener la impresora.                
                                                                           
      + VERSION DE MS-DOS: 1.0  superior.                                  
                                                                           
      + NOTAS: En la versin 1.0, se toma el carcter desde teclado, y se   
              enva hacia la pantalla. En la versin 1.0 del DOS, esta     
              funcin no admita ninguna redireccin  de Entrada/Salida.   
                                                                           
      +---------------------------------------------------------------------+




      +---------------------------------------------------------------------+
       INT 21H   Funcin 02H                                              
      +-----------------------------------------                           
       Salida de Carcter                                                 
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 02H                                                  
                 DL = Cdigo ASCII a enviar al dispositivo de salida.      
      + DEVUELVE:                                                           
                 NADA.                                                     
                                                                           
      + EFECTO:                                                             
                                                                           
       Se enva el carcter depositado en el registro DL al dispositivo    
       estndar de salida.                                                 
                                                                           
       La salida puede ser redireccionada hacia un fichero, impresora, etc 
                                                                           
      + VERSION DE MS-DOS: 1.0  superior.                                  
                                                                           
      + NOTAS: En la versin 1.0, se enva el carcter hacia la pantalla.   
              En la versin 1.0 del DOS, esta funcin no admita           
              redireccin  de Salida.                                      
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 05H                                              
      +-----------------------------------------                           
       Envo de Carcter a la Impresora                                   
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 05H                                                  
                 DL = Cdigo ASCII a enviar al dispositivo de salida.      
      + DEVUELVE:                                                           
                 NADA.                                                     
                                                                           
      + EFECTO:                                                             
       Se enva el carcter depositado en DL al puerto paralelo.           
       Si no se ha redireccionado la salida, el dispositivo por defecto    
       en el puerto paralelo de salida (LPT1  PRN) es la impresora.       
                                                                           
      + VERSION DE MS-DOS: 1.0  superior.                                  
                                                                           
      + NOTAS: En la versin 1.0, se enva el carcter hacia el primer      
              dispositivo de listado (PRN  LPT1).                         
              En versiones posteriores de MS-DOS, se puede redireccionar   
              la salida.                                                   
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 21H   Funcin 09H                                              
      +-------------------------------------------                         
       Visualizacin de una cadena de caracteres                          
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 09H                                                  
              DS:DX = Segemento:Desplazamiento de la cadena a visualizar.  
              DS debe apuntar al segmento donde se encuentra la cadena.    
              DX debe contener el desplazamiento de la cadena dentro de    
              ese segmento.                                                
      + DEVUELVE:                                                           
                 NADA.                                                     
                                                                           
      + EFECTO:                                                             
       Se enva una cadena de caracteres al dispositivo estndar de salida.
       Si no se ha redireccionado la salida, la cadena se enviar a la     
       pantalla.                                                           
                                                                           
      + VERSION DE MS-DOS: 1.0  superior.                                  
                                                                           
      + NOTAS: La cadena debe finalizar con un carcter $ (24H), para que   
              el DOS pueda reconocer el fin de la cadena.                  
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 21H   Funcin 0BH                                              
      +-------------------------------------------                         
       Comprobacin del estado de la entrada                              
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 0BH                                                  
      + DEVUELVE:                                                           
                 AL = 00H si no hay carcter disponible.                   
                 AL = FFH si hay algn carcter disponible.                
                                                                           
      + EFECTO:                                                             
       Se comprueba si hay algn carcter procedente del dispositivo       
       estndar de entrada. La entrada puede ser redireccionada.           
       Si no hay tal redireccin, se comprueba el buffer de teclado.       
                                                                           
      + VERSION DE MS-DOS: 1.0  superior.                                  
                                                                           
      + NOTAS: En caso de que haya un carcter disponible, sucesivas        
              llamadas a esta funcin seguirn dando un valor verdadero    
              hasta que se recoja el carcter con alguna de las funciones  
              de entrada de carcter, como la funcin 01h.                 
                                                                           
      +---------------------------------------------------------------------+



      * Funciones de manejo de disco *

      +---------------------------------------------------------------------+
       INT 21H   Funcin 0EH                                              
      +-------------------------------------------                         
       Seleccin de disco                                                 
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 0EH                                                  
                 DL = Cdigo de la unidad (0=A , 1=B , etc...)             
      + DEVUELVE:                                                           
                 AL = Nmero de unidades lgicas del sistema.              
                                                                           
      + EFECTO:                                                             
       Selecciona una unidad de disco para que se convierta en la unidad   
       por defecto o actual. Ofrece adems informacin acerca del nmero   
       total de unidades lgicas del sistema.                              
                                                                           
      + VERSION DE MS-DOS: 1.0  superior.                                  
                                                                           
      + NOTAS: Una unidad fsica como un disco duro puede estar particionada
              en varias unidades lgicas designadas por C , D, E ,etc.     
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 21H   Funcin 19H                                              
      +-------------------------------------------                         
       Obtener disco actual                                               
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 19H                                                  
      + DEVUELVE:                                                           
                 AL = Cdigo de la unidad actual (0=A , 1=B , etc...)      
                                                                           
      + EFECTO:                                                             
       Devuelve el cdigo de la unidad de disco activa o por defecto.      
                                                                           
      + VERSION DE MS-DOS: 1.0  superior.                                  
                                                                           
      + NOTAS: Las mismas que para la funcin 0EH                           
                                                                           
      +---------------------------------------------------------------------+



      * Funciones de gestin de directorios *

      +---------------------------------------------------------------------+
       INT 21H   Funcin 39H                                              
      +-------------------------------------------                         
       Crear directorio                                                   
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 39H                                                  
              DS:DX = Segemento:Desplazamiento de una cadena ASCIIZ        
                      con el nombre del directorio.                        
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Se crea un nuevo directorio usando la unidad de disco y la va de   
       acceso especificada en la cadena ASCIIZ.                            
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS: En la versin 1.0 del MS-DOS no existan subdirectorios.     
              ASCIIZ es una cadena de cdigos ASCII que termina con el     
              cdigo ASCII 0h.                                             
              As, si queremos crear un subdirectorio llamado PROGS dentro 
              del directorio DOS, la cadena ASCIIZ se definira as:       
                Nombre_del_directorio db 'C:\DOS\PROGS',0                  
              Si en el momento de llamar a la funcin, la unidad activa es 
              la unidad C, no es necesario indicarlo. De igual forma, si   
              nos encontramos en el directorio DOS, tampoco necesitamos    
              indicarlo.                                                   
                                                                           
              Esta funcin se abortar (indicndolo mediante Cf y AX) si:  
               -la va de acceso es incorrecta.                            
               -el directorio a crear ya existe.                           
               -el directorio a crear es un subdirectorio del Raiz,        
                y ste ya est lleno.                                      
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 3AH                                              
      +-------------------------------------------                         
       Borrar directorio                                                  
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 3AH                                                  
              DS:DX = Segemento:Desplazamiento de una cadena ASCIIZ        
                      con el nombre del directorio a borrar.               
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Se elimina el directorio indicado de la unidad de disco y la va    
       de acceso especificada en la cadena ASCIIZ.                         
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS: En la versin 1.0 del MS-DOS no existan subdirectorios.     
                                                                           
              Esta funcin se abortar (indicndolo mediante Cf y AX) si:  
               -la va de acceso es incorrecta.                            
               -el directorio especificado es el directorio activo.        
               -el directorio especificado no est vaco, es decir,        
                contiene algn fichero.                                    
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 3BH                                              
      +-------------------------------------------                         
       Establecer directorio actual                                       
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 3BH                                                  
              DS:DX = Segemento:Desplazamiento de una cadena ASCIIZ        
                      con el nombre del directorio.                        
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Establece como directorio actual el indicado mediante la cadena     
       ASCIIZ.                                                             
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS: En la versin 1.0 del MS-DOS no existan subdirectorios.     
                                                                           
              Esta funcin se abortar (indicndolo mediante Cf y AX) si   
              la va de acceso especificada en la cadena ASCIIZ es         
              incorrecta.                                                  
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 47H                                              
      +-------------------------------------------                         
       Obtener directorio actual                                          
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 47H                                                  
                 DL = Cdigo de la unidad (0 = unidad por defecto, actual; 
                      1 = A ; 2 = B ; etc...)                              
              DS:SI = Segmento:Desplazamiento de un buffer de 64 bytes.    
                      Este buffer contendr el nombre del directorio, con  
                      toda la va de acceso al mismo, en forma de cadena   
                      ASCIIZ.                                              
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Establece como directorio actual el indicado mediante la cadena     
       ASCIIZ.                                                             
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS: En la versin 1.0 del MS-DOS no existan subdirectorios.     
                                                                           
              Esta funcin se abortar (indicndolo mediante Cf y AX) si   
              el cdigo de unidad no es vlido. Es decir, no se especifica 
              una unidad vlida.                                           
                                                                           
              La va de acceso que antecede al nombre del directorio no    
              incluye el cdigo '\' (directorio raiz), ni el identificador 
              de la unidad.                                                
              El nombre de directorio acaba con el carcter 00h que cierra 
              la cadena ASCIIZ.                                            
                                                                           
      +---------------------------------------------------------------------+


      * Funciones de manejo de Ficheros *


      +---------------------------------------------------------------------+
       INT 21H   Funcin 3CH                                              
      +-------------------------------------------                         
       Crear Fichero                                                      
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 3CH                                                  
                 CX = Atributos del fichero:                               
                                            00H   Fichero Normal.          
                                            01H   Fichero de Slo Lectura. 
                                            02H   Fichero Oculto.          
                                            03H   Fichero de Sistema.      
              DS:DX = Segmento:Desplazamiento de una cadena ASCIIZ con     
                      el nombre de fichero.                                
                                                                           
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                    AX = Handle o manejador de fichero.                    
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Si el fichero indicado mediante la cadena ASCIIZ ya exista,        
       entonces se vaca su contenido, quedando con longitud 0.            
       Si el fichero no exista, entonces se crea.                         
       En ambos casos, el fichero se abre, y se devuelve un Handle        
       manejador de fichero para los restantes accesos a dicho fichero.    
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
              Esta funcin se abortar (indicndolo mediante Cf y AX) si:  
              -La va de acceso indicada en la cadena ASCIIZ es errnea.   
              -Se va a crear el fichero en el directorio raiz y ste ya    
               est lleno.                                                 
                                                                           
              El Handle es un nmero mediante el cual se referencia a un   
              fichero dado. De esta forma es ms cmodo trabajar con       
              ficheros. Para cada uno de los ficheros con que trabajemos,  
              tendremos un nmero (Handle) que lo representar.            
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 3DH                                              
      +-------------------------------------------                         
       Abrir Fichero                                                      
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 3DH                                                  
                 AL = Modo de acceso.                                      
                                                                           
                      Bits 0-2: Permiso de lectura/escritura.              
                                000b Acceso de slo lectura.               
                                001b Acceso de slo escritura.             
                                010b Acceso de lectura/escritura.          
                                                                           
                      Bit 3:    0b  (Reservado).                           
                                                                           
                      Bits 4-6: Modo de comparticin de Fichero.           
                                000b Slo el programa actual puede acceder 
                                     al archivo.                           
                                001b Slo el programa actual puede acceder 
                                     al archivo.                           
                                010b Otro programa puede leer el archivo,  
                                     pero no escribir en l.               
                                011b Otro programa puede escribir en el    
                                     archivo, pero no leerlo.              
                                100b Otro programa puede leer y escribir en
                                     el archivo.                           
                                                                           
                      Bit 7:    Bit de 'herencia'  Handle-flag.           
                                0b Si el handle se hereda por un programa  
                                   hijo.                                   
                                1b Si el handle no se hereda.              
                                                                           
              DS:DX = Segmento:Desplazamiento de una cadena ASCIIZ con     
                      el nombre de fichero.                                
                                                                           
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                    AX = Handle o manejador de fichero.                    
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Mediante esta funcin se habre un fichero ya existente, y se        
       devuelve un Handle para acceder al fichero en lo sucesivo.          
                                                                           
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
              El puntero de fichero se coloca sobre el primer byte del     
              fichero.                                                     
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 21H   Funcin 3EH                                              
      +-------------------------------------------                         
       Cerrar Fichero                                                     
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 3EH                                                  
                 BX = Handle.                                              
                                                                           
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Mediante esta funcin se cierra un fichero que estuviera abierto.   
       Se utiliza el Handle para indicar el fichero a cerrar.              
       Tras cerrar el fichero, dicho Handle se libera para nuevos ficheros.
       Se vuelvan al disco todos los buffers internos asociados al fichero.
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
              Si por error se llamara a esta funcin con el valor 0, se    
              cerrara el dispositivo de entrada estndar (teclado), que   
              tiene asociado ese handle 0. En cuyo caso no se aceptaran   
              datos del teclado.                                           
              Si el valor del handle fuera 1, se cerrara la pantalla, y   
              no se enviaran caracteres a la pantalla.                    
              Hay en total 5 handles reservados para referenciar a         
              diferentes dispositivos:                                     
                                                                           
              Handle 0 ---> Dispositivo estndar de entrada. (CON).        
              Handle 1 ---> Dispositivo estndar de salida.  (CON).        
              Handle 2 ---> Dispositivo estndar de error.   (CON).        
              Handle 3 ---> Dispositivo auxiliar estndar.   (AUX).        
              Handle 4 ---> Dispositivo estndar de listado. (PRN).        
                                                                           
              Normalmente, el handle 0 referencia al teclado.              
              El handle 1, a la pantalla.                                  
              El handle 2, a la pantalla. Se utiliza a la hora de mostrar  
              errores. Por eso lo de dispositivo de error.                 
              El handle 4, a la impresora.                                 
              El handle 3 referencia a un dispositivo auxiliar.            
                                                                           
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 3FH                                              
      +-------------------------------------------                         
       Lectura de Fichero o dispositivo.                                  
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 3FH                                                  
                 BX = Handle.                                              
                 CX = Nmero de bytes a leer.                              
              DS:DX = Segmento:Desplazamiento del buffer donde se          
                      depositarn los carateres leidos.                    
                                                                           
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                    AX = Bytes transferidos.                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Dado un handle vlido, se realiza una transferencia desde el        
       fichero referenciado por ese handle hacia el buffer de memoria      
       especificado mediante DS:DX.  Se transferirn tantos caracteres     
       como se especifique en CX.  Acto seguido, se actualiza el puntero   
       de fichero hasta el carcter que sigue al bloque leido.             
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
              Si se devuelve el flag Cf con valor (0), pero AX=0, esto     
              quiere decir que el puntero de fichero estaba apuntando      
              al final de fichero, y por eso no se ha podido leer ningn   
              carcter.                                                    
              Si se devuelve el flag Cf con valor (0), pero el contenido   
              del registro AX es menor que la cantidad de bytes a leer,    
              (indicado mediante CX antes de llamar a la funcin), esto    
              significa que se produjo algn error, o que no se pudo leer  
              todos los caracteres solicitados, porque se lleg al final   
              de fichero.                                                  
                                                                           
              Mediante esta funcin es posible leer caracteres del teclado,
              usando el handle 0.                                          
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 40H                                              
      +-------------------------------------------                         
       Escritura en Fichero o dispositivo.                                
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 40H                                                  
                 BX = Handle.                                              
                 CX = Nmero de bytes a escribir.                          
              DS:DX = Segmento:Desplazamiento del buffer desde donde se    
                      van a tomar los caracteres a escribir.               
                                                                           
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                    AX = Bytes transferidos.                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Dado un handle vlido, se realiza una transferencia desde el        
       buffer de memoria indicado mediante DS:DX hacia el fichero o        
       dispositivo referenciado por el Handle.                             
       Se transferirn tantos caracteres como se especifique en CX.        
       Acto seguido, se actualiza el puntero de fichero una posicin por   
       delante del bloque escrito, para que futuras escrituras no          
       'machaquen' los datos que ya hubiera.                               
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
              Si se devuelve el flag Cf con valor (0), pero AX=0, esto     
              quiere decir que el dispositivo en el que se encuentra       
              el fichero ya estaba lleno antes de la llamada a esta        
              funcin.                                                     
              Si se devuelve el flag Cf con valor (0), pero el contenido   
              del registro AX es menor que la cantidad de bytes a escribir,
              (indicado mediante CX antes de llamar a la funcin), esto    
              significa que se produjo algn error, o que no se pudo       
              escribir todos los caracteres solicitados, porque se ha dado 
              una condicin de disco lleno.                                
                                                                           
              Mediante esta funcin es posible escribir caracteres en la   
              pantalla, usando el handle 1.                                
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 41H                                              
      +-------------------------------------------                         
       Borrar Fichero.                                                    
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 41H                                                  
              DS:DX = Segmento:Desplazamiento de la cadena ASCIIZ          
                      con el nombre del fichero a borrar.                  
                                                                           
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Se borra el fichero indicado mediante la cadena ASCIIZ.             
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
             La funcin se abortar si:                                    
             - La va de acceso contenida en la cadena ASCIIZ es errnea.  
             - Si el fichero a borrar es de slo lectura.                  
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 21H   Funcin 42H                                              
      +-------------------------------------------                         
       Establecer puntero de fichero.                                     
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 42H                                                  
                 AL = Cdigo de desplazamiento:                            
                      00h  Desplazamiento desde el inicio del fichero.     
                      01h  Desplazamiento desde la posicin actual del     
                           puntero.                                        
                      02h  Desplazamiento desde el final del fichero.      
                                                                           
                 BX = Handle del fichero.                                  
                 CX = Mitad ms significativa del desplazamiento.          
                 DX = Mitad menos significativa del desplazamiento.        
                                                                           
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                    DX = Mitad ms significativa del puntero actualizado.  
                    AX = Mitad menos significativa del puntero actualizado.
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Cambia el valor del puntero de fichero, permitiendo as un acceso   
       aleatorio al fichero. Podremos, mediante esta funcin, escribir y   
       leer caracteres en cualquier posicin del fichero, sin pasar por    
       las anteriores.                                                     
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
             Independientemente del tipo de llamada, el valor del puntero  
             de fichero devuelto por la funcin en DX,AX se corresponde    
             con un desplazamiento desde el inicio del fichero.            
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 21H   Funcin 43H   Subfuncin 00h                             
      +-------------------------------------------                         
       Obtener atributos de fichero                                       
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 43H                                                  
                 AL = 00h                                                  
              DS:DX = Segmento:Desplazamiento de la cadena ASCIIZ con el   
                      nombre del fichero.                                  
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                    CX = Atributos del fichero.                            
                         Si Bit 0 = 1, Fichero de slo lectura.            
                         Si Bit 1 = 1, Fichero oculto.                     
                         Si Bit 2 = 1, Fichero de sistema.                 
                         Si Bit 5 = 1, El archivo ha sido modificado desde 
                                       el ltimo bakcup.                   
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Mediante esta funcin se obtiene informacin acerca de los          
       atributos de un determinado fichero, indicado mediante la cadena    
       ASCIIZ.                                                             
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
             Se producir un error si la cadena ASCIIZ indicada es errnea.
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 43H   Subfuncin 01h                             
      +-------------------------------------------                         
       Establecer atributos de fichero                                    
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 43H                                                  
                 AL = 01h                                                  
                 CX = Nuevos atributos para fichero.                       
                      Si ponemos Bit 0 = 1, atributo de slo lectura.      
                      Si ponemos Bit 1 = 1, atributo de oculto.            
                      Si ponemos Bit 2 = 1, atributo de sistmea.           
                      Debemos establecer Bit 3 = 0.                        
                      Debemos establecer Bit 4 = 0.                        
                      Si ponemos Bit 5 = 1, indicar que el fichero ha     
                      sido modificado desde el ltimo backup.              
                                                                           
              DS:DX = Segmento:Desplazamiento de la cadena ASCIIZ con el   
                      nombre del fichero.                                  
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Mediante esta funcin se establecen nuevos atributos a un fichero   
       dado. Este fichero se indica mediante la cadena ASCIIZ.             
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
             Se producir un error si la cadena ASCIIZ indicada es errnea.
                                                                           
             No puede usarse esta funcin para establecer atributo de      
             etiqueta de volumen (bit 3), ni atributo de directorio(bit 4).
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 21H   Funcin 56H                                              
      +-------------------------------------------                         
       Renombrar Fichero  Mover Fichero                                  
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 56H                                                  
              DS:DX = Segmento:Desplazamiento de la cadena ASCIIZ con el   
                      nombre actual del fichero.                           
              ES:DI = Segmento:Desplazamiento de la cadena ASCIIZ con el   
                      nuevo nombre para el fichero.                        
      + DEVUELVE:                                                           
                 Si se ejecut correctamente:                              
                    Flag de acarreo (Cf) = 0                               
                                                                           
                 Si NO se ejecut correctamente:                           
                    Flag de acarreo (Cf) = 1                               
                    AX = Cdigo de error.                                  
                                                                           
      + EFECTO:                                                             
       Esta funcin permite cambiar el nombre a un fichero dado.           
       Tambin permite mover el fichero a otro directorio dentro del mismo 
       dispositivo.                                                        
       En el segundo caso, lo que debemos hacer es cambiar el camino que   
       nos lleva al fichero, en vez del nombre de fichero en s.           
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS:                                                              
             Se producir un error si:                                     
             - la cadena ASCIIZ indicada es errnea.                       
             - Ya existe un fichero con el mismo nombre que el indicado.   
             - Se intenta mover el fichero a otro dispositivo o unidad.    
             - El fichero se mueve al directorio raz, y ste est lleno.  
                                                                           
      +---------------------------------------------------------------------+



      * Funciones de terminacin de procesos *


      +---------------------------------------------------------------------+
       INT 21H   Funcin 00H                                              
      +-------------------------------------------                         
       Terminar ejecucin del Programa                                    
      +-------------------------------------------+                         
                                                                           
      + LLAMADA:                                                            
                 AH = 00H                                                  
                 CS = Direccin del segmento del PSP.                      
      + DEVUELVE:                                                           
                 NADA.                                                     
      + EFECTO:                                                             
       Se finaliza la ejecucin del programa en curso.  Esto conlleva:     
       - Liberacin de toda la memoria asignada al programa.               
       - Todos los buffers de fichero son vaciados.                        
       - Se cierra cualquier fichero abierto por el programa.              
       - Se restauran los tres vectores de interrupcin (INT 22H, INT 23H, 
         INT 24H) cuyo contenido original fue almacenado en la pila.       
                                                                           
      + VERSION DE MS-DOS: 1.0  superior.                                  
                                                                           
      + NOTAS:                                                              
             Esta funcin est pensada para programas COM, en los cuales,  
             el PSP est en el mismo segmento que el cdigo del programa.  
             En los programas EXE esto no sucede as, estando el PSP en    
             diferente segmento al cdigo del programa, por tanto, no se   
             debe llamar a esta funcin desde un programa .EXE.            
                                                                           
             En ambos casos (COM y EXE), es preferible utilizar la funcin 
             4CH, ya que devuelve un cdigo de retorno la programa padre.  
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 21H   Funcin 4CH                                              
      +------------------------------------------------                    
       Terminacin de Programa con Cdigo de Retorno                      
      +------------------------------------------------+                    
                                                                           
      + LLAMADA:                                                            
                 AH = 4CH                                                  
                 AL = Cdigo de retorno para el programa padre.            
      + DEVUELVE:                                                           
                 NADA.                                                     
      + EFECTO:                                                             
       Se finaliza la ejecucin del programa en curso, y se devuelve un    
       cdigo de retorno al programa padre. Mediante este cdigo de        
       retorno, se puede ofrecer informacin al programa padre acerca de   
       la ejecucin del programa (si se ha producido error, etc...)        
                                                                           
       La terminacin del programa conlleva:                               
       - Liberacin de toda la memoria asignada al programa.               
       - Todos los buffers de fichero son vaciados.                        
       - Se cierra cualquier fichero abierto por el programa.              
       - Se restauran los tres vectores de interrupcin (INT 22H, INT 23H, 
         INT 24H) cuyo contenido original fue almacenado en la pila.       
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS: Este es el mtodo idneo de terminacin de programas, ya que 
              no necesita que el registro CS tenga ningn contenido        
              especial. Y aparte, devuelve informacin al programa padre.  
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 21H   Funcin 31H                                              
      +------------------------------------------------                    
       Finalizar el Programa y Dejar Residente                            
      +------------------------------------------------+                    
                                                                           
      + LLAMADA:                                                            
                 AH = 31H                                                  
                 AL = Cdigo de retorno para el programa padre.            
                 DX = Cantidad de memoria a dejar residente (en prrafos). 
      + DEVUELVE:                                                           
                 NADA.                                                     
      + EFECTO:                                                             
       Se finaliza la ejecucin del programa en curso, y se devuelve un    
       cdigo de retorno al programa padre. Mediante este cdigo de        
       retorno, se puede ofrecer informacin al programa padre acerca de   
       la ejecucin del programa (si se ha producido error, etc...)        
       Adems de esto, y lo ms importante: Se deja residente el programa  
       o parte del mismo, de forma que las siguientes ejecuciones de       
       programas no lo 'machaquen'.                                        
                                                                           
       La terminacin del programa conlleva:                               
       - Liberacin de toda la memoria asignada al programa.               
       - Todos los buffers de fichero son vaciados.                        
       - Se cierra cualquier fichero abierto por el programa.              
       - Se restauran los tres vectores de interrupcin (INT 22H, INT 23H, 
         INT 24H) cuyo contenido original fue almacenado en la pila.       
                                                                           
      + VERSION DE MS-DOS: 2.0  superior.                                  
                                                                           
      + NOTAS: Un prrafo equivale a 16 bytes. Por tanto, en DX habr que   
              indicar el nmero_total_de_bytes_a_dejar_residentes dividido 
              por 16.                                                      
                                                                           
              Esta funcin se utiliza en programacin de utilidades        
              residentes (como SideKick o SanBit).                         
              Una vez que el programa queda residente en memoria, la       
              activacin del mismo se realiza de acuerdo a algn criterio  
              del propio programa (como la pulsacin de una combinacin de 
              teclas). En este caso, el programa residente toma el control,
              y al acabar su tarea le devuelve el control al programa      
              que se estuviera ejecutando antes de la activacin del       
              residente.                                                   
                                                                           
      +---------------------------------------------------------------------+




      - funciones BIOS
      ----------------
      Antes de meternos de lleno con las funciones BIOS, y ms concretamente
      con los 2 Servicios que ms nos interesan en un principio:
      INT 10H (Driver  controlador de vdeo) e INT 16H (Driver  controlador
      de teclado)... Vamos a ver qu se entiende por BIOS.

      En primer lugar, decir que BIOS son las siglas de Basic Input/Output
      System. O lo que es lo mismo: Sistema bsico de Entrada/Salida.

      Es decir, permite una comunicacin (Entrada/Salida de informacin)
      entre el ordenador en s (circuitos, dispositivos, componentes) y los
      programas que lo utilizan.

      La BIOS es un conjunto de funciones contenidas en memoria ROM, mediante
      el cual, los programas se comunican con el hardware y los dispositivos
      conectados.

      Las funciones de la BIOS permiten al programador acceder a los diferentes
      subsistemas del ordenador sin necesidad de saber el modelo ni marca de
      tal subsistema o perifrico. Es decir, estas funciones facilitan la
      compatibilidad entre los PC's.

      Si queremos acceder al disco duro, simplemente usamos la funcin de la
      BIOS que nos permite acceder al disco duro. No necesitamos conocer
      los cientos de modelos de discos duros que existen, y atendiendo a que
      se trate de un modelo o de otro distinto, actuar de diferente manera.

      Esto nos permite la portabilidad de nuestros programas a cualquier PC.


      Aparte de los dos servicios principales que vamos a tratar en esta
      leccin (INT 10H e INT 16H) existen varios ms que permiten controlar
      el resto de subsistemas del PC:

      - INT 11H (Buscar la configuracin del equipo).
      - INT 12H (Determinar el tamao de memoria RAM).
      - INT 13H (Driver o Controlador de disco).
                La INT 13H la estudiaremos en profundidad al tratar el tema
                de los discos en el PC.
      - INT 14H (Driver del Puerto Serie  Puerto de Comunicaciones).
      - INT 15H (Driver del Puerto Paralelo [Impresora]).
      - INT 17H (Escritura de sectores a disco).
      - INT 18H (ROM del BASIC).
      - INT 19H (Reinicializacin del Sistema  Reset  Reboot).
      - INT 1AH (Driver del reloj de Tiempo Real).

        Todos estos servicios los estudiaremos a su debido tiempo.
        En esta leccin vamos a tratar los ms usuales para empezar a programar,
        como son los encargados del teclado y la pantalla, que en definitiva
        es con lo que primero se empieza a probar.


      - INT 10H (Driver de Vdeo)
      ---------------------------
      Dedicaremos varias lecciones a estudiar la programacin grfica, y por
      consiguiente el Driver de Vdeo. Si os encontrais con algo nuevo en
      las siguientes funciones (pgina de vdeo, tarjetas grficas, etc..)
      no os preocupeis que lo veremos ms adelante.
      Vamos por partes, que en programacin en ensamblador todo est
      relacionado de alguna manera, y no podemos verlo todo el mismo da.


      Se utiliza el mismo formato de llamada que para la INT 21h.


      -----------   Funciones Fundamentales de la INT 10H  -----------------


      +---------------------------------------------------------------------+
       INT 10H   Funcin 00H                                              
      +-----------------------------------------                           
       Establecer modo de Vdeo                                           
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 00H                                                  
                 AL = Modo de vdeo (Ver notas).                           
                                                                           
      + DEVUELVE:                                                           
                 NADA.                                                     
                                                                           
      + EFECTO:                                                             
                                                                           
       Selecciona y activa el modo de vdeo especificado.                  
       A no ser que se utilice el truco que se indica a continuacin,      
       al llamar a esta funcin, se borra la pantalla.                     
       Por una parte, esto nos quita el trabajo de borrar la pantalla por  
       nosotros mismos. Pero por otra parte, cuando deseamos que el        
       contenido de la pantalla en el modo seleccionado no se pierda,      
       como puede ser el caso de programacin de utilidades residentes,    
       esa funcin de borrado automtico nos puede acarrear demasiadas     
       molestias.                                                          
       Por suerte hay una especie de 'truco' para evitar este borrado      
       automtico de la pantalla. Consiste en poner con valor 1 el bit 7   
       del registro AL (que contiene el modo de vdeo) en la llamada a la  
       funcin.                                                            
       As por ejemplo, si queremos cambiar a modo 13h, y queremos que no  
       se pierda el contenido que hubiera en la pantalla en este modo,     
       en vez de introducir en AL el nmero 13h (00010011b),               
       introduciramos el nmero 93h (10010011b).                          
                                                                           
      + TARJETA GRAFICA: TODAS (MDA, CGA, EGA, MCGA, VGA...)                
                                                                           
      + NOTAS:                                                              
              Modos de vdeo y caractersticas principales:                
                                                                           
       +-------------------------------------------------------------+ 
                                     Modo Texto     Tarjetas que     
        Modo  Resolucin   Colores                 Soportan este    
                                    Modo Grfico        Modo         
       ------------------------------------------------------------- 
         00H   40 por 25     16        Texto         (2) (3) (4) (5) 
         01h   40 por 25     16        Texto         (2) (3) (4) (5) 
         02h   80 por 25     16        Texto         (2) (3) (4) (5) 
         03h   80 por 25     16        Texto         (2) (3) (4) (5) 
         04h  320 por 200     4       Grfico        (2) (3) (4) (5) 
         05h  320 por 200     4       Grfico        (2) (3) (4) (5) 
         06h  640 por 200     2       Grfico        (2) (3) (4) (5) 
         07h   80 por 25      2        Texto     (1)     (3)     (5) 
         0Dh  320 por 200    16       Grfico            (3)     (5) 
         0Eh  640 por 200    16       Grfico            (3)     (5) 
         0Fh  640 por 350     2       Grfico            (3)     (5) 
         10h  640 por 350     4       Grfico    EGA de 64 Ks de RAM 
         10h  640 por 350    16       Grfico    EGA>=64 Ks y VGA    
         11h  640 por 480     2       Grfico                (4) (5) 
         12h  640 por 480    16       Grfico                    (5) 
         13h  320 por 200   256       Grfico                (4) (5) 
       +-------------------------------------------------------------+ 
                                                                           
       Modos superiores al 13h pertenecen a tarjetas Super-Vga  superior. 
                                                                           
       Cdigo de las tarjetas grficas: MDA = (1)                          
                                        CGA = (2)                          
                                        EGA = (3)                          
                                       MCGA = (4)                          
                                        VGA = (5)                          
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 10H   Funcin 01H                                              
      +-----------------------------------------                           
       Establecer tamao del Cursor                                       
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 01H                                                
       Bits 0-4 de CH = Lnea inicial del Cursor.                          
       Bits 0-4 de CL = Lnea final del Cursor.                            
                                                                           
      + DEVUELVE:                                                           
                 NADA.                                                     
                                                                           
      + EFECTO:                                                             
                                                                           
       Se selecciona un nuevo tamao de Cursor en modo texto.              
                                                                           
      + TARJETA GRAFICA: MDA, CGA, EGA, MCGA, VGA.                          
                                                                           
      + NOTAS:  Ver funcin 02h en caso de querer hacer desaparecer el      
               cursor de la pantalla.                                      
               Dependiendo del tipo de tarjeta y modo de vdeo de que se   
               trate, el cursor dispondr de ms o menos lneas de pixels  
               para dibujarlo. As por ejemplo, en varios modos de vdeo   
               de la VGA, se disponen de 14 lneas para crear el cursor,   
               mientras que en la CGA se disponen slo de 8 lneas.        
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 10H   Funcin 02H                                              
      +-----------------------------------------                           
       Posicionar el Cursor                                               
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 02H                                                
                   BH = Pgina de vdeo.                                   
                   DH = Lnea donde situar el cursor.                      
                   DL = Columna donde situar el cursor.                    
                                                                           
      + DEVUELVE:                                                           
                 NADA.                                                     
                                                                           
      + EFECTO:                                                             
                                                                           
       Posiciona el cursor en pantalla, de acuerdo a las coordenadas       
       indicadas en los registros DH y DL.                                 
                                                                           
      + TARJETA GRAFICA: MDA, CGA, EGA, MCGA, VGA.                          
                                                                           
      + NOTAS:  Slo se desplazar el cursor si la pgina de vdeo indicada 
               mediante BH es la pgina de vdeo activa. Esto es as ya    
               que existe un cursor independiente para cada una de las     
               pginas de vdeo con las que contamos en el modo actual.    
                                                                           
               Las coordenadas para la columna empiezan a partir de 0.     
               Las coordenadas para la fila empiezan a partir de 0.        
               Esto quiere decir que la esquina superior izquierda de la   
               pantalla tendr las coordenadas (lnea=0,columna=0).        
                                                                           
               La columna mxima es la 39 (si estamos en un modo de vdeo  
               de 40 columnas)  la 79 (si estamos en un modo de vdeo de  
               80 columnas).                                               
               La lnea mxima es la 24 (si estamos en un modo de vdeo de 
               25 lneas)  la 49 (si estamos en un modo de vdeo de 50    
               lneas).                                                    
                                                                           
               Un 'truco' para hacer desaparecer el cursor de la pantalla  
               consiste en dar valores no vlidos para la columna o la     
               fila. Por ejemplo, si damos a la columna el valor 100, el   
               cursor desaparecer de la pantalla.                         
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 10H   Funcin 03H                                              
      +-----------------------------------------                           
       Buscar posicin del Cursor y Tamao                                
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 03H                                                
                   BH = Pgina de vdeo.                                   
                                                                           
      + DEVUELVE:                                                           
                   CH = Lnea inicial del cursor                           
                   CL = Lnea final del cursor                             
                   DH = Fila donde se encuentra el cursor                  
                   CH = Columna donde se encuentra el cursor               
                                                                           
      + EFECTO:                                                             
                                                                           
       Obtiene las coordenadas del cursor en una pgina de vdeo dada.     
       Tambin se obtiene el tamao del cursor.                            
                                                                           
      + TARJETA GRAFICA: MDA, CGA, EGA, MCGA, VGA.                          
                                                                           
      + NOTAS:  Cada pgina de vdeo tiene su propio cursor.                
               Se puede acceder al cursor de cada pgina independientemente
               de cul sea la pgina activa.                               
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 10H   Funcin 05H                                              
      +-----------------------------------------                           
       Establecer nueva pgina de vdeo                                   
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 05H                                                
                   AL = Pgina de vdeo (Ver Notas).                       
                                                                           
      + DEVUELVE:                                                           
                   NADA.                                                   
      + EFECTO:                                                             
                                                                           
       Establece como activa la nueva pgina de vdeo indicada mediante    
       el registro AL, mostrndose por pantalla el contenido de esa        
       pgina de vdeo, y situando el cursor en la posicin que le         
       corresponda para esa pgina de vdeo.                               
                                                                           
      + TARJETA GRAFICA: CGA, EGA, MCGA, VGA.                               
                                                                           
      + NOTAS:  Las pginas posibles para cada modo de vdeo son:           
                                                                           
        +--------------------------------------------------------------+ 
         Nmero de Pginas   Modos de Vdeo  Tarjetas que lo soportan  
                                                                       
           8 (0 - 7)           00h y 01h     CGA, EGA, MCGA, VGA.      
           4 (0 - 3)           02h y 03h     CGA.                      
           8 (0 - 7)           02h y 03h     ECGA, MCGA, VGA.          
           8 (0 - 7)              07h        EGA, VGA.                 
           8 (0 - 7)              0Dh        EGA, VGA.                 
           4 (0 - 3)              0Eh        EGA, VGA.                 
           2 (0 - 1)              0Fh        EGA, VGA.                 
           2 (0 - 1)              10h        EGA, VGA.                 
                                                                       
        +--------------------------------------------------------------+ 
        Los modos de vdeo 11h en adelante cuentan slo con una pgina     
        de vdeo.                                                          
                                                                           
        El cambio de una pgina a otra dentro del mismo modo de vdeo, no  
        afecta a su contenido, es decir, no se borra la pantalla, como s  
        ocurre al cambiar de modo de vdeo. Siempre que no utilicemos el   
        'truco', claro.                                                    
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 10H   Funcin 06H                                              
      +-----------------------------------------                           
       Desplazar lneas de texto hacia arriba                             
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 06H                                                
                   AL = Nmero de lneas a desplazar. Si AL=0, se borra    
                        toda la ventana seleccionada mediante los registros
                        CX y DX.                                           
                   BH = Atributo a usar en las lneas borradas.            
                   CH = Lnea donde comienza la ventana de texto.          
                   CL = Columna donde comienza la ventana de texto.        
                   DH = Lnea donde acaba la ventana de texto.             
                   DL = Columna donde acaba la ventana de texto.           
                                                                           
      + DEVUELVE:                                                           
                   NADA.                                                   
      + EFECTO:                                                             
                                                                           
       Desplaza hacia arriba un nmero determinado de lneas en la ventana 
       especificada mediante los registros CX y DX.                        
       Las lneas desplazadas, quedan vacas, rellenndose con blancos.    
       El color utilizado en estas lneas vacas se indica mediante el     
       registro BH.                                                        
                                                                           
      + TARJETA GRAFICA: MDA, CGA, EGA, MCGA, VGA.                          
                                                                           
      + NOTAS:  Mediante la llamada a esta funcin obtenemos un mtodo      
               cmodo, aunque lento de borrar la pantalla.                 
                                                                           
               El Atributo indicado mediante BH es el color que se va a    
               utilizar en el rea borrada  desplazada.                   
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 10H   Funcin 07H                                              
      +-----------------------------------------                           
       Desplazar lneas de texto hacia abajo                              
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 07H                                                
                   AL = Nmero de lneas a desplazar. Si AL=0, se borra    
                        toda la ventana seleccionada mediante los registros
                        CX y DX.                                           
                   BH = Atributo a usar en las lneas borradas.            
                   CH = Lnea donde comienza la ventana de texto.          
                   CL = Columna donde comienza la ventana de texto.        
                   DH = Lnea donde acaba la ventana de texto.             
                   DL = Columna donde acaba la ventana de texto.           
                                                                           
      + DEVUELVE:                                                           
                   NADA.                                                   
      + EFECTO:                                                             
                                                                           
       Desplaza hacia abajo un nmero determinado de lneas en la ventana  
       especificada mediante los registros CX y DX.                        
       Las lneas desplazadas, quedan vacas, rellenndose con blancos.    
       El color utilizado en estas lneas vacas se indica mediante el     
       registro BH.                                                        
                                                                           
      + TARJETA GRAFICA: MDA, CGA, EGA, MCGA, VGA.                          
                                                                           
      + NOTAS:  Mediante la llamada a esta funcin obtenemos un mtodo      
               cmodo, aunque lento de borrar la pantalla.                 
                                                                           
               El Atributo indicado mediante BH es el color que se va a    
               utilizar en el rea borrada  desplazada.                   
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 10H   Funcin 08H                                              
      +-----------------------------------------                           
       Leer carcter y atributo                                           
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 08H                                                
                   BH = Pgina de vdeo.                                   
      + DEVUELVE:                                                           
                   AH = Atributo (color del carcter).                     
                   AL = Cdigo ASCII del carcter leido.                   
                                                                           
      + EFECTO:                                                             
                                                                           
       Mediante la llamada a esta funcin, se devuelve en AL el cdigo     
       del carcter situado en la posicin del cursor.                     
       Asmismo, obtenemos en AH el color de este carcter.                
                                                                           
      + TARJETA GRAFICA: MDA, CGA, EGA, MCGA, VGA.                          
                                                                           
      + NOTAS:  Esta funcin es usada por la utilidad SB-ASCII del programa 
               SanBit para obtener el cdigo de los caracteres que hay en  
               pantalla.                                                   
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 10H   Funcin 09H                                              
      +-----------------------------------------                           
       Escribir carcter y atributo                                       
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 09H                                                
                   AL = Cdigo del carcter a escribir.                    
                   BH = Pgina de vdeo donde escribir el carcter.        
                   BL = Atributo  color que va a tener el carcter.       
                   CX = Cantidad de veces que se debe escribir el carcter,
                        uno a continuacin de otro.                        
      + DEVUELVE:                                                           
                   NADA.                                                   
      + EFECTO:                                                             
                                                                           
       Se escribe un carcter en la posicin actual del cursor, en la      
       pgina de vdeo deseada.                                            
       El carcter tendr el color indicado mediante BL.                   
                                                                           
      + TARJETA GRAFICA: MDA, CGA, EGA, MCGA, VGA.                          
                                                                           
      + NOTAS:  En caso de querer escribir un carcter sin modificar el     
               color que afectara a esa posicin, debe usarse la funcin   
               0AH.                                                        
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 10H   Funcin 0AH                                              
      +-----------------------------------------                           
       Escribir carcter                                                  
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 0AH                                                
                   AL = Cdigo del carcter a escribir.                    
                   BH = Pgina de vdeo donde escribir el carcter.        
                   CX = Cantidad de veces que se debe escribir el carcter,
                        uno a continuacin de otro.                        
      + DEVUELVE:                                                           
                   NADA.                                                   
      + EFECTO:                                                             
                                                                           
       Se escribe un carcter en la posicin actual del cursor, en la      
       pgina de vdeo deseada.                                            
       El carcter tendr el mismo color que tuviera el carcter antiguo   
       en esa posicin. Es decir, se modifica el carcter, pero no el      
       color.                                                              
                                                                           
      + TARJETA GRAFICA: MDA, CGA, EGA, MCGA, VGA.                          
                                                                           
      + NOTAS:  En caso de querer modificar el color del carcter, usar     
               la funcin 09h.                                             
                                                                           
      +---------------------------------------------------------------------+



      +---------------------------------------------------------------------+
       INT 10H   Funcin 0CH                                              
      +-----------------------------------------                           
       Escribir un punto  pixel grfico                                  
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 0CH                                                
                   AL = Valor del color a usar.                            
                   BH = Pgina de vdeo donde escribir el carcter.        
                   CX = Columna donde escribir el pixel (coordenada        
                        grfica x).                                        
                   CX = Fila donde escribir el pixel (coordenada           
                        grfica y).                                        
      + DEVUELVE:                                                           
                   NADA.                                                   
      + EFECTO:                                                             
                                                                           
       Da un nuevo color a un pixel grfico.                               
                                                                           
      + TARJETA GRAFICA: CGA, EGA, MCGA, VGA.                               
                                                                           
      + NOTAS:  Funcin vlida slo para modos grficos.                    
                                                                           
               Ver funcin 00h para obtener informacin acerca del valor   
               mximo de fila, columna y color en cada modo de vdeo.      
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 10H   Funcin 0DH                                              
      +-----------------------------------------                           
       Obtener el color de un pixel grfico                               
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 0DH                                                
                   BH = Pgina de vdeo.                                   
                   CX = Columna del pixel que nos interesa (coordenada     
                        grfica x).                                        
                   DX = Fila del pixel que nos interesa (coordenada        
                        grfica y).                                        
      + DEVUELVE:                                                           
                   AL = Valor del color del pixel.                         
      + EFECTO:                                                             
                                                                           
       Obtiene el color de un punto grfico de la pantalla.                
       Este punto se referenciar mediante las coordenadas grficas (x,y): 
       (CX,DX).                                                            
                                                                           
      + TARJETA GRAFICA: CGA, EGA, MCGA, VGA.                               
                                                                           
      + NOTAS:  Funcin vlida slo para modos grficos.                    
                                                                           
               Ver funcin 00h para obtener informacin acerca del valor   
               mximo de fila, columna y color en cada modo de vdeo.      
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 10H   Funcin 0FH                                              
      +-----------------------------------------                           
       Obtener el Modo de vdeo actual                                    
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                   AH = 0FH                                                
      + DEVUELVE:                                                           
                   AL = Modo de vdeo actual.                              
                   AH = Cantidad de caracteres que caben en una lnea en   
                        el modo de vdeo actual.                           
                   BH = Nmero de la pgina activa.                        
      + EFECTO:                                                             
                                                                           
       Mediante esta funcin podemos saber en todo momento, en qu modo    
       de vdeo estamos trabajando.                                        
       En un principio esta funcin puede no tener mucho sentido, ya que   
       en nuestro programa, en todo momento sabemos con qu modo de vdeo  
       estamos trabajando, ya que lo establecemos nosotros.                
                                                                           
       La utilidad de esta funcin reside sobre todo en la construccin de 
       programas residentes. El programa residente, antes de activarse     
       definitivamente y mostrar sus datos y rtulos por pantalla, debe    
       saber el modo de vdeo anterior, en el que estaba trabajando el     
       usuario, para que al salir del programa residente, se pueda         
       restituir, y as no se pierda la informacin que haba anteriormente
       en pantalla.                                                        
                                                                           
      + TARJETA GRAFICA: CGA, EGA, MCGA, VGA.                               
                                                                           
      + NOTAS:  Esta funcin se puede emplear tambin para conocer el       
               nmero mximo de caracteres que caben en una lnea del      
               modo actual de vdeo.                                       
                                                                           
      +---------------------------------------------------------------------+



      - INT 16H (Driver de Teclado)
      ---------------------------
      Los servicios o funciones de la  INT 16H o driver de teclado, nos
      permiten de una manera cmoda, gestionar todo el trabajo relativo
      a la entrada de caracteres por medio del teclado.

      Con la ayuda de estas funciones, no necesitamos trabajar directamente
      sobre los registros y estructuras de datos necesarios para el buen
      funcionamiento de la entrada de teclado.

      De cualquier modo, en una prxima leccin estudiaremos a fondo el
      teclado y todo lo relacionado con l, como buffer de teclado (que es
      donde se almacenan las pulsaciones de teclas hasta que se procesan por
      el programa) y dems...



      Se utiliza la misma convencin de llamada que para la INT 21H y
      la INT 10H.


      -----------   Funciones Fundamentales de la INT 16H  -----------------


      +---------------------------------------------------------------------+
       INT 16H   Funcin 00H                                              
      +-----------------------------------------                           
       Leer carcter del teclado                                          
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 00H                                                  
                                                                           
      + DEVUELVE:                                                           
                 AH = Cdigo extendido de la tecla,  Scan-Code.           
                 AL = Cdigo ASCII de la tecla.                            
                                                                           
      + EFECTO:                                                             
       Acepta un carcter del teclado y devuelve el cdigo ASCII de dicho  
       carcter, as como el cdigo de rastreo  el cdigo extendido de    
       la tecla.                                                           
       Si no haba ningn carcter disponible en el buffer de teclado, la  
       funcin esperar a que se introduzca algn carcter desde el        
       teclado.                                                            
       Una vez se ha leido el carcter mediante esta funcin, se elimina   
       del buffer, para que siguientes llamadas a esta funcin no lo       
       vuelvan a coger.                                                    
                                                                           
      + MODELO DE ORDENADOR:  Todos (PC, XT, AT...)                         
                                                                           
      + NOTAS:                                                              
              El cdigo de rastreo (Scan Code) es el nmero que identifica 
              a una tecla en particular.                                   
              Los cdigos extendidos se asignan a teclas o combinaciones   
              de teclas que no disponen de un smbolo ASCII para           
              representarlas. Como ejemplo tendramos las teclas de        
              funcin, las teclas Home, End, etc...                        
                                                                           
              Cuando a la salida de la funcin AL = 0, esto quiere decir   
              que nos encontramos ante un cdigo de tecla extendido, como  
              Home, Insert, F1, (Alt + F2), etc... En este caso, lo que    
              tenemos en AH es el cdigo extendido de esa tecla o          
              combinacin de teclas.                                       
                                                                           
              Cuando nos encontramos ante la pulsacin de una tecla        
              'normal' como 'a', '1', etc, en este caso, el registro AL    
              contiene el cdigo ASCII de la tecla, y el registro AH       
              contiene el cdigo de rastreo de la tecla.                   
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 16H   Funcin 01H                                              
      +-----------------------------------------                           
       Obtener estado del buffer de teclado                               
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 01H                                                  
                                                                           
      + DEVUELVE:                                                           
                 Si haba alguna tecla disponible en el buffer:            
                    Flag de cero (Zf) = 0                                  
                    AH = Cdigo de rastreo  Cdigo extendido              
                    AL = Cdigo ASCII de la tecla.                         
                                                                           
                 Si no haba ninguna tecla disponible en el buffer:        
                    Flag de cero (Zf) = 1                                  
                                                                           
      + EFECTO:                                                             
       Mediante esta funcin se puede saber cuando hay algn carcter      
       esperando en el buffer de teclado. En caso de haber algn carcter  
       en el buffer, se muestra su cdigo ASCII y su (cdigo de rastreo    
        cdigo extendido, segn proceda). Esta funcin no elimina ningn  
       carcter del buffer de teclado. Por tanto, sucesivas llamadas a esta
       funcin, mostrarn siempre el mismo resultado.                      
                                                                           
      + MODELO DE ORDENADOR:  Todos (PC, XT, AT...)                         
                                                                           
      + NOTAS:                                                              
              Para borrar el carcter del buffer, utilizar la funcin 00H. 
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 16H   Funcin 02H                                              
      +-----------------------------------------                           
       Obtener estado del teclado                                         
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 02H                                                  
                                                                           
      + DEVUELVE:                                                           
                 AL = Valor del Byte de estado del teclado.                
                                                                           
                                                                           
        Byte de Estado de teclado:                                         
                                                                           
        bit bit bit bit bit bit bit bit                                    
         7   6   5   4   3   2   1   0                                     
       +-------------------------------+   Estado de teclas cuando el bit  
                                  correspondiente tiene valor (1) 
       +-------------------------------+   ------------------------------- 
                                                                   
                              +---->  Tecla Mays. derecha pulsada.  
                           +-------->  Tecla Mays. izquierda pulsada.
                        +------------>  Tecla Control pulsada.        
                     +---------------->  Tecla Alt pulsada.            
                  +-------------------->  Scroll Lock activado.         
               +------------------------>  Num Lock activado.            
            +---------------------------->  Caps Lock (Bloq Mays) activado
         +-------------------------------->  Insert activado.              
                                                                           
                                                                           
                                                                           
      + EFECTO:                                                             
       Mediante la llamada a esta funcin, obtenemos informacin acerca    
       del estado de ciertas teclas especiales (CTRL, ALT, MAYS, etc).     
       Asmismo, nos muestra el estado de Num Lock (Bloque numrico), etc. 
                                                                           
      + MODELO DE ORDENADOR:  Todos (PC, XT, AT...)                         
                                                                           
      + NOTAS:                                                              
              El byte de estado del teclado se encuentra en la direccin   
              0000:0417h, dentro de la zona de datos de la BIOS.           
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 16H   Funcin 03H                                              
      +-----------------------------------------                           
       Establecer factor de Repeticin                                    
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 03H                                                  
                 AL = 05H                                                  
                 BH = Retardo antes de la primera repeticin de tecla.     
                 BL = Velocidad de Repeticin.                             
                                                                           
      + DEVUELVE:                                                           
                 NADA.                                                     
                                                                           
      + EFECTO:                                                             
       Esta funcin nos permite modificar la velocidad de repeticin de    
       teclado, as como el tiempo que se necesita tener pulsada una tecla 
       para que se genere la primera repeticin.                           
       Ambas cosas son totalmente diferentes.                              
                                                                           
      + MODELO DE ORDENADOR:  Todos (PC, XT, AT...)                         
                                                                           
      + NOTAS:                                                              
              Esta funcin es la base de la utilidad SB-TECLA del programa 
              SanBit.  Para ver los diferentes valores posibles que pueden 
              tomar los registros BH y BL, echar un vistazo a dicha        
              utilidad.                                                    
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 16H   Funcin 05H                                              
      +-----------------------------------------                           
       Simular pulsacin de tecla                                         
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 05H                                                  
                 CH = Cdigo extendido  Cdigo de rastreo.                
                 CL = Cdigo ASCII de la tecla en cuestin.                
                                                                           
      + DEVUELVE:                                                           
            Si el Buffer de Teclado no est lleno (cabe otro carcter):    
                    Bit de acarreo (Cf) = 0                                
                    AL = 00h                                               
            Si el Buffer de Teclado est lleno (no caben ms caracteres):  
                    Bit de acarreo (Cf) = 1                                
                    AL = 01h                                               
                                                                           
      + EFECTO:                                                             
       Mediante esta funcin podemos simular la pulsacin de una tecla.    
                                                                           
      + MODELO DE ORDENADOR:  AT y superiores.                              
                                                                           
      + NOTAS:                                                              
              Esta funcin la utilizan ciertos programas residentes para   
              realizar Macros de Teclado.                                  
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 16H   Funcin 10H                                              
      +-----------------------------------------                           
       Leer carcter del teclado Expandido                                
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 10H                                                  
                                                                           
      + DEVUELVE:                                                           
                 AL = Cdigo de Rastreo  Cdigo Extendido.                
                 AL = Cdigo ASCII del carcter introducido.               
                                                                           
      + EFECTO:                                                             
       Acepta un carcter del teclado y devuelve el cdigo ASCII de dicho  
       carcter, as como el cdigo de rastreo  el cdigo extendido de    
       la tecla.                                                           
       Si no haba ningn carcter disponible en el buffer de teclado, la  
       funcin esperar a que se introduzca algn carcter desde el        
       teclado.                                                            
       Una vez se ha leido el carcter mediante esta funcin, se elimina   
       del buffer, para que siguientes llamadas a esta funcin no lo       
       vuelvan a coger.                                                    
                                                                           
      + MODELO DE ORDENADOR:  AT y superiores.                              
                                                                           
      + NOTAS:                                                              
              Slo para teclados Expandidos.                               
                                                                           
              Esta funcin es similar a la funcin 00h. La diferencia      
              reside en que esta funcin est preparada para trabajar con  
              teclados expandidos (de los de 101 y 102 teclas), mientras   
              que la funcin 00h (que es la funcin original de entrada de 
              caracteres desde teclado) trabaja con los cdigos originales 
              del teclado de 84 teclas.                                    
              Es decir, entre otras, no acepta las teclas de funcin F11   
              ni F12.                                                      
                                                                           
              Los cdigos de rastreo (Scan Codes) son diferentes para cada 
              una de estas funciones, ya que cada uno de los teclados (el  
              original y el expandido) generan un cdigo de rastreo        
              diferente al del otro modelo de teclado para sus teclas.     
                                                                           
              Para ms informacin, ver funcin 00h.                       
                                                                           
      +---------------------------------------------------------------------+


      +---------------------------------------------------------------------+
       INT 16H   Funcin 11H                                              
      +-----------------------------------------                           
       Obtener estado del buffer de teclado                               
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 11H                                                  
                                                                           
      + DEVUELVE:                                                           
                 Si haba alguna tecla disponible en el buffer:            
                    Flag de cero (Zf) = 0                                  
                    AH = Cdigo de rastreo  Cdigo extendido              
                    AL = Cdigo ASCII de la tecla.                         
                                                                           
                 Si no haba ninguna tecla disponible en el buffer:        
                    Flag de cero (Zf) = 1                                  
                                                                           
      + EFECTO:                                                             
       Mediante esta funcin se puede saber cuando hay algn carcter      
       esperando en el buffer de teclado. En caso de haber algn carcter  
       en el buffer, se muestra su cdigo ASCII y su (cdigo de rastreo    
        cdigo extendido, segn proceda). Esta funcin no elimina ningn  
       carcter del buffer de teclado. Por tanto, sucesivas llamadas a esta
       funcin, mostrarn siempre el mismo resultado.                      
                                                                           
      + MODELO DE ORDENADOR:  AT y superiores.                              
                                                                           
      + NOTAS:                                                              
              Slo para teclados Expandidos.                               
                                                                           
              Esta funcin es similar a la funcin 01h. La diferencia      
              reside en que esta funcin tiene en cuenta los cdigos de    
              tecla especiales de los teclados expandidos, como por ejemplo
              las teclas de funcin F11 y F12.                             
                                                                           
              Para ms informacin, ver funcin 01h.                       
                                                                           
      +---------------------------------------------------------------------+




      +---------------------------------------------------------------------+
       INT 16H   Funcin 12H                                              
      +-----------------------------------------                           
       Obtener estado del Teclado Expandido                               
      +-----------------------------------------+                           
                                                                           
      + LLAMADA:                                                            
                 AH = 12H                                                  
                                                                           
      + DEVUELVE:                                                           
                 AX = Valor de la Palabra de estado del teclado expandido. 
                                                                           
        Palabra de Estado del teclado expandido:                           
                                                                           
       15  13  11   9 8 7 6 5 4 3 2 1 0                                    
       +-------------------------------+   Estado de teclas cuando el bit  
                          correspondiente tiene valor (1) 
       +-------------------------------+   ------------------------------- 
         14  12  10                                               
                       +----> Tecla Mays. derecha pulsada.  
                      +------> Tecla Mays. izquierda pulsada.
                     +--------> Alguna tecla CONTROL pulsada. 
                    +----------> Alguna tecla ALT pulsada      
                   +------------> Scroll Lock activado.         
                  +--------------> Num Lock activado.            
                 +----------------> Caps Lock (Bloq Mays) activado
                +------------------> Insert activado.              
               +--------------------> CONTROL izquierda pulsada.    
              +----------------------> ALT izquierda pulsada.        
             +------------------------> CONTROL derecha pulsada.      
            +--------------------------> ALT derecha pulsada.          
           +----------------------------> Tecla Scroll Lock pulsada.    
          +------------------------------> Tecla Num Lock pulsada.       
         +--------------------------------> Tecla Caps Lock pulsada.      
        +----------------------------------> Tecla SysRep pulsada.         
                                                                           
       EFECTO:                                                             
       Mediante la llamada a esta funcin, obtenemos informacin acerca    
       del estado de ciertas teclas especiales del teclado expandido.      
                                                                           
      + MODELO DE ORDENADOR:  AT y superiores.                              
                                                                           
      + NOTAS:                                                              
              Slo para teclados Expandidos.                               
                                                                           
              Esta funcin es similar a la funcin 02h. La diferencia      
              reside en que esta funcin ofrece un byte de informacin     
              adicional acerca del estado de los conmutadores y teclas     
              especiales. Por ejemplo: Mientras que con la funcin 02h     
              podamos saber si se haba pulsado CTRL, con la funcin      
              12h podemos saber cul de las teclas de CTRL ha sido pulsada.
                                                                           
              Para ms informacin, ver funcin 02h.                       
                                                                           
      +---------------------------------------------------------------------+

      Las funciones de teclado que acabamos de ver deben utilizarse
      preferentemente a las suministradas por el DOS, ya que stas ofrecen
      mayor rapidez de ejecucin y ms prestaciones que las que facilita
      el DOS.




      Para ms informacin acerca de los servicios y funciones vistos
      en esta leccin, as como otros servicios no tratados por el momento:

    - La ROM BIOS de IBM.
      (Ray Duncan... Microsoft Press/Anaya Multimedia).

    - Funciones del MS-DOS.
      (Ray Duncan... Microsoft Press/Anaya Multimedia).

    - Extensiones del MS-DOS.
      (Ray Duncan... Microsoft Press/Anaya Multimedia).

    Los tres libros de arriba son manuales de bolsillo, pero tambin hay libros
    que traen un apndice con los diversos servicios del sistema.

    Tenemos por ejemplo el libro PC Interno, y otros muchos.


    Espero que a alguien le haya venido bien esta leccin.

    * Fin de la leccin 10 *



    Un saludo.
    Francisco Jesus Riquelme.
