stringtranslate.com

línea A20

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

La 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 . En particular, la línea A20 se utiliza para transmitir el bit 21 en el bus de direcciones .

Un microprocesador normalmente tiene una cantidad de líneas de direcciones igual al logaritmo en base dos del número de palabras en su espacio físico de direcciones . Por ejemplo, un procesador con 4 GB de espacio físico direccionable por bytes requiere 32 líneas (log 2 (4 GB) = log 2 (2 32 B) = 32), que se denominan A0 a A31. Las líneas llevan el nombre del número de 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ñala 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 direcciones, numeradas del A0 al A19; con estos, el procesador puede acceder a 2 20 bytes, o 1 MB. Los registros de direcciones internos de estos procesadores sólo tenían 16 bits. Para acceder a un espacio de direcciones de 20 bits, se compuso una referencia de memoria externa con una dirección de desplazamiento de 16 bits agregada a un número de segmento de 16 bits , desplazada 4 bits hacia la izquierda para producir una dirección física de 20 bits. La dirección resultante es igual al segmento  × 16 + desplazamiento . [1] Hay muchas combinaciones de segmento y desplazamiento que producen la misma dirección física de 20 bits. Por tanto, existían varias formas 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:AAAA
F800:7FFF

Referenciado de la última manera, un aumento de uno en el desplazamiento produce F800:8000, que es una dirección adecuada para el procesador, pero como se traduce en la dirección física 0x00100000 (el primer byte de más de 1 MB), el procesador necesitaría otra dirección. línea para el acceso real a ese byte. Dado que no existe tal línea en la línea de procesadores 8086, el bit 21 de arriba, mientras está configurado, se elimina, lo que hace que la dirección F800:8000 "envuelva" [1] y en realidad apunte 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 podría direccionar hasta 16 MB de memoria del sistema en modo protegido . Sin embargo, se suponía que la CPU emularía el comportamiento de un 8086 en modo real , su modo de inicio, para poder ejecutar sistemas operativos y programas que no fueron escritos para el modo protegido. Sin embargo, el 80286 no forzó la línea A20 a cero en modo real. Por tanto, la combinación F800:8000 ya no apuntaría a la dirección física 0x00000000, sino a la dirección 0x00100000. Como resultado, los programas que dependen del ajuste de direcciones ya no funcionarán. Para seguir siendo compatible con este tipo de 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, que recibió el nombre de Gate-A20 . Gate-A20 se puede habilitar o deshabilitar mediante software para permitir o evitar que el bus de direcciones reciba una señal de A20. Está configurado como no aprobado para la ejecución de programas más antiguos que dependen del wrap-around. En el momento del arranque, el BIOS primero habilita Gate-A20 cuando cuenta y prueba toda la memoria del sistema, y ​​luego lo desactiva antes de transferir el control al sistema operativo.

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

Desconectar A20 no limitaría todos los accesos a la memoria por encima de 1 MB, solo aquellos en los rangos de 1 a 2 MB, 3 a 4 MB, 5 a 6 MB, etc. El software en modo real solo se preocupaba por el á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 en el proceso de arranque, a menudo antes de que el control se haya pasado al kernel desde el arranque (en el caso de Linux, por ejemplo).

El modo virtual 8086 , introducido con Intel 80386 , permite simular el envolvente A20 utilizando las funciones de memoria virtual del procesador; La memoria física se puede asignar a múltiples direcciones virtuales. Por tanto, la memoria asignada en el primer megabyte de memoria virtual puede asignarse nuevamente en el segundo megabyte de memoria virtual. El sistema operativo puede interceptar cambios en la Puerta A20 y realizar los cambios correspondientes en el espacio de direcciones de la memoria virtual, lo que también hace irrelevante la eficiencia del cambio de línea de la Puerta A20.

Puerta A20

Controlar la línea A20 fue una característica importante en una etapa del crecimiento de la arquitectura de PC de IBM, ya que agregó acceso a 65,520 bytes adicionales (64 KB − 16 bytes) de memoria en modo real , sin cambios significativos de software.

En lo que podría decirse que fue un "truco", la puerta 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 Intel 8086 , la puerta A20 todavía estuvo presente en las CPU Intel hasta 2008. [5] Como la puerta se cerró inicialmente justo después del arranque, los sistemas operativos en modo protegido generalmente abrían la puerta A20 temprano durante el arranque. proceso para no volver a cerrarlo nunca más. Dichos sistemas operativos no tenían motivos de compatibilidad para mantenerlo cerrado y obtenían acceso a toda la gama de direcciones físicas disponibles al abrirlo.

Intel 80486 y Pentium agregaron un pin especial llamado A20M# , que cuando se afirma bajo fuerza al bit 20 de la dirección física a ser cero para todos los accesos a memoria caché o externa en el chip. Era necesario, ya que el 80486 introdujo un caché en el chip y, por lo tanto, ya no era posible enmascarar este bit en la lógica externa. El software aún necesita manipular la puerta y aún debe lidiar con periféricos externos (el chipset ) para eso. [6]

La Guía de diseño de sistemas de PC PC 2001 elimina la compatibilidad para 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 el software escriba en el puerto de E/S 92, bit 1, no resulte en A20M# se afirma al procesador." [7]

El soporte para la puerta A20 se cambió en la microarquitectura Nehalem (algunas fuentes afirman incorrectamente que se eliminó el soporte A20). En lugar de que la CPU tenga un pin A20M# dedicado que reciba la señal de enmascarar o no el bit A20, se ha virtualizado para que la información se envíe desde el hardware periférico a la CPU mediante ciclos de bus especiales. [ cita necesaria ] Desde el punto de vista del software, el mecanismo funciona exactamente como antes, y un sistema operativo aún debe programar hardware externo (que a su vez envía los ciclos de bus antes mencionados a la CPU) para deshabilitar el enmascaramiento A20. [ cita necesaria ]

Intel ya no admite la puerta A20, empezando por Haswell . Página 271 del Manual de programadores del sistema Intel, vol. 3A de junio de 2013 establece: "La funcionalidad de A20M# se utiliza principalmente en sistemas operativos más antiguos y no en sistemas operativos modernos. En los procesadores Intel 64 más nuevos, A20M# puede estar ausente". [8]

controlador A20

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

En DOS , los administradores de HMA como HIMEM.SYS tienen la "tarea adicional" de administrar A20. HIMEM.SYS proporcionó una API para abrir/cerrar A20. El propio DOS podría utilizar el área para algunas de sus necesidades de almacenamiento, liberando así más memoria convencional para los programas. Esa funcionalidad fue habilitada por las directivas DOS=HIGHo HIDOS=ONen el archivo de configuración CONFIG.SYS .

Programas afectados

Desde 1980, 86-DOS y MS-DOS utilizaron internamente el ajuste de dirección para implementar el punto de entrada DOS CALL 5 en el desplazamiento +5 a +9 (que emula el punto de entrada API CALL 5 BDOS estilo CP/M-80 en desplazamiento de +5 a +7) en el Prefijo de segmento de programa (PSP) (que se parece parcialmente a la página cero del CP/M-80 ). [9] [10] Esto fue, en particular, utilizado por programas traducidos automáticamente desde CP/M-80 a través de traductores de lenguaje ensamblador [9] como TRANS86 de Seattle Computer Products . [11] El controlador 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í los cuatro bytes del punto de entrada de la rutina del servicio de interrupción reservado para INT 30h y el primer byte de INT 31h en el vector de interrupción en modo real x86 mesa ). [12] [13] [14] Sin embargo, según el diseño de CP/M-80, que cargaba el sistema operativo inmediatamente encima de la memoria disponible para que se ejecutara el programa de aplicación, la dirección de destino de 16 bits 8080 / Z80 almacenada en El desplazamiento +6 a +7 en la página cero también podría interpretarse deliberadamente como el tamaño del primer segmento de memoria. [9] Para emular esto en DOS con su segmento 8086: esquema de direccionamiento de desplazamiento, el desplazamiento de 16 bits del punto de entrada de llamada remota 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, superponiendo partes del CALL 5. [13] [14] La única forma de conciliar estos requisitos era elegir un valor de segmento que, cuando se agrega a 0xFEF0, da como resultado una dirección de 0x001000C0, que, en un 8086, envuelve alrededor de 0x000000C0. [15] [12] [14]

Se tuvo que desactivar A20 para que se produjera el ajuste y los programas de DOS que utilizaban esta interfaz funcionaran. Las versiones más nuevas de DOS que pueden reubicar partes de sí mismas en el HMA, generalmente crean una copia del punto de entrada en FFFF:00D0 en el HMA (que nuevamente se resuelve en 0x001000C0 físico), para que la interfaz pueda funcionar sin tener en cuenta el estado de A20. . [14] [16]

Un programa conocido por utilizar la interfaz CALL 5 es la versión DOS del compilador Small-C . [17] Además, la utilidad SPELL en Word 3.0 (1987) de Microsoft es uno de los programas que dependen de la interfaz CALL 5 que se configurará correspondientemente. [18] PC-NFS (1993) de Sun Microsystems también requiere la reparación CALL 5. [dieciséis]

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

Este truco funciona siempre que el código no se ejecute en una memoria baja , los primeros 64 KB de RAM, una condición que siempre se cumplió en versiones anteriores de DOS sin capacidades de carga alta.

Con el kernel de DOS reubicado en áreas de mayor memoria, la cantidad de memoria disponible para los programas fue cada vez mayor, lo que provocó que aquellos que dependían del wraparound fallaran. [19] Los cargadores de ejecutables en las versiones más recientes de DOS intentan detectar algunos tipos comunes de programas afectados y parchearlos sobre la marcha para que funcionen también con poca memoria [20] o cargarlos por encima de los primeros 64 KB antes de pasar la ejecución. a ellos. [20] Para programas que no se detectan automáticamente, LOADFIX [21] o MEMMAX  -L [21] se pueden usar para forzar que los programas se carguen por encima de los primeros 64 KB.

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

Existen varias utilidades de terceros para modificar archivos ejecutables comprimidos, ya sea reemplazando las rutinas de descompresión problemáticas mediante restablecimiento o intentando expandir y restaurar el archivo original.

Los cargadores de arranque de 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 .

Ver también

Referencias

  1. ^ abcdefg Paul, Matthias R. (2 de febrero de 2002). "Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)" [Carga de controladores dinámicamente (reubicación de compensación intrasegmento para cargar TSR en el HMA)] (en alemán). Grupo de noticias : de.comp.os.msdos. Archivado desde el original el 9 de septiembre de 2017 . Consultado el 2 de julio de 2017 .(NB. Ofrece una descripción general completa de la historia y la "naturaleza" del HMA y las restricciones de diseño no obvias que se deben observar al desarrollar extensiones del sistema residente que se cargarán 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 compensación dentro del segmento , 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 los muertos dinámicos . eliminación de código en el controlador FreeKEYB del autor).
  2. ^ Paul, Matías R. (11 de abril de 2002). "Re: [fd-dev] ANUNCIO: CuteMouse 2.0 alpha 1". freedos-dev . Archivado desde el original el 21 de febrero de 2020 . Consultado el 21 de febrero de 2020 .
  3. ^ ab "Línea A20". Wiki OSDev . 2021-07-19. Archivado desde el original el 30 de noviembre de 2021 . Consultado el 19 de julio de 2021 .
  4. ^ Shanley, Tom; Anderson, Don (1995). Estafa, John (ed.). Arquitectura del sistema ISA (3 ed.). Mindshare, Inc. / Compañía editorial Addison-Wesley . págs. 79–80. ISBN 0-201-40996-8. ISBN 978-0-201-40996-3[1]
  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 y Francisco . pag. 60.ISBN _ 0-201-55447-X.
  7. ^ "Capítulo 3 Sistema de PC". Guía de diseño del sistema PC 2001 (PDF) . Corporación Intel y Corporación Microsoft. pag. 52 . Consultado el 3 de junio de 2023 . SIS–0047. A20M# siempre está desactivado (en alto) en el procesador
  8. ^ Manual de programadores del sistema Intel vol. 3A de junio de 2013.
  9. ^ abc 86-DOS - Sistema operativo de disco para 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 desde el original (PDF) el 23 de junio de 2019 . Consultado el 13 de septiembre de 2011 . […] Este formulario se proporciona para simplificar la traducción de programas 8080/Z80 al 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. ^ ab Letwin, James (10 de abril de 1985). "Método y sistema operativo para la ejecución de programas en un microprocesador multimodo". Microsoft . US06722052, US4779187A. Archivado desde el original el 23 de septiembre de 2018 . Consultado el 23 de septiembre de 2018 . […] Algunos programas escritos para el 8086 dependen de [address wrap-around] para ejecutarse correctamente. Desafortunadamente, las ubicaciones de memoria se extienden por encima de 1 megabyte en el modo real del 80286 y no están limitadas a ubicaciones de poca memoria. 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 estándar 80286. […] Por ejemplo, no se cargan programas PASCAL en la memoria por debajo de 64 K 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}}: Mantenimiento CS1: bot: estado de la URL original desconocido ( enlace )
  11. ^ Taylor, Roger; Lemmons, Phil (junio de 1982). "Migración ascendente - Parte 1: Traductores - Uso de programas de traducción para mover programas CP/M-86 a CP/M y MS-DOS" [Uso de programas de traducción para mover programas CP/M a CP/M-86 y MS-DOS] (PDF) . BYTE . vol. 7, núm. 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) desde el original el 16 de enero de 2020 . Consultado el 15 de enero de 2020 . […] Obtener acceso a CP/M-86 […] Para obtener acceso a CP/M-86 es necesario colocar el código de función en el registro CL, colocar el parámetro de byte en el registro DL o colocar 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 cambia 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 palabra doble 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 tiene que ver con el arranque cálido . En CP/M-80, se puede acceder al arranque en caliente mediante una llamada al sistema con un código de función de 0 para un salto a la ubicación 0. Sin embargo, CP/M-86 no admite el salto a la ubicación 0. Como resultado , debe cambiar la salida de este 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 asignados correctamente, no debería haber ningún problema para que el programa traducido acceda a las funciones del sistema CP/M-86. . […] Obtener 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 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 permitidas, el programador no tiene que hacer nada con los programas traducidos para que se ejecuten en MS-DOS aparte de asignar correctamente los registros. MS-DOS también admite la función de arranque en caliente del CP/M-80. Un salto a la ubicación 0 en MS-DOS ejecuta una interrupción de software, INT #32 , que funcionalmente es el final de un programa y la forma normal de salir de un programa. […][2] [3][4][5][6][7][8][9][10][11][12][13][14][15] (13 páginas)
  12. ^ ab 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. ^ ab "Formato de prefijo de segmento de programa (PSP)". INTER61 . 2000. Archivado desde el original el 17 de febrero de 2020 . Consultado el 19 de diciembre de 2019 .
  14. ^ abcd Necasek, Michal (13 de septiembre de 2011). "¿Quién necesita la dirección completa, de todos modos?". Museo OS/2 . Archivado desde el original el 19 de febrero de 2020 . Consultado el 19 de febrero de 2020 . […] 86-DOS , y por tanto PC DOS / MS-DOS , utilizó un truco inteligente. El byte en el desplazamiento 5 de la 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 desplazada de la llamada lejana. La palabra en el desplazamiento 8, que sirvió como parte del segmento de la llamada lejana, se diseñó de manera que cuando se combinara con el desplazamiento, se enrollaría (una característica bien entendida de la CPU 8086 ) y apuntaría 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 menos de 64 KB disponibles. Si eso sucede, es posible que la palabra en el desplazamiento 6 de PSP no contenga 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 del programa reportado sea C0h. No está claro por qué DOS hace eso; parece ser un error en DOS 5.0 y posteriores, ya que DOS 4.0 y versiones anteriores simplemente ajustan la porción del segmento para que se ajuste a 0:C0h. Eso funciona siempre que el tamaño del segmento del programa esté alineado con el párrafo, y así será. […]
  15. ^ Norton, Peter (1985). La guía del programador de Peter Norton para IBM PC (edición ilustrada). Corporación Microsoft . ISBN 0-91484546-2. ISBN 978-0-91484546-1 . pag. 263: […] Mediante un proceso demasiado extraño y complicado de explicar, la dirección segmentada se establece de manera que sirva para dos propósitos. No solo apunta al despachador de funciones de DOS, sino que la parte de desplazamiento también indica qué cantidad del segmento de código podemos usar (hasta hexadecimal FFF0, 16 bytes menos que 64 K). La parte de desplazamiento de la dirección, la parte que nos interesa, está ubicada en el desplazamiento 6 dentro de la PSP, siguiendo el código de operación de la instrucción en el desplazamiento 5. El resultado de esto es que si DOS tiene menos de 64 K para dar a nuestros programas, Podemos usar este campo para saber cuántos bytes hay disponibles, una técnica que debería funcionar con la mayoría o todos los sistemas de ventanas y multitarea. […] (426 páginas)
  16. ^ ab "Kit de código fuente legible por máquina (MRS) Caldera OpenDOS 7.01". Caldera, Inc. 1997-05-01 [1997-04-16]. Archivado desde el original el 7 de agosto de 2021 . Consultado el 2 de enero de 2022 . […] 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 CALL5 […] ahora arregle JMPF en alta memoria para el enlace CALL5 para PC-NFS […] [16] (NB. OpenDOS 7.01 MRS: IBMBIO\BIOSINIT.A86 SetupHMA)
  17. ^ abcd Necasek, Michal (16 de marzo de 2018). "La puerta A20: no era WordStar". Museo OS/2 . Archivado desde el original el 23 de septiembre de 2018 . Consultado el 23 de septiembre de 2018 .
  18. ^ Parsons, Jeff (27 de mayo de 2018) [1 de diciembre de 1987, 2 de agosto de 1987]. "Alguien me puso un hechizo". PCjs . Archivado desde el original el 29 de enero de 2019 . Consultado el 21 de abril de 2019 .
  19. ^ abc Schulman, Andrés; Marrón, Ralf D .; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) [noviembre de 1993]. Williams, Andrés (ed.). DOS indocumentado: una guía para programadores sobre funciones y estructuras de datos reservadas de MS-DOS, ampliada para incluir MS-DOS 6, Novell DOS y Windows 3.1 . Serie de programación de Andrew Schulman (primera impresión, segunda ed.). Reading, Massachusetts, EE.UU.: Addison Wesley Publishing Company . págs. 349–350. ISBN 0-201-63287-X. ISBN 978-0-201-63287-3 . […] Dejar la línea A20 habilitada causa problemas con los programas que esperan que se produzca un ajuste final […] Uno de esos programas fue la rutina de descompresión que el propio vinculador de Microsoft incluía originalmente con cualquier archivo que había sido EXEPACKED para reducir su tamaño. Según Phillip Gardner, autor de la utilidad de mantenimiento shareware DOSMAX UMB y veterano en el área de desensamblado de DOS, el notorio mensaje de error "Packed File Corrupt" que comenzó a aparecer en todas partes poco después de la introducción de DOS 5.0 se debe directamente al hecho de que el La línea A20 está habilitada y la rutina de descompresión original dependía del efecto envolvente del segmento para expandir adecuadamente los archivos comprimidos. […] (xviii+856+vi páginas, disquete de 3,5" [17]) Fe de erratas: [18][19] (NB. En la página 350, el libro tiene una descripción detallada del funcionamiento interno de la problemática rutina de descompresión EXEPACK).
  20. ^ abcdef Paul, Matthias R. (7 de octubre de 2002) [2000]. "Re: problema relacionado con masm .com (PSP)". Grupo de noticias : alt.lang.asm. Archivado desde el original el 3 de septiembre de 2017 . Consultado el 3 de septiembre de 2017 . […] DR Concurrent DOS 386 (desde 1988-07-08) cargará programas EXEPACKed por encima de la marca de 64K, es decir, fuera de la " memoria más baja ", ampliando el bloque de memoria que contiene el entorno del programa […] DR DOS 5.0 + siempre carga programas en formato .EXE sin correcciones y (desde el 25 de mayo de 1990) también programas en formato .COM comprimidos con SpaceMaker , y por lo tanto comienza con 9Ch 55h (PUSHF/PUSH BP), por encima de la marca de 64K para evitar el EXEPACK envolver el error. 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 del entorno está deshabilitado si el nombre del programa principal almacenado en el MCB es "WIN" para mejorar el rendimiento cuando WIN.COM inicia KERNEL.EXE (0 elementos de reubicación). […] el kernel 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 es en el HMA ), es decir, un segmento de carga < 64 Kb. De lo contrario, mostrarían "Archivo empaquetado dañado". 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 está EXEPACKed. Luego, el código busca una de varias combinaciones de secuencias de código en desplazamientos de esta firma "RB". […] el kernel de MS-DOS 5.0+[…] busca una clase desconocida de ejecutables .COM . Si sus firmas se encuentran en el archivo, la variable de cuenta regresiva A20 en el desplazamiento 18h en la tabla de información del búfer de disco (consulte 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 INT. Llamadas de 21h para este conteo de llamadas INT de 21h a seguir. Presumiblemente, esta clase de programas requiere que A20 esté deshabilitado durante algún tiempo después de que comienza la ejecución. (Se producen acciones similares al entrar en INT 21h/AH=25h y AH=49h.) […]
  21. ^ ab 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 ) (NB. El enlace proporcionado apunta a una versión convertida en HTML de NWDOSTIP.TXT, que forma parte de la MPDOSTIP.ZIPcolección). [20]
  22. ^ Compilador Pascal (PDF) . Serie de lenguajes informáticos para computadoras personales (1 ed.). Corporación Internacional de Máquinas de Negocios . Agosto de 1981. Archivado (PDF) desde el original el 29 de mayo de 2020 . Consultado el 23 de septiembre de 2018 .
  23. ^ "NOMBRE ENTX - Control del sistema de tiempo de ejecución de Microsoft MS-DOS Computer Pascal". Versión 1.00. Microsoft Corp. 1981. Archivado desde el original el 23 de febrero de 2020 . Consultado el 23 de febrero de 2020 . […] DX es DS final (puede ser negativo) […] valor DS final (puede ser negativo) […]
  24. ^ "Informe experto de Robert BK Dewar en respuesta al informe de Kenneth D. Crews". Cambridge University Press et al contra Patton et al, Presentación 124, Divulgaciones iniciales suplementarias de Cambridge University Press, Oxford University Press, Inc., Sage Publications, Inc. - Cambridge University Press, Oxfort University Press, Inc. y Sage Publications, Inc. contra Mark P. Becker, presidente de la Universidad Estatal de Georgia, et al, Acción Civil No. 1:08-CV-1425-ODE (documento judicial). Tribunal de Distrito de los Estados Unidos para el Distrito Norte de Georgia, División de Atlanta. pag. 18. Anexo A. Archivado desde el original el 1 de mayo de 2018 . Consultado el 23 de abril de 2019 . […] SPACEMAKER y TERMULATOR, software básico 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, 8.000 líneas […]
  25. ^ Realia, Inc. (enero de 1983). "Si usas DOS, necesitas este programa". Revista PC (anuncio). Publicación Ziff-Davis . 2 (9): 417. Archivado desde el original el 22 de abril de 2019 . Consultado el 22 de abril de 2019 .
  26. ^ ab Dewar, Robert Berriedale Keith (13 de marzo de 1984). "DOS 3.1 ASMB (otro error tonto de Microsoft)". [email protected] . Archivado desde el original el 1 de mayo de 2018 . Consultado el 23 de abril de 2019 . […] La opción /E del vinculador debería generar un archivo EXE que sea lógicamente equivalente al archivo EXE sin comprimir. La versión actual […] resulta en que AX sea golpeado. AX al ingresar a un archivo EXE tiene un significado definido (indica la validez de la unidad para los parámetros), por lo que debe pasarse a la imagen sin comprimir. Dada esta violación muy 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 no hace falta decir que no no tener este particular […]
  27. ^ Necasek, Michal (30 de abril de 2018). "Realia SpaceMaker". Museo OS/2 . Archivado desde el original el 27 de enero de 2019 . Consultado el 22 de febrero de 2019 .
  28. ^ abc Necasek, Michal (23 de marzo de 2018). "EXEPACK y la puerta A20". Museo OS/2 . Archivado desde el original el 13 de noviembre de 2018 . Consultado el 20 de abril de 2019 .

Otras lecturas