Logo Studenta

Universo_Digital-HEPH

¡Este material tiene más páginas!

Vista previa del material en texto

EL UNIVERSO
DIGITAL
DEL IBM PC, AT Y PS/2
Edición 4.0 (4ª edición)
Versión impresa del original electrónico ubicado en:
http://www.gui.uva.es/udigital
Limitación de garantía:
Pese a que todos los programas e ideas incluidas en el libro han
sido probados, el autor y el editor no se responsabilizan de los daños que
su funcionamiento pueda ocasionar bajo ninguna circunstancia ni están
obligados a corregir el contenido del libro.
Marcas registradas:
IBM PCjr, PC, XT, AT, PS/2, OS/2 y Microchannel son marcas
registradas de International Business Machines.
MS-DOS, WINDOWS, Microsoft C y Microsoft Macro Assembler son
marcas registradas de Microsoft Corporation.
DR-DOS es marca registrada de Digital Research Inc.
QEMM y Desqview son marcas registradas de Qarterdeck Corporation.
UNIX es marca registrada de AT&T Bell Laboratories.
Intel es marca registrada de Intel Corporation.
Motorola es marca registrada de Motorola Inc.
Turbo Assembler, Turbo C, Turbo Debugger y Borland C++ son marcas
registradas de Borland International Inc.
EL UNIVERSO DIGITAL
DEL IBM PC, AT Y PS/2
Ciriaco García de Celis
Edición 4.0
Ediciones Grupo Universitario de Informática (Valladolid)
EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2 - v4.0
Ciriaco García de Celis.
Grupo Universitario de Informática, 1992-1997.
Publica:
Asociación Grupo Universitario de informática, 1992-1997.
Apartado de correos 6062, Valladolid.
Internet: http://www.gui.uva.es
Autor:
Ciriaco García de Celis (http://www.gui.uva.es/~ciri)
Registro de propiedad Intelectual nº 1121; Madrid, 1993.
Versión electrónica en Internet:
http://www.gui.uva.es/udigital
Imprimió, durante la etapa impresa:
Servicio de Reprografía de la Universidad de Valladolid.
Casa del Estudiante, avda. Real de Burgos s/n.
[Actualmente no se edita impreso; absténganse de contactar con ellos].
Tirada, durante la etapa impresa:
Más de 1200 ejemplares.
Licencia de uso y distribución:
Ver página 11.
5ÍNDICE
ÍNDICE
PRÓLOGO DE LA EDICIÓN 4.0 ELECTRÓNICA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
PRÓLOGO DE LA TERCERA EDICIÓN (1994) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1 - INTRODUCCIÓN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.1 - Números binarios, octales y hexadecimales . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2 - Cambio de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3 - Estructura elemental de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4 - Operaciones aritméticas sencillas en binario . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.5 - Complemento a dos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.6 - Agrupaciones de bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.7 - Representación de datos en memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.8 - Operaciones lógicas en binario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2 - ARQUITECTURA E HISTORIA DE LOS MICROORDENADORES . . . . . . . . . . . . . . . . 25
2.1 - Arquitectura Von Neuman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 - El microprocesador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3 - Breve historia del ordenador personal y el DOS . . . . . . . . . . . . . . . . . . . . . . . 27
3 - MICROPROCESADORES 8086/88, 286, 386, 486 y Pentium . . . . . . . . . . . . . . . . . . . 31
3.1 - Características generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 - Registros del 8086 y del 286 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3 - Registros del 386 y procesadores superiores . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.4 - Modos de direccionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.5 - La pila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.6 - Un programa de ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4 - JUEGO DE INSTRUCCIONES 80x86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1 - Descripción completa de las instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.1 - De carga de registros y direcciones . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.1.2 - De manipulación del registro de estado . . . . . . . . . . . . . . . . . . . . . . 43
4.1.3 - De manejo de la pila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.4 - De transferencia de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.1.5 - De entrada/salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.1.6 - Aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Suma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Resta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Multiplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
División . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Conversiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.1.7 - Manipulación de cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.1.8 - Operaciones lógicas a nivel de bit . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.1.9 - De control del procesador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.1.10 - De rotación y desplazamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.2 - Resumen alfabético de las instrucciones y banderines. Índice. . . . . . . . . . . . . 63
4.3 - Instrucciones específicas del 286, 386 y 486 en modo real . . . . . . . . . . . . . . . 64
4.3.1 - Diferencias en el comportamiento global respecto al 8086 . . . . . . . . . 64
4.3.2 - Instrucciones específicas del 286 . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.3.3 - Instrucciones propias del 386 y 486 . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.3.4 - Detección de un sistema AT o superior . . . . . . . . . . . . . . . . . . . . . . 68
4.3.5 - Evaluación exacta del microprocesador instalado . . . . . . . . . . . . . . . 68
4.3.6 - Modo plano (flat) del 386 y superiores . . . . . . . . . . . . . . . . . . . . . . . 70
6 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
5 - EL LENGUAJE ENSAMBLADOR DEL 80x86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.1 - Sintaxis de una línea en ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.2 - Constantes y operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.2.1 - Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.2.2 - Operadores aritméticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.2.3 - Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.2.4 - Operadores relacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.2.5 - Operadores de retorno de valores . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.2.6 - Operadores de atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.3 - Principales directivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.3.1 - De definición de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.3.2 - De definición de símbolos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.3.3 - De control del ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
5.3.4 - De definición de segmentos y procedimientos . . . . . . . . . . . . . . . . . 76
5.3.5 - De referencias externas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.3.6 - De definición de bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.3.7 - Condicionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.3.8 - De listado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.4 - Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.4.1 - Definición y borrado de las macros . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.4.2 - Ejemplo de una macro sencilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.4.3 - Parámetros formales y parámetros actuales . . . . . . . . . . . . . . . . . . . 82
5.4.4 - Etiquetas dentro de macros. Variables locales. . . . . . . . . . . . . . . . . . 83
5.4.5 - Operadores de macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.4.6 - Directivas útiles para macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.4.7 - Macros avanzadas con número variable de parámetros . . . . . . . . . . 87
5.5 - Programación modular y paso de parámetros . . . . . . . . . . . . . . . . . . . . . . . . 88
6 - EL ENSAMBLADOR EN ENTORNO DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.1 - Tipos de programas ejecutables bajo DOS . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.2 - Ejemplo de programa de tipo COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.3 - Ejemplo de programa de tipo EXE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.4 - Proceso de ensamblaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.5 - La utilidad DEBUG/SYMDEB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.6 - Las funciones del DOS y de la BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
7 - ARQUITECTURA DEL PC, AT y PS/2 BAJO DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
7.1 - Las interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
7.2 - La memoria. Los puertos de entrada y salida. . . . . . . . . . . . . . . . . . . . . . . . . 105
7.3 - La pantalla en modo texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.4 - La pantalla en modo gráfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.4.1 - Modos gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.4.2 - Detección de la tarjeta gráfica instalada . . . . . . . . . . . . . . . . . . . . . . 108
7.4.3 - Introducción al estándar gráfico VGA . . . . . . . . . . . . . . . . . . . . . . . . 108
7.4.4 - Ejemplo de gráficos empleando la BIOS . . . . . . . . . . . . . . . . . . . . . 114
7.4.5 - Ejemplo de gráficos a nivel hardware . . . . . . . . . . . . . . . . . . . . . . . . 115
7.4.6 - El estándar gráfico VESA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
7.5 - El teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
7.5.1 - Bajo nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
7.5.2 - Nivel intermedio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
7.5.3 - Alto nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
7.6 - Los discos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
7.6.1 - Estructura física . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
7.6.2 - Cabeza 0. Pista 0. Sector 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
7.6.3 - La FAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.6.4 - El directorio raíz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
7ÍNDICE
7.6.5 - Los subdirectorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
7.6.6 - El BPB y el DPB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.6.7 - La BIOS y los disquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.6.8 - Disquetes floptical 3½ de 20 Mb . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.6.9 - Ejemplo de acceso al disco a alto nivel . . . . . . . . . . . . . . . . . . . . . . 132
7.6.10 - Ejemplo de acceso al disco a bajo nivel . . . . . . . . . . . . . . . . . . . . . 133
7.7 - El PSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.8 - El proceso de arranque del PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.9 - Formato de las extensiones ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.10 - Formato físico de los ficheros EXE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
8 - LA GESTIÓN DE MEMORIA DEL DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
8.1 - Tipos de memoria en un PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
8.2 - Bloques de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
8.2.1 - El bloque de memoria del programa . . . . . . . . . . . . . . . . . . . . . . . . 145
8.2.2 - El bloque del entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
8.2.3 - Los bloques de control de memoria (MCB’s) . . . . . . . . . . . . . . . . . . 146
8.2.4 - La cadena de los bloques de memoria . . . . . . . . . . . . . . . . . . . . . . . 146
8.2.5 - Relación entre bloque de programa y de entorno . . . . . . . . . . . . . . . 147
8.2.6 - Tipos de bloques de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
8.2.7 - Liberar el espacio de entorno en programas residentes . . . . . . . . . . . 148
8.2.8 - Peculiaridades del MS-DOS 4.0 y 5.0 . . . . . . . . . . . . . . . . . . . . . . . 148
8.2.9 - Cómo recorrer los bloques de memoria. Ejemplo. . . . . . . . . . . . . . . . 149
8.3 - Memorias extendida y superior XMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
8.4 - Memoria expandida EMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
9 - SUBPROCESOS, RECUBRIMIENTOS Y FILTROS . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
9.1 - Llamada a subprocesos y recubrimientos u overlays . . . . . . . . . . . . . . . . . . . 157
9.2 - Construcción de filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
10 - PROGRAMAS RESIDENTES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
10.1 - Principios básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
10.2 - Un ejemplo sencillo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
10.3 - Localización de un programa residente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
10.3.1 - Método de los vectores de interrupción . . . . . . . . . . . . . . . . . . . . . 163
10.3.2 - Método de la cadena de bloque de memoria . . . . . . . . . . . . . . . . . 163
10.3.3 - Método de la interrupción Multiplex . . . . . . . . . . . . . . . . . . . . . . . . 164
10.4 - Expulsión de un programa residente de la memoria . . . . . . . . . . . . . . . . . . . 164
10.5 - Gestiónavanzada de la interrupción Multiplex . . . . . . . . . . . . . . . . . . . . . . . 165
10.5.1 - El convenio BMB Compuscience . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10.5.2 - El convenio CiriSOFT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10.5.3 - La propuesta AMIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
10.5.4 - Comparación entre métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
10.6 - Métodos especiales para economizar memoria . . . . . . . . . . . . . . . . . . . . . . 172
10.7 - Programas autoinstalables en memoria superior . . . . . . . . . . . . . . . . . . . . . . 173
10.8 - Programas residentes en memoria extendida con DR-DOS 6.0 . . . . . . . . . . . 174
10.9 - Ejemplo de programa residente que utiliza la BIOS . . . . . . . . . . . . . . . . . . . 176
10.10 - Uso sin límites de servicios del DOS en programas residentes . . . . . . . . . . 184
10.10.1 - Una primera aproximación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
10.10.2 - Pasos a realizar para usar el DOS . . . . . . . . . . . . . . . . . . . . . . . . 186
10.10.3 - Resumiendo, ¡no es tan difícil! . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
10.10.4 - Un método alternativo: el SDA . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
10.10.5 - Métodos menos ortodoxos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
10.11 - Ejemplo de programa residente que utiliza el DOS . . . . . . . . . . . . . . . . . . . 189
10.12 - Programas residentes invocables en modos gráficos . . . . . . . . . . . . . . . . . 197
10.13 - Programas residentes en entorno WINDOWS 3 . . . . . . . . . . . . . . . . . . . . . 199
8 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
11 - CONTROLADORES DE DISPOSITIVO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.1 - Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.2 - Encabezamiento y palabra de atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
11.3 - Rutinas de estrategia e interrupción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
11.4 - Ordenes a soportar por el controlador de dispositivo . . . . . . . . . . . . . . . . . . 205
11.5 - La cadena de controladores de dispositivo instalados . . . . . . . . . . . . . . . . . . 210
11.6 - Ejemplo de controlador de dispositivo de caracteres . . . . . . . . . . . . . . . . . . . 212
11.7 - Ejemplo de controlador de dispositivo de bloques . . . . . . . . . . . . . . . . . . . . . 214
11.7.1 - Disco virtual TURBODSK: Características . . . . . . . . . . . . . . . . . . . 214
11.7.2 - Ensamblando TURBODSK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
11.7.3 - Análisis detallado del listado de TURBODSK . . . . . . . . . . . . . . . . . 216
11.8 - Los controladores de dispositivo y el DOS . . . . . . . . . . . . . . . . . . . . . . . . . . 244
12 - EL HARDWARE DE APOYO AL MICROPROCESADOR . . . . . . . . . . . . . . . . . . . . . 245
12.1 - La arquitectura del ordenador compatible . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
12.2 - El interfaz de periféricos 8255 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
12.2.1 - Descripción del integrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
12.2.2 - El 8255 en el PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
12.2.3 - Un método para averiguar la configuración del PC/XT . . . . . . . . . . . 248
12.3 - El temporizador 8253 u 8254 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
12.3.1 - Descripción del integrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
12.3.2 - El 8254 en el ordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
12.3.3 - Temporización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
12.3.4 - Síntesis de sonido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
12.4 - El controlador de interrupciones 8259 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
12.4.1 - Cómo y por qué de las interrupciones . . . . . . . . . . . . . . . . . . . . . . 261
12.4.2 - Descripción del integrado 8259 . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
12.4.3 - El 8259 dentro del ordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
12.4.4 - Ejemplo: cambio de la base de las interrupciones . . . . . . . . . . . . . . 269
12.5 - El chip DMA 8237 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
12.5.1 - El acceso directo a memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
12.5.2 - Descripción del integrado 8237 . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
12.5.3 - El 8237 en el ordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
12.5.4 - Ralentizar un equipo AT con el DMA . . . . . . . . . . . . . . . . . . . . . . . 281
12.5.5 - Acerca de las páginas de DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
12.6 - El controlador de disquetes NEC 765 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
12.6.1 - La tecnología de grabación en disco . . . . . . . . . . . . . . . . . . . . . . . 284
12.6.2 - Descripción del FDC (Floppy Disk Controller) 765 . . . . . . . . . . . . . . 286
12.6.3 - El 765 dentro del ordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
12.6.4 - Densidades de disco y formatos estándar . . . . . . . . . . . . . . . . . . . 294
12.6.5 - Acceso a disco con DMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
12.6.6 - Lectura y escritura de sectores de disco sin DMA . . . . . . . . . . . . . . 305
12.6.7 - Programación avanzada del controlador de disquetes: 2M 3.0 . . . . . 309
12.6.7.1 - Formato de la primera pista . . . . . . . . . . . . . . . . . . . . . . . 311
12.6.7.2 - Puntualizaciones sobre el formato de máxima capacidad . . 315
12.6.7.3 - Descripción de funcionamiento del soporte residente . . . . . 316
12.6.7.4 - Descripción del programa de formateo (2MF) para 2M . . . . 330
12.6.7.5 - Un programa para medir el rendimiento de los disquetes . . 338
12.6.7.6 - La versión para PC/XT de 2M: 2MX . . . . . . . . . . . . . . . . . 340
12.6.7.7 - La opción BIOS de 2M: 2M-ABIOS y 2M-XBIOS . . . . . . . . 341
12.6.7.8 - La utilidad 2MDOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
12.6.7.9 - Cómo superar los 2.000.000 de bytes en 3½: 2MGUI . . . . 342
12.6.7.10 - Uso de 2M 3.0 en OS/2 2.1 . . . . . . . . . . . . . . . . . . . . . . 345
12.7 - El disco duro del AT (IDE, MFM, Bus Local) . . . . . . . . . . . . . . . . . . . . . . . . 346
12.7.1 - El interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
9ÍNDICE
12.7.2 - Programación de la controladora . . . . . . . . . . . . . . . . . . . . . . . . . . 346
12.7.3 - Ejemplo práctico de programación . . . . . . . . . . . . . . . . . . . . . . . . . 349
12.8 - El controlador del teclado: 8042 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
12.8.1 - El 8042 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
12.8.2 - El teclado del AT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
12.8.3 - Comunicación CPU teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
12.8.4 - Comunicación teclado CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
12.9 - El puerto serie: UART 8250 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
12.9.1 - Descripción del integrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
12.9.2 - El 8250 en el ordenador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
12.9.3 - Ejemplo: autodiagnósticodel 8250 . . . . . . . . . . . . . . . . . . . . . . . . . 364
12.10 - El puerto de la impresora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
12.10.1 - Los registros del puerto paralelo . . . . . . . . . . . . . . . . . . . . . . . . . 365
12.10.2 - Envío de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
12.10.3 - Cable NULL-MODEM para conectar dos ordenadores . . . . . . . . . . 366
12.11 - El ratón . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
12.12 - El reloj de tiempo real del AT: Motorola MC146818 . . . . . . . . . . . . . . . . . . 368
12.12.1 - Descripción del integrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
12.12.2 - El MC146818 dentro del ordenador . . . . . . . . . . . . . . . . . . . . . . . 370
12.12.3 - Un método para averiguar la configuración del AT y PS/2 . . . . . . . 371
13 - EL ENSAMBLADOR Y EL LENGUAJE C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
13.1 - Uso del Turbo C y Borland C a bajo nivel . . . . . . . . . . . . . . . . . . . . . . . . . . 373
13.1.1 - Acceso a los puertos de E/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
13.1.2 - Acceso a la memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
13.1.3 - Control de interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.1.4 - Llamada a interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
13.1.5 - Cambio de vectores de interrupción . . . . . . . . . . . . . . . . . . . . . . . . 374
13.1.6 - Programas residentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
13.1.7 - Variables globales predefinidas interesantes . . . . . . . . . . . . . . . . . . 375
13.1.8 - Inserción de código en línea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
13.1.9 - Las palabras clave interrupt y asm . . . . . . . . . . . . . . . . . . . . . . . . . 375
13.2 - Interfaz C (Borland/Microsoft) - Ensamblador . . . . . . . . . . . . . . . . . . . . . . . . 376
13.2.1 - Modelos de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
13.2.2 - Integración de módulos en ensamblador . . . . . . . . . . . . . . . . . . . . 376
APÉNDICES:
I Mapa de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
II Tabla de interrupciones del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
III Tabla de variables de la BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
IV Puertos de E/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
V Códigos de rastreo del teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
VI Tamaños y tiempos de ejecución de las instrucciones . . . . . . . . . . . . . . . . . 393
VII Señales del slot de expansión ISA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
VIII Funciones del sistema, la BIOS y el DOS aludidas en este libro . . . . . . . . . 401
IX Especificaciones XMS y EMS: Todas sus funciones . . . . . . . . . . . . . . . . . . 423
X Juego de caracteres ASCII extendido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
XI Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
11PRÓLOGO DE LA EDICIÓN 4.0 ELECTRÓNICA
PRÓLOGO
DE LA EDICIÓN 4.0 ELECTRÓNICA*
(*) http://www.gui.uva.es/udigital
Nota: Pudiendo haber discrepancias entre sucesivas ediciones de estas normas, la
versión de referencia válida e inapelable será la ubicada en todo momento en la
red, en la dirección electrónica arriba indicada o cualquier otra que pudiera
sucederla.
Licencia de uso y distribución para particulares.
La edición 4.0 (4ª edición) de El Universo Digital del IBM PC, AT y PS/2 es un libro
electrónico/impreso de dominio público; de libre uso, difusión, copia y distribución entre
particulares, en cualquier soporte. Quienes decidan utilizarlo deberán registrarse por vía
electrónica una sola vez, por razones de ética (http://www.gui.uva.es/udigital). También es
posible hacerlo enviando una carta o postal ordinaria (mejor en un sobre) al autor, con
cualquier texto, a la siguiente dirección:
Ciriaco García de Celis
Apartado 6105
47080 Valladolid
España
Indicando claramente que el motivo es registrar el Universo Digital. Los que hayan
comprado la versión impresa en persona no necesitan registrarse, aunque lo recibiría con
agrado, incluso si ha pasado bastante tiempo (pero si lo compraron por correo no deben
registrarse: conservo su pedido). Me gustaría conocer en alguna medida la difusión de la obra,
en especial a partir de este momento, lo que hasta ahora me resultaba algo más sencillo. Por
supuesto, los datos o direcciones indicadas por los usuarios nunca serán divulgados por mí.
12 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
Licencia de uso para empresas, asociaciones y organizaciones.
Se aplican exactamente las mismas condiciones que para usuarios particulares, con la
excepción de que se recomienda un único registro electrónico o una sola carta o postal en
representación de todos los posibles usuarios de la entidad.
Licencia de distribución para empresas, asociaciones y organizaciones.
Editando revistas (no libros) la distribución está permitida en cualquier formato digital
(HTML, PostScript, WordPerfect, texto, o cualesquiera otros) tanto en fragmentos como toda
la obra completa. Siendo el formato una revista impresa sólo se permiten fragmentos que no
totalicen más del 75% de la obra en los sucesivos números publicados. Es necesario citar la
procedencia. La distribución por empresas que cobren una cierta cantidad por el soporte es
libre. Mi única sugerencia es que la empresa me envíe una copia del soporte (CD, etc.) en que
se publique, por cortesía.
Tratándose de empresas editoriales u otras cualesquiera que planeen incluirlo, entero
o por fragmentos, en el soporte impreso, electrónico u online de algún libro que vayan a
publicar, deberían contactar primero conmigo para negociar una nueva versión (que en todo
caso no implicaría la desaparición de ésta en su estatus actual).
Modificaciones.
La realización de cambios (añadidos, eliminación de contenidos o reemplazamiento de
los mismos) es competencia exclusiva del autor, que centraliza la generación de nuevas
versiones actualizadas. Quien realizara alguna modificación sin consentimiento habría de
destinar la obra resultante para uso personal e intransferible.
Orígenes de El Universo Digital.
El Universo Digital no nació tras una decisión premeditada. Su objetivo inicial fue dotar
de un manual de apoyo al Curso de Lenguaje Ensamblador, que ofrece todos los años la
asociación Grupo Universitario de Informática de la Universidad de Valladolid, en el marco
de unos Cursos de Introducción a la Informática -para los alumnos y personal en general de
la Universidad- que abarcan un espectro mucho más amplio que el de la programación de los
ordenadores.
La primera versión ocupaba 116 páginas, cuando su denominación era aún la de Curso
de Ensamblador. Sin embargo, en una época en la que era difícil encontrar información, y buena
bibliografía especializada, el autor siguió recopilando material interesante y añadiéndolo al
curso. Una buena parte de dicho material y del añadido después ha sido además de cosecha
propia. La primera edición de El Universo Digital, editada no mucho tiempo después del
manual del curso, rebasó ligeramente las 300 páginas. Posteriormente se incrementaría aún
algo más, hasta las 420 de la 3ª edición que ha mantenido durante la mayor parte del tiempo.
13PRÓLOGO DE LA EDICIÓN 4.0 ELECTRÓNICA
El DOS en la actualidad.
Actualmente, y desde hace algún tiempo, la programación en DOS ya no es importante,
y mucho menos al nivel que desarrolla este libro, y ello pese a que inclusoWindows 95 corre
aún en alguna parte sobre DOS, comportamiento que irá reduciéndose hasta la eliminación
en próximas versiones.
El futuro de la programación, sin embargo, no es sólo para los programadores de alto
nivel. En alguna manera, los propios usuarios pueden y podrán cada vez en mayor medida
hacer sus propios programas incluso sin darse cuenta. Sin embargo, siempre hay alguien que
tiene que construir los sistemas operativos, y sobre todo, los controladores para dar soporte
a los dispositivos en los diversos sistemas operativos. Por no mencionar las aplicaciones
especializadas, desde máquinas industriales al microprocesador de las sondas espaciales (que,
evidentemente, no corre bajo Windows). Es para los programadores de sistemas, y para
aquellos que necesitan o quieren saber cómo funciona el PC por dentro, como ejemplo práctico
de arquitectura interna de un ordenador, para los que va destinado este libro. Que podrán
practicar en un entorno cómodo para este tipo de programación, como es el DOS (que deja
todo el control de la máquina a cada tarea). Aunque algunos contenidos muy relacionados con
el DOS siguen presentes en esta obra, el lector habrá de tener en cuenta si es pertinente
profundizar en ellos o no, en la época que vivimos.
Mis contactos con editoriales.
Mi objetivo inicial no fue publicarlo, aunque hace dos o tres años sí me lo planteé un
poco en serio.
Las ventajas de una edición oficial sería su no engorrosa distribución (uno de los
motivos por los que siempre ha costado poco es porque nuestra Asociación y el propio autor
ha puesto su mano de obra gratis), así como su mayor difusión. Puesto en contacto con cuatro
prestigiosas editoriales; las que han respondido han valorado muy positivamente la obra, sin
embargo la han rechazado aduciendo otros motivos («sobrecarga del programa editorial»,
solapamiento en contenidos con «obras publicadas o en fase de publicación», o simplemente «falta
de interés comercial»). Una de ellas aún no ha respondido.
Los inconvenientes de su publicación por una editorial serían el importante aumento
de precio, y mi renuncia a los derechos de distribución (en particular, nuestra Asociación
tendría que comprar en la librería los ejemplares para nuestros cursos).
Sin embargo, la ventaja de la publicación para facilitar la difusión popular es obvia, máxime
si lo hace una editorial importante (si no, no aparecería en todas las estanterías, la publicidad la
harían los lectores lentamente, como ya se venía haciendo, y la distribución sería incluso más
limitada pese al recurso a los baratos servicios de reprografía por parte de los usuarios).
El Universo Digital en Internet.
Mi decisión final ya la había acariciado con anterioridad. Algo había que hacer, pues
la distribución gratuita del libro llevaba mucho tiempo.
Uno de los motivos que han terminado empujándome a esta decisión, ha sido la
considerable cantidad de pedidos que hemos recibido desde países de hispanoamérica. Se trata
14 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
de ciudadanos que conocen el índice del libro a través del Web y lo piden, sobre todo desde
México. Sin embargo, sólo en la primera ocasión lo he enviado (a Perú); los motivos son,
desgraciadamente, la práctica imposibilidad de comerciar a pequeña escala con esos países (no
existe el envío contrarreembolso, por ejemplo); las enormes demoras del envío por superficie
(el coste del envío aéreo supera el del propio libro) y las complicadas gestiones de pago e
injustas comisiones bancarias (aunque las pague el usuario final); finalmente habría que añadir
incluso mi temor inconsciente a un aumento incontrolado de la demanda, cuando ya había
demasiado trabajo que hacer para atender la de origen nacional (en mi memoria estaba lo que
ocurrió cuando empezaron a aparecer mensajes y comenzaron a recibirse pedidos por
FidoNET). Pido desde aquí disculpas a todos los que lo han solicitado desde fuera de España,
mayores además si no he contestado el E-Mail por no haber tomado aún una decisión al
respecto.
El Universo Digital de dominio público en formato electrónico, podrá ser accedido
desde cualquier lugar del mundo, y en cualquier CD de los kioscos.
El inconveniente es que no todos tienen igual acceso a estas redes y medios, aunque
ese inconveniente disminuirá exponencialmente con el tiempo (con el mismo exponente con
que crezca la red).
Fin de la distribución impresa.
Naturalmente, una vez que he renunciado a mis derechos sobre el libro, donándolo al
dominio público, ya no estoy obligado a venderlo impreso (medida tomada únicamente para
mantener el copyright). Realmente, no tenemos tiempo ni medios para atender la demanda
actual: aunque es una medida dura de imponer, lamento renunciar a realizar más envíos de
ejemplares impresos. Renuncio con ello a facilitar su difusión a los lectores menos introducidos
en las redes telemáticas, pero beneficio a otros muchos, que además podrán seguir usando la
versión manuscrita utilizando una impresora.
Por otro lado, haber facturado sólo aproximadamente el coste de impresión y
distribución, me permiten tomar esa decisión sin temer el enfado de quienes lo habían
comprado. El coste de impresión de los últimos números en la reprografía oficial de la
Universidad (rechazamos opciones más baratas de menor calidad), encuadernación y disquete
era de 1900 pts. El libro (realmente, apuntes técnicos fotocopiados) se vendía a 2100 pts más gastos
de envío. Ese margen de beneficios era más bien de maniobra, ya que por ejemplo, en los
ejemplares que no llegaban a su destino, el coste del envío y la devolución lo pagábamos
nosotros. Cada envío llevaba una media de 20 minutos de tiempo total de mano de obra,
contabilizando la preparación de los libros (transporte físico, disquete, gestión del pedido...),
y la mayoría eran de una sola unidad (pese a que se penalizaba su envío con 100 pts
adicionales). El precio de los más de 1200 Universos Digitales vendidos ha tenido un
crecimiento nominal cero en los cinco años de difusión impresa.
Obtención de ejemplares impresos.
Aunque en general no se harán más envíos, la única excepción corresponderá a los pedidos
realizados desde bibliotecas (universitarias o no universitarias), que tal vez no tengan la impresora
adecuada o tiempo para reproducirlo, lo que perjudicaría a un amplio conjunto potencial de
usuarios. No se harán envíos a otras organizaciones, ni a librerías o a particulares. Subrayamos
que El Universo Digital impreso tiene el carácter legal de apuntes técnicos impresos y no de libro.
15PRÓLOGO DE LA EDICIÓN 4.0 ELECTRÓNICA
Los pedidos de ejemplares impresos serán admitidos sólo desde España. Habrán de
realizarse exclusivamente por carta impresa, que deberá estar compulsada por el sello y en su
caso papel oficial de la biblioteca que hace el pedido, además de debidamente firmada por
quien corresponda. Es conveniente que figure el teléfono de la biblioteca o en su defecto de
la conserjería del centro. Además del nombre completo, dirección y NIF. Nos reservamos el
derecho de rechazar aquellos pedidos que no cumplan alguno de estos requisitos, o los de
sospechosa procedencia. La dirección es: Grupo Universitario de Informática. Apartado 6062.
47080 Valladolid. El precio por ejemplar será el que figure en la factura que realizará el propio
servicio de reprografía (unas 2000 pts/unidad); sumando al final el coste exacto del envío y
los disquetes.
Agradecimientos.
Agradezco desde aquí al servicio de Reprografía de la Universidad, ubicado en la Casa
del Estudiante, el esmero puesto durante tanto tiempo en la reproducción y encuadernación
de cada número durante la etapa impresa. Cualquier pequeño problema de calidad se ha
debido siempre a los fallos inevitables que en ocasiones presenta toda máquina, por buena que
sea.
Mis agradecimientos también a las diversas instituciones de la Universidad de
Valladolid, que han recibido en ocasión la presión de la demanda a través de incorrectas
llamadas telefónicas solicitando el libro, no siendo ellos los encargados de sudistribución;
también al Grupo Universitario de Informática, por su colaboración a todos los niveles.
No puedo decir lo mismo de los funcionarios de Correos: aunque algunos son amables,
en general, el funcionamiento de esa institución es el que cabía esperar de un monopolio no
sometido a la libre competencia en envíos postales ordinarios (y que, por tanto, no tiene la
obligación de tratar bien a sus clientes, porque también volverán mañana). El trato que reciben
los clientes no se diferencia mucho del de los paquetes, y estos son muy expresivos en
ocasiones al llegar al destino. Por otro lado, la cantidad de papeles que hay que rellenar en
cada envío, y algunas normas de la empresa (como el plomo adherido a los paquetes postales)
no se han simplificado desde finales del siglo XIX. Tampoco es comprensible que sólo
Argentaria sea aún la única entidad financiera con el privilegio de gestionar las denominadas
Cuentas Corrientes Postales. Además de que el servicio de correos es caro en la realidad (esto
es, cuando se incluye lo que pagamos en impuestos para cubrir las pérdidas de la compañía)
se mantiene el viejo vicio de indexar las tarifas anuales (aumento del 8% en 1997, cuando hay
un 2% de inflación nacional).
Sin embargo, he de reconocer que la fiabilidad de Correos (entendida en cuanto a
paquetes que llegan a su destino o en su defecto vuelven por motivo de dirección incorrecta)
es próxima al 100%: los envíos no suelen perderse, al menos los de los reembolsos. En
puntualidad, aunque hay extremos de gran aleatoriedad (desde paquetes que llegan en tres
días a un pueblo perdido en la otra punta del país, a los que tardan quince en ir de Valladolid
a Madrid) el tiempo promedio podría aproximarse, aunque por debajo, a lo que afirma la
empresa.
Ciriaco García de Celis
Valladolid, Noviembre de 1997
17PRÓLOGO DE LA TERCERA EDICIÓN (1994)
PRÓLOGO
DE LA TERCERA EDICIÓN (1994)
Ha pasado un año desde la publicación de la primera edición de esta obra. Desde
entonces, ha continuado la expansión de los interfaces gráficos de usuario y los sistemas
operativos avanzados para PC. Sin embargo, pese a que la programación continúa
alejándose cada vez más del bajo nivel de las máquinas, los programadores de sistemas en
el entorno del PC siguen existiendo y son muchos más que los que trabajan para las
empresas punteras en el desarrollo de los sistemas operativos. Los ordenadores compatibles
poseen numerosas aplicaciones en el campo industrial, para las que es conveniente un
conocimiento elevado del funcionamiento interno del ordenador en general y del MS-DOS
en particular. Para aquellas personas que necesitan comprender el funcionamiento de un
ordenador, las máquinas compatibles constituyen una interesante oportunidad y punto de
partida. Este libro pretende cubrir una importante laguna en la bibliografía disponible
actualmente sobre la programación a nivel de sistemas de los ordenadores compatibles.
Respecto a la primera edición, se han incrementado los contenidos en una
proporción equivalente al 20% de lo que ya existía, corrigiéndose además algunos errores.
Aunque el libro comience con una introducción a la aritmética binaria que pueda indicar
todo lo contrario, se presupone que el lector tiene unos mínimos conocimientos de
informática, al menos un dominio básico del sistema operativo MS-DOS, siendo más que
recomendable conocer algún lenguaje de programación. Seguidamente se explica el lenguaje
ensamblador de la serie 80x86 de Intel separando claramente las instrucciones de los
diversos procesadores, aunque dejando de lado algunas instrucciones del 286 y 386 que se
salen del entorno MS-DOS. También se describe la sintaxis del lenguaje ensamblador; sin
embargo, aunque este último aspecto está extensamente documentado, los lectores que no
conozcan el lenguaje ensamblador de ningún microprocesador habrán de trabajar
considerablemente leyendo multitud de listados hasta adquirir la soltura necesaria y, sobre
todo, creando los suyos propios. Aunque sería conveniente describir el lenguaje C, íntimo
aliado del ensamblador en la programación de sistemas, ello se deja por razones de espacio
para otras publicaciones.
18 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
El libro describe con profundidad la arquitectura de los ordenadores compatibles,
de manera especial en lo referente a la organización interna de la memoria (actualizada
hasta el MS-DOS 6.0 y el DR-DOS 6.0), los discos y el teclado. El apartado de los gráficos
se repasa sólo superficialmente, ya que por sí solo necesitaría de un buen libro más grueso
que este. Se dan pistas sobre la manera de conmutar los modos de vídeo sin alterar el
contenido de la pantalla, aspecto que resulta de especial interés para los programas
residentes.
Las memorias extendida XMS y expandida EMS son descritas con cierto
detenimiento, dada su presencia en todos los ordenadores modernos y su importancia.
Existen apéndices que describen todas las funciones del DOS, de la BIOS y del
sistema usadas en las rutinas y programas desarrollados, así como la totalidad de las
funciones XMS y EMS. Sin embargo, no están ni muchísimo menos todas las interrupciones
necesarias, por lo que se insta al lector a conseguir el impresionante fichero de dominio
público INTERRUPT.LST, complemento ideal de este libro (ver bibliografía).
Los programas residentes reciben un tratamiento especialmente profundo: desde los
métodos más eficientes para que detecten su propia presencia en memoria, a las técnicas
más avanzadas para economizar memoria, pasando por el uso de funciones del DOS de
manera concurrente al programa principal, así como técnicas de empleo de memoria
extendida y superior para conseguir programas que usen 0 Kb dentro de los primeros 640
Kb de la máquina y todo ello sin olvidar la convivencia con los actuales entornos
operativos, como Windows, y la posibilidad de ser activados desde pantallas gráficas.
Este libro también trata los controladores de dispositivo o device drivers, desde los
dos posibles enfoques de su uso: bien sea la creación de controladores de dispositivo de
caracteres, bien la de nuevas unidades de disco añadidas a las del sistema; en ambos casos
se incluyen ejemplos reales de controladores completos y comprobados, en particular el
ejemplo de disco virtual: un completo ejemplo de controlador redimensionable que soporta
memoria convencional, XMS y EMS.
Existe un capítulo muy próximo al hardware en el que se describen a fondo y sin
omisiones todos los chips del ordenador, para permitir al programador de sistemas un
control completo del equipo. Para asimilar este capítulo hace falta cierta formación previa
en los sistemas digitales; sin embargo, los ejemplos que siguen a la información técnica
aclaran las explicaciones previas y pueden ser aprovechados de manera inmediata incluso
sin entender todo lo anterior. Los chips de apoyo al microprocesador son descritos de
manera total: primero, no relacionados con el PC sino como tales circuitos; después
integrándolos en el ordenador y documentando profusamente su uso, con ejemplos
probados. Se consideran el interfaz de periféricos 8255 (útil para averiguar la configuración
de los PC/XT), el temporizador 8253/8254 (para temporización y síntesis de sonido), el
controlador de interrupciones 8259, el controlador de DMA 8237 (para acceso a disco), el
controlador de disquetes 765 (acceso directo a los sectores), la controladora de disco duro
de los AT (IDE, MFM ó Bus Local); el controlador del teclado del AT (8042); el UART 8250
(empleado en las comunicaciones serie) y el reloj de tiempo real MC146818 (configuración
de AT y programación de alarmas y temporizaciones). Los ejemplos en este capítulo
experimentan una importante potenciación respecto a la edición anterior; en particular, en
lo relacionado con el controlador de disquetes se puede considerar que la información
vertida es prácticamente casi toda la existente, existiendo pautas suficientes para que el
19PRÓLOGO DE LA TERCERA EDICIÓN (1994)
lector cree sus propios programascopiones, protecciones de disco, formatos de alta
capacidad, etc.
Existen también capítulos que describen el funcionamiento y programación de la
impresora; sin entrar en aspectos particulares relativos a los modelos de las diversas
marcas, sí se suministra información común a todas. También se comenta en un capítulo
el funcionamiento al más bajo nivel del ratón, aspecto que habitualmente no suele ser
considerado.
Dada la importancia del lenguaje C en la programación en general y en la
programación de sistemas en particular, tanto en la actualidad como durante los próximos
años, se incluye un capítulo que describe la manera de comunicar el ensamblador con el
lenguaje C, con objeto de superar las limitaciones de este lenguaje en los puntos críticos de
la programación de sistemas. Este capítulo requiere un dominio elemental del lenguaje C
por parte del lector, aunque probablemente sólo sea útil para aquellos que lo conocen más
o menos.
Resumiendo, el libro pretende reunir en una sola obra la mayoría de la información
necesaria para el programador de sistemas, exponiendo toda la información y no sólo lo
imprescindible, sin olvidos ni omisiones; también se pretende explicar las técnicas más
avanzadas de creación de programas residentes. Este afán de información completa es el
responsable del título del libro.
Todos los listados de ejemplo se suponen de dominio público y las rutinas pueden
ser incluidas por los lectores libremente en sus propios programas, aunque en el caso de
los programas completos debe citarse la procedencia y dejar bien claro en las versiones
modificadas quién las ha alterado. En todo caso, pese a que todas las rutinas y programas
han sido probados debidamente en un 8088, un 286, un 386 o un 486 -bajo varios sistemas
operativos y con diferentes configuraciones del hardware- el autor del libro no se
responsabiliza de su correcto funcionamiento en todas las circunstancias.
21INTRODUCCIÓN
Capítulo I: INTRODUCCIÓN
1.1. - NUMEROS BINARIOS, OCTALES Y HEXADECIMALES.
El sistema de numeración utilizado habitualmente es la base 10; es decir, consta de 10 dígitos (0-9)
que podemos colocar en grupos, ordenados de izquierda a derecha y de mayor a menor.
Cada posición tiene un valor o peso de 10n donde n representa el lugar contado por la derecha:
1357 = 1 x 103 + 3 x 102 + 5 x 101 + 7 x 100
Explícitamente, se indica la base de numeración como 135710.
En un ordenador el sistema de numeración es binario -en base 2, utilizando el 0 y el 1- hecho
propiciado por ser precisamente dos los estados estables en los dispositivos digitales que componen una
computadora.
Análogamente a la base 10, cada posición tiene un valor de 2n donde n es la posición contando desde
la derecha y empezando por 0:
1012 = 1 x 2
2 + 0 x 21 + 1 x 20
Además, por su importancia y utilidad, es necesario conocer otros sistemas de numeración como
pueden ser el octal (base 8) y el hexadecimal (base 16). En este último tenemos, además de los números del
0 al 9, letras -normalmente en mayúsculas- de la A a la F.
Llegar a un número en estos sistemas desde base 2 es realmente sencillo si agrupamos las cifras
binarias de 3 en 3 (octal) o de 4 en 4 (hexadecimal):
Base 2 a base 8: 101 0112 = 538
Base 2 a base 16: 0010 10112 = 2B16
A la inversa, basta convertir cada dígito octal o hexadecimal en binario:
Base 8 a base 2: 248 = 010 1002
Base 16 a base 2: 2416 = 0010 01002
De ahora en adelante, se utilizarán una serie de sufijos para determinar el sistema de numeración
empleado:
Sufijo Base Ejemplos
b 2 01101010b
o,q 8 175o
d 10 789d
h 16 6A5h
En caso de que no aparezca el sufijo, el número se considera decimal; es decir, en base 10.
22 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
1.2. - CAMBIO DE BASE.
Pese a que las conversiones entre base 2 y base 8 y 16 son prácticamente directas, existe un sistema
general para realizar el cambio de una base a otra. El paso de cualquier base a base 10 lo vimos antes:
6A5h = 6 x 162 + 10 x 161 + 5 x 160
Inversamente, si queremos pasar de base 10 a cualquier otra habrá que realizar sucesivas divisiones
por la base y tomar los restos:
1234 16
114 77 16 1234d = 4D2h
2
13 4
donde 4 es el último cociente (menor que la base) y los restantes dígitos son los restos en orden inverso.
1.3. - ESTRUCTURA ELEMENTAL DE LA MEMORIA.
1.3.1. - BIT.
Toda la memoria del ordenador se compone de dispositivos electrónicos que pueden adoptar
únicamente dos estados, que representamos matemáticamente por 0 y 1. Cualquiera de estas unidades de
información se denomina BIT, contracción de «binary digit» en inglés.
1.3.2. - BYTE.
Cada grupo de 8 bits se conoce como byte u octeto. Es la unidad de almacenamiento en memoria,
la cual está constituida por un elevado número de posiciones que almacenan bytes. La cantidad de memoria
de que dispone un sistema se mide en Kilobytes (1 Kb = 1024 bytes), en Megabytes (1 Mb = 1024 Kb),
Gigabytes (1 Gb = 1024 Mb), Terabytes (1 Tb = 1024 Gb) o Petabytes (1 Pb = 1024 Tb).
Los bits en un byte se numeran de derecha a izquierda y de 0 a 7, correspondiendo con los
exponentes de las potencias de 2 que reflejan el valor de cada posición. Un byte nos permite, por tanto,
representar 256 estados (de 0 a 255) según la combinación de bits que tomemos.
1.3.3. - NIBBLE.
Cada grupo de cuatro bits de un byte constituye un nibble, de forma que los dos nibbles de un byte
se llaman nibble superior (el compuesto por los bits 4 a 7) e inferior (el compuesto por los bits 0 a 3). El
nibble tiene gran utilidad debido a que cada uno almacena un dígito hexadecimal:
Binario Hex. Decimal Binario Hex. Decimal
0000 0 0 1000 8 8
0001 1 1 1001 9 9
0010 2 2 1010 A 10
0011 3 3 1011 B 11
0100 4 4 1100 C 12
0101 5 5 1101 D 13
0110 6 6 1110 E 14
0111 7 7 1111 F 15
23INTRODUCCIÓN
1.4. - OPERACIONES ARITMÉTICAS SENCILLAS EN BINARIO.
Para sumar números, tanto en base 2 como hexadecimal, se sigue el mismo proceso que en base 10:
Podemos observar que la suma se desa-
1010 1010b rrolla de la forma tradicional; es decir:
+ 0011 1100b sumamos normalmente, salvo en el caso de
1 + 1 = 102 , en cuyo caso tenemos un aca-
1110 0110b rreo de 1 (lo que nos llevamos).
1.5. - COMPLEMENTO A DOS.
En general, se define como valor negativo de un número el que necesitamos sumarlo para obtener
00h, por ejemplo:
FFh Como en un byte solo tenemos dos nibbles, es
+ 01h decir, dos dígitos hexadecimales, el resultado es
0 (observar cómo el 1 más significativo subrayado
100h es ignorado). Luego FFh=-1. Normalmente, el bit 7
se considera como de signo y, si está activo (a 1)
el número es negativo.
Por esta razón, el número 80h, cuyo complemento a dos es él mismo, se considera negativo (-128)
y el número 00h, positivo. En general, para hallar el complemento a dos de un número cualquiera basta con
calcular primero su complemento a uno, que consiste en cambiar los unos por ceros y los ceros por unos
en su notación binaria; a continuación se le suma una unidad para calcular el complemento a dos. Con una
calculadora, la operación es más sencilla: el complemento a dos de un número A de n bits es 2n-A.
Otro factor a considerar es cuando se pasa de operar con un número de cierto tamaño (ej., 8 bits) a
otro mayor (pongamos de 16 bits). Si el número es positivo, la parte que se añade por la izquierda son bits
a 0. Sin embargo, si era negativo (bit más significativo activo) la parte que se añade por la izquierda son bits
a 1. Este fenómeno, en cuya demostración matemática no entraremos, se puede resumir en que el bit más
significativo se copia en todos los añadidos: es lo que se denomina la extensión del signo: los dos siguientes
números son realmente el mismo número (el -310): 11012 (4 bits) y 111111012 (8 bits).
1.6. - AGRUPACIONES DE BYTES.
Tipo Definición
Palabra 2 bytes contiguos
Doble palabra 2 palabras contiguas (4 bytes)
Cuádruple palabra 4 palabras contiguas (8 bytes)
Párrafo 16 bytes
Página 256 bytes, 16 Kb, etc.
Segmento 64 Kbytes
1.7. - REPRESENTACIÓN DE LOS DATOS EN MEMORIA.
1.7.1. - NUMEROS BINARIOS:máximo número representable:
Tipo Sin signo
1 byte 255
2 bytes 65.535
4 bytes 4.294.967.295
8 bytes 18.446.744.073.709.551.615
24 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
Tipo Positivo Negativo
1 byte 127 -128
2 bytes 32.767 -32.768
4 bytes 2.147.483.647 -2.147.483.648
8 bytes 9.223.372.036.854.775.807 -9.223.372.036.854.775.808
Los números binarios de más de un byte se almacenan en la memoria en los procesadores de Intel
en orden inverso: 01234567h se almacenaría: 67h, 45h, 23h, 01h.
1.7.2. - NUMEROS BINARIOS CODIFICADOS EN DECIMAL (BCD).
Consiste en emplear cuatro bits para codificar los dígitos del 0 al 9 (desperdiciando las seis
combinaciones que van de la 1010 a la 1111). La ventaja es la simplicidad de conversión a/de base 10, que
resulta inmediata. Los números BCD pueden almacenarse desempaquetados, en cuyo caso cada byte contiene
un dígito BCD (Binary-Coded Decimal); o empaquetados, almacenando dos dígitos por byte (para construir
los números que van del 00 al 99). La notación BCD ocupa cuatro bits -un nibble- por cifra, de forma que
en el formato desempaquetado el nibble superior siempre es 0.
1.7.3. - NUMEROS EN PUNTO FLOTANTE.
Son grupos de bytes en los que una parte se emplea para guardar las cifras del número (mantisa) y
otra para indicar la posición del punto flotante (exponente), de modo equivalente a la notación científica. Esto
permite trabajar con números de muy elevado tamaño -según el exponente- y con una mayor o menor
precisión en función de los bits empleados para codificar la mantisa.
1.7.4. - CÓDIGO ASCII.
El código A.S.C.I.I. (American Standard Code for Information Interchange) es un convenio adoptado
para asignar a cada carácter un valor numérico; su origen está en los comienzos de la Informática tomando
como muestra algunos códigos de la transmisión de información de radioteletipo. Se trata de un código de
7 bits con capacidad para 128 símbolos que incluyen todos los caracteres alfanuméricos del inglés, con
símbolos de puntuación y algunos caracteres de control de la transmisión.
Con posterioridad, con la aparición de los microordenadores y la gran expansión entre ellos de los
IBM-PC y compatibles, la ampliación del código ASCII realizada por esta marca a 8 bits, con capacidad para
128 símbolos adicionales, experimenta un considerable auge, siendo en la actualidad muy utilizada y
recibiendo la denominación oficial de página de códigos 437 (EEUU). Se puede consultar al final de este
libro. Es habitualmente la única página soportada por las BIOS de los PC. Para ciertas nacionalidades se han
diseñado otras páginas específicas que requieren de un software externo. En las lenguas del estado español
y en las de la mayoría de los demás países de la UE, esta tabla cubre todas las necesidades del idioma.
1.8. - OPERACIONES LÓGICAS EN BINARIO.
Se realizan a nivel de bit y pueden ser de uno o dos operandos:
x NOT (x) x y x AND y x OR y x XOR y
0 1 0 0 0 0 0
1 0 0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
25ARQUITECTURA E HISTORIA DE LOS MICROORDENADORES
Capítulo II: ARQUITECTURA E HISTORIA DE LOS MICROORDENADORES
El ensamblador es un lenguaje de programación que, por la traducción directa de los mnemónicos
a instrucciones maquina, permite realizar aplicaciones rápidas, solucionando situaciones en las que los tiempos
de ejecución constituye el factor principal para que el proceso discurra con la suficiente fluidez. Esta
situación, que indudablemente sí influye sobre la elección del lenguaje de programación a utilizar en el
desarrollo de una determinada rutina, y dada la aparición de nuevos compiladores de lenguajes de alto nivel
que optimizan el código generado a niveles muy próximos a los que un buen programador es capaz de
realizar en ensamblador, no es la única razón para su utilización.
Es sobradamente conocido que los actuales sistemas operativos son programados en su mayor parte
en lenguajes de alto nivel, especialmente C, pero siempre hay una parte en la que el ensamblador se hace casi
insustituible bajo DOS y es la programación de los drivers para los controladores de dispositivos, relacionados
con las tareas de más bajo nivel de una máquina, fundamentalmente las operaciones de entrada/salida en las
que es preciso actuar directamente sobre los demás chips que acompañan al microprocesador. Por ello y
porque las instrucciones del lenguaje ensamblador están íntimamente ligadas a la máquina, vamos a realizar
primero un somero repaso a la arquitectura interna de un microordenador.
2.1. - ARQUITECTURA VON NEWMAN.
Centrándonos en los ordenadores sobre los que vamos a trabajar desarrollaré a grandes rasgos la
arquitectura Von Newman que, si bien no es la primera en aparecer, sí que lo hizo prácticamente desde el
comienzo de los ordenadores y se sigue desarrollando actualmente. Claro es que está siendo desplazada por
otra que permiten una mayor velocidad de proceso, la RISC.
En los primeros tiempos de los ordenadores, con sistemas de numeración decimal, una electrónica
sumamente complicada muy susceptible a fallos y un sistema de programación cableado o mediante fichas,
Von Newman propuso dos conceptos básicos que revolucionarían la incipiente informática:
a) La utilización del sistema de numeración binario. Simplificaba enormemente los problemas
que la implementación electrónica de las operaciones y funciones lógicas planteaban, a la vez
proporcionaba una mayor inmunidad a los fallos (electrónica digital).
b) Almacenamiento de la secuencia de instrucciones de que consta el programa en una memoria
interna, fácilmente accesible, junto con los datos que referencia. De este forma la velocidad de
proceso experimenta un considerable incremento; recordemos que anteriormente una instrucción o
un dato estaban codificados en una ficha en el mejor de los casos.
Tomando como modelo las máquinas que aparecieron incorporando las anteriores características, el
ordenador se puede considerar compuesto por las siguientes partes:
- La Unidad Central de Proceso, U.C.P., más conocida por sus siglas en inglés (CPU).
- La Memoria Interna, MI.
- Unidad de Entrada y Salida, E/S.
- Memoria masiva Externa, ME.
26 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
Realicemos a continuación una descripción de lo que se entiende por cada una de estas partes y cómo
están relacionadas entre si:
- La Unidad Central de Proceso (CPU) viene a ser el cerebro del ordenador y tiene por misión
efectuar las operaciones aritmético-lógicas y controlar las transferencias de información a realizar.
- La Memoria Interna (MI) contiene el conjunto de instrucciones que ejecuta la CPU en el transcurso
de un programa. Es también donde se almacenan temporalmente las variables del mismo, todos los
datos que se precisan y todos los resultados que devuelve.
- Unidades de entrada y salida (E/S) o Input/Output (I/O): son las encargadas de la comunicación de
la máquina con el exterior, proporcionando al operador una forma de introducir al ordenador tanto
los programas como los datos y obtener los resultados.
Como es de suponer, estas tres partes principales de que consta el ordenador deben estar íntimamente
conectadas; aparece en este momento el concepto de bus: el bus es un conjunto de líneas que enlazan los
distintos componentes del ordenador, por ellas se realiza la transferencia de datos entre todos sus elementos.
Se distinguen tres tipos de bus:
- De control: forman parte de él las líneas que seleccionan desde dónde y hacia dónde va dirigida
la información, también las que marcan la secuencia de los pasos a seguir para dicha transferencia.
- De datos: por él, de forma bidireccional, fluyen los datos entre las distintas partes del ordenador.
- De direcciones: como vimos, la memoria está dividida en pequeñas unidades de almacenamiento
que contienen las instrucciones del programa y los datos. El bus de direcciones consta de un conjunto
de líneas que permite seleccionar de qué posición de la memoria se quiere leer su contenido. También
direcciona los puertos de E/S.
La forma de operar del ordenador en su conjuntoes direccionar una posición de la memoria en busca
de una instrucción mediante el bus de direcciones, llevar la instrucción a la unidad central de proceso -CPU-
por medio del bus de datos, marcando la secuencia de la transferencia el bus de control. En la CPU la
instrucción se decodifica, interpretando qué operandos necesita: si son de memoria, es necesario llevarles a
la CPU; una vez que la operación es realizada, si es preciso se devuelve el resultado a la memoria.
2.2. - EL MICROPROCESADOR.
Un salto importante en la evolución de los ordenadores lo introdujo el microprocesador: se trata de
una unidad central de proceso contenida totalmente en un circuito integrado. Comenzaba así la gran carrera
en busca de lo más rápido, más pequeño; rápidamente el mundo del ordenador empezó a ser accesible a
pequeñas empresas e incluso a nivel doméstico: es el boom de los microordenadores personales. Aunque
cuando entremos en la descripción de los microprocesadores objeto de nuestro estudio lo ampliaremos, haré
un pequeño comentario de las partes del microprocesador:
- Unidad aritmético-lógica: Es donde se efectúan las operaciones aritméticas (suma, resta, y a veces
producto y división) y lógicas (and, or, not, etc.).
- Decodificador de instrucciones: Allí se interpretan las instrucciones que van llegando y que
componen el programa.
- Bloque de registros: Los registros son celdas de memoria en donde queda almacenado un dato
temporalmente. Existe un registro especial llamado de indicadores, estado o flags, que refleja el
estado operativo del microprocesador.
- Bloque de control de buses internos y externos: supervisa todo el proceso de transferencias de
información dentro del microprocesador y fuera de él.
27ARQUITECTURA E HISTORIA DE LOS MICROORDENADORES
2.3. - BREVE HISTORIA DEL ORDENADOR PERSONAL Y EL DOS.
La trepidante evolución del mundo informático podría provocar que algún recién llegado a este libro
no sepa exactamente qué diferencia a un ordenador "AT" del viejo "XT" inicial de IBM. Algunos términos
manejados en este libro podrían ser desconocidos para los lectores más jóvenes. Por ello, haremos una
pequeña introducción sobre la evolución de los ordenadores personales, abarcando toda la historia (ya que
no es muy larga).
La premonición.
En 1973, el centro de investigación de Xerox en Palo Alto desarrolló un equipo informático con el
aspecto externo de un PC personal actual. Además de pantalla y teclado, disponía de un artefacto similar al
ratón; en general, este aparato (denominado Alto) introdujo, mucho antes de que otros los reinventaran,
algunos de los conceptos universalmente aceptados hoy en día. Sin embargo, la tecnología del momento no
permitió alcanzar todas las intenciones. Alguna innovación, como la pantalla vertical, de formato similar a
una hoja de papel (que desearían algunos actuales internautas para los navegadores) aún no ha sido adoptada:
nuestros PC’s siguen pareciendo televisores con teclas, y los procesadores de textos no muestran legiblemente
una hoja en vertical completa incluso en monitores de 20 pulgadas.
El microprocesador.
El desarrollo del primer microprocesador por Intel en 1971, el 4004 (de 4 bits), supuso el primer paso
hacia el logro de un PC personal, al reducir drásticamente la circuitería adicional necesaria. Sucesores de este
procesador fueron el 8008 y el 8080, de 8 bits. Ed Roberts construyó en 1975 el Altair 8800 basándose en
el 8080; aunque esta máquina no tenía teclado ni pantalla (sólo interruptores y luces), era una arquitectura
abierta (conocida por todo el mundo) y cuyas tarjetas se conectaban a la placa principal a través de 100
terminales, que más tarde terminarían convirtiéndose en el bus estándar S-100 de la industria.
El Apple-I apareció en 1976, basado en el microprocesador de 8 bits 6502, en aquel entonces un
recién aparecido aunque casi 10 veces más barato que el 8080 de Intel. Fue sucedido en 1977 por el
Apple-II. No olvidemos los rudimentos de la época: el Apple-II tenía un límite máximo de 48 Kbytes de
memoria. En el mismo año, Commodore sacó su PET con 8 Kbytes. Se utilizaban cintas de casete como
almacenamiento, aunque comenzaron a aparecer las unidades de disquete de 5¼. Durante finales de los 70
aparecieron muchos otros ordenadores, fruto de la explosión inicial del microprocesador.
Los micros de los 80.
En 1980, Sir Clive Sinclair lanzó el ZX-80, seguido muy poco después del ZX-81. Estaban basados
en un microprocesador sucesor del 8085 de Intel: el Z80 (desarrollado por la empresa Zilog, creada por un
ex-ingeniero de Intel). Commodore irrumpió con sus VIC-20 y, posteriormente, el Commodore 64, basados
aún en el 6502 y, este último, con mejores posibilidades gráficas y unos 64 Kb de memoria. Su competidor
fue el ZX-Spectrum de Sinclair, también basado en el Z80, con un chip propio para gestión de gráficos y
otras tareas, la ULA, que permitió rebajar su coste y multiplicó su difusión por europa, y en particular por
España. Sin embargo, todos los ordenadores domésticos de la época, como se dieron en llamar, estaban
basados en procesadores de 8 bits y tenían el límite de 64 Kb de memoria. Los intentos de rebasar este límite
manteniendo aún esos chips por parte de la plataforma MSX (supuesto estándar mundial con la misma suerte
que ha corrido el Esperanto) o los CPC de Amstrad, de poco sirvieron.
El IBM PC.
Y es que IBM también fabricó su propio ordenador personal con vocación profesional: el 12 de
agosto de 1981 presentó el IBM PC. Estaba basado en el microprocesador 8088, de 16 bits, cuyas
instrucciones serán las que usemos en este libro, ya que todos los procesadores posteriores son básicamente
(en MS-DOS) versiones mucho más rápidas del mismo. El equipamiento de serie consistía en 16 Kbytes de
28 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
memoria ampliables a 64 en la placa base (y a 256 añadiendo tarjetas); el almacenamiento externo se hacía
en cintas de casete, aunque pronto aparecieron las unidades de disco de 5¼ pulgadas y simple cara
(160/180 Kb por disco) o doble cara (320/360 Kb). En 1983 apareció el IBM PC-XT, que traía como
novedad un disco duro de 10 Mbytes. Un año más tarde aparecería el IBM PC-AT, introduciendo el
microprocesador 286, así como ranuras de expansión de 16 bits (el bus ISA de 16 bits) en contraposición con
las de 8 bits del PC y el XT (bus ISA de 8 bits), además incorporaba un disco duro de 20 Mbytes y disquetes
de 5¼ pero con 1.2 Mbytes.
En general, todos los equipos con procesador 286 o superior pueden catalogarse dentro de la categoría
AT; el término XT hace referencia al 8088/8086 y similares. Finalmente, por PC (a secas) se entiende
cualquiera de ambos; aunque si se hace distinción entre un PC y un AT en la misma frase, por PC se
sobreentiende un XT, menos potente. El término PC ya digo, no obstante, es hoy en día mucho más general,
referenciando habitualmente a cualquier ordenador personal.
Alrededor del PC se estaba construyendo un imperio de software más importante que el propio
hardware: estamos hablando del sistema operativo PC-DOS. Cuando aparecieron máquinas compatibles con
el PC de IBM, tenían que respetar la compatibilidad con ese sistema, lo que fue sencillo (ya que Microsoft,
le gustara o no a IBM, desarrolló el MS-DOS, compatible con el PC-DOS pero que no requería la BIOS del
ordenador original, cuyo copyright era de IBM). Incluso, el desarrollo de los microprocesadores posteriores
ha estado totalmente condicionado por el MS-DOS. [Por cierto, la jugada del PC-DOS/MS-DOS se repetiría
en alguna manera pocos años después con el OS/2-Windows].
A partir de 1986, IBM fue paulatinamente dejando de tener la batuta del mercado del PC. La razón
es que la propia IBM tenía que respetar la compatibilidad con lo anterior, y en ese terreno no tenía más
facilidades para innovar que la competencia. El primer problema vino con la aparición de los procesadores
386: los demás fabricantes se adelantaron a IBM y lanzaron máquinas con ranuras de expansión aún de 16
bits, que no permitían obtener todoel rendimiento. IBM desarrolló demasiado tarde, en 1987, la arquitectura
Microchannel, con bus de 32 bits pero cerrada e incompatible con tarjetas anteriores (aunque se desarrollaron
nuevas tarjetas, eran caras) y la incluyó en su gama de ordenadores PS/2 (alguno de cuyos modelos era aún
realmente ISA). La insolente respuesta de la competencia fue la arquitectura EISA, también de 32 bits pero
compatible con la ISA anterior.
Otro ejemplo: si IBM gobernó los estándares gráficos hasta la VGA, a partir de ahí sucedió un
fenómeno similar y los demás fabricantes se adelantaron a finales de los 80 con mejores tarjetas y más
baratas; sin embargo, se perdió la ventaja de la normalización (no hay dos tarjetas superiores a la VGA que
funcionen igual).
EISA también era caro, así que los fabricantes orientales, cruzada ya la barrera de los años 90,
desarrollaron con la norma VESA las placas con bus local (VESA Local Bus); básicamente es una
prolongación de las patillas de la CPU a las ranuras de expansión, lo que permite tarjetas rápidas de 32 bits
pero muy conflictivas entre sí. Esta arquitectura de bus se popularizó mucho con los procesadores 486. Sin
embargo, al final el estándar que se ha impuesto ha sido el propuesto por el propio fabricante de las CPU:
Intel, con su bus PCI, que con el Pentium se ha convertido finalmente en el único estándar de bus de 32 bits.
Estas máquinas aún admiten no obstante las viejas tarjetas ISA, suficientes para algunas aplicaciones de baja
velocidad (modems,... etc).
La evolución del MS-DOS.
Una manera sencilla de comprender la evolución de los PC es observar la evolución de las sucesivas
versiones del DOS y los sistemas que le han sucedido.
En 1979, Seatle Computer necesitaba apoyar de alguna manera a sus incipientes placas basadas en
el 8086. Como Digital Research estaba tardando demasiado en convertir el CP/M-80 a CP/M-86, desarrolló
su propio sistema: el QDOS 0.1, que fue presentado en 1980. Antes de finales de año apareció QDOS 0.3.
29ARQUITECTURA E HISTORIA DE LOS MICROORDENADORES
Bill Gates, dueño de Microsoft, de momento sólo poseía una versión de lenguaje BASIC para 8086
no orientada a ningún sistema operativo particular, que le gustó a algún directivo de IBM. Bill Gates ya había
hecho la primera demostración mundial de BASIC corriendo en un 8086 en las placas de Seatle Computer
(en julio de 1979) y había firmado un contrato de distribución no exclusiva para el QDOS 0.3 a finales de
1980. En abril de 1981 aparecieron las primeras versiones de CP/M-86 de Digital, a la vez que QDOS se
renombraba a 86-DOS 1.0 aunque en principio parecía tener menos futuro que el CP/M. En Julio, sin
embargo, Microsoft adquiría todos los derechos del 86-DOS.
Digital Research no ocupa actualmente el lugar de Microsoft porque en 1981 era una compañía
demasiado importante como para cerrar un acuerdo con IBM sin imponer sus condiciones para cederle los
derechos del sistema operativo CP/M. Así que IBM optó por Bill Gates, que acababa de adquirir un sistema
operativo, el 86-DOS, que pasó a denominarse PC-DOS 1.0. Las versiones de PC-DOS no dependientes de
la ROM BIOS de IBM se denominarían MS-DOS, término que ha terminado siendo más popular.
A continuación se expone la evolución hasta la versión 5.0; las versiones siguientes no añaden
ninguna característica interna nueva destacable (aunque a nivel de interfaz con el usuario y utilidades
incluidas haya más cambios). El MS-DOS 7.0 sobre el que corre Windows 95 sí tiene bastantes retoques
internos, pero no es frecuente su uso aislado o independiente de Windows 95. Aunque PC-DOS y MS-DOS
siembre han caminado paralelos, hay una única excepción: la versión 7.0 (no confundir MS-DOS 7.0 con
PC-DOS 7.0: este último es, realmente, el equivalente al MS-DOS 5.0 ó 6.2).
Agosto de 1981. Presentación del MS-DOS 1.0 original.
Marzo de 1982. MS-DOS 1.25, añadiendo soporte para disquetes de doble cara. Las funciones del
DOS (en INT 21h) sólo llegaban hasta la 1Fh (¡la 30h no estaba implementada!).
Marzo de 1983. MS-DOS 2.0 introducido con el XT: reescritura del núcleo en C; mejoras en el
sistema de ficheros (FAT, subdirectorios,...); separación de los controladores de
dispositivo del sistema.
Mayo de 1983. MS-DOS 2.01: soporte de juegos de caracteres internacionales.
Octubre de 1983. MS-DOS 2.11: eliminación de errores.
Agosto de 1984. MS-DOS 3.0: Añade soporte para disquetes de 1.2M y discos duros de 20 Mb. No
sería necesaria una nueva versión del DOS para cada nuevo formato de disco si el
controlador integrado para A:, B: y C: lo hubieran hecho flexible algún día.
Marzo de 1985. MS-DOS 3.1: Soporte para redes locales.
Diciembre de 1985. MS-DOS 3.2: Soporte para disquetes de 720K (3½-DD).
Abril de 1987. MS-DOS 3.3: Soporte para disquetes de 1.44M (3½-HD). Permite particiones
secundarias en los discos duros. Soporte internacional: páginas de códigos.
Julio de 1988. MS-DOS 4.0: Soporte para discos duros de más de 32 Mb (cambio radical interno
que forzó la reescritura de muchos programas de utilidad) hasta 2 Gb. Controlador
de memoria EMM386. Precipitada salida al mercado.
Noviembre de 1988. MS-DOS 4.01: Corrige las erratas de la 4.0.
Junio de 1991. MS-DOS 5.0: Soporte para memoria superior. La competencia de Digital Research,
que irrumpe en el mundo del DOS una década más tarde (con DR-DOS), obliga a
Microsoft a incluir ayuda online y a ocuparse un poco más de los usuarios.
30 EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2
Digital Research trabajó arduamente para lograr una compatibilidad total con MS-DOS, y finalmente
consiguió lanzar al mercado su sistema DR-DOS. Las versiones 5.0 y 6.0 de este sistema, así como el
Novell DOS 7.0 (cuando cedió los derechos a Novell) se pueden considerar prácticamente 100% compatibles.
El efecto del DR-DOS fue positivo, al forzar a Microsoft a mejorar la interacción del sistema operativo con
los usuarios (documentación en línea, programas de utilidad, ciertos detalles...); por poner un ejemplo, hasta
el MS-DOS 6.2 ha sido necesario intercambiar tres veces el disquete origen y el destino durante la copia de
un disquete normal de 1.44M. En cierto modo, la prepotencia de Microsoft con el MS-DOS a principios de
los noventa era similar a la de Digital Research a principios de los 80 con el CP/M.
El futuro.
El resto de la historia de los sistemas operativos de PC ya la conoce el lector, a menos que no esté
informado de la actualidad. Caminamos hacia la integración de los diversos Windows en uno sólo, que
esperemos que algún día sea suficientemente abierto para que le surjan competidores. Si en el futuro hubiera
un sólo sistema operativo soportado por Microsoft, no vamos por buen camino.
En ese caso, sería de agradecer que algún juez les obligara a publicar una especificación completa
de las funciones y protocolos del sistema, con objeto de que algún organismo de normalización internacional
las recogiera sin ambigüedades para permitir la libre competencia de otros fabricantes. El DOS y el Windows
actuales no son ningún invento maravilloso de Microsoft. Por poner un ejemplo, el MS-DOS 1.0 carecía de
función para identificar la versión del sistema. Exactamente lo mismo le ha sucedido a las primeras versiones
de Windows (hay varios chequeos distintos para detectarlas, según el modo de funcionamiento y la versión):
el MS-DOS no lo escribió inicialmente Microsoft, pero Windows sí, y salta a la vista que sus programadores,
para cometer semejante despiste, se sentaron delante del teclado antes de hacer un análisis de la aplicación
a desarrollar, igual que lo hubiera hecho alguien que hubiera aprendido a programar con unos fascículos
comprados en el kiosco. Con tanto analista en el paro...
No olvidemos que el DOS y Windows son el fruto de toda la sociedad utilizando el mismo tipo de
ordenadores y necesitando la compatibilidad con lo anterior a cualquier precio. La prueba evidente son los
procesadores de Intel, construidos desde hace tiempo para dar servicio al sistema operativo del PC. Somos
prisioneros, usuarios obligados

Continuar navegando