PC Interno 5

PC inte Programacibn de sistemas qedicado especialmeek aWindows 95 ea,aamln /Fcrritnrir 1 CILU Word Page 7.” Maker

Views 22 Downloads 0 File size 151MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

PC inte Programacibn de sistemas

qedicado especialmeek aWindows 95 ea,aamln /Fcrritnrir

1 CILU

Word Page

7.” Maker

5.”

!-

universal y multiplataforma. Y no les falta rar6n, dado que 10s que sustenten sus programas con fidelidad en la API Win32 estar&n en condiciones, sin mucho esfuerzo, de compilar sus programas tambien bajo Widows NT, con lo que s&m utilizables incluso en otras plataformas. La mencionada API Win32 ocupa la mayor pate de 10s nuevos capitulos dedicados a Windows 95 (y por extensi6n, tambien a Windows NT). Aunque es cierto que las aplicaciones de 16 bits pueden ejecutarse sin problemas bajo Windows 95, el que quiera producir software que aproveche todas las posibilidades disponibles hoy en dia, tiene que entrar en el mundo de 10s 32 bits y esto quiere deck cambiar a la API Win32, utilizacibn de la multitarea, acceso a la nueva administrad6n de memoria, etc. Hdiciunalmente, tambien le dedicamos una atenci6n especial al entorno de 10sprogramas, a traves de dos capitulos acerca de1 Shell y 10s nuevos Common Controls (Controles comunes). Se in¥ programas de ejemplo que faciliten el cambio y sirvan de punto de partida para el trabajo con la API Win32. Otro tema importante que se aborda por primera vez en el PC Interno es el de RDSI. Todos hablan ahora de Internet y de 10s servicios en linea. I’ues bien, la tecnologia RDSI es la que permitiri que esta nueva forma de comunicacihn pueda realizarse de forma adecuada. La park de este libro dedicada a RDSI se ocupa de la forma en que funciona la red RDSI y de1 desarrollo de1 software para ordenadores person&s que hate posible que el PC acttie coma un terminal multifuncional de esta red. Debido a sus caracteristicas, la tecnologfa RDSI plantea retos importantes y complejos para su programaci6n y 410 nos ha llevado a tratar el tema con toda la profundidad posible. Esperamos qw el libro satisfaga sus aspiraciones y les permita avanzar todavia m&s en la programaci6n de sistemas.

1.3.3 1.3.4 1.3.5

Los chips de wporte ......................................................................... La cstructura de la memoria .......................................................... Despu& de1 PC original de IBM.. .................................................

1.4 1.4.1 1.4.2 1.4.3 1.5 1.6 1.6.1

El procesador ...................................................................................... El cerebra de1 PC .......................................................... Los registros de1 procesador ..................................... Construcci6n de direcciones de memoria.. ................................ .................................................... Comunicaci6n con el hardware Interrupciones .................................................................................... Estructura y situaci6n de la tabla vectorial de interrupciones .......................................................... La distribucihn estindar de la tabla de vectores de interrupci(ln. ................................................................................. ......................................................... Interrupciones de hardware..

1.6.2 1.6.3 1.7 1.X 1.8 I 1.8.2 1.8.3 1.8.4 2.

Funcionamiento combinado entre el Hardware, ........... BIOS, DOS y 10s programas de aplicaciirn El procesador Pentium ..................................................................... ............. Ejecuci6n de las instrucciones y Branch Prediction.. El cache ................................................................................................. ........................................................... La unidad de coma flotante ..................... Caracteristicas adicionales

Programacih 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.3 2.3.1 2.3.2 2.3.3 2.3.4

ctel sistema

en la prktica

. .. . . . . .. . .. . . . . .. . . .. . . .. . . . .. . .. . .

de1 sistema con QuickBasic.. .............................. I’rogramaci0n ....................................... Los tipos de datos de QuickBasic de interrupciones.. ....................................... Llamada Buffer por aqui, buffer por allj ..................................................... Programacih de1 sistema en Pascal.. .......................................... Los tipos de dates de Turbo Pascal .............................................. Llamar interrupciones.. .................................................................... Buffer por aqui, buffer por all& ..................................................... Acceso a puertos ................................................................................ de1 sistema en C ..................................................... Programacihn Los tipos de data en C.. .................................................................. ............................................................. L.lamada de interrupciones Buffer par ayui, buffer par alli ..................................................... hcceso a 10s puertos .......

34 38 40 42 42 44 47 54 55 56 57 59 63 65 67 71 80 82

83 83 83 89 92 93 94 99 101 103 104 105 110 I1 3 116

5.

El controlador

6.

Teclado 6.1.1 6.1.2 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.3 6.3.1 6.3.2 6.4

D

Bases de la programaci6n de1 t&ado La larga marcha Dade la tecla hasta el programa Los diferentes teclados de PC Acceso al t&ado con el BIOS Las funciones de1 BIOS de la interrupcidn 16h Control de1 t&ado en t&ados MF-II Las variables de la interrupci6n de teclado de1 BIOS El asunto con 10s scan codes Controlador de interrupciones de1 t&ado Acceso a la interrupci6n de teclado 16h de1 BIOS Interceptar interrupciones de hardware de1 teclado El controlador de1 teclado v su pro~ramaci6n El Puerto serie

7. 7.1 7.2 7.3 7.3.1 7.3.2 7.4 7.5

ComunicaciCIn asincrona RS 232 La vida interior de un Puerto serie Los registros de1 UART El sucesor de1 8250 Acceso al Puerto serie via BlOS Programas de ejemplo Puerto

6.

paralelo

8.1.2

a la impresora con el BIOS Llamada de las funciones de1 BIOS Redireccionamiento de la interrupci6n

8.2 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5

Programaci6n directa de1 Puerto paralelo Los I/O Ports de1 puerto paralelo Los registros de1 Puerto Estructura de la comunicaci6n Los cables Software para la transmisi6n de data

8.1 8.1.1

Acceso

de impresora de1 BIOS

9.x.2 9.x.3 Y.8.4 Y.8.5 9.8.6 9.8.7 9.8.8 9.8.9 Y.8.1U

SelecciOn y programaci6n de juegob de caracteres Desplazamiento lento de pantalla (smooth-scrolling] DesconexiCln de la pantalla El principio de 10s Bit-planes Los modes grificos en 16 colores de las tarjetas EGA y VGA Los modes grificos VGA con 256 colores Libre eleccidn de colores Sprites (duendecillos) Los regiitros de las tarjetas EGA y VGA

Y.9 Y.Y.1

Tarjetas Super-VGA El est&ldar VESA

10. 10.1 10.2 10.3 10.4 10.5 10.5.1 10.5.2 10.5.3 10.5.4 10.5.5 10.6 10.6.1 10.6.2 10.6.3 10.7 10.7.1 10.7.2 10.7.3 10.7.4 10.7.5 10.7.6

Disquetes

y discos

Estructura

de disquetes

duros y discos

duos

Unidades de disquete y formatos Acceso a disquetcs con el BIOS Acceso a discos duros con ayuda de1 BIOS Discos duros y sus controladoras Controladora ST506 Controladoras ESDI SCSI IDE De la controladora a la memoria GrabaciCln de las informaciones en un disco El procedimiento FM El procedimiento MFM El procedimiento RLL M& pequefio, II& ripido, m6s barato El factor de intercalado (Interleave) Track Skewing y Cylinder Skewing Multiple Zone Recording Correcci6n de errores Lo que’ha de ir ademds Tiempos de acceso y su medicidn

duro

13.1

Memoria

14.

de ampliacibn

14.1 14.1.1 14.1.2 14.2 14.2.1 14.2.2 14.2.3 14.2.4

La Expanded Memory seglin el est$ndar EMS La historia de1 est6ndar LIM La versi6n EMS 3.2 Extended Memory Acceso a la Extended Memory con el BIOS P&as por la Extended Memory Acceso directo a la HMA desde el Real Mode El estjndar XMS

15.

c&

Generaci6n

16.

$$.

Configurackjn

16.1 16.1.1 16.1.2

Determinar la configuraci6n con ayuda de1 BIOS Obtener el equipamiento de hardware Determinar el tamafio de la memoria RAM con ayudid de1 BIOS Ejemplos de programas Obtenci6n de procesador y coprocesador Averiguar el tipo de procesador Test de coprocesddor Programas de ejemplo

16.1.3 16.2 162.1 16.2.2 16.2.3

17.

La historia

16.

La estructura 18.1 18.2

-

Programas de ejemplo

de sonido

y tipo de procesador

de1 desarrollo interna

con el PC

del DOS.. .............................................

del DOS ......................................................

Los diversos componentes de1 DOS ............................................ Arranque de1 DOS.. ...........................................................................

125 135 135 137

21.

Gestibn 21.1 21.2 21.3 21.4

22.

Acceso

de archives..

.....................................................................

Las dos caras de1 DOS.. .................................................................... Funciones Handle ............................................................................. Funciones FCB.. .................................................................................. Handles contra FCB ..........................................................................

adirectorios

22.1

Gesti6n

22.2 22.2.1 22.2.2

Btisqueda Bfisqueda Btisqueda

y unidades

de directories de arch&s de archivos de archives

172 172 173 176 183

..................................................

184

...

184

...................................................................... median& funciones FCB.. .................... ....... mediante las funciones Handle..

187 189 195

23.

Fecha y Hora ..................................................................................

207

24.

GestiCln de memoria

210

24.1 24.2 24.3 24.4 25.

Gesti6n de memoria RAM de1 DOS ............................................. De dbnde viene la memoria TPA y UMB ................................ El alojamiento de memoria, hecho visible.. ............................... D&&s de1 t&n de la gesti6n de memoria ....

La funcibn 25.1 25.2 25.3 25.4

EXEC.. ...........................................................................

EXEC para cargar y ejecutar programas ..................................... La funci6n EXEC para cargar Overlays .................... Novedades en DOS 5.0.. ................................................ Programa de ejemplo ...........................................

26.

Ctrl-Break

27.

Controladores 27.1 27.1.1 27.1.2 27.1.3

RAM .............................................................

y Critical

Error Interrupt

de dispositivo

..............................................

.......................................................

Controladores de dispositivo bajo DOS ..................................... Controladores de caracteres.. ......................................................... Controladores de bloques ............................................................... Acceso a controladores de dispositivo ........................................

210 213 218 226

241 241 247 249 250

253 259 259 263 264 265

28.1 28.2 28.3 28.4 28.5 28.6 29.

30.

El multiplexor ........................................................................ Funcionamiento de1 multiplexor ........................................ 29.1 Uso de1 multiplexor mediante 10s programas DOS.. .... 29.2

DOS y Windows 31.1

32.

i,Cbmo 32.1

33.

............................................................................

Descubrir

Windows

coneervo

la compatibilidad?.

Secret0

secretas

.......................................... en la programacidn

bajo DOS

34.1.3 34.1.4 34.1.5 34.1.6 34.2

320 322 324

324 327 331 331

334

350 355 355

del DOS.. ....................................................

358

...............................................................

358

y no secret0

El DOS-Info-Block

......

............................................................

DOS 6 ..................................................................................... 34.1 34.1.1 34.1.2

308 310 316

360

.........................................................................

Problemas de compatibilidad

Estructuras 33.1 33.2

34.

en red.. .......................................................... Las bases.. ................................................................................. Programacihn de red bajo DOS ........................................

Programacih 30.1 30.2

31.

El sector de arranque ...................................................................... La File-Allocation-Table (FAT) ..................................................... El directorio raiz ............................................................................... .............................. La zona de datos .......... .............................. Formatos de disquetes

............................... DoubleSpace ......................... Compresi6n de data .......................................... Archives CVF .................................................................................... Estructura de un archive CVF ...................................................... Las diferentes estructuras de datos.. ........................................... DoubleSpace y el proceso de arranque ..................................... Los puertos de software de DoubleSpace.. ..................... El Puerto de compresi6n MRCI.. .........

_ 359 364 364 364

368 370

373 378 380 384

37.

36.1 36.1.1 36.1.2 36.1.3 36.1.4 36.2 16.2.1 16.2.2 36.3 36.3.1 36.3.2 36.3.3

........................................................................... El modo protegido Caracteristicas de 10s sistemas operatives multitarea ............ El mode protegido de1 80286 .............................................. de1 80386 y i486.. ........................ ........ El mode protegido El modo Virtual 86 en el 80386 y en el i486 ..............................

438 439 441 463 477

Utilidades de1 mode protegido .................................................... ........ Simuladores EMS y programas de gestidn de memoria ....................................................................................... Multitaker.. DOS-Extender ................................................................................... ................................... Los requerimientos de1 mode protegido DOS-Extender para el 80286 ......................................................... DOS-Extender para el 80386 .................................................

36.4 16.4.1 i6.4.2

DPMI y VCPI ............................................................................. VCPl .................................................................................................... DPMI ...................................................................................................

479 479 487 485 487 492 495 499 500 509

La tecnologia 37.1 37.1.1 37.1.2 37.2 37.3 37.4 37.5

38.

CD-ROM..

...............................................................

524

Formatos de CD.. .............................................................................. El form&o fisico ............................................................................... High Sierra El form&o lhgico ....................................................

524 524 536

Conexidn de una unidad CD-ROM en un entorno DOS/Windows ................................................................. ................. Acceso vfa software a t&w& de1 API de MSCDEX ........ Acceso via software a trav& de1 controlador CD-ROM

542 545

Ejemplos

SoundBlaster

de programas..

y tarjetas

38.1

La familia

38.2 38.2.1

Sintetizador La naturaleza modulaci6n

................................................................

de sonido.

de las tarjetas

......................................

SoundBlaster

......................................

FM ................................................................................ fisica de 10s sonidos y de la de frecuencia ..................................

556 581 605 605 607 607

39.

Comunicacih 3Y.l

39.1.1 39.1 .2 39.1.3

39.1.4 39.1.5 39.1.6 39.2 39.2.1 39.2.2 392.3

39.2.4 39.2.5 39.2.6 39.2.7 39.2.8

39.2.9 39.2.10

39.2.11 39.2.12

39.2.13 39.2.14 39.2.15 3Y.3 39.3.1

RDSI con al ordenador

personal

........................

733

G”,z Principios de la RDSI ........................................................................ de la RDSI.. ................................................ Con&ones y can&s ;$ protocol~s de1 canal D ..................................................................... OSI.. ......................................................................... El model” 745 Mensajes de1 nivel nfimero 3 en el canal D.. ................... 746 co,,ectar a trav& de1 canal D ........................................................ 748 Desconexicjn a trav& de1 canal D ................................................. ............................................. 749 I’rogramad6n de RDSl con el CAPI Comunicaci6n entry una aplicaciirn y el CAPI.. ....................... 751 754 Elementos de servicio ............................. 755 Estructura de un mensaje de1 CAPI.. .. G$ Los mensajes de1 CAP1 Conexi6n activa .. ..................................................................................................................... Ek$jn de protocolos y conexi6n lhgica .................................. 766 773 E,,vu, de dates .................................................................................... ............................................................. 775 Conexi6n pasiva 784 Recibo de dates .............................................................. activa de una conexi6n ............................................... 785 Supresi6n ;“,: .................................................... Cierre pasivo de una conexi6n.. Menmjes de informacibn ................................................................ el estado de la conexi6n .............................................. 793 Consultar 795 Examinando 10s mensajes de1 CAPI.. ............. .............. 799 Ejecuciones de1 CAP1 en Windows.. ....................................................................... 807 El CA,‘1 e,, ,a prictica La biblioteca RDS1FS.DL.L y el intercomunicador.. ................. 808

39.3.2

E, control RDS,VB .............................................................................

812

39.3.3

DIGICOPY Transferencia de archives con el control R,,SI”B ..................................................................................

819

RDSI

823

39.4

para iniciados..

.........................................................................

41.2.2 41.2.3 41.2.4 41.2.5 41.2.6 41.2.7 41.2.8 41.3 41.3.1 41.3.2 41.3.3 41.3.4 41.3.5 41.3.6 41.4 41.4.1 41.4.2 41.5 41.5.1 41.5.2 41.5.3 41.5.4 41.5.5 41.5.6 41.5.7 41.5.8 41.5.9 41.5.10 41.6 42.

Acceso a las variables de entorno ................................................. Finalizar un proceso ......................................................................... Definir prioridades y consultar ........................................... Acceso a la linea de comando .............................................. Conseguir informacih de es&do sobre un proceso .............. Acceso a otros procesos ................................................................... Comunicacih entre procesos ....................................................... Subprocesos.. ....................................................................................... Crear y finalizar subprocesos ........................................................ Prioridades de 10s subprocesos ..................................................... Rep&o de las prioridades .............................................................. Sincronizacidn con subprocesos ................................................... Conseguir informacih de &ado a travhs de 10s subprocesos ......................................................................................... Control de mensajes ......................................................................... Ejemplos de programas ................................................................... Multitarea con subprocesos de primer y Segundo plano.. .... Multitarea con varies procesos.. .................................................... Sincronizacidn .......................................................................... Race conditions ......................................................................... Objetos de sincronizacih en Win32.. ......................................... Mutex .................................................................................................... Secciones criticas ..................................................................... Sem~foros .................................................................................... Eventos ................................................................................................. Variables interbloqueadas .............................................................. Procesos y subprocesos coma objetos de sincronizaci6n ...... Funciones de sincronizacih .......................................................... Sincronizacih entre procesos ....................................................... Programas de ejemplo .....................................................................

La administracih k2.1 42.1.1 42.1.2

de la memoria

virtual

.............................

Los fundamentos ............................................................................... Construccih de1 espacio de direcciones ................................... La contribucih de1 procesador ....................

851 854 855 856 856 857 858 862 863 866 867 868 870 870 871 871 880 885 886 888 889 897 900 906 911 912 913 91X 920 931 931 936 942

42.4.3 42.4.4 42.4.5 42.4.6 42.4.7 43.

La tabla de segmentos.. .................................................................... Direcciones relocalizadas.. .............................................................. lmportaciones ..................................................................................... Exportaciones ..................................................................................... Monitor PE .........................................................................

Bibliotecas

de vinculos

dinhmicos..

994 999 1000 1003 1004

.............................................

1009

Fundamentos de las funciones DLL ............................................ Vinculo din6mico en tiempo de carga irate a vinculo dinGnico en tiempo de ejecucidn ................................................ .................. de un archive DLL ...... 13.12 lnicialiraci6n y cierre ................... i3.1.3 Funciones API nuevas y viejas .......................... 43.1.4 De la idea al archive DLL ............................................................... 43.1.5 Elaboraci6n de archives DLL.. ....................................................... 13.1.6 DLL en la zona reservada a la direcci6n de un proceso ....... i3.1.7 DLL a modo de memoria de recursos ......................................... ............................. 43.2 DLL de subprocesos mfiltiples ...... ............................. 43.2.1 El concepto TLS.. ................................ $3.2.2 TLS en DLL TURTLE.. ...................................................................... $3.2.3 Memorias TLS en Microsoft ...........................................................

43.1 43.1.1

44.

Los controlee 44.1 14.1.1 44.1.2 44.1.3 44.1.4 44.1.5 44.1.6 44.1.7 44.1.8 44.1.9 44.1.10 44.1.11 44.1.12

comunee

................................................................

1010 1010 1014 1016 1019 1023 1025 1027 1028 1029 1031 1040

.1043

Control ImageList .............................................................................. Caracteristicas de un control ImageList ..................................... Creaci6n y eliminaci6n de controles Image-List ....................... Carga de mapas de bits completes ............................................... Incorporaci6n de im6genes ........................................ Diseiio de im@enes.. .................................................... Eliminaci6n y sustituci6n de imdgenes ...................................... LJni6n de dos imigenes ................................................................... Superposiciones ................................................................................. Recoger informaciones sobre las im6genes ............................... Arrastrar y colocar con el control ImageList ............................. Leer y escribir en streams ............................................................... El control ImageList de1 sistema ...................................................

1045 1046 1048 1050 1051 1053 1055 1056 1057 1058 1059 1062 1066

44.2.12 ReacciCln 44.2.1 3 Arrastrar 44.2.14 Programa

sobre eventos de ratCln y t&ado .,........._................... 1105 y c&car .._......._...._.....................,..................................... 1108 de ejemplo _...........,..._..........,.......................................... 1116 44.3 List Views . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . .. . . . . . . . . . . . . . .. . . . . . . . . . . 1123 44.3.1 Comunicacibn con controles ListViews .._..................... 1123 44.3.2 CreaciCln de un control ListView durante la ejecuci6n 1127 44.3.3 Afiadir y eliminar elementos . . . . . . .. . . . . . . . . .._.................................... 1133 44.3.4 Las imdgenes de un control ListView . .. . . . . . . .. . . . . . . . . . . . .. . . . . . . . . . . . . . . 1139 44.3.5 Consultas y ajuste de elementos . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . .. . . . . . . . . . . 1142 44.3.6 Ajuste de 10s colores y de la escritura . .._..........._........................ 1146 44.3.7 Listado de 10s elementos seleccionados y btisqueda de elementos . . .._........._.........,..........,................................................. 1147 44.3.8 Ajuste de1 campo visual _.......,............,.....,..................................... 11.51 44.3.9 Posicionamiento y ajuste de elementos . . . . . . . . . . . . .._...._.............. 1157 44.3.10 Dibujo de elementos . . . . . . . . .. . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . 1158 44.3.11 Ajuste de textos e imjgenes a trav& de Callbacks 1159 44.3.12 EdiciCIn del texto ..,..._....................................................................... 1160 44.3.1 3 Trabajo en la vista de detalles . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162 44.3.14 OrdenaciCln de elementos . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . 1166 44.3.15 ~eaccicjn a eventos de1 teclado y de1 rat6n 1167 1170 44.3.16 Arrastrar y colocar 1179 44.3.17 Programa ejemplo

a.

OLE .____........___................................................................................ 45.1 45.2

48.

Raices y desarrollo Funciones y clases

1185

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . .. 1186 I204 OLE importantes . . .. . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . .

El shell . . .. .. . . . . . .. . . . . .. . . . . .. . . . . .. . . . . . .. . . . . .. . . . . .. . .. . . . .. . . . .. . . . . .. . .. . . . . .. . . .. .. . . .. .. . 1215 1218 1218 . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219

46.1 46.1 .l 46.1.2

El espacio de simbolos de1 shell Disefio de1 espacio de simbolos Identificaci6n de objetos ShellFolder

46.2 46.2.1 46.2.2 46.2.3

La API de1 shell _...,..............._._.......,.,...........,.................................... Origen de 10s elementos de1 escritorio . Se,eccm,,I de una carpeta . . . . . . . . . . . . . . . . . . .. . . . . . .. . . . . . . .. . . . . . . . . . . . . . . . . . . . Copiar y otras operaciones . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . ..

1221 1222 1228 1234

46.3.6

46.5 46.5.1 46.5.2

Selecci6n de un nombre de Display ._._,.,,...,,,.,.,.......................... 1263 Los accesos directos y la interfar IshellLink .._........................ 1264 Caracteristicas de 10s accesos directos .._................................ 1265 Manejo de 10s accesos directos a trav& de la interfaz IshellLink .. . . . . .. . . . . . . .. 1266 Ciclo de vida de un acceso directo .,.,,,.,,_,_._._._............................. 1267 Selecci6n y consulta de 10s atributos de1 acceso directo 1268 Actualizaci6n de la uni6n entre e1 acceso directo y el obIetwo ._.............................,.......,.................................. 1272 1274 Objetivos que no son archives ._......_...................... Un ejemplo ._.._......_...._._................,..,..,................................................ 1274 CreaciCIn de programas y grupos de programas 1277 Creaci6n de nuevos grupos de programas .._..._..._._................... 1277 Programa de ejemplo .,......,.._..._..................................,...,................ 1279

46.6 46.6.1 46.6.2

Seleccihn de la impresora ObtenciCIn y seIecci6n de Ias impresoras disponibles Dir&o de una ventana para selecci6n de impresoras...........

46.7 46.7.1

Llamada Programa

46.8 46.8.1 46.8.2 46.8.3 46.8.4

Cuadros de di&logo para abrir y guardar archives 1295 GetOpenFileName() y GetSaveFileName() _._.........._._..._........... 1295 Selecci6n de varies archives .._............................................. 1302 Ampliaci6n de 10s cuadros de diilogo estandar ._._..._........_..... 1302 Programa de ejemplo .,...........,............._...................,..,....,.,,,.,,,,.,.,.. 1304

46.9 46.9.1 46.9.2

Arrastrar y colocar en el escritorio .,..,,.,,.,...._............................... 1308 .._............................. 1308 Trabajo con las funciones de arrastre Programa de ejemplo .._._.............. 1311

46.10 46.10.1 46.10.2 46.11 46.11.1 46.11.2 46.11.3

Area de notificaci6n de la barra de tareas (TNA) _................... 1312 Acceso al TNA .._......................................................................... 1312 El m6dulo auxiliar Taskbar.c _......_..._..._.._..........,.....,..,,,,,,,,,.,........ 1314 Accesos directos a Internet en el escritorio .._..._._..._._..............1315 UtilizaciCln de accesos directos a Internet 1316 Generaci6n autom$tica de accesos directos a Internet.......... 1318 La interfaz IshellLink de un objeto de acceso directo a Internet 1321

46.4 46.4.1 46.4.2 46.4.3 46.4.4 46.4.5 46.4.6 46.4.7

1283 1284 1286

al Panel de control .._._..._...._....................................... 1291 de ejemplo _.._._....._..,...,..,..,,............................................. 1292

47.3.2

RegStat

..................................................................................................

(Esta parfe /a encontrar6 Apendice Au&dice A&ndice Apendice Apendice Apendice Apendice Apendice Aptkdice Aptkdice

lndice

alfabbtico

A B C D E F G H I J

en el CD adjunto

1364

a/ libro

Las funciones de1 BIOS Las funciones de1 BIOS de la EG Las funciones de1 et&da VESA ’ DOS-Application-Program-Interface (DOS-API) La interrupci6n 27h de1 multiplexor Las funciones de1 EMM Las funciones de XMS Las funciones de1 controlador de ratnn Las interrupciones de hardware Introducci6n a 10s sistemas num&icos

.. . . .. . . . .. . . .. . . . . .. . .. . .. . . . . . .. . .. . . .. . . . .. . . .. . . . . .. . .. . . . .. . . . .. . ..

.

1373

Fundamentos

1 .l iQu6

es la programacibn

del sistema?

Si se pregunta a una persona con pocos conocimientos sobre PC qu4 se imagina por programaci6n de1 sistema, pueden obtenerse las respuestas m& variadas y hasta cierto punto curiosas. Algunos consideran que la programaci6n de1 sistema es una filosofia, una especie de tknica de1 programador que procura una via para transformar el planteamient; de un problema en un program.3 terminado. Esto es err6neo. Otros consideran que este concepto describe de forma general el hecho que 10s programas se desarrollen para un sistema de ordenadores determinado y no para todos 10s sistemas imaginables de ordenador. A pesar de que tampoco esta respuesta da exactamente en el clavo, tiene m&s de cierto que la anterior. Bajo mi punto de vista, la mejor forma de poder definir el concept” programaci6n de1 sistema es comparBndolo con otro concepto, concretamente con programaci6n de una aplicaci6n. La programaci6n de una aplicaci6n trata sobre la manipulaci6n y representaci6n de informaci6n dentro de un programa, sobre la ordenacidn de la misma en listas, drboles etc. y sobre la forma de continua tratando esta informaci6n. Los algoritmos que aqui se utilizan no dependen de1 sistema; se pueden describir de forma muy general para todos 10s ordenadores imaginable (miquinas Turing). Lo que sin embargo si depende de1 sistema es la forma ccnno la informaci6n que se debe tratar va a parar ndentrou de un programa y de qu6 manera 6sta saldr6 una vez haya sido tratada. Este es el tema de la programacihn de1 sistema, con lo que a grandes rasgos ya se daria una idea de las funciones de la programaci6n de1 sistema: el acceso a 10s archives, el teclado, la pantalla y el rest” de dispositivos que recogen informacidn dentro de1 ordenador o la dirigen otra WY hack fuera. Debido a que cada programa est6 comunicado de alguna forma con rl mundo exterior, la programaci6n de1 sistema ser6 por lo tanto pate de todos 10s programas, exactamente esto mismo tambibn es v6lido para la programaci6n de la aplicacihn, ya que en definitiva la informaci6n tend16 que tratarse. Con esto queda ya claro que la programaci6n de1 PC no consiste solamente en la programacihn de la aplicaci&, sino tambikn en la programacidn de1 sistema. Las dos funcionan solamente de forma conjunta. De todas maneras no s&a licito reducir la programaci6n de1 sistema solamente a 10s temas relacionados con el t&ado o con la salida por pantalla. La programacibn de1 sistema se encarga de1 acceso a todos 10s anedios operatives> de un PC y entre ellos se encuentra tambi6n la memoria RAM y el procesador, aparte de1 teclado, la pantalla y cualquier o+ro tipo de hardware. Pero el campo de la programaci6n de1

directamente al hardware, por ejemplo al chip (la llamada controladora). Sino que en lugar medios que le ofrecen diferentes servicios para son el ROM-BIOS y el DOS, ambos puertos de sido creados con otra finalidad que para acceder ci6n de1 mismo.

de1 interior de una tarjeta de video de esto puede utilizar diferentes acceder al hardware. Estos medios conexi6n de software, que no han al hardware y para la administra-

Ventajas de 10s puertos de conexibn DOS y BIOS La ventaja de estos puertos: el programa no tiene que wnancharsex las manes ya que We no entra en contacto con el hardware en si. En lugar de hacerlo, llama una rutina de1 ROM-BIOS que ha& todo el trabajo y le informa se&m la pregunta de1 teclado si el usuario ha pulsado una tecla y de qu6 tecla se trata. Esto ahorra mucho tiempo al programador, ya que la llamada de uno de estos servicios -1lamados funcionesgeneralmente conlleva much” menos trabajo que el acceso directo al hardware. De todas maneras esta no es la tinica ventaja. Los puertos de conexi6n de1 ROM-BIOS y de1 DOS aislan tambiPn un programa de las caracteristicas fisicas de1 hardware, lo cual es muy importante ya que por ejemplo las tarjetas gr6ficas monocrom&ticas (MDA, Hercules) tienen que programarse de una forma muy diferente a las tarjetas grificas de color (CGA, EGA, VAG, Super VGA, etc.). Si un programa tuviera que dar soporte a todas estas tarjetas deberia implementarse una rutina individual para cada uno de 10s estandares de video, lo que implicaria much” trabajo. Las funciones de1 ROM-BIOS que tienen coma objetivo la salida por pantalla, et&n ya configuradas en la tarjeta de video instalada y por tanto pueden ser llamadas por un programa, sin tener que preocuparse de1 tipo de tarjeta de video

El ROM-BIOS Tal coma muestra la siguiente ilustraci6n el ROM-BIOS puede considerarse una especie de capa que se encuentra encima de1 hardware. Pues el BIOS funciones para el acceso a 10s siguientes dispositivos: l l l l l l l l

Tarjeta de video Memoria RAM (Memoria Extendida) Disquetes Disco duro Puertos de conexi6n en serie Puertos de conexi6n en paralelo Teclado Reloj de tiempo real operado por bateria

coma facilita

/ ,

,Prc,gral;adeoplicacidn

!

“d El

Puerto de conexibn DOS

’ ?Aparte de1 BIOS, el DOS tambi&npone a disposici$$r@? para acceder al hardware. l&as sin embargo tienep un c@te) funciones de1 ROM-BIOS, ya que contemplan elJ&dwa@no#mo un dispositivo fisico sino coma un dispositivo 16gico. Esto se &m&$ramente en las funciones de access a 10s disquetes y disco durq: estas no o,$%ran,kn el nivel de dress de disquetes o discos duros individuales (las llamadas pistas y sectores), sino en el nivel de archives y directories. Par lo tanto al DOS se le puede deck dbreme &te o este otro archive y mu&trame 10s mil primeros caracteres de1 mismo, sin tener que plantearse en qut! park de1 disco duro se encuentra el archive. Ni tan ~610 es necesario conocer el tipo de dispositivo (disquete, disco duro o bien servidor de red), ya que coma es normal con 10s nombres de archives, se introduce una denominaci6n de dispositivo coma A: o C: y el DOS accede al dispositivo correspondiente. El access no se produce par propio r&gimen sine queen la may&a de 10s cases es median& funciones BIOS que el DOS utiliza para 61. De vez en cuando el DOS accede tambien directamente al hardware, pero al llama una fun&k de1 DOS no es necesario que se haga ningtin tipo de planteamiento. En el capitulo 2 se mostrar6 de qu6 forma se llama a las funciones de1 DOS y de1 BIOS. Sin embargo en primer lugar se plantea la pregunta sobre la forma en que debe accederse al hardware: mediante su programaci6n directa, mediante la llamada de funciones de1 BIOS o con la ayuda de las funciones de1 DOS

Alli donde tant” las funciones de1 BIOS corn” las de1 DOS son de1 agrado de1 programador, la elecci6n se har& en base a la aplicaci6n en concrete. Si se quiere trabajar con archives no pod16 pasarse sin las funciones de1 DOS, per” si sin embargo se desea dar format” a un disquete deberi utilizarse las correspondientes funciones de1 BIOS. Exactamente lo mismo suede con la salida par pantalla de 10s caracteres. Quien tenga inter& en poder desviar, si lo desea, las salidas de su programa a un archive, deber6 utilizar las funciones de1 DOS, ya que ~610 &tas efectiian el desvio autombtic”. Por “tr” lad” las funciones de1 BIOS permiten un mejor control de la pantalla, pues con las funciones de1 DOS ni tan ~610 puede colocarse el cursor en ningtin sitio. Por lo tanto deber5 hacerse la elecci6n en cada case en concrete. Sin embargo en algunos cas”s la velocidad de ejecuci6n de las funciones habla en contra, tant” de1 BIOS corn” de1 DOS. Ya que cuantas m&s capas (de software) deban ejecutarse hasta que la intenci6n de1 programa (p. ej. salida de caracteres) tenga corn” resultado el acceso al hardware, m&s lent” seri naturalmente el programa. La transferencia de datos de un disco duro se reduce en el camino desde el hardware pasand” par el BIOS y el DOS hasta llegar al programa, que lista un archive par ejemplo en un 80 (!) par ciento. El causante de est” es el trabajo de administraci6n que debe efectuarse en cada una de las capas. Alli tienen que transformarse parkmetros, cargarse informaci6n de &bias internas y copiarse el contenido de 10s buffers antes de que pueda llamarse el siguiente nivel. El tiemp” que se utiliza para este acamino entre las instanciaw se denomina overhead, y cuant” mayor sea el overhead pear serd el humor de1 programador. Alli donde se necesita la velocidad m&kna de ejecuci6n y la programaci6n directa de1 hardware correspondiente no es muy complicada, 10s programadores prescinden a menudo de1 BIOS y de1 DOS y 1” hacen 410s mismos. El mejor ejemplo de esto lo encontramos en la salida de caracteres en el modo de text”. kkticamente todos 10s programas comerciales seleccionan aqui el camino direct” par el hardware ya que la salida mediante el BIOS y el DOS es demasiado lenta y pot” flexible. Aden& el acces” direct” a la tarjeta de video en el modo text” es especialmente f&i1 tal corn” se podrd ver en e1 capitulo 9. Por el contrario en el modo grifico esto es algo completamente diferente. Posteriormente en este mism” capitul” encontra& la forma de solicitar 10s servicios de1 DOS y de1 BIOS y de quk manera se puede acceder al hardware de1 PC. Per” echemos un vistaz” en primer lugar al hardware de1 PC.

supuesto, no era ni tan ~610 previsible. Si bien el concept0 de un mini ordenador flexible sobre la mesa de1 despacho no era nuevo, ~610 habia sido llevado a cabo por empresas que ni mucho menos tenian en el mercado un peso especifico aproximado al de IBM. Tambitk IBM acababa de concluir el trabajo en un sistema muy parecido llamado IBM System/23 DataMaster. Pero el DataMaster llevaba todavia un procesador 8085 de Intel de 8 bits, con lo que en el afio 1980 ya no estaba a la altura de 10s tiempos pues habia empezado ya la era de las CPU de 16 bits. Con lo cual se planific6 un nuevo y revolucionario aparato.

Seleccibn del procesador Los primeros representantes de las CPU de 16 bits fueron 10s procesadores 8086 y 8088 de Intel. Ambos disponian de un registro de 16 bits y tenian direcciones de memoria de 1 MB y no ~610 de 64 KB. Lo cual para 10s estindares de la t!poca era una cifra inimaginable, apenas mayor que 1 Gk de RAM hoy.

Ranuras

de expansi6n

mundo exterior se comunicaba solamente mediante un bus de datos de 8 bits. Y ya se disponia de un bus de 8 bits: el de DataMaster. Este bus con&a la placa madre de1 PC, en la cual se encuentra el procesador y sus chips de soporte, con la memoria y las tarjetas de ampliaci6n*, que at&n colocadas en zonas de ampliaci6n. Por lo tanto esto ser& raz6n suficiente para estudiar un poco m6s detalladamente el concepto bus de1 PC.

1.3.2 El bus A pear de que el bus tienr una significaci6n muy elemental en la forma de funcionamiento de un sistema de ordenador, el desarrollo de1 bus de1 PC representa uno de 10s capitulos m&s oscuros en la historia de1 PC. Ya que mientras IBM por un lado se esforzaba en conseguir un sistema abierto y de hater ptiblica todo tipo de informackjn, se interrumpi6 la documentacidn de 10s pasos exactos de las sefales de1 bus. Seguramente bajo el supuesto de que nadie necesitaria esta informacihn. Peru el case era exactamente el contrario, ya que una de las pautas m&s importantes de1 &to de1 PC era justamente su claridad y la posibilidad de integrar dentry de1 sistema sin ningcn tipo de problema tarjetas de ampliaci6n con hardware adlcional. Esto fue utilizado rdpidamente por muchos usuarios, que pronto dejaron de comprar ~610 las tarjetas de ampliaci6n de IBM y compraron tambien las de otras empresas. Pues el PC conduce todos 10s datos y bus de direcciones ha& afuera y conecta con ello la memoria RAM, las diferentes tarjetas de ampliaci6n y algunos chips de soporte.

Forma de funcionamiento

del bus del PC

El bus representa b6sicamente un cable con 62 linras, mrdiante el cual puedm cargarse en la memoria datos de la CPU y desde all! transportarse a la CPU. Por asi decirlo es la autopista de 10s datos dentro de1 PC. Este se rnntrola y man& desde la CPU. En el bus, de hecho, se encuentran dus pistas srparadas, el bus de dates y el bus de direcciones. La CPU es&be la direcci6n de la posicidn deseada de la memoria en el bus de direcciones accediendo a la memoria, teniendo cada una de las lineas car&cter binario. Es decir ~610 pueden representar 0 o 1 y de esta manera forman conjuntamente el ntimero de la posici6n dentro de la memoria (es decir: la direcci6n). Cuanto mds lineas haya disponibles, mayor es la direcci6n m&&xi y mayor es la memoria a la cu.4 puede dirigirse de esta forma. En el bus de direcciones

m& de lineas de s&al en la comunicacihn entre la CPU y la memoria, alas cuales tambit!n se acude. Todas las tarjetas de1 bus escuchan, y se tendrh que encontrar en primer lugar una tarjeta que mediante el envio de una sefial adecuada indique a la CPU que es responsable de la direcci6n que se ha introducido. Las dank tarjetas se despreocupan de1 rest” de la comunicaci6n y quedan a la espera de1 prhximo ciclo de transporte de dates que quiz& les incumba a ellas. Este mismo concept” es tambien la raz6n por la cual al utilizar tarjetas de ampliacidn en un PC surgen problemas una y otra vez, si hay dos tarjetas que reclaman para elks el mismo campo de direccihn o campos de direcci6n que se solapan entre 410s. Este problema ~610 puede solucionarse mediante la ayuda de1 conocido y desacreditado bot6n DIP en aquellas tarjetas que permitan la configuracidn de1 dejari de estar en el amino de las otras. cuando campo de direcciones. LJna tarieta &a se vuelva a configurar Como programador de1 sistema afortunadamente no se lx tendri que ver con las seAales de1 bus, coma tampoco la ejecuci6n de1 bus no juega ningtin papel en la programaci6n de1 sistema si se prescinde de algunos temas marginales. De todas maneras para 10s fabricantes de tarjetas de ampliaci6n, cuyos productos deben atenderse a este protocolo, es de una importancia bkica la regulacidn de1 tiempo de las sefiales de1 bus, para poder trabajar de forma inmejorable con el PC. Pero precisamente este protocolo no ha sido nunca publicado por IBM con lo que se obliga a 10s fabricantes a medir las sefiales con la ayuda de tarjetas ya existentes e imitarlas. Par lo tanto no es de extrafiar que se pusieran en juego tolerancias que dejaron algunas tarietas totalmente eliminadas.

El bus AT Hasta el afio 1991 no aparecid finalmente un estdndar international de1 instituto americano IEEE (Institut of Electrical and Electronic Engineers), pero este estandar se refiere ~610 al bus AT. Pues el bus de1 PC no era ni much” menos el resultado. En definitiva no podia hablarse de una uautopista de datosa, en un PC cuando &a ~610 tenia un ancho de 8 bits. For lo tanto con la introducci6n de1 AT aparecid un nuevo bus en el mundo de1 PC, que en relaci6n al bus de dates tenia finalmente 16 bits, pero que era compatible con su antecesor. Las viejas tarjetas de 8 bits de la epoca de1 PC pueden por tanto manejarse conjuntamente con las nuevas tarjetas de 16 bits en un mismo dispositivo. De todas maneras las tarjetas de 16 bits son considerablemate m&s rbpidas, ya que transfieren la misma cantidad de datos en comparaci6n con las tarjetas de 8 bits en la mitad de tiempo (transferencia de 16 bits en lugar de transferencia de 8 hit-1

A las tarjetas de ampliaci6n se les ha asignado incluso un freno de seguridad, concretamente en forma de una sefial de &ado de espera (Wait-State), que deja todavia m&s tiempo a las tarjetas lentas para depositar 10s datos deseados en la CPU. Especialmente por este motive el bus AT cl&sico ha encontrado sucesores de m& rendimiento en Micro Channel y en el Bus EISA, que sin embargo, debido a otros motives, hasta ahora no se han podido introducir en el mercado. Hasta que estos no aparecieron no existia ningiin nombre comtinmente conocido para el bus AT, pero al salir la competencia de forma inesperada se le bautiz6 r6pidamente con el nombre de ~~rndustrie-Stundnrd-Architecture BLISS)(abreviado como Bus ISA).

Problemas con las tarjetas de 16 bits en el bus AT Debido a que incluso 10s modernos 386 y 486 se distribuyen en su inmensa mayoria con el bus ISA, existen todavia problemas en el mundo de1 PC que le son atribuibles. Por ejemplo la coexistencia dentro de un PC de tarjetas de ampliaci6n de 8 bits y de tarjetas de ampliaci6n de 16 bits es problem6tica mientras el campo de direcciones, de1 cual estas tarjetas son responsables, se encuentre en cualquier drea de 128 KB. El dilema empieza cuando una tarjeta de 16 bits debe seiializar mediante una linea de control al principio de una transferencia de datos, que ella puede recoger una p&bra de 16 bits de1 bus y que al contrario de una tarjeta de 8 bits no tiene que desdoblar la transferencia en dos bytes. Sin embargo esta serial la tiene que mandar en un momenta en el que todavia no puede saber que la direccihn de1 bus de datos se refiere verdaderamente a ella y que por tanto tiene la obligaci6n de contestar. Ya que de las 24 lineas de direccihn que contienen la direcci6n deseada, hasta este momenta ~610 e&n inicializadas correctamentelaslineasA17hastaA23,conlocualla tarjetareconoces61olosbits17hasta 23 de la direcci6n. Estos sin embargo cubren siempre un Area completa de 128 KB, independientemente de lo que pueda haber en 10s bits de direcci6n 0 h&a 16. La tarjeta en este momenta ~610 sabe si la direcci6n de la memoria se encuentre en el drea entre 0 y 127 KB, 128 y 255, etc. Si en este momenta la tarjeta de 16 bits manda por tanto una sefial para una transmisidn de 16 bits, hablard de esta forma por el resto de las tarjetas que se encuentren dentro de este Area. Esto podri notarse acto seguido ya que una vez tambien hayan llegado al bus 10s bits de direccidn 0 a 16, quedar& claro cual es la tarjeta a la cual realmente se estaba dirigiendo. Si realmente se trata de una tarjeta de 16 bits todo ir& bien. Pero si se estaba dirigiendo a una tarjeta de 8 bits, la tarjeta de 16 bits se despreocupa de1 resto de la transferencia y deja la tarjeta de 8 bits a su

10s buses EISA y MCA para asentarse en el mercado, en estos afios se han ideado otros conceptos de bus. Se inici6 con el llamado Vesa-Local-Bus (VL-Bus), que fue concebido y propagado independientemente de1 Cornit VESA. El cornit& VESA se propuso el definir estkndares en el &mbit0 de las tarjetas grkficas y asi por primera vez y realmente tuviera poco que ver con el disefio de1 bus de1 PC. Fueron y son todavia las tarjetas gr&ficas quienes sufren la menor velocidad de1 bus AT. For eso surgi6, en el Comite VESA, la propuesta para un bus m&s ripido que el VESALocal-Bus. Al contrario que con el EISA, MCA y PCI, el bus VL no sustituye al bus ISA sino que lo complementa. Un PC con bus VL dispone para ello de un bus ISA y de las correspondientes ranuras (slots) para tarjetas de ampliaci6n. Adembs, enun PC con bus VL puede haber, sin embargo, una o dos ranuras de expansi6n, para la colocaci6n de tarjetas concebidas para el bus VL, casi sirmpre gr6ficos. Solamente estos slots est6n conectados con la CPU a travks de un bus VL, de tal manera que las otras ranuras permanecen sin ser molestadas y las tarjetas ISA pueden hater su servicio sin inconvenientes. En el nombre de1 bus VL queda de manifiesto que se trata de un bus local. De forma distinta al bus ISA &te se acopla directamente en la CPU. Esto le proporciona por un lado una mejora substancial de la frecuencia de reloj (de la CPU) y hate que dependa de las lineas de control de la CPU y de1 reloj. A estas desventajas hay que afiadirle que no en todos 10s puntos et&n bien resueltas las especificaciones de1 cornit& VESA, hecho que a la larga le llevar& a que el e!xito de1 bus VL se vea empafiado por ello. En sistemas 486 econ6micos se puede encontrar a menudo, pero su mejor momenta ya ha pasado. Asi pues el bus de1 future es claramente el PC1 de Intel. PC1 significa: interconexihn y presenta un de 10s componentes perifkicos (Peripheral Component Infeuconnecf) moderno bus que no ~610 est& meditado para no tener la relaci6n de1 bus ISA en relacidn a la frecuencia de r&j o su capacidad sino que tambien la sincronizacidn con las tarjetas de ampliaci6n en relaci6n a sus direcciones de Puerto, canales DMA e interrupciones se ha automatizado finalmente de tal manera que el usuario no deberd preocuparse m&s por ello. El bus PC1 es independiente de la CPU, ya que entre la CPU y el bus PC1 se instalar& siempre un controlador de bus PCI. Por ello tambien serd posible instalarlo en sistemas que no esten basados en el procesador Intel si no que pueden usar otros, coma por ejemplo, un procesador Alpha de DEC. Tambien 10s procesadores PowerMacintosh de Apple se suministrar6n en el future con bus PCI.

Los ordenadores modernos con Pentium son suministrados casi exclusivamente con bus PC1 y adem& tambitk se encuentra en computadoras con una 486 una gran difusi6n. A pear que de que las tarjetas ISA no pueden ser instaladas en una ranura PCI, no deberia renunciarse a la posibilidad de inserci6n de una tarjeta ISA. Asi pues, a menudo se puede encontrar en un equip” con bus PC1 la interfaz

llamada > se pierde mucho tiempo de CPU, pues el usuario pulsar6 una tecla mucho menos a menudo que las preguntas que la Cl’LJ ha.4 al teclado. Cuanto menos a menudo la CPU pregunte al t&ado, m;ls tiempo puede pasar hasta que el programa se de cuenta de que se ha pulsado “na tecla, y naturalmente &te no es el me0110 de1 asunto, ya que en definitiva el sistema tendria que reaccionar lo m&s r6pido posible. Por esta razhn el PC funciona de otra forma en lu que a estv ~rbpeta. No es Id CPU la que va preguntando a 10s diferentes dispositivos, sine que son 10s dispositivos 10s que anuncian a la CPU que ha sucedido alguna cosa de la que el sistema deberia enterarse. En este entorno se habla de una interrupci6n de hardware, ya que la CPU interrumpe en este momenta la ejecuci6n de1 programa actual (interrupt), para ejecutar “no de 10s llamados administradores de hardware. Esto es “na pequeiia rutina que por regla general est6 preparada por el BIOS, para introducirnos en lo que sucede, y por esta raz6n se ha puesto en marcha la interrupci6n. Una vez finalizada, la CPU continlia con la ejecucidn de1 programa interrumpido igual coma si no hubiese pasado nada. Por lo tanto el procesador ~610 se utilizara cuando realmente pax alguna cosa. De todas maneras desde la puesta en marcha de una interrupcihn hasta que realmente se interrumpe el programa y se llama al administrador de interrupcio-

El controlador de interrupciones en el K/XT puede tratar hasta echo fuentes de interrupcSn, y por lo tanto echo 6rdenes de interrupcicin al mismo tiempo. Debido a que esto no es suficiente para el funcionamiento de un AT, aqui tambitk se unir6n dos controladores de interrupcibn, de manera parecida a 10s controladores DMA, que ahora podrin tratar hasta 15 6rdenes de interrupcidn al mismo tiempo. En el capitulo 2 encontrar6 mk informaci6n sobre las interrupciones de1 hardware, en el cual se tratan exclusivamente.

lnterfaz

para perifbricos

(8255)

Tal coma su nombre indica la Interfazpara perif&icos crea un? conexidn entre la CPU y 10s dispositivos perifkricos coma el teclado o el altavoz. Esta actlia simplemente coma una especie de intermediario utilizado por la CPU para comunicar determinadas sefiales al dispositivo deseado. En el capitulo 15 entrarg en contacto con ate elemento en lo referente a la creaci6n de sonidos.

Cronomedidor

de intervalos

(8253)

Este elemento que muy frecuentemente tambi&n se denomina timer, puede utilizarse tanto coma contador o coma marcador de tiempo. Esta aplicacidn viene dada gracias a la capacidad de1 mismo de sacar impulses en intervalos de tiempo determinados y constantes por una de sus lineas de salida. La frecuencia con la cual se repiten estos impulses no viene previamente determinada sino que puede configurarse con la ayuda de1 software. La frecuencia deseada se expresari en relaci6n a la frecuencia de1 sistema, que viene creada por el generador de frecuencias y que se hate llegar al marcador de tiempo mediante una conexi6n especial. El timer dispone de varias lineas de salida que pueden referirse a diferentes relaciones (unties) de frecuencia y que estin conectadas a otros componentes de1 sistema. India, por ejemplo, la frecuencia para restaurar la memoria RAM, que se lleva a cabo mediante el controlador DMA. Adem& una de las lineas va a parar al altavoz siendo de esta forma responsable de la creaci6n de 10s tonos. Otra, a su vez, une el timer con el controlador de interrupciones y se encarga que a intervalos regulares de tiempo se efecttie una interrupcidn de hardware, que se utilizard por ejemplo. para actualizar el tiempo gracias al we-advenimiento>, de1 BIOS.

El controlador

de video

(6845)

El controlador de video, al contrario que el resto ae componentes de soporte qur se han presentado hasta ahora, no se encuentra en la placa madre de1 PC sino que est6 depositado en una tarjeta de video colocada en una casilla de ampliaci6n. Originariamente se trataba de un controlador de1 tipo Motorola 6845, que constituia el coraz6n de las tarjetas video CGA y MDA con las que IBM sali al mercado en un principio. Este chip sin embargo pronto se via desbancado debido al continua desarrollo, primero por las tarjetas EGA y posteriormente por las VGA gue apareckon con las nuevas controladoras significativamente m&s eficaces. El hecho de que &as no scan compatibles con las anteriores controladoras Motorola, no afecta en absoluto a la CPU, ya que &ta no entra en conexi6n directa con las controladoras de video, al contrario que con otros chips de soporte. Esta tarea es llevada a cabo par el ROM-BIOS, que est$ especialmente configurado para trabajar conjuntamente con la correspondiente controladora de video. En el capitulo 9 encontramk informaci6n sobre este tema, que en definitiva est& dedicado a la programaci6n de tarjetas de video.

El controlador

de disquetes

(765)

Este elemento que lleva el nombre NEC PD765 tampoco se encuentra madre de1 PC sino en la tarjeta de ampliacidn que sirve para el manejo

en la placa de la unidad

El capitulo

10 trata

sobre

Los coprocesadores

disquetes,

discos

matemhticos

duos

y sus controladoras

(8087/80287/80387/80487)

Hasta el486 todos 10s procesadores Intel procesaban niimeros entwos pero ninguno podia procesar ntimeros con coma flotante. Los ntimeros enteros cubren se@ su tamafio 10s valores desde 0 hasta 255 (8 bits), de 0 a 65535 (16 bits) ode 0 hasta 429.624.976 (32 bits), kmeros de coma flotante, sin embargo, en el Ambito de 10s nfimeros reales. Entran en acci6n alli donde deban realizarse c&lculos con nfimeros reales, por ejemplo en un programa de hojas de c~lculo o de disefio asistido (CADComputer Aided Design). Par cierto 10s nfimeros de coma flotante pueden presentarse tambibn con ayuda de 10s ntimeros enteros y constituir una aritmgtica de coma flotante par software de 10s nfimeros enteros; de esta manera 10s cdlculos con m’nneros de coma flotante pueden calcularse de forma sensiblemente m&s rbpida, si tienen lugar en el hardware. Para usuarios y aplicaciones que necesiten ~61~~10s de coma flotante, Intel brinda coprocesadores matem&ticos especiales. Se han ido amoldando generaci6n tras generaci6n coma sucesores de1 Intel 8088, de tal manera que para cada modelo de procesador Intel se dispone de1 correspondiente coprocesador. El 486 DX y las distintas versiones de1 chip l’entium ya contienen este coprocesador desde el inicio, de tal manera que est&n en situaci6n de realizar cdlculos con coma flotante sin requerir el “acoplamiento” de un coprocesador especial. Sin embargo es condici6n indispensable para ello que el software utilice realmente 10s correspondientes comandos de lenguaje miquina para la aritmetica de coma flotante. De todas maneras 10s coprocesadores no han conseguido una significaci6n especial en el dmbito de1 PC, lo que sin duda ha &ado influido por 10s precios de Intel, que hicieron aparecer estos componentes coma un pure lujo para muchos usuarios. La programacihn de tales coprocesadores no es un tema para este libro porque no se trata realmente de programaci6n de1 sistema sino de programaci6n normal en lenguaje m&quina. No obstante en el apartado 16.2 se entra un poco en la tem$tica de 10s coprocesadores, pues se indaga en la naturaleza de 10s coprocesadores inst.&da.

1.3.4 La estructura

de la memoria

En primer lugar el PC sali al mercado con una memoria de 16 KB, que podia extenderse en la placa madre hasta 64 KB. Adem& IBM proporcionaba tarjetas de ampliaci6n que recogian cada una 64 KB y que tenian que colocarse en uno de 10s cinco puestos de colocaci6n de las tarjetas de ampliacidn. S610 se podian instalar

video (el llamado RAM video), para el ROM-BIOS y algunas ampliaciones ROM. Al procesador lees indiferente encontrarse d&&s de una posici6n de memoria RAM o ROM, con la linica diferencia que las dress de memoria en ROM no pueden reescribirse. El procesador tampoco tiene ningiin inconveniente en dirigirse a puntos de la memoria que fisicamente no existen. Pues el hecho de que el procesador pueda administrar hasta 1 MByte de memoria, no significa ni mucho menos que d&&s de cada direcci6n de memoria se oculte realmente un elemento RAM o ROM. Tal coma puede verse en la siguiente ilustraci6n, la planificacidn de la distribucihn de la memoria se hizo en base a segmentos de 64 KB, ya que el8088 y sus sucesores administraban la memoria en bloques de este tamafio tal coma se mostrar& en el capitulo 2. El espacio de direcciones de 1 MB recoge 16 bloques de estos. Los 10 primeros segmentos de memoria et&n reservados para la memoria prmclpal RAM, quedando limitado su tamafio m&&no a 640 KBytes. El segmento 0 tiene un papel muy importante ya queen el se incluyen data y rutinas importantes para el sistema operative.

DOOO:OOOO COOO:OOOO BOOO:OOOO AOOO:OOOO 9000:0000

DOOO:FFFF COOO:FFFF BOOO:FFFF AOOO:FFFF 9000:FFFF

Libre para cartuchos ROM Libre para cartuchos ROM BIOS-ROM adicional Video RAM Video RAM adicional (EGA/VGA) RAM de 576 KB a 640 KB

8000:0000 6000:0000 7000:0000

6000:FFFF 7OOO:FFFF 8000:FFFF

RAM

4000:0000 5000:0000

4000:FFFF 5000:FFFF

/ RAM RAM

de 384 446 512 KB a 448 512 576

KB

de 192 KB a 256 KB de 256 320 128 KB a 320 384 192 KB

I

A la memoria RAM le sigue el segmento de memoria A, que se instala con una tarjeta gr&fica EGA y VGA. Sirve de memoria de la estructura de la pantalla en 10s diferentes modos grAficos de estas tarjetas.

depositan algunas rutinas de BIOS que no forman pate de1 nficleo original de1 BIOS. En 10s XT &as rutinas son por ejemplo las que dan soporte al disco duro con que se han introducido. Los segmentos D y E es&ban previstos originariamente para cartuchos ROM, coma 10s que se utilizaban para 10s ordenadores dom&ticos y juegos de tele para la aportaci6n de software en el sistema. Nunca se han utilizado realmente, de manera que este Area se mantiene pkticamente siempre libre y hoy en dia se utiliza coma RAM adicionalobienparalainserci6ndememoriaEMS.Veaelcapit~lo 14sobreeste tema. Finalmente el bloque F contiene las rutinas de1 BIOS en si, el cargador original de1 sistema asi coma tambikn el ROM-BASIC que ~610 se conserva en 10s ordenadores viejos.

Conservacih

de esta distribucih

de la memoria

El hardware de1 PC no estd conectado a una distribuci6n determinada de la memoria, ni tan solo a la de IBM, y a pesar de ello IBM, con el primer PC, dio las coordenadas que han sido mantenidas hasta hoy por todos 10s fabricantes. Sin embargo este es un tema principalmente de1 software, ya que son el BIOS y el DOS que se han configurado en la posicidn de determinadas keas de la memoria (p. ej. el Video RAM). Adicionalmente esta distribuckk quedd cimentada por cada programa que salia al mercado, pues 10s programas a menudo cumplen determinadas suposiciones sobre la estructura de la memoria y no trabajan perfectamente si no cumplen este supuesto.

1.3.5 Despuh

del PC original

de IBM

El PC original de IBM no era ni mucho menus el final de las investigaciones en el kea de 10s PC, pero de todas maneras determin6 una serie de conceptos b&icos que hasta hoy no se han modificado. Par ejemplo. la funcionalidad de1 BIOS, la distribuci6n de la memoria y el trabajo conjunto entre el procesador y 10s chips de soporte. Dentro de este concepto sin embargo, se efectuaron pequefias modificaciones con la introduccidn de1 XT y de1 AT. En el XT, que apareci6 en el mercado el aiio 1983, debe mencionarse la introducci6n por vez primera de un disco duo, con una capacidad de 10 MB que bajo 10s est$ndares actuales nos parece realmente modesto. Esta ampliaci6n apenas tuvo ningtin efecto en la totalidad de1 sistema, si se prescinde de1 disco duro ROM adicional que se incorpord en el segment0 C y de1 ROM BIOS que se ampliaba con algunas funciones para el acceso al disco duo.

direcciones

de 24 bits y asi podia

dirigirse

a un drea de memoria

de 16 MB.

En lo referente a la memoria de mass, el AT duplicaba la capacidad de1 disco duro hasta 20 MB en relaci6n a la de1 XT e introducia la unidad de disquete de 5,25” con una capacidad de 1,2 MB, que todavia hoy se utiliza. Adem& con el AT apareci6 tambien en el mundo de1 PC el r&j en tiempo real alimentado por una pila, que hack posible que el tiempo se continuase midiendo una vez se desconectaba el PC. Un hecho menos conocido es que con el AT tambikn aument6 el ntimero de controladores DMA y de interrupciones, de manera que &da uno dota de su servicio al AT condos de estos elementos. Adem& para dar soporte al nuevo hardware, se amplid el ROM-BIOS funciones, por ejemplo, el acceso al reloj de tiempo real de bateria.

con algunas

Las llamadas modificaciones y ampliaciones muestran que el AT se ha ganado con toda seguridad el predicado de . Existen diferencias entre 10s PC/XT por un lado y 10s AT por otro, ya que este dispone de m& chips de soporte. La tabla que presentamos a continuaci6n muestra las direcciones de Puerto de 10s elementos m&s importantes de1 PC. Su

1.6 Interrupciones En el apartado 1.3.3 se resaltó el concepto interrupción como mecanismo con la ayuda del cual un dispositivo puede forzar la CPU a interrumpir el programa actual momentáneamente y ejecutar uno de los llamados administradores de interrupciones. Sin embargo esto es sólo una parte del concepto. Ya que las interrupciones no sólo juegan un papel muy importante en el control del hardware, sino que también son el medio central de comunicación entre un programa y las funciones del BIOS y del DOS.

Interrupciones

de software

Las llamadas interrupciones de software son las que llaman un programa con la ayuda de una instrucción especial en lenguaje máquina, para hacer que se ejecute una función del DOS o del BIOS o de la administración de la memoria EMS o lo que sea. Naturalmente de esta forma no se interrumpirá la ejecución del programa en sentido real, sino que la función que se haya llamado más bien será contemplada por la CPU como un subprograma y una vez este se haya ejecutado podrá continuarse con el programa.

tabla se configurará en la puesta vectores de interrupción indiquen

en marcha del sistema, para las funciones del ROM-BIOS

que los diferentes correspondientes.

De esta manera también queda claro la ventaja del mecanismo de interrupción, ya que un fabricante de PC que quiera construir un PC compatible IBM, no puede copiar naturalmente la totalidad del ROM-BIOS de IBM, pero sí que le está permitido implementar en su ROM-BIOS la misma funcionalidad aunque las funciones del BIOS en si estén codificadas de manera muy diferente. En la práctica esto significa que las funciones del BIOS se llaman mediante las mismas interrupciones que en IBM y estas esperan los parámetros en los mismos registros de procesador, pero las rutinas que facilitan esta funcionalidad están construidas de manera diferente completa o parcialmente que las de IBM. De todas maneras estas no son las únicas ventajas del concepto interrupciones del cual en los capítulos 2 y 4 encontrará más información. Echemos un vistazo en primer lugar a la tabla vectorial de interrupciones, que es la que representa la clave para llamar las interrupciones.

1.6.1 Estructura y situación de interrupciones

de la tabla vectorial

El hecho de que exista una tabla de vectores de interrupción ya indica que el PC conoce más de una, ya que en caso contrario no se necesitaría una tabla sino que sería suficiente un puntero de interrupción. En concreto los 8088 y sus sucesores dan soporte a 256 interrupciones, por lo cual la tabla vectorial de interrupciones tiene registradas naturalmente 256 entradas. Las interrupciones de software y de hardware se mezclarán en un solo conjunto, ya que sólo es el tipo de la llamada de interrupción lo que decide qué interrupción debe ejecutarse. Mientras que en una interrupción de software es el programa correspondiente el que fija el número de interrupciones, en una interrupción de hardware es el controlador de interrupciones. Cada una de las entradas en la tabla de vectores de interrupción ocupa dos palabras seguidas ya que se trata de un registro FAR que indica la dirección de segmento y la de offset del correspondiente administrador de interrupciones. La tabla recoge por tanto 1024 Bytes. Empieza en la memoria en la dirección de offset 0 y ocupa de esta manera el primer KiloByte de memoria RAM de todos los PC. La dirección en la cual debe encontrarse el vector de interrupción de una determinada interrupción, se calcula por lo tanto con la multiplicación del número de la interrupción por cuatro. Y gracias a que la tabla vectorial de interrupciones se encuentra en la memoria RAM, ésta puede modificarse desde cualquier programa, los programas TSR y los (driveus) son los que máq vso hacen de esto, ya que de controladores de dispositivo

punto de Interrupciór NM

paso a pase

1.6.2

La distribución de interrupción

estándar

de la tabla de vectores

La siguiente ilustración muestra no sólo las direcciones de los diferente vectores de interrupción, sino también los servicios que pueden obtenerse con ellos. Esta distribución es válida para todos los PC, y es una parte muy importante de lo que denominamos estándares del PC. Ya que un programa que utilice estas interrupciones puede estar seguro de que va a encontrar estos servicios no sólo en el PC de la persona que está desarrollando el programa, sino también en los de los clientes. La mayoría de estas interrupciones y las funciones que se ocultan detrás de ellos serán descritos alo largo de este libro. De todas maneras muchos de estos vectores de interrupción sólo están ocupados si también está instalado el hardware correspondiente. Esto es válido por ejemplo para la interrupción 33h que sirve para llegar a las funciones del controlador de ratón o para la interrupción 5Ch que conduce a las funciones del NetBios como puerto de conexión, pues ambos están sólo disponibles en entonos de red. La marca xreservadon significa que la interrupción componente del sistema (normalmente el DOS),

pero

ha sido utilizada por algún que la utilización de esta

Instrucción desconocida (sólo 80286) Reservado IRQO: Ti,ner(iiamada 18.2 veriseg.) IR01 : Teclado IRQZ: Segundo 8259 (sólo AT) IRCO: Puerto de conexión en serme 2 IRQ4: Puerto de conexión en serie 1 IRQ5: Disco duro IRQ6: Disquete IRO7: Impresora BIOS: Funciones video BIOS: Averiguar configuracion BIOS: Averiguar tamaño de la memoila RAM BIOS: Funciones disquetesldlscos duros BIOS: Acceso a pue¡,o de conexión en Serle BIOS: Funciones caseteiampliadas BIOS: Preguntas teclado BIOS: Acceso a impresora en paralelo Llamada del ROM-BASIC BIOS: Botar sistema (Alt+Ctrl+Del) BIOS: Preguntar HoraiFecha Tecla Break (no Ctrl -C) pulsada Se llamará 08 después de cada INT Dirección de la tabla de parámetros video Dirección de la tabla de parámetros disquete Dirección del carácter bit muestra DOS: Finalizar el progiama DOS: Liamar función DOS Dirección rutina final de programa DOS Dirección rutina Ctrl-Break del DOS Dirección de la rutina de error del DOS DOS: Leer disqueteldisco duro DOS: Escribir disqueteidisco duro DOS: Finalizar prog., quedar residente DOS: El DOS está desocupado DOS: Reservado OBB DOS: Multiplexor DOS: Reservado

170.173 176 196 19C19F IAO-

1c4-lC7 iC&lCB ICC-ICF

,EO-

ocuparlos como quieran Llegado tiempo de aiarma (sólo AT) Los programas de aplicación pueden ocuparlos como quieran Funciones del NETBIOS libre: Los pro9ramas de apkaclón pueden ocuparlos como quieran Funciones administrador de la memoria EMS libre: Los programas de aplicación pueden ocuparlos como quieran ,RQ08: Reloj de tiempn real isólo ATI IRQ09: (sólo AT) IRQIO: (sólo AT) IRQI 1: (sólo AT) IRQ12: (sólo AT) IR013 80287 NMI (sólo AT) IRQ14: Disco duro (sólo AT) IR01 5: (sólo AT) No se utilizan

-1FF 3c3

Se utilizan in,érprete

3CF

No se utilizan

200

dentro Basic

del

3c4

1.6.3 Interrupciones de hardware Las interrupciones de hardware se crean mediante los diferentes cumpunr~~te del hardware y son conducidos a la CPU mediante el controlador de interrupciones. En este capítulo se explicará detalladamente el proceso y las diferencias que deben observarse entre PCIXT y AT.

l

1

I *“P”e*oSerle 1”P”emserie Puerto

Paralelo

número del interrupción que en este caso se llamará, 8 más la cifra IRQ, en este caso sería la interrupción

Suprimir

interrupciones

es el resultado 11 (Int 11).

de la suma

de

de hardware

De todas maneras los programas disponen de la posibilidad de Impedir la eleación de interrupciones de hardware, lo que en determinadas situaciones puede ser deseable, por ejemplo. si no puede interrumpirse la ejecución del programa. Pues una interrupción de hardware sólo pone en marcha la CI’U por requerimiento mediante el controlador de interrupciones si está colocado el llamado flng de interrupciones en el registroflag de la CPU. Si por el contrario éste ha sido borrado por el software, no se cumplirá el requerimiento del controlador de interrupciones. Existen además también posibilidades de bloquear interrupciones de forma individual, esto sólo puede hacerse mediante la programación del llamado registro Mask en el controlador de interrupciones. Véase el capítulo 4 sobre la programación del controlador de interrupciones.

16 interrupciones

de hardware

en un AT

Mientras que el PC y el XT tienen suficiente con 8 fuentes de mterrupc~ún que pueden organizarse mediante un 8259, no es suficiente para el AT. Por este motivo el AT dispone de dos controladores de interrupción 8259, para poder administrar 16 fuentes de interrupción. De forma análoga a las interrupciones del primer controlador de interrupciones, estas se denominarán desde IRQOR hasta IRQ15. Si una de las ocho fuentes de interrupción del segundo controlador hace un requerimiento de interrupción, este simula un IRQZ en el primer controlador. De esta forma los requerimientos de interrupción del segundo controlador tienen una prioridad más alta que aquellos de las líneas IRQ4 hasta IRQ7 del primero. Si se da curso a IRQZ se ejecutará el administrador de interrupciones de la interrupción 10. En primer lugar éste lee algunos registros del segundo controlador de interrupciones para averiguar el número del IRQ. En base a este número llamará a continuación una de las interrupciones desde 70h hasta 77h como interrupción de software. El hecho de que la llamada en si haya sido iniciada por el hardware no tiene ninguna importancia, ya que el dispositivo correspondiente está ya esperando la ejecución de «su» administrador de interrupciones. * La llamada a estas interrupciones como ,nterrupciones de software. aunque pmble, care~;e de sentido, ya que ei correspondiente controlador de interiupciones está dispuesto para los requerimientos del correspondiente hardware y no funcionaría sin oresentar reparos si la llamada no se originara en el hardware y no tuviera que ver con él.

.’

rrupt

.

ratón,

stresmer,

unidades,

CD-ROM,

etc.

C;ontroller --Il ---l

I

El hardware

del teclado

En el caso del teclado, el hardware consiste en un procesador de teclado dentro del mismo que está unido a la CPU mediante un cable. Su tarea es la de observar el teclado e informar al sistema sobre si se ha pulsado o soltado una tecla. De todas maneras el procesador del teclado no asocia ningún carácter en concreto con las teclas, sino que asigna un número a cada una de las teclas. Las teclas de control como Shift o Ctrl las trata igual que al resto de las teclas. Si se pulsa una tecla, el procesador transmite a la CI’U el número de la tela en la forma de uno de los llamados código Make. Si a continuación se suelta la tecla el procesador repetirá el procedimiento pero esta vez transmitirá un código Release. La diferencia entre ambos códigos es muy pequefia: los dos representan el número de la tecla en el área entre 0 y 127 pero en el código Release se coloca además el bit 7. Para iniciar la transmisión el controlador del teclado manda en primer lugar un señal de interrupción al controlador de interrupciones, que se recibe en la línea IKQZ. Si las interrupciones de hardware no están bloqueadas en aquel preciso momento o no hay un requerimiento de interrupción que tenga prioridad superior, la CPU ejecutará la interrupción OYh.

El administrador

del teclado

del BIOS

Con esto pasamos al siguiente nivel, pues detrás de la interrupción 09h se uculta una rutina de BIOS, el llamado administrador del teclado. Mientras se estaba llamando al administrador de interrupciones, el procesador del teclado ya ha mandado el código de la tecla al puerto 60h mediante el cable del teclado. El administrador del BIOS lo lee allí y de esta forma se entera del número de la tecla que se ha pulsado o soltado. La función de este administrador es la de convertir ahora este código a un carácter del juego de caracteres del PC (El llamado código ASCII). Ya que el resto del sistema no puede trabajar con el número de tecla, pues las teclas de los diferentes teclados de PC tienen números distintos y por lo tanto el número de tecla se tiene que transportara un sistema unificado de códigos; o sea el código ASCII. Sin embargo esta tarea es mucho más difícil de lo que uno se pueda imaginar a primera vista, ya que el administrador del BIOS tiene que prestar atención a ver si en aquel momento se está pulsando una de las teclas de control como Shift o Alt el código de tecla de la cual ha recibido antes. Ya que del código de tecla de la tecla de la letra A, el administrador del BIOS por ejemplo. no tiene que formar entones PI código ASCII de la a minúscula sino el de la A mayúscula.

que por cierto todavía pertenece al BIOS.

La interrupción

del teclado

del BIOS

Aquí se trata de la interrupción 16h, detrás de la cual se ocultan tres funciones del BIOS. Con la ayuda de estas funciones pueden leerse los caracteres del buffer del teclado y puede averiguarse el estado del teclado CLqué teclas están pulsadas?). Estas tres funciones pueden llamarse desde un programa, activando la interrupción 16h como interrupción de software. Esto puede suceder en cualquier momento y es totalmente independiente de la interrupción de hardware del teclado, con la cual de esta manera no se tiene ningún tipo de contacto. Un programa de aplicación no tiene que utilizar directamente las funciones de la interrupción 16h para meeuntar al teclado. sino aue ruede utilizar también las correspondientes funcio;esYdel DOS. Aplicación

seguidamente

la instrucción

.

Las funciones de los controladores de dispositivo del DOS si bien pueden llamarse también diqectamente desde un programa de aplicación, en la práctica la mayoría de las veces son llamadas mediante una función superior del DOS. De esta manera hemos llegado al último nivel debajo del programa de aplicación. Se trata de las diferentes funciones con ayuda de las cuales se puede acceder al teclado mediante la interrupción del DOS 21h. Estas llaman las funciones drioer y transmiten el carácter devuelto al programa invocador.

1.8 El procesador Pentium Con el procesador Pentium presentado en 1993 Intel volvió a dar otro cuarto de vuelta al tornillo de lo técnicamente posible en el entorno PC. Los 100 MIPS (millones de instrucciones por segundo) a una frecuencia de reloj de 66 MHz hablan por sí mismos. En el campo entero un l’entium es casi dos veces más rápido que un 486 DX2/66, mientras que en el campo de coma flotante la diferencia es aún más exagerada. Dependiendo del conjunto de instrucciones un Pentium puede superar a su antecesor de tres a siete veces en cuanto a velocidad de proceso. Y todo ello con una compatibilidad binaria completa con los 486,386,286 e incluso 8086.

Penbum-CPU100 MHZ P*“ti”m-CPU 90 MHZ PeJ”ti”rn-CPU66 MHZ Pentium-CPU 486

