DEV Community

Baltasar García Perez-Schofield
Baltasar García Perez-Schofield

Posted on • Updated on

Cuando tenías un CRT de 17"

A mediados de los 90 del siglo pasado, era ya bastante común poder comprarte tu propio PC 386. Es más, el auténtico furor era hacerlo por piezas, de manera que tú te cocinabas tu propio equipo. Recordemos que por aquel entonces se utilizaba sobre todo MS-DOS 4 o MS-DOS 5, y en todo caso Windows 3.11 for Workgroups (aunque era prácticamente considerado como el sistema operativo for dummies).

En cuanto al monitor, se trataba de un estándar (que podía ser a color) de 14", algo más ancho que alto, que normalmente permitía al PC visualizar 80x25 caracteres (había otro modo de texto 40x25, más bien reminiscente de la época de los 8 bits), o con el estándar VGA 640x480 píxeles (muy poco tiempo después, SuperVGA o SVGA 800x600).

Monitor CRT 14"

Por cierto, el monitor era CRT, es decir, de tubo de rayos catódicos. Dicho de otra manera, tenía culo.

Ya a finales de esta década, el furor era comprarse un monitor más grande (y más "cuadrado"), de 17". Aunque la resolución gráfica no cambiaba, permitía el uso de un modo de texto especial que permitía casi el doble de filas, concretamente 80x43. Así, en modo gráfico (Windows, o juegos), solo se veía "más grande", mientras que en modo texto casi permitía el doble de filas... cuando trabajabas sobre todo en MS-DOS, esto era importante.

¿Pero... cómo cambiar de 80x25 a 80x43? MS-DOS era un sistema operativo muy básico, y en realidad, prácticamente solo daba acceso mediante sus llamadas primitivas al manejo de consola (de nuevo, muy básico), y el del almacenamiento secundario (diskettes y discos duros, lo que realmente era su fuerte). Para el resto, lo único que quedaba como soporte era la BIOS (Basic Input-Output System), que era capaz de gestionar todo el hardware del PC (de hecho, a partir de MS-DOS 3.0 llevaría la gestión básica del disco duro, ya no serían device drivers del sistema operativo).

Para poder realizar estas llamadas, que tenían nombres rimbombantes pero que no eran más que números que colocar en los registros de la CPU, era necesario utilizar el vector de interrupción 10h (en hexadecimal, o 16 en decimal). Según lo que pusieras en AH (los 8 bits altos del registro AX, o, mejor dicho, los 8 bits altos de los 16 bits bajos del registro EAX desde el i386).

Por ejemplo, el siguiente código pasaría el modo de texto a 40x25:

; 40x25 video mode

global _start

section .text
_start:
    mov     ax, 0x0001
    int     10h
    mov     rax, 0
    ret
Enter fullscreen mode Exit fullscreen mode

Digo pasaría porque no funciona en mi máquina Linux de 64 bits, compilandolo con nasm. Las llamadas a la BIOS ya no se permiten, por lo que se produce un segmentation fault o simplemente no pasa nada. Puedes probarlo con:

$ nasm -felf64 dlines.asm
$ ld dlines.o -odlines
Enter fullscreen mode Exit fullscreen mode

La instrucción mov ax, 0x0001 sería equivalente a mov ah, 0 es decir, poner en AH el valor 0, que es la llamada al cambio de modo de texto; y con mov al, 1 escogeríamos el modo de vídeo 1: 40x25 color al colocar un 1 en AL.

La instrucción mov rax, 0 pone un 0 en el registro RAX. Este registro es el de 64 bits de CPU's como Intel i3. Para manejar solo los 32 bits bajos del anterior, utilizaríamos EAX. Para manejarnos con los 16 bits bajos del anterior, usaríamos AX y este se descompone en AH (8 bits "altos") y AL (8 bits "bajos").

En aquella época, se utilizaba el MASM (Microsoft Assembler) y el TASM (Borland Turbo Assembler), que provenía del excelente Borland Turbo Pascal (posteriormente Borland Delphi). El código se parecería más a algo así:

.MODEL small

.CODE
main PROC
    MOV ah, 0
    MOV al, 1
    INT 10h

    MOV ah, 4Ch
    MOV al, 0
    INT 21h
main ENDP
END MAIN
Enter fullscreen mode Exit fullscreen mode

El primer bloque es el código para llamar a la función de vídeo de la BIOS, mientras el segundo bloque de código llama a MS-DOS para realizar el fin del programa (exit, con 4Ch en AH y el código de error en AL).

¿Alguien siente nostalgia?

Top comments (0)