Articulo de referencia

Línea A20

El área de memoria alta solo está disponible en modo real en los procesadores 80286 si la puerta A20 está habilitada. La línea A20 , o línea de dirección 20 , es una de las líne...

El área de memoria alta solo está disponible en modo real en los procesadores 80286 si la puerta A20 está habilitada.

La línea A20 , o línea de dirección 20 , es una de las líneas eléctricas que componen el bus del sistema de un sistema informático basado en x86 . La línea A20 en particular se utiliza para transmitir el bit 21 del bus de direcciones .

Un microprocesador normalmente tiene un número de líneas de dirección igual al logaritmo en base dos del número de palabras en su espacio de direcciones físicas . Por ejemplo, un procesador con 4  GB de espacio físico direccionable por byte requiere 32 líneas (log 2 (4  GB)  = log 2 (2 32 B) = 32), que se denominan A0 a A31. Las líneas se nombran según el número en base cero del bit en la dirección que están transmitiendo. El bit menos significativo es el primero y, por lo tanto, se numera como bit 0 y se señaliza en la línea A0. A20 transmite el bit 20 (el bit 21) y se activa una vez que las direcciones alcanzan 1  MB, o 2 20 .

Descripción general

Los procesadores Intel 8086 , Intel 8088 e Intel 80186 tenían 20 líneas de dirección, numeradas de A0 a A19; con estas, el procesador podía acceder a 2²⁰ bytes, o 1 MB. Los registros de direcciones internas de dichos procesadores solo tenían 16 bits. Para acceder a un espacio de direcciones de 20 bits, una referencia de memoria externa se componía de una dirección de desplazamiento  de 16 bits sumada a un número de segmento de 16 bits , desplazado 4 bits a la izquierda para producir una dirección física de 20 bits. La dirección resultante es igual a segmento × 16 + desplazamiento . [ 1 ] Hay muchas combinaciones de segmento y desplazamiento que producen la misma dirección física de 20 bits. Por lo tanto, había varias maneras de direccionar el mismo byte en la memoria. [ 2 ] Por ejemplo, aquí hay cuatro de las 4096 combinaciones diferentes de segmento:desplazamiento, todas haciendo referencia al byte cuya dirección física es 0x000FFFFF (el último byte en un espacio de memoria de 1 MB):   

F000:FFFF
FFFF:000F
F555:AAAF
F800:7FFF

Referenciada de la última manera, un aumento de uno en el desplazamiento produce F800:8000 , que es una dirección correcta para el procesador, pero como se traduce a la dirección física 0x00100000 (el primer byte sobre 1 MB), el procesador necesitaría otra línea de dirección para acceder realmente a ese byte. Como no hay tal línea en la línea de procesadores 8086, el bit 21 anterior, mientras está establecido, se descarta, lo que hace que la dirección F800:8000 "se envuelva" [ 1 ] y apunte realmente a la dirección física 0x00000000 . 

Cuando IBM diseñó la máquina IBM PC AT (1984), decidió utilizar el nuevo microprocesador Intel 80286 de mayor rendimiento . El 80286 podía direccionar hasta 16  MB de memoria del sistema en modo protegido . Sin embargo, se suponía que la CPU debía emular el comportamiento de un 8086 en modo real , su modo de arranque, para poder ejecutar sistemas operativos y programas que no estaban escritos para el modo protegido. Sin embargo, el 80286 no forzaba la línea A20 a cero en modo real. Por lo tanto, la combinación F800:8000 ya no apuntaba a la dirección física 0x00000000 , sino a la dirección 0x00100000 . Como resultado, los programas que dependían del desbordamiento de direcciones ya no funcionaban. Para mantener la compatibilidad con dichos programas, IBM decidió corregir el problema en la placa base .

Esto se logró insertando una puerta lógica en la línea A20 entre el procesador y el bus del sistema, denominada Puerta-A20 . La Puerta-A20 puede habilitarse o deshabilitarse mediante software para permitir o impedir que el bus de direcciones reciba una señal de A20. Se configura como no transitable para la ejecución de programas antiguos que dependen del desbordamiento. Al arrancar, la BIOS primero habilita la Puerta-A20 cuando realiza el conteo y la prueba de toda la memoria del sistema, y ​​luego la deshabilita antes de transferir el control al sistema operativo.