DX4-1

486

DXZ-66

486

rlx*-50

60 MHz OO

Figura 16: El idice

,COMP

de Intd

Intel tiene una sencilla respuesta a la pregunta de las prestaciones del Pentium: 567. Este valor lo suministra el test ICOMP desarrollado por Intel y completamente

superados

por los de otros

fabricantes.

En general, el sentido global de este índice con respecto al de los procesadores anteriores debería ser correcto, aunque de todos modos esto no debe conducir a la suposición de que el hecho de que las prestaciones del procesador Pentium doblen alas del 486 implique que esta relación de prestaciones se pueda trasladar también al nivel del usuario y del software instalado, puesto que entre la CPU y el usuario se encuentra una larga serie de componentes de hardware y software que, o no aprovechan para nada, o sólo en parte, las elevadas prestaciones del procesador. Un ejemplo claro de ello lo constituyen las tarjetas de ampliación. De todas formas es innegable que el Pentium llevará el mundo del PC a una dimensión inalcanzable hasta ahora. Llegados a este punto surge, naturalmente, la pregunta de qué nos aporta el Pentium. En primer plano encontramos tres componentes: la unidad entera superescalar, el caché de primer nivel del procesador y la también superescalar unidad de coma flotante. Estos tres aspectos serán analizados con lupa más adelante en el mismo capítulo. Primero enumeraremos maravilloso>> de Intel: l

l l

-

l

l

l

las características

más importantes

de este nuevo

«chip

El Pentium se fabrica con la tecnología BICMOS submicrón de 0,s ym Las pistas de los circuitos tienen un ancho de 0,8 millonésimas de metro, es decir 0,8 milésimas de milímetro. En el chip se han instalado aproximadamente 3,l millones de transistores. El procesador, en cuanto a conjunto de comandos, registros, tipos de direccionamiento y modos de funcionamiento es absolutamente compatible a nivel binario con sus predecesores. El procesador sigue trabajando con registros de 32 bit y direccionamiento de 32 bit, pero se le puede conectar un bus de datos de 64 bit para permitir una comunicación más rápida con la memoria. Una arquitectura superescalar, que se basa en dos líneas de enteros trabajando paralelamente, permite, en el caso ideal, ejecutar en un sólo pulso de reloj dos comandos de lenguaje máquina. Dos cachés separados de 8 KByte, uno de datos y otro de códigos, se ocupan, junto al puerto de datos de 64 bit, de un acceso rápido y continuo a la memoria. Un protocolo especial (MES11 se ocupa de la instalación sin problemas de un procesador Pentium conjuntamente con otros procesadores en un sistema con varios procesadores.

1.8.1 Ejecución

de las instrucciones

y Branch Prediction

La ejecución de programas a través de un procesador I’entium se basa en una arquitectura superescalar con líneas de enteros de cinco etapas trabajando paralelamente que se encuentran conectadas a un caché del procesador y un Branch Target Buffer (BTB).

Ejecución en procedimiento

Pipeline

Si se quiere entender este aparatoso a la vez que eficiente mecanismo de elecución de programas, primero se tiene que ver cómo ejecutan los programas-y con ello los diferentes comandos en lenguaje máquinalos microprocesadores. A pesar de que visto desde fuera este proceso parece ser monolítico, la realidad es que en el interior del procesador se divide en varias etapas. Tanto en el i486 como en el Pentium el

La ejecución de un comando comienza con la etapa PF, la «instructwn prrtrtsh,,. k.11 ella se trata en primer lugar de traer el comando de lenguaje máquina de la memoria al procesador para que pueda ser ejecutado. Una vez en el procesador, el comando entra en la segunda etapa, la Dl, que es la primera fase de la decodificación de la instrucción. El objetivo en este caso es analizar el comando y con ello determinar el tipo de acción que se debe emprender. Dependiendo del tipo de comando, a continuación se deben determinar los operandos del mismo, por ejemplo en un direccionamiento de memoria con desplazamiento. Esta misión está encomendada a la segunda fase de la decodificación de la instrucción, denominada D2. En la siguiente etapa, llamada EX, es donde se lleva a cabo la ejecución del comando y el consiguiente acceso a la memoria. En la etapa WB concluye la ejecución del comando para lo que el contenido de los registros del procesador y los registros de estado internos son llevados a su nueva situación. .. . . . : :.., :

“. .:.:..:. .. .,::

.’

,’ ,,

Pipeline del procesador

::.

‘::

l:’ );

,, : ..’ ..: : “..< ::

:, 88 ..,; ,.‘;.;lii” >mumanrode UBilOlC”nlBd”i Para llevar acabo estas diferentes etapas y poder pasar de una a otra el procesador precisa de un pulso, y en el caso de las fases D2 y EX, dependiendo del comando, se necesita un pulso más. En total son necesarios un mínimo de cinco pulsos. Si se hace un repaso del manual de datos de Intel se descubrirá que muchos comandos qe pueden llevara cabo con un número de pulsos considerablemente menor, y para

paso por todas las etapas, pero como la línea es capaz de llevar acabo un comando (finalizar la ejecución del mismo) con cada pulso, aparentemente los comandos sólo precisan un pulso para su ejecución.

Líneas superescalares Mientras que el procedimiento de potenciado este procedimiento con en paralelo. De ahí proviene también calar. Para poder mantener las dos línea U y la segunda V.

líneas hizo poderoso al 486, el Pentium ha la inclusión de una segunda línea que trabaja el concepto de arquitectura de líneas supereslíneas diferenciadas la primera se denomina

Con ayuda de estas dos líneas el Pentium podría, teóricamente, llevar a cabo la ejecución de dos comandos a la vez y con ello doblar de nuevo la velocidad de ejecución, pero efectivamente, así de sencillo sólo ocurre en la teoría. En la práctica, por el contrario, a menudo se da que dos comandos consecutivos sólo se pueden ejecutar uno detrás de otro pues dependen el uno del otro. Un sencillo ejemplo para ello son dos comandos de lenguaje máquina de los cuales el primero escribe en un registro del procesador y al cual el segundo efectúa un acceso de lectura. Además existe una larga serie de reglas adicionales que hacen imposible la ejecución simultánea de dos comandos consecutivos. Una de ellas es la limitación de la ejecución en paralelo a comandos de lenguaje máquina «simples», bajo los que se entienden comandos como MOV, sumas y restas de enteros, PUSH y POP, puesto que únicamente estos comandos son adesmenuzadoss en el procesador, mientras que todos los demás son ejecutados por Microcode”. En la segunda etapa de la línea, en D2, se decide si es posible o no la ejecución paralela de dos comandos. En la etapa PF primero se cargan tanto el comando que se va a ejecutar como el siguiente en dos unidades decodificadoras. Con ello queda perfectamente establecido el orden. El comando que debe ejecutarse en primer lugar se carga en la unidad de decodificación de la línea Uy el que le sigue en la de la línea V. Si en Dl se determina que es posible una ejecución simultánea de ambos comandos, éstos van pasando paralelamente por las diferentes fases de sus respectivas lineas. De lo contrario el comando que se encuentra en la línea U pasa ala siguiente etapa de la misma mientras que el comando que se encuentra en la unidad decodificadora de la línea V pasa, sencillamente, a ser el siguiente comando a ser ejecutado en la línea u. *

Microcode comandos procesador

es una especie de software operativo del procesador com~leios de lenauaie máquina a través de diferentes

que

gestiona unidades

la ejecución de ejecución

de del

La eficiencia del principio de línea solo se mannene con la alimentación continua de la misma con nuevos comandos, pues sólo entonces, cuando las diferentes etapas de la línea están permanentemente llenas, se obtiene la sensación de que hay diferentes comandos que pueden ser ejecutados en un solo pulso. Por este motivo, en la primera etapa de las dos líneas se intercala un tqprefetch buffer>> que carga el siguiente comando para la línea de la memoria o del propio caché del procesador. Incluso estos «procedimientos de carga>, sirven de poco cuando el procesador debe ejecutar un comando de salto. Además en este caso la ejecución del programa no continúa con el siguiente comando, sino con otro completamente diferente. La consecuencia es que la ejecución del comando que se encontraba cargado en la línea ya punto para ser ejecutado debe interrumpirse y debe cargarse otro comando en la línea. Así, se suceden algunos pulsos antes de que el primer comando tras el salto abandone la línea. El procesador Pentium combate el problema de los comandos de salto con ayuda de un Branch Target Buffer (BTB). Este entra en juego en la fase Dl de la ejecución de un comando para todo tipo de comandos de salto tipo NEAR, tanto para saltos condicionados o no condicionados como para llamadas a procedimientos. Si el procesador encuentra en la etapa Dl uno de estos comandos, utiliza su dirección en la memoria para buscar este comando en el BTB, puesto que con cada ejecución de uno de estos comandos de salto el procesador junto a la dirección del comando también guarda en el BTB la dirección del destino del salto en cuestión. Si el comando ya ha sido ejecutado alguna vez y está por ello inventariado en el búffer el procesador deduce que el salto debe producirse una vez más. Entonces no se carga en la línea el comando que sucede al del salto, sino el de la dirección de destino. Si todavía no se ha dado el comando de salto, en la línea se carga, como es habitual, el siguiente comando. Si el salto debe o no debe producirse en ese instante se determina como muy tarde en la fase EX de la línea. Si el procesador ha dado con la dirección correcta en el BTB, el comando correspondiente, tras el comando de salto, se encuentra preparado en la línea por lo que la ejecución del programa puede ser reiniciada inmediatamente. En este caso, incluso la ejecución de un salto condicional precisa únicamente de un solo pulso. Si el procesador no acierta en su pronóstico, la línea se carga con comandos incorrectos, por lo que debe practicarse un eflushn. Es decir, debe interrumpirse la ejecución de los comandos que se encuentran en la línea y volver a cargar ésta con nuevos comandos. En este caso, para la ejecución de un comando de salto se precisa no uno sino un mínimo de tres pulsos.

tante sobre la estructura del caché del procesador Pentium y le resulta suficiente, deja a los profanos más bien extrañados. , asociatividad de dos vías», y son conceptos con los que apenas se entra en contacto en el trabajo diario con un PC. El resto de este capítulo está dedicado por este motivo a los fundamentos del modo de funcionamiento de un caché de un procesador en general y a cómo se lleva a cabo el caché en un Pentium. Los conocimientos necesarios para llevara cabo la programación propia son complicados de adquirir pero quien quiera sacarle todo el jugo a un Pentium no debe pasar por alto el caché. Dado que el On Chip Cache no es una novedad del Pentium sino que ya vio la luz del mundo Intel con el i486, también será tratado someramente en este capítulo sobre el caché del procesador i486.

Cometido de un caché

l

Caché de procesador, caché de disco duro, caché de fuente, caché de CD-ROM: con este concepto de caché se engloban diferentes mecanismos bajo la idea de acelerar el acceso a determinados datos e informaciones, para lo cual una parte de ellos se mantiene en una memoria, a la cual se puede acceder más rápidamente que a los correspondientes soportes de la información. Para explicarlo de una manera clara, pongamos por ejemplo un caché de disco duro que mantiene en memoria RAM los sectores recién leídos de un disco duro, para poder así suministrarlos directamente desde la memoria al usuario ante una nueva solicitud de lectura, en vez de tener que volver a molestar al disco duro. Y dado que desde el punto de vista de la velocidad de acceso, un disco duro es unas cien veces más lento que la memoria, de esta manera se puede ahorrar mucho tiempo. Mientras que los discos duros, CD-ROM y cachés de fuentes utilizan de nuevo la memoria RAM del ordenador como «memoria rápida>>, el caché del procesador funciona de manera muy diferente, pues la memoria RAM suministra los datos y los comandos de forma muy lenta al procesador y por ello se intercala un caché de procesador. En este caché se conservan las posiciones de memoria con las que ha tenido contacto el procesador en sus últimos accesos a memoria. Así, ante un nuevo acceso, no tienen que ser cargadas de nuevo de la lenta memoria principal, sino que pueden ser utilizadas directamente desde el rápido caché del procesador. Sin embargo el caché del procesador no es, y valga la redundancia, un c&hé del procesador pues hay una gran diferencia entre lo que se conoce como caché del procesador primario y del secundario. En este contexto, se habla de «first leve1 cache> y asecond leve1 cache>)

RAM, instalada en la mayoría de PC como memoria principal, de respuesta de 70 ns, 80 ns o 100 ns.

tiene unos tiempos

Mientras la memoria de caché secundario se encuentra físicamente fuera de la CPU, un acceso al caché primario se efectúa sobre la memoria instalada directamente en la CPU. De ella la CPU puede leer directa y rápidamente, como si fueran registros. Es por ello que lo mejor sería poder situar toda la memoria de caché de un sistema directamente sobre el procesador o más aún, toda la memoria RAM, pero en el estado actual de la tecnología de procesadores esto está totalmente excluido, además de que esta anemoria de lujow resulta muy cara .. p ;

:.:,

,,.,

,...

‘.:‘::.::... s&:--.: i:



./::..,;. i(i:‘;;:.::;! :’ .:il:’ :,,.,, :.. Write Thru Cache es la variante más simple, pues en accesos de lectura sólo puede establecer comunicación al mismo

pal habría

otro

valor

totalmente

diferente.

Junto al sencillo procedimiento Write Thru, los procesadores Intel a partir del modelo 80486 soportan un procedimiento ligeramente modificado que se denomina eBuffered Write Thrw. Para acelerar la velocidad del acceso de escritura en la memoria se ha dotado al first leve1 cache del procesador con un búffer de escritura adicional, cuatro para el 486. Si se ha de escribir una serie de datos en la memoria, el caché primero los escribe en uno de estos búffers de escritura, lo cual permite a la CPU volver inmediatamente al trabajo pues esta memoria, al igual que la memoria de caché, es rápidamente direccionable. Mientras la CPU prosigue con sus asuntos, el caché, de manera autónoma, escribe el contenido del búffer de escritura en la memoria principal tan pronto como el bus se encuentra libre. Mientras este búffer no sea desbordado porque la CPU quiera escribir datos en la memoria más rápidamente de lo que pueden ser evacuados del búffer, el acceso de escritura a la memoria principal. desde el punto de vista de la CPU, se producirá sin ningún tipo de retraso. Wnte El procedimiento Write Back representa la competenaa del procednniento Thru. En lo que se refiere a accesos de lectura, un caché Write Back se comporta igual que un caché Write Thru pero en cuanto a accesos de escritura existe una gran diferencia. Si la información que debe escribirse en la memoria principal se encuentra en el caché, primero se actualizará únicamente en el caché y sólo se transferirá a la memoria si la correspondiente posición de memoria debe ser eliminada del caché debido a que, por un nuevo acceso de lectura, la CPU precisa espacio libre en el caché. Si una posición de memoria cambia de valor a menudo, con este procedimiento se ahorran los relativamente lentos accesos de escritura a la memoria principal hasta el momento en que la posición de memoria deba abandonar el caché. Y para que incluso esto no sea demasiado lento, se instala de nuevo una especie de búffer de escritura (llamado Castoff Buffer) en el que primero se guardan los datos para posteriormente. y mientras la CPU vuelve a sus quehaceres, transferirlos a la memoria

Arquitectura

del caché

Normalmente, las memorias ae cache se orgamzan en las denommadas a, que no significa otra cosa que el hecho de que pueden ser accedidas simultáneamente por tres fuentes diferentes. Dos de estas fuentes son las líneas U y V y la tercera se usa para el bus snooping cuando se utiliza para determinar si una determinada dirección se encuentra en el caché. Cada línea de caché en el caché de datos puede conmutarse vía hardware o vía software entre los modos Write-Thru y Write Back. Detrás de esto se esconde la comprensión de que, por razones de prestaciones, tiene absoluto sentido operar en modo Write Back pero que, en determinadas zonas de la memoria, esto puede conllevar problemas. Piénsese sólo en la RAM de vídeo de una tarjeta gráfica. Si esta zona de memoria se trata en modo Write Back, la información pasará a la RAM de vídeo con retrasos, lo que evidentemente influirá en la configuración de la imagen en pantalla. En suma, la arquitectura del caché en el Pentium es mucho más compleja que la de su predecesor, el 486, donde cabe destacar la línea doble de enteros y la concepción del Pentium para ser instalado en sistemas multiprocesador. Con todo, el caché constituye un importante motor para las sobresalientes capacidades del Pentium.

1.8.3 La unidad de coma flotante La unidad de coma flotante del Pentium está, como ya sucedía en el chip pero, con respecto a su predecesora se ha mejorado cuanto a prestaciones se refiere. Esto queda demostrado en la aue se comoaran los tiempos de ejecución de un comando en

en el 486, integrada ostensiblemente en siguiente tabla en la coma flotante en un

De entre los anteriores comandos, el comando FXCH tiene una especial significación puesto que se utiliza con mucha frecuencia en la programación en coma flotante. La razón se encuentra en el modo en que están organizados los ocho registros de coma flotante en todos los procesadores Intel y los coprocesadores numéricos. Se manipulan como si de una pila se tratara de modo que la mayoría de comandos de coma flotante utilizan la cima como uno de sus argumentos y depositan ahí sus resultados. La consecuencia es que un programa tiene que añadir y quitar continuamente valores del elemento superior de esta pila de coma flotante, misión encomendada al comando FXCH, de ahí que se utilice este comando con mucha más frecuencia que cualquier otro comando de coma flotante. Esta es también la razón por la que la ejecución de este comando se ha acelerado sensiblemente en el Pentium con respecto al 486. Ahora sólo precisa un pulso y, en ocasiones, ininguno! Esto es posible porque la unidad de coma flotante puede ejecutar paralelamente al comando FXCH otro comando de coma flotante. Sin embargo éste es el único caso en que ambas líneas de coma flotante pueden estar ocupadas simultáneamente con la ejecución de un segundo comando de coma flotante. El fundamento para la ejecución paralela de cualquier comando de coma flotante y un comando FXCH lo constituye la línea de coma flotante superescalar de ocho etapas del procesador que, al igual que la línea de enteros, dispone de dos líneas de trabajo paralelas. En realidad, la línea de coma flotante comparte sus primeras cinco etapas incluso con la línea de enteros, sólo que necesita tres etapas más para poder completar un comando de coma flotante.

1

Decode 1 Decode 2 Execute Ejecución coma Ejecución coma Write File Error Repoti

tlotante flotante

Nwel Nivel

1 2

ejecución del comando de coma flotante se completa en la etapa ER en la que se avisa de la aparición de un posible error en la operación y en la que el registro de estado de coma flotante es actualizado al nuevo estado.

1.8.4 Características

adicionales

junto a los tres centros de gravedad que constituyen la arquitectura superescalar, el caché de primer nivel y la unidad de coma flotante, el Pentium dispone de una larga serie de características adicionales que le destacan de sus antecesores. Estas son l

La paginación en modo protegido y modo virtual páginas de 4 KByte sino que puede operara elección de hasta 2 MByte o 4 MByte. Esto ayudará a reducir paginación de sistemas multitarea.

86 ya no está vinculada a con páginas de un tamaño la laboriosa gestión de la

-

El l’entium dispone de un System Management Mode, que ya había sido implementado en algunas versiones especiales del 486. Esto resulta útil cuando se quiere integrar un procesador Pentium bajo el concepto de economía de con5Unl”.

-

La función «Redundancy Checkn permite el funcionamiento paralelo de un segundo procesador Pentium, comprobando su correcto modo de funcionamiento recíproco. Esto permitirá el desarrollo de sistemas tolerantes a los errores.

-

Posibilidades da de fallos hardware.

*

En la monitoriración de los programas.

mejoradas complejos

en el debugging y el debugging de prestaciones

que soportan, por ejemplo, la búsquemediante componentes adicionales de el l’entium

mide

el avance

de la ejecución

2.1 Programación

del sistema

con QuickBasic

Basic no es precisamente el mejor lenguaje para la programación del SIstemd, ya que el Basic no se adapta tan bien alas posibilidades del hardware del ordenador como el Pascal y sobretodo el C, y no es pues, en vano que a menudo se lo conoce por una versión mejorada del lenguaje Assembler. A pesar de ello, es posible la programación del sistema en Basic, cuando no es posible programar con Pascal o C. Así por ejemplo, en muchos campos de aplicación puede resultar un inconveniente la ausencia de un concepto indicador. Esta esa su vez la razón por la cual en este libro aparecen menos programas de ejemplo en Basic que en Pascal o C. Pero nosotros le mostramos las posibilidades de cada lenguaje En este capítulo se presentan todos los comandos y todas las tecmcas que usted puede utilizar para la programación del sistema. Para ello nos hemos referido al compilador de QuickBasic de Microsoft que se ha establecido como estándar en el campo de los PC y que no debe temer competencia alguna. No obstante, bajo el QBasic, el nuevo intérprete Basic que Microsoft suministra desde la versión 5.0 del DOS, no es posible ejecutar todos los programas, ya que no dispone de un comando que permita activar interrupciones, yen cambio QuickBasic sí que dispone de él.

2.1.l Los tipos de datos de QuickBasic Quien activa funciones de interrupción, se relaciona siempre con los tipos de datos del procesador, ya que en lenguaje de máquina, las funciones de interrupción aparecen escritas y en este plano no se dispone de ningún otro tipo de datos. Por esta razón, quien desee trabajar con programación del sistema en QuickBasic, deberá elaborar los tipos de datos de QuickBasic sobre los del procesador. La siguiente tabla muestra los tipos correspondientes:

BYTE WORD DWORD

i

TabLz7 npos de‘Mas de QuickBasicque sc uidizcn en i‘l p,“pmurm

Jrl >i~*c,liii

Debido a que QuickBasic no reconoce ningún carácter indivldual ichar en Pascal y en C), así como tampoco ningún byte individual, deberá ayudarse mediante el tipo string*l, que consiste en una cadena o serie de caracteres (string) de la lon-

Por otra parte, función ASC:

el valor

de tal byte sólo se puede

recuperar

mediante

la ayuda

de la

3IM oyte AS STRING * : byte = CHRS(i3) IF IF

ASC(byte) = IS IHZN byte = 13 THEN PRXT

PRINT 13

13

‘SSEO ‘error:

está bien «tqm de

datos

lncor;pailDles>>

El uso de los tipos de datos integer y long es igualmente un poco embarazoso si se deben elaborar WORD y DWORD mediante su ayuda. En QuickBasic, ambos tipos deben contener signos. Esto significa que QuickBasic considera cada bit superior com« signo, y por tanto considera un número como negativo cuando se coloca a uno el bit. Supongamos, por ejemplo, que obtenemos una WORD (palabra) de la función de interrupción, tras llamar una función, y que en esta WORD se encuentra el bit 15 (valor > 32768). En tal caso, QuickBasic considerará este número negativo, y usted se sorprenderá cuando aparezca este número en la pantalla. El mismo problema ocurre con lona, si bien en este caso es menos frecuente, porque los números en los cuales se coloca el bit 31 deben ser muy elevados, yen la programación del sistema no suelen aparecer números muy elevados. No obstante, respecto a w~te@xr usted se puede ayudar, convirtiéndolo en un número de coma flotante, mediante una pequeña función antes de continuar el proceso y así de esta manera puede tener en cuenta el bit de signo. De este modo ocurre en la siguiente función con el nombre MakeWord!, que aparece en varios ejemplos de programación en este libro: FUNCTION

YaYeWxd&

IF N”mrx < C IHEN M,keWord = 655366 ELSE Mak¿Word \lrmerd suc IF E’IC P!,NC’:Ck

(nomero

AS INTEGER/

T Nume~r,

A &chd función se Ir trrlbpdbd y consecuentemente obtendrá el bit 31, y no el bit 15, quien

el integer, ayo bit 15 aparece colocado si es posible, un lon8 que siempre será positivo, ya que ahora es le indica el signo.

de longitud variable. Y las direcciones de las cadenas son necesarias si se deben traspasar en una función del DOS o del BIOS. Si usted declara en sus programas ilm s as string

una cadena de longitud

fija con la instrucción

* 20

por ejemplo, QuickBasic reservará en la memoria 20 bytes libres, cuyo contenido en un principio no está definidn Mediante rl comando s = @C-Interno» por ejemplo, se grabarán dichos bytes con los códigos ASCII correspondientes a cada signo, de manera que el resto de la cadena automáticamente aparecerá lleno de espacios en blanco. No obstante, ahora para crear el byte NUL, ya no bastará con el comando s = s + chrS( 0 1 ano que antes deberá encontrar el últuno signo con la ayuda del comando FORNEXT, y finalmente deberá colocar detrás el byte NUL con la ayuda de el comando MID$. DIM s AS STRING* 20 DIM 1 AS INTEGER

i = LEN(s) - 1 WHILE (i > 0) AND (MID$(s, i, 1) - « «J 1=1-l WEND IF 1 = 0 THEN1 = 1 MID$(s, 1) = CHR$(O) Si usted ya conoce la cadena y no deja que sea el usuario quien entre los datos, puede simplificar el proceso incluyendo el byte NUL en el comando de la cadena: s = lo constituye una cadena de longitud fija, ya que éste es el camino más sencillo para reservar un númerc determinado de bytes libres. Los siguientes elementos de la estructura de QuickBasic corresponden, respecto a sus tipos de datos, a los distintos componentes de la estructura del DOS: los BYTE se colocan sobre la string*l, WORD sobre intcgevs y DWord sobre longs. LOS nombres de cada campo no son importantes, y por tanto se pueden designar libremente, ya que no influyen sobre la elaboración de la estructura, cuya reproducción correcta depende de la estructura en sí.

Si usted desea consultara un bit determinado, prmwro debera saber su peso. Usted ya sabe que el bit 0 tiene el peso 1, el bit 1 tiene el peso 2, el bit 2 tiene el peso 4, y así sucesivamente hasta el bit 7, cuyo peso es de 128. Si usted desea saber si se trata de un subdirectorio, debe introducir el peso del bit 4, cuyo valor es 16. Ahora pues, debe colocar el resto de bits del byte de atributo a 0, de manera que sólo quede el bit 4, y de esta manera usted puede determinar si dicho bit está a uno o no. Mediante una operación Y binaria no le resultará ningún problema, ya que Y apaga todos los bits que no aparecen en la denominada anáscara Ya>.Es posible ejecutar una fusión Y en QuickBasic con la ayuda del operador AND. La expresión AttnbutByte

AND

16

permite que sólo aparezca el bit 4 y muestra el resultado 16, en el caso de que dicho bit esté a uno. En caso contrario, el resultado será 0. Esta expresión se puede colocar dentro de una orden IF de la siguiente manera:

5 usted desea comprobar varios blts a la VW, la apelación es un poco mas complicada. En este caso, se deben sumar los pesos de los distintos bits. Supongamos, por ejemplo, que usted desea saber si el archivo está oculto y si se trata de un

formular

la pregunta

de manera

distinta:

IF j ( AttributByte AND 6 j = 6 j THEN 1 oculto y sistema ELSE ‘no ( oculta y sistema , ENDE No obstante, a menudo no sólo tie trata de obtener los bits, sino también de colocarlos cuando por ejemplo a una función del DOS o del BIOS se le deba traspasar un campo de bits. En tal caso, el peso del bit es también el punto central, aunque ahora la operación binaria es 0 en lugar de Y. En QuickBasic se representa con el operador OR. La siguiente orden, por ejemplo. enciende el bit 3 en el bvte de atributo. AtributByte

= AtributByte

También es posible corno por ejemplo: AtnbutByte En ambas debemos Y, si bien Según las operador 0 al bit 5,

sumar

OR 8

los pesos

= AtributByte

cuando

se deban

colocar

varios

bits a la vez,

OR j 8 + 16 1

expresiones, se colocó el bit deseado en 1. Pero, ¿qué ocurre cuando colocar un bita O? En este caso debe utilizarse nuevamente la operación de manera distinta, ya que sólo se debe apagar el bit deseado y no todos. leyes de la lógica binaria, es preciso invertir el peso con la ayuda del NOT para poder obtener el resultado esperado. Así pues, para asignar un el comando debe ser el siguiente:

AtnbutByte

= AtrlbutByte

En este caso, también la siguiente manera: AtnbutByte

es posible

= AtrlbutByte

AND NOT(32) apagar

varios

bits de una sola vez, procediendo

de

AND NOTI 32 + 8 )

No obstante, lo campos de bits no están formados por bits separados, sino que a veces están formados por grupos de bits, cuyos bits individuales, en conjunto, tienen un valor determinado. Un ejemplo de este tipo lo constituye el campo de fecha en el registro del directorio de un archivo. Este contiene 3 grupos de bits, los cuales hacen referencia al día, al mes y al año en que se creó ose modificó por última

El día se puede determinar siguiendo utilizando la operación Y:

el método

tan simple

descrito

anteriormente,

Día = CampoFecha AND ( 1 + 2 + 4 + 8 ) No obstante, para el mes ya no sirve la operación Y, ya que es necesario desplazar 5 bits hacia la derecha el grupo de bits aislado para poder obtener el número del mes. Con QuickBasic, esto sólo es posible dividiendo antes cada valor. El dividendo será entonces 2 elevado al número de posiciones de bits que queramos desplazar hacia la derecha el valor. Así pues, el mes y el año se obtienen mediante las siguientes órdenes: Mes = ( CampoFecha AND ( ?2 + 64 + 128 + 256 ) ) \ 32 ‘2 elevado 5 = 32 Año = j CampoFecha AND j 512t1024t2048t4096t8132t16384t32768 1 ) \ 512 De cualquier forma, menos en la segunda del MakeWord.

volverán a surgirle problemas a causa del bit del signo, por lo orden, y es por ello que en este caso se recomienda la función

Año = j MakeWurdiCampoFecha))

RND ó51)24& \ 512

Q por el contrario, usted desea desplazar bits hacia la izquierda en lugar de hacerlo hacia la derecha, deberá multiplicar en lugar de dividir. Así pues, por ejemplo, en el caso de que usted desee diseñar un campo de fecha a partir de un día, un mes y un año determinados, deberá entrar: CampoFecha = Día + j Mes * 32 j + j Año * 512 /

2.1.2 Llamada de interrupciones QuickBasic dispone de los 2 comandos, interrupt e interruptX, para llamar interrupciones de software, con los cuales es posible llamar cualquiera de los 256 interrupciones del procesador Intel. De todas formas, estos comandos no se encuentran propiamente en el compilador de QuickBasic, sino en la librería QuickLibrary QB.QLB que se proporciona, por lo que deberá arrancar QuickBasic con el parámetro /L, si usted desea instalar estos comandos. Ya que mediante ambos comandos es posible invocara cualquiera de las interrupciones del software, también permiten activar la interrupción &H21, a través del cual se llegan a las más de 200 funciones distintas del DOS-API. DOS-Al’1 son las

Acceso

al registro

del procesador

LOS parámetros InReg y AusReg que atiende el comando INTERRUI’T son del tipo RegType, que representa una estructura y viene definida por QB.BI. Se utiliza para poder aplicar los distintos registros del procesador para un programa de Basic. El comando INTERRUPT carga de la estructura InRrg los distintos registros del procesador en la llamada de interrupción con los valores dados, mientras que tras la llamada de interrupción se establece la estructura AusReg, cuyos campos individuales se cargan con el contenido de los registros del procesador. Es por ello que InReg se debe cargar con los parámetros de entrada de la función de interrupción correspondiente, antes de la llamada de INTERRUPT, mientras que AusReg facilita los valores de salida de dicha función. Tal como permite entrever la definición de dicha estructura reflejan los registros

de RegType, las distintas variables dentro del procesador del mismo nombre.

TYPE F,eg?“ype ax AS bx AS CX AS dx AS bp AS si AS dl AS flags AS END TYPE

INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER

De cualquier forma, medwxtr Reglypr SC abarcan sólo los registros los de 8 bits. Así pues, si usted desea acceder a un registro de proseguir a través del registro de 16 bits. En la siguiente secuencia por ejemplo, se ha cargado el valor &hl B en el registro AH, habiendo su valor su valor por 256, y por lo tanto, deplazándolo 8 posiciones izquierda.

de 16 bits y no 8 bits, deberá de comandos, multiplicado de bit hacia la

DIM Regs AS RegTy&x? 9egs.J.X = 6hlB * 256 :ALL

INTERRUPT(

&hxyz,

Regs,

Regs

1

AL tendrá así el valor 0. Si usted no desea utilice un paso más inteligente para activar

‘la

siguente

llamada

de

Interrupción

que así ocurra, le recomendamos el valor deseado mediante OR.

que

,

1 /

CALL

IYTERROPTI

&IX~L,

Regs,

ìegs

)

>la

siguente

Ilarmoa

de

mterrupclon

!mte mismo principio puede aplicarse al resto de registros generales. Así de sencillo resulta proporcionar el contenido de los distintos registros de 8 bits mediante la llamada de interrupción. Si usted está interesado en el Hi-Byte, divida los registros de 16 bits entre 256; si está interesado por el Lo-Byte, sepa que existe la posibilidad de apagar el Hi-Byte mediante una operacihn ANr>. DII? Regs AS RegT~,pe CALL I”ITE?YúPT( &nxyr, Reqs, 9egs j ‘la PRINT l-Yí elA AT - T -$A AI -'T -*TA A-3: -3'1 A &T -6~ SA LS I;-áA k¿!UL> *