# Int 10h

INT 10h es la forma abreviada de la interrupción 0x10. Esta interrupción controla los servicios de pantalla del PC.

## 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.

## 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 | |

## 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) |

## 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 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 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: