линия А20
A20 , , или адресная линия 20 — это одна из электрических линий, составляющих системную шину компьютерной системы на базе x86 . Линия A20, в частности, используется для передачи 21-го бита адресной шины .
Микропроцессор обычно имеет количество адресных строк по основанию двойки , равное логарифму количества слов в его физическом адресном пространстве . Например, процессору с 4 ГБ физического пространства с байтовой адресацией требуется 32 строки (log 2 (4 ГБ) = log 2 (2 32 Б) = 32), которые называются от А0 до А31. Строки названы в честь номера бита в адресе, который они передают, начиная с нуля. Младший бит является первым и поэтому имеет номер бита 0 и сигнализируется по линии A0. A20 передает бит 20 (21-й бит) и становится активным, когда адреса достигают 1 МБ или 2. 20 .
Обзор
[ редактировать ]Процессоры Intel 8086 , Intel 8088 и Intel 80186 имели 20 адресных линий, пронумерованных от A0 до A19; с их помощью процессор может получить доступ к 2 20 байт или 1 МБ. Регистры внутреннего адреса таких процессоров имели всего 16 бит. Для доступа к 20-битному адресному пространству ссылка на внешнюю память состояла из 16-битного адреса смещения , добавленного к 16-битному номеру сегмента , сдвинутого на 4 бита влево, чтобы создать 20-битный физический адрес. Результирующий адрес равен сегменту × 16 + смещение . [1] Существует множество комбинаций сегмента и смещения, которые создают один и тот же 20-битный физический адрес. Поэтому существовали различные способы адресации одного и того же байта в памяти. [2] Например, вот четыре из 4096 различных комбинаций сегмент:смещение, все они ссылаются на байт, физический адрес которого равен 0x000FFFFF (последний байт в пространстве памяти объемом 1 МБ):
- F000:ФФФФ
- ФФФФ:000F
- F555: АААФ
- F800:7FFF
В последнем случае увеличение смещения на единицу дает F800:8000, который является подходящим адресом для процессора, но поскольку он преобразуется в физический адрес 0x00100000 (первый байт размером более 1 МБ), процессору потребуется другой адрес. строка для фактического доступа к этому байту. Поскольку в линейке процессоров 8086 такой строки нет, 21-й бит выше, если он установлен, отбрасывается, что приводит к «зацикливанию» адреса F800:8000. [1] и фактически указать на физический адрес 0x00000000.
Когда IBM разработала машину IBM PC AT (1984), она решила использовать новый более производительный микропроцессор Intel 80286 . 80286 может адресовать до 16 МБ системной памяти в защищенном режиме . Однако предполагалось, что ЦП имитирует поведение 8086 в реальном режиме , в режиме запуска, чтобы он мог запускать операционные системы и программы, которые не были написаны для защищенного режима. Однако 80286 не обнулял линию A20 в реальном режиме. Следовательно, комбинация F800:8000 больше не будет указывать на физический адрес 0x00000000, а на адрес 0x00100000. В результате программы, использующие перенос адресов, больше не будут работать. Чтобы сохранить совместимость с такими программами, IBM решила исправить проблему на материнской плате .
Это было достигнуто путем установки логического вентиля на линии A20 между процессором и системной шиной, который получил название Gate-A20 . Gate-A20 можно включить или отключить с помощью программного обеспечения, чтобы разрешить или запретить адресной шине получать сигнал от A20. Он настроен на непрохождение для выполнения старых программ, использующих циклический цикл. Во время загрузки BIOS сначала включает Gate-A20, когда он подсчитывает и тестирует всю системную память, а затем отключает его перед передачей управления операционной системе.
Первоначально логический вентиль представлял собой вентиль, подключенный к контроллеру клавиатуры Intel 8042 . [1] Контроль над ним был относительно медленным процессом. С тех пор были добавлены другие методы, позволяющие более эффективно выполнять многозадачность программ, которым требуется такая обработка, с программами, имеющими доступ ко всей системной памяти. Существует несколько способов управления линией A20. [3]
Отключение A20 не приведет к переносу всех обращений к памяти, превышающих 1 МБ, а только тех, которые находятся в диапазонах 1–2 МБ, 3–4 МБ, 5–6 МБ и т. д. Программное обеспечение реального режима заботилось только об области чуть выше 1 МБ, поэтому линии Gate-A20 было достаточно.
Включение линии Gate-A20 — это один из первых шагов, которые в защищенном режиме x86 операционная система выполняет в процессе загрузки, часто до того, как управление будет передано ядру из начальной загрузки (например, в случае Linux).
Режим Virtual 8086 , представленный в Intel 80386 , позволяет моделировать цикл A20 с использованием средств виртуальной памяти процессора; физическая память может быть сопоставлена с несколькими виртуальными адресами. Таким образом, память, отображенная в первом мегабайте виртуальной памяти, может быть снова отображена во втором мегабайте виртуальной памяти. Операционная система может перехватывать изменения в шлюзе A20 и вносить соответствующие изменения в адресное пространство виртуальной памяти, что также делает несущественной эффективность переключения линии Gate-A20.
Ворота А20
[ редактировать ]Управление линией A20 было важной функцией на каком-то этапе развития архитектуры IBM PC, поскольку оно добавляло доступ к дополнительным 65 520 байтам (64 КБ — 16 байт) памяти в реальном режиме без существенных изменений программного обеспечения.
Возможно, это был «взлом»: ворота A20 изначально были частью контроллера клавиатуры на материнской плате, который мог открывать или закрывать их в зависимости от желаемого поведения. [4]
Чтобы сохранить полную совместимость с Intel 8086 , вентиль A20 все еще присутствовал в процессорах Intel до 2008 года. [5] Поскольку шлюз изначально закрывался сразу после загрузки, операционные системы защищенного режима обычно открывали шлюз A20 на ранних этапах процесса загрузки, чтобы никогда больше его не закрывать. У таких операционных систем не было причин совместимости, позволяющих держать его закрытым, и они получали доступ ко всему диапазону доступных физических адресов, открывая его.
В процессорах Intel 80486 и Pentium добавлен специальный вывод с именем A20M# , который при установлении низкого уровня приводит к тому, что бит 20 физического адреса становится нулевым для всех обращений к внутренней кэш-памяти или внешней памяти. Это было необходимо, поскольку 80486 имел встроенный кэш и маскировать этот бит во внешней логике было уже невозможно. Программному обеспечению по-прежнему необходимо манипулировать воротами, и для этого ему по-прежнему приходится иметь дело с внешними периферийными устройствами ( набором микросхем ). [6]
Руководство по проектированию системы ПК PC 2001 устраняет совместимость для линии A20: «Если логика генерации A20M # все еще присутствует в системе, эта логика должна быть прекращена, чтобы программное обеспечение записывало в порт ввода-вывода 92, бит 1, что не приводит к A20M# передается процессору». [7]
была изменена поддержка вентиля A20 В микроархитектуре Nehalem (некоторые источники ошибочно утверждают, что поддержка A20 была удалена). Вместо того, чтобы ЦП имел специальный вывод A20M#, который получает сигнал о том, следует ли маскировать бит A20, он был виртуализирован, так что информация передается от периферийного оборудования к ЦП с использованием специальных циклов шины. [ нужна ссылка ] С точки зрения программного обеспечения механизм работает точно так же, как и раньше, и операционная система все равно должна запрограммировать внешнее оборудование (которое, в свою очередь, отправляет вышеупомянутые циклы шины в ЦП) для отключения маскировки A20. [ нужна ссылка ]
Intel больше не поддерживает шлюз A20, начиная с Haswell . Страница 271 Руководства системных программистов Intel Vol. 3A от июня 2013 г. говорится: «Функциональность A20M# используется в основном старыми операционными системами и не используется современными операционными системами. На новых процессорах Intel 64 A20M# может отсутствовать». [8]
обработчик A20
[ редактировать ]Обработчик A20 — это IBM PC программное обеспечение диспетчера памяти , которое управляет доступом к области высокой памяти (HMA). Менеджеры расширенной памяти обычно предоставляют эту функциональность. Обработчики A20 названы в честь 21-й адресной строки микропроцессора — линии A20.
В DOS менеджеры HMA, такие как HIMEM.SYS, имеют «дополнительную задачу» по управлению A20. HIMEM.SYS предоставил API для открытия/закрытия A20. Сама DOS могла бы использовать эту область для некоторых своих нужд, тем самым освобождая больше обычной памяти для программ. Эта функциональность была включена DOS=HIGH
или HIDOS=ON
директивы в файле конфигурации CONFIG.SYS .
Затронутые программы
[ редактировать ]С 1980 года перенос адресов использовался внутри 86-DOS и MS-DOS для реализации точки входа DOS CALL 5 со смещением от +5 до +9 (которая эмулирует CP/M-80 в стиле CALL 5 BDOS API точку входа по адресу). смещение от +5 до +7) в префиксе сегмента программы CP/M-80 (PSP) (который частично напоминает нулевую страницу ). [9] [10] Это, в частности, использовалось программами, машинно переведенными с CP/M-80 через трансляторы языка ассемблера. [9] например, Seattle Computer Products компании TRANS86 . [11] Обработчик CALL 5, на который ссылается эта точка входа, находится по физическому адресу машины 0x000000C0 (тем самым перекрывая четыре байта точки входа в подпрограмму обслуживания прерываний , зарезервированные для INT 30h, и первый байт INT 31h в реального режима таблице векторов прерываний x86 ). [12] [13] [14] Однако в соответствии с конструкцией CP/M-80, которая загружала операционную систему непосредственно над памятью, доступной для запуска прикладной программы, 16-битный целевой адрес 8080 / Z80 хранится по смещению от +6 до +7 в нуле. Страница также может быть намеренно интерпретирована как размер первого сегмента памяти. [9] Чтобы эмулировать это в DOS с его схемой адресации сегмент: смещение 8086, 16-битное смещение точки входа дальнего вызова должно соответствовать этому размеру сегмента (т. е. 0xFEF0), который хранится по смещению от +6 до +7 в PSP. перекрывающиеся части ЗВОНКА 5. [13] [14] Единственным способом согласовать эти требования было выбрать значение сегмента, которое при добавлении к 0xFEF0 дает адрес 0x001000C0, который на 8086 заменяется на 0x000000C0. [15] [12] [14]
A20 необходимо было отключить, чтобы произошел циклический переход и чтобы программы DOS, использующие этот интерфейс, работали. Более новые версии DOS, которые могут перемещать свои части в HMA, обычно создают копию точки входа по адресу FFFF:00D0 в HMA (которая снова преобразуется в физический 0x001000C0), чтобы интерфейс мог работать независимо от состояния A20. . [14] [16]
Известно, что одна программа, использующая интерфейс CALL 5, — это версия компилятора Small-C для DOS . [17] Кроме того, утилита SPELL в Microsoft Word 3.0 (1987) является одной из программ, зависящих от интерфейса CALL 5, который необходимо настроить соответствующим образом. [18] Sun Microsystems (1993) компании PC-NFS также требует исправления CALL 5. [16]
Кроме того, для экономии места в программе, [1] и DOS использовали трюк Некоторые программисты BIOS , например, чтобы иметь один сегмент, имеющий доступ к данным программы (например, от F800:0000 до F800:7FFF, указывающий на физические адреса 0x000F8000–0x000FFFFF), а также Данные ввода-вывода (например, буфер клавиатуры), расположенные в первом сегменте памяти (с адресами от F800:8000 до F800:FFFF, указывающими на физические адреса от 0x00000000 до 0x00007FFF).
Этот трюк работает до тех пор, пока код не выполняется в малой памяти (первые 64 КБ ОЗУ), условие, которое всегда было верным в старых версиях DOS без возможностей высокой нагрузки.
Когда ядро DOS было перемещено в области с более высоким объемом памяти, для программ все чаще становился доступным нехватка памяти, что приводило к сбою программ, зависящих от циклического обновления. [19] Исполняемые загрузчики в более новых версиях DOS пытаются обнаружить некоторые распространенные типы уязвимых программ и либо оперативно исправлять их, чтобы они работали даже при нехватке памяти. [20] или загрузите их выше первых 64 КБ, прежде чем передать им выполнение. [20] Для программ, которые не определяются автоматически, LOADFIX [21] или МЕММАКС -L [21] может использоваться для принудительной загрузки программ выше первых 64 КБ.
Этот трюк использовался самим IBM/Microsoft Pascal, а также программами, скомпилированными с его помощью. [22] [23] [10] [17] от Microsoft включая MASM . [17] Другими часто используемыми утилитами разработки, использующими это, были компрессоры исполняемых файлов, от Realia. такие как Spacemaker [20] (написано Робертом Б.К. Дьюаром в 1982 году и использовалось для сжатия ранних версий Norton Utilities). [24] [25] [26] [27] от Microsoft ) и EXEPACK [19] [20] [1] [28] [17] (написанный Рубеном Борманом в 1985 году), а также эквивалентную опцию /E[XEPACK] в Microsoft LINK 3.02 и выше. [19] [1] [28] [26] Программы, обработанные с помощью EXEPACK, отображают сообщение об ошибке «Упакованный файл поврежден». [1] [20] [28]
Существуют различные сторонние утилиты для изменения сжатых исполняемых файлов, либо заменяя проблемные процедуры распаковки путем повторной загрузки, либо пытаясь расширить и восстановить исходный файл.
Современные Legacy BIOS загрузчики (такие как GNU GRUB ) используют линию A20. [3] Загрузчики UEFI используют 32-битный защищенный режим или 64-битный длинный режим .
См. также
[ редактировать ]- Ошибка совместимости
- Компьютерное хранилище
- Область высокой памяти (HMA)
- LOADFIX (директива CONFIG.SYS) (PTS-DOS)
- Неполная расшифровка адреса
- Загрузчики
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д и ж г Пол, Матиас Р. (2 февраля 2002 г.). «Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)» [Динамическая загрузка драйверов (перемещение внутрисегментного смещения для загрузки TSR в HMA)] (на немецком языке). Группа новостей : de.comp.os.msdos . Архивировано из оригинала 9 сентября 2017 г. Проверено 2 июля 2017 г. (Примечание. Дается всесторонний обзор истории и «природы» HMA , а также неочевидных конструктивных ограничений, которые необходимо учитывать при разработке расширений резидентной системы для загрузки в HMA, некоторые из которых вызваны шлюзом A20. Это также описывает, как решить эти проблемы с помощью заглушек , бэкдоров и перемещения смещения внутри сегмента — метода, используемого драйверами DR-DOS, способного перемещаться в HMA, и аналогичного (более сложному) методу, используемому в качестве основы для динамического мертвого устранение кода в авторском драйвере FreeKEYB.)
- ^ Пол, Матиас Р. (11 апреля 2002 г.). «Re: [fd-dev] АНОНС: CuteMouse 2.0 альфа 1» . freedos-dev . Архивировано из оригинала 21 февраля 2020 г. Проверено 21 февраля 2020 г.
- ^ Перейти обратно: а б «Линия А20» . OSDev Wiki . 2021-07-19. Архивировано из оригинала 30 ноября 2021 г. Проверено 19 июля 2021 г.
- ^ Шенли, Том; Андерсон, Дон (1995). Мошенничество, Джон (ред.). Системная архитектура ISA (3-е изд.). Mindshare, Inc. / Издательская компания Addison-Wesley . стр. 79–80 . ISBN 0-201-40996-8 . ISBN 978-0-201-40996-3 . [1]
- ^ «Представление упрощенной архитектуры Intel будущего» . intel.com . Интел . Проверено 22 мая 2023 г.
- ^ Шенли, Том (1996). Архитектура программного обеспечения защищенного режима . Тейлор и Фрэнсис . п. 60. ИСБН 0-201-55447-Х .
- ^ «Глава 3. Система ПК». Руководство по проектированию системы PC 2001 (PDF) . Корпорация Intel и корпорация Microsoft. п. 52 . Проверено 3 июня 2023 г.
СИС–0047. A20M# всегда сбрасывается (поднимается на высокий уровень) на процессоре.
- ^ Руководство системного программиста Intel, том. 3А от июня 2013 года .
- ^ Перейти обратно: а б с 86-DOS — Дисковая операционная система для 8086 — Руководство программиста (PDF) . Версия 0.3 (Предварительная ред.). Сиэтл, Вашингтон, США: Seattle Computer Products, Inc., 1980. стр. 7, 17. Архивировано из оригинала (PDF) 23 июня 2019 г .. Проверено 13 сентября 2011 г.
[…] Эта форма предназначена для упрощения перевода программ 8080/Z80 в код 8086 и не рекомендуется для новых программ. […] Размер памяти. Это количество байт, доступных в программном сегменте. […]
(41 страница) - ^ Перейти обратно: а б Летвин, Джеймс (10 апреля 1985 г.). «Метод и операционная система выполнения программ в многорежимном микропроцессоре» . Майкрософт . US06722052, US4779187A. Архивировано из оригинала 23 сентября 2018 г. Проверено 23 сентября 2018 г.
[…] Некоторые программы, написанные для 8086, для правильной работы полагаются на [перенос адресов]. К сожалению, в реальном режиме 80286 объем памяти превышает 1 мегабайт и не переносится в области с низким объемом памяти. Следовательно, программы, в том числе написанные на MicroSoft PASCAL , и программы, использующие функцию «Вызов 5» MS-DOS, не будут работать в стандартной системе 80286. […] Например, никакие программы PASCAL не загружаются в память ниже 64 КБ , а специальная инструкция помещается в нижние ячейки памяти выше 1 мегабайта — например, адрес 100000h или 100010h. […]
{{cite web}}
: CS1 maint: bot: исходный статус URL неизвестен ( ссылка ) - ^ Тейлор, Роджер; Леммонс, Фил (июнь 1982 г.). «Восходящая миграция. Часть 1: Переводчики. Использование программ перевода для перемещения программ CP/M-86 в CP/M и MS-DOS» [Использование программ перевода для перемещения программ CP/M в CP/M-86 и MS-DOS] (PDF) . БАЙТ . Том. 7, нет. 6. BYTE Publications Inc., стр. 321–322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344 [342, 344]. ISSN 0360-5280 . КОДЕН БАЙТЕДЖ . Архивировано (PDF) из оригинала 16 января 2020 г. Проверено 15 января 2020 г.
[…] Получение доступа к CP/M-86 […] Для получения доступа к CP/M-86 необходимо поместить код функции в регистр CL, поместить байтовый параметр в регистр DL или поместить словный параметр в регистр DX, помещение сегмента данных в регистр DS (сегмент данных обычно не изменяется для преобразованной программы) и выполнение программного прерывания INT #224 . Результат возвращается в регистр AL, если это байтовое значение; если результатом является словесное значение, оно возвращается в регистры AX и BX. Значения двойного слова возвращаются со смещением в регистрах BX и сегментом в регистре ES. Преобразование программ из CP/M-80 в CP/M-86 требует замены вызова ячейки 5 программным прерыванием INT #224. Еще одно необходимое изменение связано с « теплой» загрузкой . В CP/M-80 доступ к «горячей» загрузке можно получить с помощью системного вызова с кодом функции 0 для перехода в ячейку 0. Однако CP/M-86 не поддерживает переход в ячейку 0. В результате , вы должны изменить этот выход программы в переведенной программе, чтобы программа работала правильно. При условии, что вызов ячейки 5 заменен на INT #224, выполнено изменение «горячей» загрузки и что регистры сопоставлены правильно, не должно возникнуть особых проблем с получением транслированной программы доступа к системным функциям CP/M-86. . […] Получение доступа к MS-DOS […] Хотя MS-DOS имеет «предпочтительный» механизм доступа к системе через программное прерывание INT #33 , для «ранее существовавших» программ предусмотрен дополнительный механизм, совместимый с CP/M- 80 соглашений о вызовах, по крайней мере, для функций в диапазоне 0–36. Что касается системных вызовов в пределах разрешенного диапазона функций, программисту не нужно ничего делать с переведенными программами, чтобы заставить их работать под MS-DOS, кроме правильного сопоставления регистров. MS-DOS также поддерживает функцию «горячей» загрузки CP/M-80. Переход в позицию 0 в MS-DOS вызывает программное прерывание INT #32 , которое функционально является завершением программы и обычным способом выхода из программы. […]
[2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12 ] [13] [14] [15] (13 страниц) - ^ Перейти обратно: а б Шеперс, Арне (1991). «Глава 5: Подробности об EXEC — префикс сегмента программы (PSP)». DOS 5 для программистов: Полный справочник (на немецком языке) (1-е изд.). Аддисон Уэсли (Германия) ГмбХ . С. 148-151, 971-972 [149, 971-972]. ISBN 3-89319-350-2 . (более 1123 страниц, раскладной, дискета 5,25 дюйма)
- ^ Перейти обратно: а б «Формат префикса сегмента программы (PSP)» . ИНТЕР61 . 2000. Архивировано из оригинала 17 февраля 2020 г. Проверено 19 декабря 2019 г.
- ^ Перейти обратно: а б с д Некасек, Михал (13 сентября 2011 г.). «Да вообще, кому нужен перенос адресов?» . Музей OS/2 . Архивировано из оригинала 19 февраля 2020 г. Проверено 19 февраля 2020 г.
[…] 86-DOS , а следовательно, и PC DOS / MS-DOS , использовали хитрый трюк. Байт по смещению 5 PSP содержал код операции дальнего вызова (9Ah); слово по смещению 6 PSP содержало соответствующее значение, указывающее размер сегмента программы, а также часть смещения дальнего вызова. Слово со смещением 8, которое служило частью сегмента дальнего вызова, было создано таким образом, что в сочетании со смещением оно оборачивалось (хорошо понятная особенность ЦП 8086 ) и указывало на адрес 0:C0h, который содержит вектор прерывания 30h. […] Проблема с интерфейсом совместимости возникает, когда у загруженной программы фактически доступно менее 64 КБ. Если это произойдет, слово со смещением 6 PSP может не содержать правильного значения, но интерфейс CALL 5 все равно будет работать; инструкция по смещению 5 будет CALL 0:C0h, в результате чего сообщаемый размер сегмента программы будет C0h. Неясно, почему DOS делает это; похоже, это ошибка в DOS 5.0 и более поздних версиях, поскольку DOS 4.0 и более ранние версии просто корректируют часть сегмента так, чтобы она переходила в 0:C0h. Это работает до тех пор, пока размер сегмента программы выровнен по абзацу, и так оно и будет. […]
- ^ Нортон, Питер (1985). Руководство Питера Нортона для программиста по IBM PC (Иллюстрированное издание). Корпорация Майкрософт . ISBN 0-91484546-2 . ISBN 978-0-91484546-1 . п. 263:
[…] С помощью процесса, слишком причудливого и сложного для объяснения, сегментированный адрес устанавливается так, что он служит двум целям. Он не только указывает на диспетчер функций DOS, но часть смещения также указывает, какую часть сегмента кода мы можем использовать (до шестнадцатеричного FFF0, на 16 байт меньше 64 КБ). Смещенная часть адреса, та часть, которая нас интересует, расположена по смещению 6 в PSP, после кода операции инструкции по смещению 5. Результатом этого является то, что если DOS имеет менее 64 КБ для предоставления нашим программам, мы можем использовать это поле, чтобы узнать, сколько байт доступно — метод, который должен работать с большинством или всеми оконными и многозадачными системами. […]
(426 страниц) - ^ Перейти обратно: а б «Комплект машиночитаемого исходного кода Caldera OpenDOS (MRS) 7.01» . Caldera, Inc., 1 мая 1997 г. [16 апреля 1997 г.]. Архивировано из оригинала 07 августа 2021 г. Проверено 02 января 2022 г.
[…] BIOSINIT.A86 1.40 93.11.11 12:25:29 […] Изменения заголовка VDISK […] BIOSINIT.A86 1.39 93.11.08 23:19:22 […] SetupHMA выполняет инициализацию CALL5 […] теперь исправим JMPF в hi-memory для ссылки CALL5 для PC-NFS […]
[16] (NB. OpenDOS 7.01 MRS: IBMBIO\BIOSINIT.A86 SetupHMA) - ^ Перейти обратно: а б с д Некасек, Михал (16 марта 2018 г.). «Ворота А20: это был не WordStar» . Музей OS/2 . Архивировано из оригинала 23 сентября 2018 г. Проверено 23 сентября 2018 г.
- ^ Парсонс, Джефф (27 мая 2018 г.) [1 декабря 1987 г., 2 августа 1987 г.]. «Кто-нибудь наложил на меня ЗАКЛИНАНИЕ» . ПКджс . Архивировано из оригинала 29 января 2019 г. Проверено 21 апреля 2019 г.
- ^ Перейти обратно: а б с Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михелс, Раймонд Дж.; Кайл, Джим (1994) [ноябрь 1993 г.]. Уильямс, Эндрю (ред.). Недокументированная DOS: Руководство программиста по зарезервированным функциям и структурам данных MS-DOS, расширенное за счет включения MS-DOS 6, Novell DOS и Windows 3.1 . Серия программ Эндрю Шульмана (1-е издание, 2-е изд.). Ридинг, Массачусетс, США: Издательство Addison Wesley Publishing Company . стр. 349–350 . ISBN 0-201-63287-Х . ISBN 978-0-201-63287-3 .
[…] Если оставить строку A20 включенной, это вызовет проблемы с программами, ожидающими выполнения цикла […] Одной из таких программ была процедура распаковки, созданная собственным компоновщиком Microsoft , изначально включенная в любой файл, который был EXEPACKed для уменьшения его размера! По словам Филиппа Гарднера, автора условно-бесплатной утилиты обслуживания DOSMAX UMB и ветерана в области дизассемблирования DOS, пресловутое сообщение об ошибке «Packed File Corrupt», которое стало появляться повсюду вскоре после появления DOS 5.0, напрямую связано с тем, что Линия A20 включена, и исходная процедура распаковки зависела от эффекта переноса сегментов для правильного расширения сжатых файлов. […]
(xviii+856+vi страниц, 3,5-дюймовая дискета [17] ) Опечатки: [18] [19] (Примечание. На странице 350 книги содержится подробное описание внутренней работы проблемной процедуры распаковки EXEPACK. .) - ^ Перейти обратно: а б с д и Пол, Матиас Р. (07.10.2002) [2000]. «Re: Проблемы, связанные с masm.com (PSP)» . Группа новостей : alt.lang.asm . Архивировано из оригинала 3 сентября 2017 г. Проверено 3 сентября 2017 г.
[…] DR Concurrent DOS 386 (с 1988-07-08) будет загружать программы EXEPACK выше отметки 64 КБ, то есть за пределами « самой низкой памяти », путем расширения блока памяти, содержащего среду программы […] DR DOS 5.0 + всегда загружает программы формата .EXE без каких-либо исправлений, а также (с 25 мая 1990 г.) также программы формата .COM , сжатые с помощью SpaceMaker - и, следовательно, начиная с 9Ch 55h (PUSHF/PUSH BP) - выше отметки 64 КБ, чтобы избежать EXEPACK. обернуть ошибку. Он делает это путем расширения блока памяти, содержащего среду программы, с 14 декабря 1989 г. он даже будет выделять несколько заполнителей, когда это необходимо. Этот код расширения среды отключен, если имя родительской программы, хранящееся в MCB, — «WIN», чтобы повысить производительность, когда WIN.COM запускает KERNEL.EXE (0 элементов перемещения). […] Ядро MS-DOS / PC DOS 5.0 +[…] сканирует различные последовательности кода в исполняемых файлах формата .EXE и применяет исправления для различных версий файлов EXEPACK, чтобы позволить им работать в самой низкой памяти (когда DOS в HMA ), то есть сегмент нагрузки < 64 Кб. В противном случае они отобразят «Упакованный файл поврежден». Код проверяет, что точка входа кода […] не < 0002h […], а затем считывает СЛОВО, непосредственно предшествующее точке входа […] Если это СЛОВО читается как 5242h («RB»), предполагается, что файл имеет EXEPACK. Затем код ищет одну из нескольких комбинаций кодовых последовательностей по смещениям от этой сигнатуры «RB». […] Ядро MS-DOS 5.0+[…] сканирует неизвестный класс исполняемых файлов .COM . Если их подписи найдены в файле, переменная обратного отсчета A20 по смещению 18h в таблице информации о дисковом буфере (см. Таблицу «Информация о дисковом буфере DOS 5.0-6.0») будет установлена на 10, что приведет к отключению A20 после INT. 21h вызывает это количество последующих INT 21h вызовов. Предположительно, этот класс программ требует отключения A20 на некоторое время после начала выполнения. (Аналогичные действия происходят при вводе в INT 21h/AH=25h и AH=49h.) […]
- ^ Перейти обратно: а б Пол, Матиас Р. (30 июля 1997 г.) [18 июня 1996 г., 1 мая 1994 г.]. «V.4. Лучшее использование памяти с помощью самозагружающихся программ». NWDOS-TIPs — Советы и рекомендации по Novell DOS 7 с учетом недокументированных подробностей, ошибок и обходных путей . Выпуск 157 (на немецком языке) (3-е изд.). Архивировано из оригинала 4 ноября 2016 г. Проверено 6 августа 2014 г.
{{cite book}}
:|work=
игнорируется ( help ) (Примечание. Предоставленная ссылка указывает на версию файла, преобразованную в HTML.NWDOSTIP.TXT
, который является частьюMPDOSTIP.ZIP
сборник.) [20] - ^ Компилятор Паскаля (PDF) . Серия персональных компьютерных языков (1-е изд.). Международная корпорация бизнес-машин . Август 1981 г. Архивировано (PDF) из оригинала 29 мая 2020 г. Проверено 23 сентября 2018 г.
- ^ «ИМЯ ENTX — управление системой выполнения Microsoft MS-DOS Computer Pascal» . Версия 1.00. Microsoft Corp. , 1981. Архивировано из оригинала 23 февраля 2020 г. Проверено 23 февраля 2020 г.
[…] DX — окончательное значение DS (может быть отрицательным) […] окончательное значение DS (может быть отрицательным) […]
- ^ «Экспертный отчет Роберта Б. К. Дьюара в ответ на отчет Кеннета Д. Крюса». Cambridge University Press и др. против Паттона и др., Заявление 124, Дополнительные первоначальные раскрытия информации от Cambridge University Press, Oxford University Press, Inc., Sage Publications, Inc. – Cambridge University Press, Oxfort University Press, Inc. и Sage Publications, Inc. против Марка П. Беккера, президента Университета штата Джорджия и др., Гражданский иск № 1:08-CV-1425-ODE (судебный документ). Окружной суд США Северного округа Джорджии, отделение Атланты. п. 18. Приложение A. Архивировано из оригинала 1 мая 2018 г. Проверено 23 апреля 2019 г.
[…] SPACEMAKER и TERMULATOR, стандартное программное обеспечение для IBM PC ( PC DOS утилита сжатия файлов и эмулятор VT-100 ), продаваемое Realia, Inc. РБК Дьюар (1982-1983), язык ассемблера 8088, 8000 строк […]
- ^ Realia, Inc. (январь 1983 г.). «Если вы используете DOS, вам нужна эта программа» . Журнал ПК (реклама). 2 (9). Ziff-Davis Publishing : 417. Архивировано из оригинала 22 апреля 2019 г. Проверено 22 апреля 2019 г.
- ^ Перейти обратно: а б Дьюар, Роберт Берридейл Кейт (13 марта 1984 г.). «DOS 3.1 ASMB (еще одна глупая ошибка Microsoft)» . [электронная почта защищена] . Архивировано из оригинала 01 мая 2018 г. Проверено 23 апреля 2019 г.
[…] Параметр /E компоновщика должен генерировать EXE-файл, который логически эквивалентен несжатому EXE-файлу. Текущая версия […] приводит к сбою AX. AX при входе в EXE-файл имеет определенное значение (оно указывает на достоверность параметров диска), поэтому его следует передать в несжатый образ. Учитывая это одно очень очевидное нарушение правил интерфейса, могут быть и другие, я не удосужился продолжить расследование […] Я написал программу Realia SpaceMaker , которая делает то же самое, что и опция EXEPACK (но, разумеется, делает ли это не иметь этого конкретного […]
- ^ Некасек, Михал (30 апреля 2018 г.). «Реалия Космосмейкер» . Музей OS/2 . Архивировано из оригинала 27 января 2019 г. Проверено 22 февраля 2019 г.
- ^ Перейти обратно: а б с Некасек, Михал (23 марта 2018 г.). «EXEPACK и ворота А20» . Музей OS/2 . Архивировано из оригинала 13 ноября 2018 г. Проверено 20 апреля 2019 г.
Дальнейшее чтение
[ редактировать ]- Брауэр, Андрис Эверт (2001). «А20 – боль из прошлого» . Архивировано из оригинала 9 сентября 2017 г. Проверено 9 сентября 2017 г.
- Коллинз, Роберт Р. (2001). «A20/Сброс аномалий» . Архивировано из оригинала 9 сентября 2017 г. Проверено 9 сентября 2017 г.
- Некасек, Михал (30 января 2018 г.) [28 января 2018 г., 26 января 2018 г.]. «Снова WordStar» . Музей OS/2 . Архивировано из оригинала 28 июля 2019 г. Проверено 28 июля 2019 г.
- Ингеносо, Тони (20 декабря 1998 г.). «Глава 13. Ворота А20 и HMA». Улучшение работы кода — Как минимизировать размер кода 80x86 и иногда сделать его быстрее (электронная книга). Архивировано из оригинала 18 ноября 2019 г. Проверено 18 ноября 2019 г.
- Ладлофф, Кристиан (2011). «Устаревшие элементы архитектуры x86: KBC, PS/2 и A20M#» . сайт sandpile.org . Архивировано из оригинала 15 августа 2021 г. Проверено 02 января 2022 г.