Originalmente, la puerta lógica era una puerta conectada al controlador de teclado Intel 8042. [ 1 ] Controlarla era un proceso relativamente lento. Desde entonces, se han añadido otros métodos para permitir una multitarea más eficiente de programas que requieren este bucle con programas que acceden a toda la memoria del sistema. Existen varios métodos para controlar la línea A20. [ 3 ]

Desconectar A20 no abarcaría todos los accesos a memoria superiores a 1  MB, sino solo aquellos en los rangos de 1-2  MB, 3-4  MB, 5-6  MB, etc. El software en modo real solo se ocupaba del área ligeramente superior a 1  MB, por lo que la línea Gate-A20 era suficiente.

Habilitar la línea Gate-A20 es uno de los primeros pasos que realiza un sistema operativo x86 en modo protegido durante el proceso de arranque, a menudo antes de que el control se haya transferido al kernel desde el bootstrap (en el caso de Linux , por ejemplo).

El modo virtual 8086 , introducido con el Intel 80386 , permite simular el desbordamiento de la puerta A20 mediante el uso de la memoria virtual del procesador; la memoria física puede asignarse a múltiples direcciones virtuales. De este modo, la memoria asignada al primer megabyte de memoria virtual puede volver a asignarse al segundo megabyte. El sistema operativo puede interceptar los cambios en la puerta A20 y realizar los cambios correspondientes en el espacio de direcciones de memoria virtual, lo que también hace irrelevante la eficiencia de la conmutación de la línea de la puerta A20.

Puerta A20

El control de la línea A20 fue una característica importante en una etapa del desarrollo de la arquitectura del IBM PC, ya que añadía acceso a 65.520 bytes adicionales (64  KB − 16  bytes) de memoria en modo real , sin cambios significativos en el software.

En lo que podría considerarse un "truco", la compuerta A20 era originalmente parte del controlador del teclado en la placa base, que podía abrirla o cerrarla dependiendo del comportamiento deseado. [ 4 ]

Para mantener la compatibilidad total con el Intel 8086 , la puerta A20 permaneció en las CPU de Intel hasta 2008. [ 5 ] Dado que la puerta se cerraba inicialmente justo después del arranque, los sistemas operativos en modo protegido solían abrir la puerta A20 al principio del proceso de arranque para no volver a cerrarla. Dichos sistemas operativos no tenían motivos de compatibilidad para mantenerla cerrada y, al abrirla, obtenían acceso a todo el rango de direcciones físicas disponibles.

El Intel 80486 y el Pentium añadieron un pin especial llamado A20M# , que al activarse a nivel bajo fuerza a que el bit 20 de la dirección física sea cero para todos los accesos a la caché integrada o a la memoria externa. Esto era necesario, ya que el 80486 introdujo una caché integrada y, por lo tanto, enmascarar este bit en la lógica externa ya no era posible. El software aún necesita manipular la puerta lógica y debe seguir interactuando con los periféricos externos (el chipset ) para ello. [ 6 ]

La Guía de diseño del sistema PC 2001 elimina la compatibilidad con la línea A20: "Si la lógica de generación A20M# todavía está presente en el sistema, esta lógica debe terminarse de manera que las escrituras de software en el puerto de E/S 92, bit 1, no resulten en que se active A20M# en el procesador." [ 7 ]

La compatibilidad con la puerta A20 se modificó en la microarquitectura Nehalem (algunas fuentes afirman erróneamente que se eliminó). En lugar de que la CPU disponga de un pin A20M# dedicado que reciba la señal para enmascarar o no el bit A20, se ha virtualizado, de modo que la información se envía desde el hardware periférico a la CPU mediante ciclos de bus especiales. Desde el punto de vista del software, el mecanismo funciona exactamente igual que antes, y el sistema operativo aún debe programar el hardware externo (que a su vez envía los ciclos de bus mencionados a la CPU) para deshabilitar el enmascaramiento de A20.

Intel ya no admite la puerta A20, a partir de Haswell . La página 271 del Manual del programador de sistemas Intel, vol. 3A, de junio de 2013, indica: "La funcionalidad de A20M# se utiliza principalmente en sistemas operativos antiguos y no en sistemas operativos modernos. En los procesadores Intel 64 más recientes , es posible que A20M# no esté presente". [ 8 ]

Manipulador A20

El controlador A20 es un software de gestión de memoria de IBM PC que controla el acceso al área de memoria alta (HMA). Los gestores de memoria extendida suelen proporcionar esta funcionalidad. Los controladores A20 reciben su nombre de la línea de dirección número 21 del microprocesador, la línea A20.

