title: Int 10h
text: # Int 10h
  
  INT 10h es la forma abreviada de la interrupción 0x10. Esta interrupción controla los servicios de pantalla del PC.
  
  # Int 10h
  ## Características
  
  Esta interrupción se utiliza básicamente para mostrar texto en la pantalla (sin llamar a la INT 21h de MS-DOS o INT 80h de linux), para cambiar a modo gráfico, para establecer la paleta de colores, etc...
  
  # Int 10h
  ## Lista de funciones soportadas
  
  | Función | Código de función | Parámetros | Retorno |
  | Activa Modo de video | AH=00h | AL = Modo de video | AL = Bandera del Modo de video / byte del modo del controlador de CRT |
  | Asigna forma del cursor de modo de texto | AH=01h | CH = Fila inicial de scan, CL = Fila final de scan Normalmente una celda de carácter tiene 8 líneas de scan, 0-7. Así, CX=0607h es el cursor normal de subrayado, CX=0007h es un cursor de bloque completo. Si el bit 7 de CH es activado, esto usualmente significa "Oculta el cursor"". Así CX=2607h es un cursor invisible. Algunas tarjetas de video tienen 16 líneas de scan, 00h-0Fh. Algunas tarjetas de video no usan el bit 5 de CH. Con estas, haga Inicio > Fin (ej. CX=0706h) | |
  | Asigna posición del cursor | AH = 02h | BH = Página, DH = Fila, DL = Columna |
  | Lee la posición del cursor y su tamaño | AH = 03h | BH = Página | AX = 0, CH = Inicio de la línea de scan, CL = Fin de la línea de scan, DH = Fila, DL = Columna |
  | Lee la posición del light pen (No funciona en sistemas VGA) | AH = 04h | AH = Status (0=no disparado, 1=disparado), BX = Pixel X, CH = Pixel Y, CX = número de línea del pixel para los modos 0Fh-10h, DH = Carácter Y, DL = Carácter X |
  | Selecciona Página activa de la pantalla | AH = 05h | AL = Número de Página | |
  | Scroll up window | AH = 06h | AL = Líneas de scroll (0 = Borra), BH = Atributo de las líneas en blanco | |
  | Scroll down window | AH = 07h | AL = Líneas de scroll (0 = Borra), BH = Atributo de las líneas en blanco | |
  | Lee carácter y atributo en la posición del cursor | AH = 08h | BH = Número de Página | AH = Color, AL = Carácter |
  | Escribe carácter y atributo en la posición del cursor | AH = 09h | AL = Carácter, BH = Número de Página, BL = Color, CX = Número de veces para escribir el carácter | |
  | Escribe carácter solo en la posición del cursor | AH = 0Ah | AL = Carácter, BH = Número de Página, CX = Número de veces para escribir el carácter | |
  | Asigna color de fondo/borde | AH = 0Bh, BH = 00h | BL = Color del fondo/borde (el borde solo en modos de texto) | |
  | Asigna paleta | AH = 0Bh, BH = 01h | BL = ID de Paleta (solo fue válido en el CGA, pero las nuevas tarjetas lo soportan en muchos o todos los modos gráficos) | |
  | Escribe pixel gráfico | AH = 0Ch | AL = Color, BH = Página, CX = X, DX = Y | |
  | Lee pixel gráfico | AH = 0Dh | BH = Página, CX = X, DX = Y | AL = Color |
  | Salida de teletipo | AH = 0Eh | AL = Carácter, BL = Color (solo en modo gráfico) | |
  | Lee modo de video actual | AH = 0Fh | | AL = Modo de video |
  | Escribe string (EGA+, lo que significa como mínimo un PC AT) | AH = 13h | AL = Modo de escritura, BH = Página, BL = Color, CX = Longitud del string, DH = Fila, DL = Columna, ES:BP = Posición del string | |
  
  # Int 10h
  ## Tabla de modos de vídeo
  
  | Modo | Resolución | Colores | Tipo |
  | AL = 00h | 40x25 | 16 | Texto |
  | AL = 01h | 40x25 | 16 | Texto |
  | AL = 02h | 80x25 | 16 | Texto |
  | AL = 03h | 80x25 | 16 | Texto |
  | AL = 04h | 320x200 | 4 | Gráfico |
  | AL = 05h | 320x200 | 4 | Gráfico |
  | AL = 06h | 640x200 | 2 | Gráfico |
  | AL = 07h | 80x25 | 2 | Texto |
  | AL = 0Dh | 320x200 | 16 | Gráfico |
  | AL = 0Eh | 640x200 | 16 | Gráfico |
  | AL = 0Fh | 640x350 | 2 | Gráfico |
  | AL = 10h | 640x350 | 4 | Gráfico EGA 64 KB |
  | AL = 10h | 640x350 | 16 | Gráfico EGA menor de 64 KB y VGA |
  | AL = 11h | 640x480 | 2 | Gráfico |
  | AL = 12h | 640x480 | 16 | Gráfico |
  | AL = 13h | 320x200 | 256 | Gráfico |
  | BX = 100h | 640x400 | 256 | Gráfico (SVGA) |
  | BX = 101h | 640x480 | 256 | Gráfico (SVGA) |
  | BX = 102h | 800x600 | 16 | Gráfico (SVGA) |
  | BX = 103h | 800x600 | 256 | Gráfico (SVGA) |
  | BX = 104h | 1024x768 | 16 | Gráfico (SVGA) |
  | BX = 105h | 1024x768 | 256 | Gráfico (SVGA) |
  | BX = 106h | 1028x1024 | 16 | Gráfico (SVGA) |
  | BX = 107h | 1028x1024 | 256 | Gráfico (SVGA) |
  | BX = 113h | 800x600 | 32K | Gráfico (SVGA) |
  | BX = 114h | 800x600 | 64K | Gráfico (SVGA) |
  | BX = 115h | 800x600 | 16M | Gráfico (SVGA) |
  
  # Int 10h
  ## Lista de servicios de la INT 10h
  
  | AH = 00h | Vídeo | Establecer modo de vídeo |
  | AH = 01h | Vídeo | Establecer el tamaño del cursor |
  | AH = 02h | Vídeo | Posicionar el cursor |
  | AH = 03h | Vídeo | Obtener posición y tamaño del cursor |
  | AH = 04h | Vídeo | Obtener posición del lápiz óptico (excepto VGA) |
  | AH = 06h | Vídeo | Subir línea |
  | AH = 07h | Vídeo | Bajar línea |
  | AH = 0Bh BH=00h | Vídeo | Establecer color de fondo o borde |
  | AH = 0Bh BH=01h | Vídeo | Establecer paleta gráfica |
  | AH = 0Ch | Vídeo | Escribir pixel gráfico |
  | AH = 0Dh | Vídeo | Leer pixel gráfico |
  | AH = 0Eh | Vídeo | Función TeleType (escribir caracteres en la pantalla) |
  | AH = 0Fh | Vídeo | Obtener el modo de vídeo |
  | AX = 1100h | Vídeo | Cambiar fuente de vídeo (Modo Texto) |
  | AX = 4F02h | SVGA | Establecer modo de vídeo SVGA |
  | AX = 4F03h | SVGA | Obtener modo de vídeo SVGA |
  
  # Int 10h
  ## INT 10h AX=1100h - Cambiar fuente de vídeo (Modo Texto)
  
  Parámetros:
  | AX=1100h | Cambiar fuente de vídeo (Modo Texto) |
  | ES:BP | Dirección de la tabla de caracteres nuevos |
  | CX = ?? | Número de caracteres a cambiar |
  | DX = ?? | Número del carácter ASCII desde donde se empieza a cambiar las fuentes |
  | BH = ?? | Bloque a leer en el mapa 2 |
  | BL = ?? | Número de bytes por carácter |
  Retorna: Nada
  Ejemplo:
  
  # Int 10h
  ## INT 10h AH=0Eh - Función TeleType
  
  Parámetros:
  | AH = 0Eh | Función TeleType |
  | AL = ?? | Carácter a escribir |
  | BH = ?? | Número de página |
  | BL = ?? | Color de fondo (solo en modo gráfico) |
  Retorna: Nada
  Ejemplo: