El 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 en el bus de direcciones .
Un microprocesador normalmente tiene un número de líneas de dirección igual al logaritmo en base dos de su espacio físico de direcciones . Por ejemplo, un procesador con 4 GB de espacio físico direccionable por bytes requiere 32 líneas, que se denominan A0 a A31. Las líneas reciben 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 indica 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 A0 a A19; con estos, el procesador puede acceder a 2 20 bytes, o 1 MB. Los registros de direcciones internos 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 agregada a un número de segmento de 16 bits , desplazada 4 bits 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 lo tanto, había varias formas de direccionar el mismo byte en la memoria. [2] Por ejemplo, aquí hay cuatro de los 4096 segmentos diferentes: combinaciones de 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
Referenciado de la última forma, un aumento de uno en el desplazamiento produce F800: 8000, que es una dirección adecuada para el procesador, pero como se traduce a 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 8086 de procesadores, el bit 21 anterior, mientras está establecido, se descarta, lo que hace que la dirección F800: 8000 se "envuelva" [1] y 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 debía emular el comportamiento de un 8086 en modo real , su modo de inicio, para que pudiera ejecutar sistemas operativos y programas que no estaban escritos para el modo protegido. Sin embargo, el 80286 no forzó la línea A20 a cero en modo real. Por lo 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 se basan en el ajuste de direcciones ya no funcionarán. Para seguir siendo compatible con dichos programas, IBM decidió corregir el problema en la placa base .
Eso se logró insertando una puerta lógica en la línea A20 entre el procesador y el bus del sistema, que se llamó 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 para no pasar para la ejecución de programas más antiguos que se basan en el wrap-around. En el momento del arranque, el BIOS primero habilita Gate-A20 cuando cuenta y prueba 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] Controlarlo fue un proceso relativamente lento. Desde entonces, se han agregado otros métodos para permitir una multitarea más eficiente de los programas que requieren este ajuste con programas que acceden a toda la memoria del sistema. Hay varios métodos para controlar la línea A20. [3]
Desconectar A20 no encajarí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 por encima de 1 MB, por lo que la línea Gate-A20 fue 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 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 mapeada en el primer megabyte de memoria virtual puede mapearse de nuevo 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 de la alternancia de línea de la Puerta-A20.
Puerta A20
El control de la línea A20 fue una característica importante en una etapa del crecimiento de la arquitectura de IBM PC, ya que agregó acceso a 65.520 bytes adicionales (64 KB - 16 bytes) de memoria en modo real , sin cambios de software significativos.
En lo que podría decirse que era un "truco", la puerta A20 era originalmente parte del controlador del teclado en la placa base, que podía abrirla o cerrarla según el comportamiento que se deseara. [4]
La puerta A20 todavía está presente en muchas PC modernas, y la puerta se cierra inicialmente justo después del arranque. Los sistemas operativos modernos en modo protegido generalmente abren la puerta A20 temprano durante el proceso de arranque y nunca la vuelven a cerrar. Dichos sistemas operativos no tienen las razones de compatibilidad para mantenerlo cerrado y obtienen acceso a la gama completa de direcciones físicas disponibles al abrirlo.
El Intel 80486 y Pentium agregaron un pin especial llamado A20M # , que cuando se afirma bajo fuerza el bit 20 de la dirección física a ser cero para todos los accesos a la memoria caché o externa en el chip. Era necesario, ya que el 80486 introdujo un caché en chip y, por lo tanto, ya no era posible enmascarar este bit en lógica externa. El software aún necesita manipular la puerta y aún debe lidiar con periféricos externos (el chipset ) para eso. [5]
El soporte para la puerta A20 se cambió en la microarquitectura de 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 requerida ] 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 requerida ]
Intel ya no admite la puerta A20, comenzando con Haswell . Página 271 del Manual del programador de sistemas Intel Vol. 3A de junio de 2013 establece: "La funcionalidad de A20M # es utilizada principalmente por sistemas operativos más antiguos y no utilizada por sistemas operativos modernos. En los procesadores Intel 64 más nuevos, A20M # puede estar ausente". [6]
Manipulador A20
El controlador A20 es un software de administración de memoria de PC de IBM que controla el acceso al área de memoria alta (HMA). Los administradores de memoria extendida generalmente brindan 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 programas. Esa funcionalidad fue habilitada por las directivas DOS=HIGH
o HIDOS=ON
en el archivo de configuración CONFIG.SYS .
Programas afectados
Desde 1980, 86-DOS y MS-DOS utilizaron internamente el ajuste de direcciones para implementar el punto de entrada CALL 5 de estilo CP / M en el Prefijo de segmento de programa (PSP) (que se asemeja parcialmente a la página cero de CP / M ). [7] [8] Esta era, en particular, utilizado por los programas traducidos automáticamente a partir de CP / M-80 a través de traductores de lenguaje ensamblador [7] como Seattle Computer Products ' TRANS86 . [9] El controlador CALL 5 al que se refiere este punto de entrada reside en la dirección física 0x000000C0 (superponiendo la entrada para INT 30h y el primer byte de INT 31h en la tabla de vectores de interrupción en modo real ). [10] [11] [12] Sin embargo, por el diseño de CP / M-80, la dirección de destino 8080 / Z80 de 16 bits almacenada en el desplazamiento 6 en la página cero también podría interpretarse deliberadamente como tamaño de memoria de segmento. [7] Para emular esto en DOS con su esquema de direccionamiento del segmento 8086: desplazamiento, el desplazamiento de 16 bits del punto de entrada de llamada lejana tenía que coincidir con este tamaño de segmento (fe 0xFEF0), que se almacena en el desplazamiento 6 en el PSP, superponiéndose partes del CALL 5. [11] [12] 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, se ajusta a 0x000000C0. [13] [10] [12]
A20 tuvo que estar deshabilitado para que ocurriera el Wraparound y los programas DOS que usaban 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), de modo que la interfaz pueda funcionar sin tener en cuenta el estado de A20 . [12] [14]
Un programa conocido por utilizar la interfaz CALL 5 es la versión DOS del compilador Small-C . [15] Además, la utilidad SPELL en Microsoft Word 3.0 (1987) es uno de los programas que dependen de la interfaz CALL 5 que se configurará en consecuencia. [16] El PC-NFS de Sun Microsystems (1993) también requiere la reparación de CALL 5. [14]
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 direcciones 0x000F8000–0x000FFFFF), así como los datos de E / S (como el búfer del teclado) que se ubicaron 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 que el código no se ejecute en poca memoria , 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 memoria más altas, la memoria baja se volvió cada vez más disponible para los programas, lo que provocó que los que dependían del Wraparound fallaran. [17] 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 [18] o cargarlos por encima de los primeros 64 KB antes de pasar la ejecución a a ellos. [18] Para programas que no se detectan automáticamente, LOADFIX [19] o MEMMAX -L [19] pueden usarse para forzar la carga de programas por encima de los primeros 64 KB.
El truco fue utilizado por IBM / Microsoft Pascal , así como por programas compilados con él, [20] [21] [8] [15] incluyendo MASM de Microsoft . [15] Otras utilidades de desarrollo de uso común que utilizaban esto eran compresores ejecutables como Spacemaker de Realia [18] (escrito por Robert BK Dewar en 1982 y utilizado para comprimir las primeras versiones de Norton Utilities [22] [23] [24] [25] ) y EXEPACK [17] [18] [1] [26] [15] de Microsoft (escrito por Reuben Borman en 1985) así como la opción equivalente / E [XEPACK] en LINK 3.02 de Microsoft y superior. [17] [1] [26] [24] Los programas procesados con EXEPACK mostraban un mensaje de error "El archivo empaquetado está dañado". [1] [26]
Existen varias utilidades de terceros para modificar los ejecutables comprimidos, ya sea reemplazando las rutinas de descompresión problemáticas o intentando expandir y restaurar el archivo original.
Los cargadores de arranque BIOS heredados modernos (como GNU GRUB ) usan la línea A20. [27] Los cargadores de arranque UEFI utilizan el modo protegido de 32 bits o el modo largo de 64 bits .
Ver también
- Compatibilidad con errores [18]
- Almacenamiento de computadora
- Área de memoria alta (HMA)
- LOADFIX (directiva CONFIG.SYS) (PTS-DOS)
- Cargadores de arranque
Referencias
- ↑ a b c d e f g 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 offset 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 limitaciones de diseño no obvias que se deben observar al desarrollar extensiones del sistema residente 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 los muertos dinámicos. eliminación de código en el controlador FreeKEYB del autor.)
- ^ Paul, Matthias 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 .
- ^ "Línea A20" . OSDev Wiki .
- ^ Shanley, Tom; Anderson, Don (1995). Swindle, John (ed.). Arquitectura del sistema ISA (3 ed.). Mindshare, Inc. / Addison-Wesley Publishing Company . págs. 79 –80. ISBN 0-201-40996-8. ISBN 978-0-201-40996-3 . [1]
- ^ Shanley, Tom (1996). Arquitectura de software en modo protegido . Taylor y Francis . pag. 60. ISBN 0-201-55447-X.
- ^ Manual de programadores del sistema Intel Vol. 3A de junio de 2013 .
- ^ a b c 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 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 de programa. […]
(41 páginas) - ^ a b Letwin, James (10 de abril de 1985). "Método y sistema operativo para ejecutar programas en un microprocesador multimodo" . Microsoft . US06722052, US4779187A. Archivado desde el original el 18 de febrero de 2020 . Consultado el 23 de septiembre de 2018 .
[…] Algunos programas escritos para el 8086 se basan en [cambio de dirección] 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 envueltas en ubicaciones con poca memoria. En consecuencia, los programas, incluidos los escritos en MicroSoft PASCAL y los programas que utilizan la función "Llamada 5" de MS-DOS, fallarán en el sistema 80286 estándar. […] Por ejemplo, no se cargan programas PASCAL 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. […]
[2] - ^ 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" (PDF) . BYTE . Vol. 7 no. 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 […] Obtener acceso a CP / M-86 requiere 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 las botas calientes . Bajo 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. CP / M-86, sin embargo, 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 mapeados correctamente, debería haber pocos problemas 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 mapear 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 es funcionalmente un final de programa y la forma normal de salir de un programa. […]
[3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] (13 páginas) - ^ a b 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, 5,25 "-floppy)
- ^ a b "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 .
- ^ a b c d Necasek, Michal (13 de septiembre de 2011). "¿Quién necesita la dirección envolvente, 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 lo tanto PC DOS / MS-DOS , utilizaron un truco ingenioso. 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 del desplazamiento 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 envolvería (una característica bien entendida de la CPU 8086 ) y apuntaría a la dirección 0: C0h, que contiene vector de interrupción 30h. […] Se produce un problema con la interfaz de compatibilidad cuando el programa cargado tiene, de hecho, 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, haciendo que el tamaño del segmento de programa informado sea C0h. No está claro por qué DOS hace eso; parece ser un error en DOS 5.0 y versiones posteriores, ya que DOS 4.0 y versiones anteriores simplemente ajustan la parte 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á. […]
- ^ Norton, Peter .
Demasiado complicado y extraño de explicar.
Falta o vacío|title=
( ayuda ) - ^ a b OpenDOS 7.01 MRS: IBMBIO \ BIOSINIT.A86 SetupHMA . Caldera, Inc. 16 de abril de 1997. DOSSRC.ZIP.
[…] 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 […]
- ^ a b c d 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 .
- ^ 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 .
- ^ a b c Schulman, Andrew; Brown, Ralf D .; Maxey, David; Michels, Raymond J .; Kyle, Jim (1994) [noviembre de 1993]. Williams, Andrew (ed.). DOS sin documentar: una guía del programador para las estructuras de datos y funciones reservadas de MS-DOS, ampliada para incluir MS-DOS 6, Novell DOS y Windows 3.1 . The Andrew Schulman Programming Series (primera impresión, segunda edición). 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 el Wraparound […] ¡Uno de esos programas fue la rutina de desempaquetado del propio enlazador de Microsoft incluido originalmente con cualquier archivo que había sido EXEPACKed para reducir su tamaño! Según Phillip Gardner, autor de la urilidad de mantenimiento shareware DOSMAX UMB y un veterano en el área de desmontaje de DOS, el notorio mensaje de error "Archivo empaquetado corrupto" 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 desempaquetado original dependía del efecto envolvente del segmento para expandir adecuadamente los archivos comprimidos. […]
(xviii + 856 + vi páginas, 3.5 "-floppy [17] ) Errata: [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). - ^ a b c d e 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 ", al extender el bloque de memoria que contiene el entorno del programa […] DR DOS 5.0 + siempre carga programas de formato .EXE sin correcciones, y (desde 1990-05-25) también programas de 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 EXEPACK envolver alrededor de error. Lo hace extendiendo el bloque de memoria que contiene el entorno del programa, desde 1989-12-14 incluso asignará múltiples rellenos cuando sea necesario. Este código de expansión de 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 de MS-DOS / PC DOS 5.0 + […] escanea 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 corrupto". El código comprueba que el punto de entrada del código […] no es <0002h […] y luego lee la PALABRA inmediatamente anterior al punto de entrada […] Si esta PALABRA lee 5242h ("RB"), se asume que el archivo está EXEPACKED. Luego, el código busca una de varias combinaciones de secuencias de código en las compensaciones 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 del disco (consulte la Tabla "Información del búfer del disco DOS 5.0-6.0") se establecerá en 10, lo que hará que A20 se deshabilite después de INT. Llamadas 21h para seguir este recuento de llamadas INT 21h. Presumiblemente, esta clase de programas requiere que A20 se desactive durante algún tiempo después de que comience a ejecutarse. (Acciones similares ocurren al entrar en INT 21h / AH = 25h y AH = 49h.) […]
- ^ a b 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-TIPs - Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds . MPDOSTIP . Release 157 (en alemán) (3 ed.). Archivado desde el original el 4 de noviembre de 2016 . Consultado el 6 de agosto de 2014 .(NB. El enlace proporcionado apunta a una versión convertida en HTML de
NWDOSTIP.TXT
, que es parte de laMPDOSTIP.ZIP
colección). [20] - ^ Compilador Pascal (PDF) . Serie de Lenguaje de Computadora Personal (1 ed.). Corporación de Máquinas de Negocios Internacionales . Agosto de 1981. Archivado (PDF) desde el original el 29 de mayo de 2020 . Consultado el 23 de septiembre de 2018 .
- ^ "NAME ENTX - Control del sistema en 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) […]
- ^ "Informe experto de Robert BK Dewar en respuesta al informe de Kenneth D. Crews". Cambridge University Press et al v. Patton et al, Filing 124, Supplemental Initial Disclosures by 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, y otros, 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 and 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 […]
- ^ Realia, Inc. (enero de 1983). "Si usa DOS, necesita este programa" . Revista PC (publicidad). Publicación Ziff-Davis . 2 (9): 417. Archivado desde el original el 22 de abril de 2019 . Consultado el 22 de abril de 2019 .
- ^ a b 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 enlazador debería generar un archivo EXE que es lógicamente equivalente al archivo EXE sin comprimir. La versión actual […] resulta en una paliza de AX. 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 pasar 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 tengo este particular […]
- ^ 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 .
- ^ a b c 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 .
- ^ "Línea A20 - Wiki OSDev" . wiki.osdev.org . Consultado el 10 de septiembre de 2020 .
Otras lecturas
- Brouwer, Andries Evert . "A20 - un dolor del pasado" . Archivado desde el original el 9 de septiembre de 2017 . Consultado el 9 de septiembre de 2017 .
- Collins, Robert R. (2001). "A20 / Reset Anomalías" . Archivado desde el original el 9 de septiembre de 2017 . Consultado el 9 de septiembre de 2017 .
- Necasek, Michal (30 de enero de 2018) [28 de enero de 2018, 26 de enero de 2018]. "WordStar otra vez" . Museo OS / 2 . Archivado desde el original el 28 de julio de 2019 . Consultado el 28 de julio de 2019 .