En DOS , los gestores HMA, como HIMEM.SYS, tienen la "tarea adicional" de administrar la A20. HIMEM.SYS proporcionaba una API para abrir y cerrar la A20. El propio DOS podía usar esta área para algunas de sus necesidades de almacenamiento, liberando así memoria más convencional para los programas. Esta funcionalidad se habilitaba mediante las directivas DOS=HIGH`or` HIDOS=ONen el archivo de configuración CONFIG.SYS .

Programas afectados

Desde 1980, el envoltorio de direcciones fue utilizado internamente por 86-DOS y MS-DOS  para implementar el punto de entrada DOS CALL 5 en el desplazamiento +5 a +9 (que emula el punto de entrada de la API BDOS CALL 5 de estilo CP/M-80 en el desplazamiento +5 a +7) en el Prefijo de Segmento de Programa (PSP) (que se asemeja parcialmente a la página cero de CP/M-80 ). [ 9 ] [ 10 ] Esto fue utilizado, en particular, por programas traducidos automáticamente de CP/M-80 a través de traductores de lenguaje ensamblador [ 9 ] como TRANS86 de Seattle Computer Products . [ 11 ] El manejador CALL 5 al que se refiere este punto de entrada reside en la dirección física de la máquina 0x000000C0 (superponiéndose así a los cuatro bytes del punto de entrada de la rutina de servicio de interrupción reservados para INT 30h y el primer byte de INT 31h en la tabla de vectores de interrupción del modo real x86 ). [ 12 ] [ 13 ] [ 14 ] Sin embargo, por el diseño de CP/M-80, que cargaba el sistema operativo inmediatamente por encima de la memoria disponible para que se ejecutara el programa de aplicación, la dirección de destino de 16 bits del 8080 / Z80 almacenada en el desplazamiento +6 a +7 en la página cero también podía interpretarse deliberadamente como el tamaño del primer segmento de memoria. [ 9 ] Para emular esto en DOS con su esquema de direccionamiento segmento:desplazamiento del 8086, el desplazamiento de 16 bits del punto de entrada de llamada lejana tenía que coincidir con este tamaño de segmento (es decir, 0xFEF0 ), que se almacena en el desplazamiento +6 a +7 en el PSP, superponiéndose a partes de la CALL 5. [ 13 ] [ 14 ] La única forma de conciliar estos requisitos era elegir un valor de segmento que, cuando se suma a 0xFEF0 , resulta en una dirección de 0x001000C0 , que, en un 8086, se despliega a 0x000000C0 . [ 15 ] [ 12 ] [ 14 ]     

A20 debía estar deshabilitado para que se produjera el desbordamiento y funcionaran los programas de DOS que utilizaban esta interfaz. Las versiones más recientes de DOS que pueden reubicar partes de sí mismas en el HMA, normalmente crean una copia del punto de entrada en FFFF:00D0 en el HMA (que de nuevo se resuelve en la dirección física 0x001000C0 ), de modo que la interfaz pueda funcionar independientemente del estado de A20. [ 14 ] [ 16 ]

Un programa que utiliza la  interfaz CALL 5 es la versión para DOS del compilador Small-C . [ 17 ] Además, la utilidad SPELL de Microsoft Word 3.0 (1987) es uno de los programas que dependen de la  configuración de la interfaz CALL 5. [ 18 ] PC-NFS (1993) de Sun Microsystems también requiere la corrección de CALL 5. [ 16 ] 

Además, para ahorrar espacio de programa, [ 1 ] algunos programadores de BIOS y DOS usaban un truco , por ejemplo, para tener un segmento que tuviera acceso a los datos del programa (como de F800:0000 a F800:7FFF , apuntando a las direcciones físicas 0x000F8000–0x000FFFFF ), así como a los datos de E/S (como el búfer del teclado) que se encontraban en el primer segmento de memoria (con direcciones F800:8000 a F800:FFFF apuntando a las direcciones físicas 0x00000000 a 0x00007FFF ).

Este truco funciona siempre y cuando el código no se ejecute en la memoria baja , los primeros 64  KB de RAM, una condición que siempre se cumplía en las versiones antiguas de DOS sin capacidades de carga alta.

Con el núcleo de DOS reubicado en áreas de memoria más altas, la memoria baja quedó cada vez más disponible para los programas, lo que provocó que aquellos que dependían del desbordamiento fallaran. [ 19 ] Los cargadores ejecutables en versiones más recientes de DOS intentan detectar algunos tipos comunes de programas afectados y parchearlos sobre la marcha para que funcionen también en memoria baja [ 20 ] o cargarlos por encima de los primeros 64  KB antes de pasarles la ejecución. [ 20 ] Para los programas que no se detectan automáticamente, se puede usar LOADFIX [ 21 ] o MEMMAX  -L [ 21 ]  para forzar que los programas se carguen por encima de los primeros 64 KB.

El truco fue utilizado por IBM/Microsoft Pascal , así como por programas compilados con él, [ 22 ] [ 23 ] [ 10 ] [ 17 ] incluyendo MASM de Microsoft . [ 17 ] Otras utilidades de desarrollo comúnmente utilizadas que empleaban esto eran compresores de ejecutables como Spacemaker de Realia [ 20 ] (escrito por Robert BK Dewar en 1982 y utilizado para comprimir versiones tempranas de Norton Utilities [ 24 ] [ 25 ] [ 26 ] [ 27 ] ) y EXEPACK de Microsoft [ 19 ] [ 20 ] [ 1 ] [ 28 ] [ 17 ] (escrito por Reuben Borman en 1985), así como la opción equivalente /E[XEPACK] en LINK 3.02 y versiones posteriores de Microsoft. [ 19 ] [ 1 ] [ 28 ] [ 26 ] Los programas procesados ​​con EXEPACK mostrarían un mensaje de error "El archivo empaquetado está dañado". [ 1 ] [ 20 ] [ 28 ]

Existen diversas utilidades de terceros para modificar archivos ejecutables comprimidos , ya sea reemplazando la(s) rutina(s) de descompresión problemática(s) mediante la restauración de sustituciones, o intentando expandir y restaurar el archivo original.

Los cargadores de arranque BIOS heredados modernos (como GNU GRUB ) utilizan la línea A20. [ 3 ] Los cargadores de arranque UEFI utilizan el modo protegido de 32 bits o el modo largo de 64 bits .

Véase también

Referencias

  1. 1 2 3 4 5 6 7 Paul, Matthias R. (2002-02-02). "Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)" [ Carga dinámica de controladores (reubicación de desplazamiento intrasegmento para cargar TSRs en el HMA) ] (en alemán). Grupo de noticias : de.comp.os.msdos . Consultado el 2 de julio de 2017 . {{cite newsgroup}}CS1 maint: servicio de archivo obsoleto ( enlace ) (Nota: Ofrece una descripción general completa de la historia y la "naturaleza" del HMA y las restricciones de diseño no obvias que deben observarse al desarrollar extensiones de sistema residentes para cargar en el HMA, algunas de las cuales son causadas por la puerta A20. También describe cómo abordar estos problemas utilizando stubs , puertas traseras y reubicación de desplazamiento intrasegmento , un método utilizado por los controladores DR-DOS capaces de reubicarse en el HMA y similar a un método (más sofisticado) utilizado como base para la eliminación dinámica de código muerto en el controlador FreeKEYB del autor).
  2. Paul, Matthias R. (11 de abril de 2002). "Re: [ fd-dev ] ANUNCIO: CuteMouse 2.0 alpha 1" . freedos-dev . Archivado del original el 21 de febrero de 2020. Recuperado el 21 de febrero de 2020 .
  3. 1 2 "Línea A20" . OSDev Wiki . 19 de julio de 2021. Archivado del original el 30 de noviembre de 2021. Consultado el 19 de julio de 2021 .
  4. Shanley, Tom; Anderson, Don (1995). Swindle, John (ed.). Arquitectura de sistemas ISA (3.ª ed.). Mindshare, Inc. / Addison-Wesley Publishing Company . págs. 79-80 . ISBN   0-201-40996-8ISBN 978-0-201-40996-3.
  5. "Visualizando una arquitectura Intel simplificada para el futuro" . intel.com . Intel . Consultado el 22 de mayo de 2023 .
  6. Shanley, Tom (1996). Arquitectura de software en modo protegido . Taylor & Francis . pág. 60. ISBN  0-201-55447-X.
  7. "Capítulo 3 Sistema PC". Guía de diseño del sistema PC 2001 (PDF) . Intel Corporation y Microsoft Corporation. pág. 52. Consultado el 3 de junio de 2023. SYS–0047. A20M# siempre se desactiva (se pone en alto) en el procesador. 
  8. Manual del programador de sistemas Intel, vol. 3A, de junio de 2013 .
  9. 1 2 3 86-DOS - Sistema Operativo de Disco para el 8086 - Manual del Programador (PDF) . Versión 0.3 ( Edición preliminar). Seattle, Washington, EE. UU.: Seattle Computer Products, Inc. 1980. págs. 7, 17. Archivado del original (PDF) el 23/06/2019 . Consultado el 13/09/2011 . [...] Este formulario se proporciona para simplificar la traducción de programas 8080/Z80 a código 8086 y no se recomienda para programas nuevos. [...] Tamaño de la memoria. Este es el número de bytes disponibles en el segmento del programa. [...]  (41 páginas)
  10. 1 2 Letwin, James (1985-04-10). "Método y sistema operativo para ejecutar programas en un microprocesador multimodo" . Microsoft . US06722052, US4779187A . Recuperado el 23-09-2018 . [...] Algunos programas escritos para el 8086 dependen del [desbordamiento de direcciones] para funcionar correctamente. Desafortunadamente, las ubicaciones de memoria se extienden por encima de 1 megabyte en el modo real del 80286 y no se desbordan a ubicaciones de memoria bajas. En consecuencia, los programas, incluidos los escritos en Microsoft PASCAL y los programas que utilizan la función "Call 5" de MS-DOS, fallarán en el sistema 80286 estándar. [...] Por ejemplo, ningún programa PASCAL se carga en la memoria por debajo de 64K , y se coloca una instrucción especial en las ubicaciones de memoria inferiores por encima de 1 megabyte; por ejemplo, la dirección 100000h o 100010h. [...]{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  11. Taylor, Roger; Lemmons, Phil (junio de 1982). "Migración ascendente - Parte 1: Traductores - Uso de programas de traducción para trasladar programas de CP/M-86 a CP/M y MS-DOS" [ Uso de programas de traducción para trasladar programas de CP/M a CP/M-86 y MS-DOS ] (PDF) . BYTE . Vol. 7, n.º 6. BYTE Publications Inc. págs. 321–322 , 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344 [342, 344]. ISSN 0360-5280 . CODEN BYTEDJ . Archivado (PDF) del original el 16 de enero de 2020. Recuperado el 15 de enero de 2020 . [...] Acceso a CP/M-86 [...] Para acceder a CP/M-86 se requiere colocar el código de función en el registro CL, colocar el parámetro de byte en el registro DL o el parámetro de palabra en el registro DX, colocar el segmento de datos en el registro DS (el segmento de datos generalmente no se modifica para un programa convertido) y ejecutar una interrupción de software, INT #224 . El resultado se devuelve en el registro AL si es un valor de byte; si el resultado es un valor de palabra, se devuelve en los registros AX y BX. Los valores de doble palabra se devuelven con el desplazamiento en los registros BX y el segmento en el registro ES. La conversión de programas de CP/M-80 a CP/M-86, entonces, requiere reemplazar la llamada a la ubicación 5 con la interrupción de software INT #224. Otro cambio necesario implica el arranque en caliente . Bajo CP/M-80, el arranque en caliente se puede acceder mediante una llamada al sistema con un código de función de 0 para un salto a la ubicación 0. CP/M-86, sin embargo, no admite el salto a la ubicación 0. Como resultado, debe cambiar esta salida del programa en el programa traducido para que el programa se ejecute correctamente. Siempre que la llamada a la ubicación 5 se reemplace con INT #224, que se realice el cambio de arranque en caliente y que los registros estén mapeados correctamente, no debería haber mayores problemas para que el programa traducido acceda a las funciones del sistema CP/M-86. [...] Obtención de acceso a MS-DOS [...] Aunque MS-DOS tiene un mecanismo "preferido" a través de una interrupción de software, INT #33 , para acceder al sistema, se proporciona un mecanismo adicional para programas "preexistentes" que es compatible con las convenciones de llamada de CP/M-80, al menos para funciones en el rango de 0-36. En lo que respecta a las llamadas al sistema dentro del rango de funciones permitido, el programador no tiene que hacer nada a los programas traducidos para que se ejecuten en MS-DOS, salvo asignar correctamente los registros. MS-DOS también admite la función de arranque en caliente de CP/M-80. Un salto a la ubicación 0 en MS-DOS ejecuta una interrupción de software, INT #32.     , que en la práctica es el final de un programa y la forma habitual de salir de él. [...](13 páginas)
  12. ^ Schäpers , Arne (1991). "Kapitel 5: EXEC im Detail - Prefijo de segmento de programa (PSP)". DOS 5 für Programmierer: Die endgültige Referenz (en alemán) (1 ed.). Addison Wesley (Deutschland) GmbH . págs. 148–151 , 971–972 [149, 971–972]. ISBN   3-89319-350-2.(1123+v páginas, desplegable, disquete de 5,25")
  13. 1 2 "Formato del prefijo del segmento de programa (PSP)" . INTER61 . 2000. Archivado del original el 17 de febrero de 2020. Recuperado el 19 de diciembre de 2019 .
  14. 1 2 3 4 Necasek, Michal (2011-09-13). "¿Quién necesita el desbordamiento de direcciones, de todos modos?" . Museo OS/2 . Archivado del original el 2020-02-19 . Recuperado el 2020-02-19 . [...] 86-DOS , y por lo tanto PC DOS / MS-DOS , usaban un truco ingenioso. El byte en el desplazamiento 5 del PSP contenía un código de operación de llamada lejana (9Ah); la palabra en el desplazamiento 6 del PSP contenía el valor apropiado para indicar el tamaño del segmento del programa, y ​​también la parte de desplazamiento de la llamada lejana. La palabra en el desplazamiento 8, que servía como la parte del segmento de la llamada lejana, estaba diseñada de tal manera que cuando se combinaba con el desplazamiento, se desbordaba (una característica bien conocida de la CPU 8086 ) y apuntaba a la dirección 0:C0h, que contiene el vector de interrupción 30h. [...] Un problema con la interfaz de compatibilidad ocurre cuando el programa cargado tiene de hecho menos de 64 KB disponibles. Si esto ocurre, la palabra en el desplazamiento 6 del PSP podría no contener el valor correcto, pero la interfaz CALL 5 seguirá funcionando; la instrucción en el desplazamiento 5 será CALL 0:C0h, lo que hará que el tamaño del segmento de programa informado sea C0h. No está claro por qué DOS hace esto; parece ser un error en DOS 5.0 y versiones posteriores, ya que DOS 4.0 y versiones anteriores simplemente ajustan la porción del segmento para que se ajuste a 0:C0h. Esto funciona siempre que el tamaño del segmento de programa esté alineado a párrafo, y así será. [...] 
  15. Norton, Peter (1985). The Peter Norton Programmer's Guide to the IBM PC ( Edición ilustrada). Microsoft Corporation . ISBN  0-91484546-2ISBN 978-0-91484546-1pág.  263: [...] Mediante un proceso demasiado extraño y complicado para explicar, la dirección segmentada se configura para que cumpla dos funciones. No solo apunta al despachador de funciones de DOS, sino que la parte de desplazamiento también indica cuánto del segmento de código podemos usar (hasta el hexadecimal FFF0, 16 bytes menos de 64 KB). La parte de desplazamiento de la dirección, la que nos interesa, se encuentra en el desplazamiento 6 dentro del PSP, después del código de operación de la instrucción en el desplazamiento 5. Esto significa que si DOS tiene menos de 64 KB para asignar a nuestros programas, podemos usar este campo para saber cuántos bytes están disponibles, una técnica que debería funcionar con la mayoría o la totalidad de los sistemas de ventanas y multitarea. [...](426 páginas)
  16. 1 2 "Caldera OpenDOS Machine Readable Source Kit (MRS) 7.01" . Caldera, Inc. 1997-05-01 [1997-04-16]. Archivado del original el 2021-08-07 . Recuperado el 2022-01-02 . [...] BIOSINIT.A86 1.40 93/11/11 12:25:29 [...] Cambios en el encabezado VDISK [...] BIOSINIT.A86 1.39 93/11/08 23:19:22 [...] SetupHMA realiza la inicialización de CALL5 [...] ahora corrige JMPF en alta memoria para el enlace CALL5 para PC-NFS [...](Nota: OpenDOS 7.01 MRS: IBMBIO\BIOSINIT.A86 SetupHMA)
  17. 1 2 3 4 Necasek, Michal (2018-03-16). "The A20-Gate: It Wasn't WordStar" . OS/2 Museum . Recuperado el 2018-09-23 .{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  18. Parsons, Jeff (27-05-2018) [01-12-1987, 02-08-1987]. "Somebody Put a SPELL On Me" . PCjs . Archivado del original el 29-01-2019 . Recuperado el 21-04-2019 .
  19. 1 2 3 Schulman, Andrew; Brown, Ralf D .; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) [noviembre de 1993]. Williams, Andrew (ed.). Undocumented DOS: Guía del programador para funciones y estructuras de datos reservadas de MS-DOS, ampliada para incluir MS-DOS 6, Novell DOS y Windows 3.1 . The Andrew Schulman Programming Series (1.ª impresión, 2.ª ed.). Reading, Massachusetts, EE. UU.: Addison Wesley Publishing Company . págs. 349-350 . ISBN   0-201-63287-XISBN 978-0-201-63287-3. [...] Leaving the A20 line enabled causes problems with programs that expect wraparound to occur [...] One such program was the unpacking routine Microsoft's own linker originally included with any file that had been EXEPACKed to reduce its size! According to Phillip Gardner, author of the shareware DOSMAX UMB maintenance utility and a veteran in the DOS disassembly area, the notorious "Packed File Corrupt" error message than began appearing everywhere shortly after the introduction of DOS 5.0 is directly due to the fact that the A20 line is enabled, and the original unpacking routine depended on the segment wraparound effect to properly expand the compressed files. [...] (xviii+856+vi pages, 3.5"-floppy ) Errata: (NB. On page 350, the book has a detailed description of the inner workings of the problematic EXEPACK uncompression routine.)
  20. 1 2 3 4 5 Paul, Matthias R. (2002-10-07) [2000]. "Re: masm .com (PSP) related trouble" . Newsgroup : alt.lang.asm . Retrieve 2017-09-03 . [...] DR Concurrent DOS 386 (desde 1988-07-08) cargará programas EXEPACK por encima de la marca de 64K, es decir, fuera de la " memoria más baja ", extendiendo el bloque de memoria que contiene el entorno del programa [...] DR DOS 5.0 + siempre carga programas en formato .EXE sin correcciones, y (desde 1990-05-25) también programas en formato .COM comprimidos con SpaceMaker - y por lo tanto comenzando con 9Ch 55h (PUSHF/PUSH BP) - por encima de la marca de 64K para evitar el error de desbordamiento de EXEPACK. Lo hace extendiendo el bloque de memoria que contiene el entorno del programa, desde el 14/12/1989 incluso asignará múltiples rellenos cuando sea necesario. Este código de expansión de entorno está deshabilitado si el nombre del programa padre tal como se almacena en el MCB es "WIN" para mejorar el rendimiento cuando WIN.COM inicia KERNEL.EXE (0 elementos de reubicación). [...] el kernel de MS-DOS / PC DOS 5.0 +[...] busca una variedad de secuencias de código en ejecutables en formato .EXE y aplica parches para varias versiones de archivos EXEPACKed para permitir que se ejecuten en la memoria más baja (cuando DOS está en HMA ), es decir, un segmento de carga < 64 Kb. De lo contrario, mostrarían "Archivo empaquetado corrupto". El código verifica que el punto de entrada del código [...] no sea < 0002h [...] y luego lee la PALABRA inmediatamente anterior al punto de entrada [...] Si esta PALABRA lee 5242h ("RB"), se supone que el archivo es EXEPACKed. El código busca entonces una de varias combinaciones de secuencias de código en desplazamientos desde esta firma "RB". [...] El núcleo de MS-DOS 5.0+[...] busca una clase desconocida de ejecutables .COM . Si se encuentran sus firmas en el archivo, la variable de cuenta regresiva A20 en el desplazamiento 18h de la tabla de información del búfer de disco (véase la tabla "Información del búfer de disco de DOS 5.0-6.0") se establecerá en 10, lo que provocará que A20 se desactive después de que INT 21h llame a esta cantidad de llamadas a INT 21h. Presumiblemente, esta clase de programas requiere que A20 se desactive durante un tiempo después de que comience su ejecución. (Se producen acciones similares al entrar en INT 21h/AH=25h y AH=49h). [...] {{cite newsgroup}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  21. ^ Paul, Matthias R. (30 de julio de 1997) [18 de junio de 1996, 1 ​​de mayo de 1994] . "V.4. Bessere Speicherausnutzung mit selbsthochladenden Programmen". NWDOS-TIP : consejos y trucos para Novell DOS 7, con un clic para deshacer detalles, errores y soluciones . Versión 157 (en alemán) (3 ed.). Archivado desde el original el 4 de noviembre de 2016 . Consultado el 6 de agosto de 2014 . {{cite book}}: |work=ignorado ( ayuda ) (Nota: El enlace proporcionado apunta a una versión convertida a HTML del archivo , que forma parte de la colección).NWDOSTIP.TXTMPDOSTIP.ZIP
  22. Compilador Pascal (PDF) . Serie de lenguajes de programación para computadoras personales (1.ª ed.). International Business Machines Corporation . Agosto de 1981. Archivado (PDF) del original el 29 de mayo de 2020. Consultado el 23 de septiembre de 2018 . 
  23. "NAME ENTX - Control del sistema de ejecución de Microsoft MS-DOS Computer Pascal" . Versión 1.00. Microsoft Corp. 1981. Archivado del original el 23/02/2020 . Consultado el 23/02/2020 . [...] DX es el DS final (puede ser negativo) [...] valor DS final (puede ser negativo) [...]
  24. "Informe de experto de Robert BK Dewar en respuesta al informe de Kenneth D. Crews". Cambridge University Press et al v. Patton et al, Expediente 124, Divulgaciones iniciales suplementarias de Cambridge University Press, Oxford University Press, Inc., Sage Publications, Inc. - Cambridge University Press, Oxford University Press, Inc. y Sage Publications, Inc. v. Mark P. Becker, Presidente de la Universidad Estatal de Georgia, et al, Acción civil n.° 1:08-CV-1425-ODE (documento judicial). Tribunal de Distrito de los Estados Unidos para el Distrito Norte de Georgia, División de Atlanta. pág. 18. Anexo A. Archivado del original el 1 de mayo de 2018. Recuperado el 23 de abril de 2019 . [...] SPACEMAKER y TERMULATOR, software comercial para IBM PC ( utilidad de compresión de archivos PC DOS y emulador VT-100 ), comercializado por Realia, Inc. RBK Dewar (1982-1983), lenguaje ensamblador 8088, 8000 líneas [...] 
  25. Realia, Inc. (enero de 1983). "Si usa DOS, necesita este programa" . PC Magazine (anuncio). 2 (9). Ziff-Davis Publishing : 417. Recuperado el 22 de abril de 2019 .{{cite journal}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  26. 1 2 Dewar, Robert Berriedale Keith (1984-03-13). "DOS 3.1 ASMB (Otro error tonto de Microsoft)" . info-ibmpc@USC-ISIB.ARPA . Archivado del original el 1 de mayo de 2018. Recuperado el 23 de abril de 2019. [...] La opción /E del enlazador debería generar un archivo EXE que sea lógicamente equivalente al archivo EXE sin comprimir. La versión actual [...] provoca que AX se sobrescriba. AX al entrar en un archivo EXE tiene un significado definido (indica la validez de la unidad para los parámetros), por lo que debería pasarse a la imagen sin comprimir. Dada esta violación tan obvia de las reglas de la interfaz, puede haber otras, no me he molestado en investigar más [...] Escribí el programa Realia SpaceMaker que hace algo similar a la opción EXEPACK (pero, huelga decir, no tiene esta particular [...]
  27. Necasek, Michal (30 de abril de 2018). "Realia SpaceMaker" . Museo OS/2 . Archivado del original el 27 de enero de 2019. Consultado el 22 de febrero de 2019 .
  28. 1 2 3 Necasek, Michal (23-03-2018). "EXEPACK y la puerta A20" . Museo OS/2 . Archivado del original el 13-11-2018 . Recuperado el 20-04-2019 .

Lecturas adicionales

  • Brouwer, Andries Evert (2001). "A20 - un dolor del pasado" . Archivado del original el 9 de septiembre de 2017. Recuperado el 9 de septiembre de 2017 .
  • Collins, Robert R. (2001). "Anomalías A20/Reset" . Archivado del original el 9 de septiembre de 2017. Recuperado el 9 de septiembre de 2017 .
  • Necasek, Michal (30-01-2018) [28-01-2018, 26-01-2018]. "WordStar Again" . Museo OS/2 . Archivado del original el 28-07-2019 . Recuperado el 28-07-2019 .
  • Ingenoso, Tony (20 de diciembre de 1998). «Capítulo 13: La puerta A20 y el HMA». Cómo mejorar el rendimiento del código: Cómo minimizar el tamaño del código 80x86 y, a veces, hacerlo más rápido (libro electrónico). Archivado del original el 18 de noviembre de 2019. Consultado el 18 de noviembre de 2019 .
  • Ludloff, Christian (2011). "Arquitectura x86 heredada: KBC, PS/2 y A20M#" . sandpile.org . Archivado del original el 15 de agosto de 2021. Consultado el 2 de enero de 2022 .