A20 라인

A20 line
대용량 메모리 영역은 A20 게이트가 활성화되어 있는 경우에만 80286 프로세서에서 실제 모드로 사용할 수 있습니다.

A20(주소선 20)은 x86 기반 컴퓨터 시스템의 시스템 버스를 구성하는 전기 회선 중 하나입니다.특히 A20 회선은 주소 버스상의 21번째 비트를 송신하기 위해서 사용됩니다.

마이크로프로세서는 일반적으로 물리 어드레스 공간에 있는 워드수2진수 로그와 같은 어드레스 라인을 가지고 있습니다.예를 들어, 4GB의 바이트 주소 지정 가능한 물리적 공간을 가진 프로세서는 32줄(log(4GB) = 232)이2 필요하며, 이름은 A0 ~ A31입니다.회선의 이름은, 송신하는 주소의 비트의 제로 베이스의 번호로부터 붙여집니다.최하위 비트는 최초이며, 따라서 비트0의 번호가 매겨져 A0 회선으로 시그널링 됩니다.A20은 비트 20(21번째 비트)을 송신해, 주소가 1 MB 또는20 2 에 이르면 액티브하게 됩니다.

개요

인텔 8086, 인텔 8088인텔 80186 프로세서는 20개의 주소 행(A0 ~ A19)을 가지고 있었습니다.이것들에서는 프로세서는 2바이트(1MB)에 액세스20 할 수 있습니다.이러한 프로세서의 내부 주소 레지스터는 16비트밖에 없었습니다.20비트 주소 공간에 액세스하기 위해 외부 메모리 참조는 16비트 세그먼트 번호에 추가된 16비트 오프셋 주소로 구성되어 20비트의 물리 주소를 생성하기 위해 4비트를 이동했습니다.결과 주소는 세그먼트 × 16 + [1]오프셋같습니다.세그먼트와 오프셋에는 많은 조합이 있어 동일한 20비트의 물리 주소를 생성할 수 있습니다.따라서 [2]메모리에서 동일한 바이트를 주소 지정하는 방법은 다양했습니다.예를 들어, 4096개의 다른 세그먼트: offset 조합 중 4개를 나타냅니다.모두 물리 주소가 0x000인 바이트를 참조합니다.FFFFF(1MB 메모리 영역의 마지막 바이트):

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

마지막 방법으로 참조하면 오프셋이 1개 증가하면 F800:8000이 생성됩니다.이것은 프로세서의 적절한 주소입니다만, 물리 주소 0x00100000(1MB 이상의 첫 번째 바이트)로 변환되기 때문에 프로세서는 그 바이트에 실제로 액세스 하기 위해서 다른 주소 행이 필요합니다.프로세서 8086 라인에는 이러한 행이 없기 때문에, 상기의 21번째 비트가 설정중에 드롭 되어, 주소 F800:8000이 「감겨져」[1] 물리 주소 0x00000000을 실제로 가리키게 됩니다.

IBM은 IBM PC AT(1984) 기계를 설계할 때 새로운 고성능 인텔 80286 마이크로프로세서를 사용하기로 결정했습니다.80286은 보호 모드에서 최대 16MB의 시스템 메모리를 처리할 수 있습니다.단, CPU는 8086의 동작을 리얼 모드(스타트업 모드)에서 에뮬레이트하여 보호 모드용으로 작성되지 않은 운영 체제와 프로그램을 실행할 수 있도록 되어 있었습니다.단, 80286에서는 A20 회선을 리얼 모드로 강제적으로 제로로 하지 않았습니다.따라서 F800:8000의 조합은 물리 주소 0x00000000이 아니라 주소 0x00100000을 가리킵니다.그 결과, 주소 랩 어라운드에 의존하는 프로그램은 동작하지 않게 됩니다.이러한 프로그램과의 호환성을 유지하기 위해 IBM은 메인보드의 문제를 해결하기로 결정했습니다.

이것은 프로세서와 시스템버스 사이의 A20 라인에 논리 게이트를 삽입함으로써 이루어졌으며, Gate-A20이라는 이름이 붙여졌습니다.Gate-A20은 소프트웨어에 의해 활성화 또는 비활성화되어 주소 버스가 A20으로부터 신호를 수신하는 것을 허용 또는 방지할 수 있습니다.랩 어라운드에 의존하는 오래된 프로그램의 실행에 대해서는 non-passing으로 설정됩니다.기동시에, BIOS 는, 모든 시스템 메모리를 카운트 해 테스트할 때, 우선 Gate-A20 를 유효하게 하고 나서, OS 에 제어를 전송 하기 전에 무효로 합니다.

원래 로직 게이트는 인텔 8042 키보드 [1]컨트롤러에 연결된 게이트였습니다.그것을 제어하는 것은 비교적 느린 과정이었다.그 후, 모든 시스템 메모리에 액세스 하는 프로그램과의 랩 어라운드를 필요로 하는 프로그램의 멀티태스킹을 보다 효율적으로 실시할 수 있도록 다른 방법이 추가되었습니다.A20 [3]회선을 제어하는 방법은 여러 가지가 있습니다.

A20의 연결을 해제해도 1MB를 초과하는 모든 메모리액세스가 랩핑되는 것은 아닙니다.1 ~ 2MB, 3 ~4MB, 5 ~6MB 등의 메모리액세스뿐이에요리얼 모드 소프트웨어는 1MB를 약간 넘는 영역에만 신경을 썼기 때문에 Gate-A20 라인으로 충분했습니다.

Gate-A20 회선을 유효하게 하는 것은 부트업 프로세스에서 보호 모드x86 운영체제가 실행하는 첫 번째 단계 중 하나입니다(예를 들어 Linux의 경우).

인텔 80386에 도입가상8086 모드에서는 프로세서의 가상 메모리 기능을 사용하여 A20 랩 어라운드를 시뮬레이트할 수 있습니다.물리 메모리를 복수의 가상 주소에 매핑할 수 있습니다.따라서 가상 메모리의 첫 번째 메가바이트로 매핑된 메모리는 두 번째 메가바이트로 다시 매핑될 수 있습니다.오퍼레이팅시스템은 게이트 A20에 대한 변경을 대행 수신하여 가상 메모리주소 공간에 대응하는 변경을 가할 수 있습니다.이를 통해 Gate-A20 회선의 토글 효율도 무관해집니다.

A20 게이트

A20 라인을 제어하는 것은 IBM PC 아키텍처의 성장에 있어 중요한 기능 중 하나였습니다. A20 라인은 소프트웨어 변경 없이 실제 모드에서 65,520 바이트(64 KB - 16 바이트)의 메모리에 대한 액세스를 추가했기 때문입니다.

A20 게이트는 원래 마더보드상의 키보드 컨트롤러의 일부였기 때문에 원하는 [4]동작에 따라 열거나 닫을 수 있었습니다.

A20 게이트는 현재도 많은[citation needed] 최신 PC에 존재하며, 게이트는 부팅 직후에 닫힙니다.최신 보호 모드 운영 체제는 일반적으로 부팅 프로세스 중에 A20 게이트를 일찍 열고 다시 닫지 않습니다.이러한 운영체제는 닫힌 상태로 유지해야 하는 호환성 이유가 없으며, 이러한 운영체제를 열면 사용 가능한 모든 물리적 주소에 액세스할 수 있습니다.

인텔 80486과 펜티엄은 A20M#이라는 이름의 특수 핀을 추가했습니다.이 핀은 물리 주소의 비트 20을 낮게 설정하면 모든 온칩 캐시 액세스 또는 외부 메모리 액세스에서 0이 됩니다.80486이 온칩 캐시를 도입했기 때문에 외부 로직에서 이 비트를 마스킹하는 것은 더 이상 불가능했습니다.소프트웨어는 여전히 게이트를 조작해야 하며 이를 [5]위해 외부 주변기기(칩셋)를 처리해야 합니다.

Nehalem 마이크로아키텍처에서는 A20 게이트 지원이 변경되었습니다(일부 소스에서는 A20 지원이 제거되었다고 잘못 주장하고 있습니다).CPU에는 A20 비트를 마스크할지 여부를 나타내는 신호를 수신하는 전용 A20M#핀이 있는 것이 아니라 특수한 버스 [citation needed]사이클을 사용하여 주변 하드웨어에서 CPU로 정보가 전송되도록 가상화되어 있습니다.소프트웨어의 관점에서 보면, 이 메커니즘은 종래와 똑같이 동작합니다.또,[citation needed] operating system에서는, A20 마스킹을 무효로 하기 위해서, 외부 하드웨어(상기의 버스 사이클을 CPU로 송신)를 프로그래밍 할 필요가 있습니다.

인텔은 Haswell부터 A20 게이트를 지원하지 않습니다.2013년 6월부터의 인텔·시스템·프로그래머·매뉴얼 Vol. 3A 의 271 페이지에는, 다음과 같이 기술되어 있습니다.「A20M# 의 기능은, 주로 구식 operating·시스템에 의해서 사용되고 있지, 최신의 operating·시스템에서는 사용되지 않습니다.최신 인텔 64 프로세서에서는 A20M#이 [6]없을 수 있습니다.

A20 핸들러

A20 핸들러는 High Memory Area(HMA; 고메모리 영역)에 대한 접근을 제어하는 IBM PC 메모리 매니저 소프트웨어입니다.일반적으로 확장 메모리 매니저는 이 기능을 제공합니다.A20 핸들러는 마이크로프로세서의 21번째 주소 행인 A20 라인의 이름을 따서 명명됩니다.

DOS에서는 HIMEM 등의 HMA 매니저.SYS에는 A20을 관리하는 "추가 태스크"가 있습니다.HIMEM.SYS는 A20의 개폐를 위한 API를 제공하였습니다.DOS 자체는 스토리지 요구의 일부를 위해 이 영역을 사용할 수 있기 때문에 프로그램용으로 보다 일반적인 메모리를 확보할 수 있습니다.이 기능은, 에 의해서 유효하게 되었습니다.DOS=HIGH또는HIDOS=ON명령어를 참조해 주세요.SYS 컨피규레이션파일

영향을 받는 프로그램

1980년 이후 86-DOS와 MS-DOS내부적으로 DOS CALL 5 엔트리를 +5 ~ +9(CP/M-80 스타일의 CALL 5 BDOS API 엔트리를 +5 ~ +7로 에뮬레이트)로 구현하기 위해 사용되었으며, 이는 부분적으로 CP/80의 0유사하다.특히 이 기능은 CP/M-80에서 시애틀 컴퓨터 제품의 TRANS86[9]같은 어셈블리 언어 번역기[7] 통해 기계로 번역된 프로그램에 의해 활용되었습니다.이 엔트리 포인트가 참조하는 CALL 5 핸들러는 머신의 물리 주소 0x0000C0에 있습니다(따라서 INT 30h용으로 예약된 인터럽트 서비스 루틴엔트리 포인트의 4바이트와 x86 real mode interrupt [10][11][12]vector 테이블의 INT 31h의 첫 번째 바이트가 중복됩니다).그러나 애플리케이션 프로그램이 실행할 수 있는 메모리 바로 위에 운영체제를 로드하는 CP/M-80 설계에 따르면 제로 페이지의 오프셋 +6 ~ +7에 저장된 8080/Z80 16비트 타깃 주소는 의도적으로 첫 번째 메모리 [7]세그먼트의 크기로 해석될 수도 있습니다.8086 세그먼트: 오프셋 어드레싱 방식을 사용하여 DOS에서 이를 에뮬레이트하기 위해 원거리 콜엔트리 포인트의 16비트 오프셋은 이 세그먼트 크기 (즉, 0xFEF0)와 일치해야 했습니다.이것은 PSP의 오프셋 +6 ~ +7에 저장되어 Call [11][12]5의 일부가 겹칩니다.이러한 요건을 조정하는 유일한 방법은 0xFEF0에 추가했을 때 0x001000C0의 주소가 되는 세그먼트값을 선택하는 것입니다.이 값은 8086에서는 0x000000C0으로 반환됩니다.[13][10][12]

랩어라운드가 발생하고 이 인터페이스를 사용하는 DOS 프로그램이 작동하려면 A20을 비활성화해야 합니다.새로운 DOS 버전에서는, 그 일부를 HMA에 재배치할 수 있는 경우는, 통상, HMA의 FFFF:00D0 로의 엔트리 포인트의 카피를 작성합니다(이것은 다시 물리적인 0x001000C0 로 해결됩니다).이것에 의해, 인터페이스는 [12][14]A20 의 상태에 관계없이 동작할 수 있습니다.

CALL 5 인터페이스를 사용하는 것으로 알려진 프로그램 중 하나는 Small-C [15]컴파일러의 DOS 버전입니다.또, Microsoft Word 3.0(1987)의 SPILE 유틸리티는,[16] 대응하는 설정 대상의 CALL 5 인터페이스에 의존하는 프로그램의 1개입니다.Sun Microsystems의 PC-NFS(1993)에서는 CALL 5 수정도 필요합니다.[14]

또한 프로그램 공간을 [1]절약하기 위해 일부 BIOS 및 DOS 프로그래머가 프로그램 데이터에 액세스할 수 있는 세그먼트(예: F800:0000에서 F800:7)를 1개 갖는 방법을 사용했습니다.FFF, 물리 주소 0x000을 가리키다F8000 – 0x000FFFF) 및 첫 번째 메모리세그먼트(주소 F800:8000 ~F800)에 배치된 I/O 데이터(키보드 버퍼 등):물리 주소 0x000000~0x00007을 가리키는 FFFFFFF)

이 트릭은 부하가 높은 기능이 없는 이전 버전의 DOS에서 항상 적용되었던 첫 번째 64KB RAM인 낮은 메모리에서 코드가 실행되지 않는 한 계속 작동합니다.

DOS 커널이 메모리 용량이 더 큰 영역으로 재배치됨에 따라 프로그램에서 낮은 메모리를 사용할 수 있게 되어 랩어라운드에 의존한 프로그램이 [17]실패하게 되었습니다.새로운 버전의 DOS에서 실행 가능한 로더는 영향을 받는 일부 일반적인 유형의 프로그램을 검출하여 낮은 메모리에서도[18] 동작하도록 즉시 패치를 적용하거나 처음 64KB 이상의 로드를 [18]실행한 후 해당 프로그램에 실행되도록 시도합니다.자동으로 검출되지 않는 프로그램의 경우 LOADFIX[19] 또는 MEMMAX -L을[19] 사용하여 프로그램을 처음 64KB 이상으로 강제 로드할 수 있습니다.

이 트릭은 IBM/Microsoft Pascal 자체뿐만 아니라 Microsoft의 [15]MASM을 포함한 [20][21][8][15]컴파일된 프로그램에 의해 이용되었습니다.Realia의 Spacemaker[18](로버트 B.K. 보온병에 의해 1982년에, 노턴 Utilities[22][23][24][25]의 초기 버전을 압축하는 데 사용했다 쓴), 마이크로 소프트 EXEPACK[17][18][1][26][15](르우벤 보먼 판사에 의해 1985년에 쓰여진)뿐만 아니라 등가 [XEPACK]옵션 같은 다른 일반적으로 사용되는 개발 전력 회사는 이것을 이용했다 실행 압축기.마이크로 소프트의 링크 3.0.2가 높다.[17][1][26][24]EXEPACK으로 처리되는 프로그램에서는 "Facked file is corrupted"[1][18][26] (패킹된 파일이 파손되었습니다)라는 오류 메시지가 나타납니다.

압축된 실행 파일을 수정하기 위해 다양한 서드파티 유틸리티가 존재합니다.이 유틸리티는 문제가 있는 압축 해제 루틴을 재서브하여 대체하거나 원래 파일을 확장하여 복원하려고 시도합니다.

최신 레거시 BIOS 부트 로더(GNU GRUB 등)는 A20 [3]라인을 사용합니다.UEFI 부트 로더는 32비트 보호 모드 또는 64비트모드를 사용합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c d e f g 폴, 마티아스 R.(2002-02-02)."Treiber dynamischnachladen(Intra-Segment-Offset-Relokation 예 라덴 폰 TSRs 다이 해병 공격 헬기 대대에서)"[Loading 운전자 동적으로(Intra-segment은 해병 공격 헬기 대대에 로드하 TSRs으로 재배치함를 상쇄함)](독일어로).뉴스:de.comp.os.msdos.그 2017-09-09에 원래에서 Archived..(NB. 해병 공격 헬기 대대의 역사와"자연"과 분명하지 설계 제약 조건들은 해병 공격 헬기 대대, 어떤 사람의 A20 문에 의해 발생한다로 로드될 것 시스템 확장 개발하고 관찰되기에에 대한 포괄적인 개요를 제공하 2017-07-02 Retrieved.또한 스터브, 백도어 및 세그먼트오프셋 재배치를 사용하여 이러한 문제를 해결하는 방법에 대해서도 설명합니다.이것은 DR-DOS 드라이버가 HMA로 재배치할 수 있는 방법이며, 작성자의 FreeKEYB 드라이버에서 동적 데드 코드를 제거하기 위한 기초로서 사용되는 (더 복잡한) 방법과 유사합니다.
  2. ^ Paul, Matthias R. (2002-04-11). "Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1". freedos-dev. Archived from the original on 2020-02-21. Retrieved 2020-02-21.
  3. ^ a b "A20 Line". OSDev Wiki. 2021-07-19. Archived from the original on 2021-11-30. Retrieved 2021-07-19.
  4. ^ Shanley, Tom; Anderson, Don (1995). Swindle, John (ed.). ISA System Architecture (3 ed.). Mindshare, Inc. / Addison-Wesley Publishing Company. pp. 79–80. ISBN 0-201-40996-8. ISBN 978-0-201-40996-3. [1]
  5. ^ Shanley, Tom (1996). Protected mode software architecture. Taylor & Francis. p. 60. ISBN 0-201-55447-X.
  6. ^ 2013년 6월부터 인텔시스템 프로그래머 매뉴얼 제3A권
  7. ^ a b c 86-DOS-디스크 운영 시스템은 8086-프로그래머의 설명서(PDF).버전 0.3(예비 교육.).시애틀, 워싱턴, USA:시애틀 컴퓨터 프로덕트 사는 1980년.를 대신하여 서명함. 7,17.2019-06-23에 있는 원본(PDF)에서 Archived.2011-09-13 Retrieved.[…]이 형식 8086코드로 8080/Z80 프로그램의 번역을 축소시키기 위해서, 그리고 새로운 프로그램을 위해 권장되지 않는다 제공된다.[…]메모리 크기이다.바이트는 프로그램 세그먼트에서 제공되는 수다.[…](41페이지)
  8. ^ a b Letwin, James (1985-04-10). "Method and operating system for executing programs in a multi-mode microprocessor". Microsoft. US06722052, US4779187A. Archived from the original on 2020-02-18. Retrieved 2018-09-23. […] Some programs written for the 8086 rely on [address wrap-around] to run properly. Unfortunately, memory locations extend above 1 megabyte in the real mode of the 80286 and are not wrapped to low memory locations. Consequently, programs including those written in MicroSoft PASCAL and programs which use the "Call 5" feature of MS-DOS will fail on the standard 80286 system. […] For example, no PASCAL programs are loaded into memory below 64K, and a special instruction is placed in the lower memory locations above 1 megabyte–for example, address 100000h or 100010h. […] [2]
  9. ^ 테일러, 로저, Lemmons, 필(6월 1982년)."위로 이동- 제1부:통역사는-CP/M과 MS-DOS에 CP/M-86 프로그램들을 이동할 번역 프로그램을 사용하여"[CP/M-86과 MS-DOS에 CP/M 프로그램들을 이동할 번역 프로그램을 사용하여](PDF). BYTE.Vol7, 머드 6.BYTE Publications 주식 회사를 대신하여 서명함. 321–322, 324,326,328,330,332의 334,336,338,340,342년, 344[342종의, 344].ISSN 0360-5280.CODEN BYTEDJ.Archived 원본에서 2020-01-16에(PDF).2020-01-15 Retrieved.[…]를 얻고 있는 새로운 접근 CP/M-86에[…]은 CL레지스터에 기능 코드를 필요로 할 경우, DL에 등록 또는 DX레지스터에 말을 매개 변수를 바이트 매개 변수를 배치하는 디도스는 레지스터(데이터 세그먼트 보통 차환 프로그램 동안 변하지 않다)의 데이터 세그먼트 두고, 소프트웨어 i. 실행 중인 CP/M-86에 대한 접근이 찌는 것은nterrupt, INT#224.그것이 바이트 값 그 결과 아메리칸 리그에 등록해 주시면, 결과는 단어 가치 모두는 AX와 BX를 레지스터에 반환됩니다.Double-word 값은 BX를 레지스터에 오프셋과 배아 줄기 레지스터의 부문과 반환됩니다.CP/M-80에서 프로그램의 CP/M-86으로 변환, 그 후, 소프트웨어와 위치 5대 5로 전화를 대체하고 인터럽트 INT#224을 요구한다.또 다른 필요한 변화 따뜻한 부팅을 포함한다.CP/M-80에 따라, 웜 부트 0의 함수 코드와 위치 0로의 점프.을 위한 시스템 호출에서 CP/M-86 그러나, 위치 0으로 점프를 지원하지 않는 접근될 수 있다.만약 프로그램이 제대로 실행하는 것이다 결과적으로, 당신은 번역한 프로그램 이 프로그램에 변경해야 한다.변환 프로그램은 CP/M-86 시스템 함수를 액세스 하는 것 얻는데 위치 5에 대한 호출 INT#224, 그 웜 부트 변화, 만들었고 그 등록하는 올바르게 매핑 되고 교체되는 경우가 있어야 하고, 좀 문제다.[…]를 얻고 있는 새로운 접속 MS-DOS, MS-DOS는 소프트웨어 인터럽트를 통해 시스템을 액세스 하기 위한"선호하는"메커니즘, INT#33이 있[…], 추가적인 메커니즘은 CP/M-80, 0-36의 범위의 기능들은 최소한의 호출 규칙과 호환되"기존"프로그램으로 제공된다.내가 아는 한 시스템이 허용할 수 있는 기능 범위 내에서 우려하고 한다, 프로그래머가 변환 프로그램보다 정확하게 등록 지도를 그들 MS-DOS를 따라 다른 달리는 것을 얻기 위해 무엇이든 할 필요가 없다.MS-DOS또한 CP/M-80의 따뜻한 부팅 기능을 지원한다.위치 0으로 MS-DOS에 따른 점프는 기능적으로 프로그램을 끝은 소프트웨어 인터럽트, INT#32및 보통 있는 프로그램에서 출구로 시행하고 있습니다.[…][3][4][5][6][7][8][9][10][11][12][13][14][15][16](13페이지)
  10. ^ a b Schäpers, Arne (1991). "Kapitel 5: EXEC im Detail - Program Segment Prefix (PSP)". DOS 5 für Programmierer: Die endgültige Referenz (in German) (1 ed.). Addison Wesley (Deutschland) GmbH. pp. 148–151, 971–972 [149, 971–972]. ISBN 3-89319-350-2. (1123+v 페이지, 접이식, 5.25-표준)
  11. ^ a b "Format of Program Segment Prefix (PSP)". INTER61. 2000. Archived from the original on 2020-02-17. Retrieved 2019-12-19.
  12. ^ a b c d Necasek, Michal (2011-09-13). "Who needs the address wraparound, anyway?". OS/2 Museum. Archived from the original on 2020-02-19. Retrieved 2020-02-19. […] 86-DOS, and hence PC DOS/MS-DOS, used a clever trick. The byte at offset 5 of the PSP contained a far call opcode (9Ah); the word at offset 6 of the PSP contained the appropriate value to indicate program segment size, and also the offset part of the far call. The word at offset 8, which served as the segment part of the far call, was crafted such that when combined with the offset, it would wrap around (a well understood feature of the 8086 CPU) and point to address 0:C0h, which contains interrupt vector 30h. […] A problem with the compatibility interface occurs when the loaded program has in fact less than 64KB available. If that happens, the word at PSP offset 6 may not contain the correct value, but the CALL 5 interface will still work; the instruction at offset 5 will be CALL 0:C0h, making the reported program segment size C0h. It is unclear why DOS does that; it appears to be a bug in DOS 5.0 and later, as DOS 4.0 and earlier versions simply adjust the segment portion so that it wraps around to 0:C0h. That works as long as the program segment size is paragraph aligned, and it will be. […]
  13. ^ 노턴, 피터(1985년).피터 노턴 프로그래머의 가이드는 IBMPC(교육 해설되어 있는.).MicrosoftCorporation.아이 에스비엔 0-91484546-2.도록 두가지 목적을 파는 아이 에스비엔 978-0-91484546-1. 페이지의 주 2:과정은 너무고 설명하기 복잡한 이상함으로써[…], 세그먼트 주소 설정됩니다.뿐만 아니라 도스 기능원이 있지만, 오프셋도 일부는 어떻게 코드 세그먼트의 많은(hex FFF0, 16바이트 64K에 짧은 최대)을 사용할 수 있는지 여부를 나타내지적한다.주소의 오프셋 부분, 우리가 관심 있는 부분, 오프셋 6시에 PSP이내에, offset 5에서 명령의 op-code 다음 위치해 있다.이 일의 결말 만약 도스 우리의 프로그램을 줄 미만 64이 있는 사람이 얼마나 많은 바이트는 대부분은 거의 또는 모든 windowing과 멀티 태스킹 시스템과 협력해야 하는 기술을 — 가능하다는 것을 아는 것 이 필드를 사용할 수 있다는 것이다.[…](426쪽)
  14. ^ a b "칼데라 OpenDOS 머신 Readable 소스 세트(M.R.S)7.01".칼데라, Inc. 1997-05-01[1997-04-16].그 2021-08-07에 원래에서 Archived.2022-01-02 Retrieved.[…]BIOSINIT.A86 1.40 93/11/11 12:25:BIOSINIT[…]29[…]VDISK 헤더는 변한다.A86을 1.3993/11/08 23:19:22[…].해병 공격 헬기 대대 CALL5 initialisation hi-memory에 PC-NFS[…][17](NB에 CALL5 연결 고리를 지금fixup JMPF[…]는다.OpenDOS 7.01 M.R.S.: IBMBIO\BIOSINITA86 Setup HMA )
  15. ^ a b c d Necasek, Michal (2018-03-16). "The A20-Gate: It Wasn't WordStar". OS/2 Museum. Archived from the original on 2018-09-23. Retrieved 2018-09-23.
  16. ^ Parsons, Jeff (2018-05-27) [1987-12-01, 1987-08-02]. "Somebody Put a SPELL On Me". PCjs. Archived from the original on 2019-01-29. Retrieved 2019-04-21.
  17. ^ a b c 슐먼 앤드류, 브라운, 랄프 D.;Maxey, 데이비드. 미헬스, 레이먼드 J., 카일, 짐(1994년)[1993년 11월].윌리엄스, 앤드류(교육.).Undocumented 도스:예약된 MS-DOS를 사용하는 기능과 데이터 구조-MS-DOS6, 노벨 도스와 Windows3.1을 포함하도록 확장에 대한 프로그래머의 가이드입니다.그 앤드류 슐만 프로그래밍 시리즈(1,2판).,:애디슨 웨슬리 출판사.를 대신하여 서명함. 349–350 매사추세츠, 미국을 읽는 것.아이 에스비엔 0-201-63287-X.아이 에스비엔 978-0-201-63287-3.활성화하는 A20 라인에서 떠나는 것은[…]는 Microsoft의 자신의 링커는 원래 그것의 크기를 줄이기 위해 EXEPACKed 파일에 포함되[…]그런 한 프로그램은 포장을 풀고 루틴 wraparound 일어날 것으로 예상한 프로그램과 문제를 일으키는!필립 가드너, 셰어웨어 DOSMAX UMB 정비 유틸리티의 저자이자 도스 분해 지역에 있는 베테랑에 따르면, 그 악명 높은"파일 부패 재료"오류 메시지보다 어디에나 DOS5.0의 사실은 A20 라인 사용할 수 있고 원본을 풀고 일상적인 depe 직접되고 있기 때문이라는 도입 직후에 나타나기 시작했다.Nded는 세그먼트에 wraparound 효과를 제대로 압축된 파일을 확장합니다.[…](xviii+856+vi 페이지,3.5"-floppy[18])Errata:[19][20](NB다.350페이지에는 문제가 있는 EXEPACK 압축 해제 루틴의 내부 작동에 대한 자세한 설명이 나와 있습니다.)
  18. ^ a b c d e f Paul, Matthias R. (2002-10-07) [2000]. "Re: masm .com (PSP) related trouble". Newsgroup: alt.lang.asm. Archived from the original on 2017-09-03. Retrieved 2017-09-03. […] DR Concurrent DOS 386 (since 1988-07-08) will load EXEPACKed programs above the 64K mark, that is, outside "lowest memory", by extending the memory block containing the program's environment […] DR DOS 5.0+ always loads .EXE-format programs with no fixups, and (since 1990-05-25) also .COM-format programs compressed with SpaceMaker - and therefore starting with 9Ch 55h (PUSHF/PUSH BP) - above the 64K mark to avoid the EXEPACK wrap around bug. It does this by extending the memory block containing the program's environment, since 1989-12-14 it will even allocate multiple fillers when necessary. This environment expansion code is disabled if the name of the parent program as stored in the MCB is "WIN" to improve performance when WIN.COM starts KERNEL.EXE (0 relocation items). […] the MS-DOS/PC DOS 5.0+[…] kernel scans for a variety of code sequences in .EXE format executables and applies patches for various versions of EXEPACKed files in order to let them run in lowest memory (when DOS is in the HMA), that is, a load segment < 64 Kb. Otherwise they would display "Packed file corrupt". The code checks that the code's entry point […] is not < 0002h […] and then reads the WORD immediately preceding the entry point […] If this WORD reads 5242h ("RB"), the file is assumed to be EXEPACKed. The code then looks for one of several combinations of code sequences at offsets from this "RB" signature. […] the MS-DOS 5.0+[…] kernel scans for an unknown class of .COM executables. If their signatures are found in the file, the A20 countdown variable at offset 18h in the disk buffer info table (see Table "DOS 5.0-6.0 disk buffer info") will be set to 10, which will cause A20 to be disabled after INT 21h calls for this count of INT 21h calls to follow. Presumably this class of programs requires A20 to be disabled for some time after it begins execution. (Similar actions occur on entry into INT 21h/AH=25h and AH=49h.) […]
  19. ^ a b 폴, 마티아스 R.[1996-06-18, 1994-05-01](1997-07-30)."V.4. Bessere Speicherausnutzungselbsthochladenden Programmen mit".NWDOS-TIPs — 팁을 &, Tricks rund)노벨 도스 7, mit Blick aufundokumentierte 자세한 내용은 벅스 und Workarounds.MPDOSTIP.157(독일어로)(3판)를 해제한다.그 2016-11-04에 원래에서 Archived.. 2014-08-06 Retrieved(NB다.의HTML-converted 버전으로 그 제공된 링크한 점이다.NWDOSTIP.TXT의 일부입니다.MPDOSTIP.ZIP를 참조해 주세요.[21]
  20. ^ Pascal Compiler (PDF). Personal Computer Computer Language Series (1 ed.). International Business Machines Corporation. August 1981. Archived (PDF) from the original on 2020-05-29. Retrieved 2018-09-23.
  21. ^ "NAME ENTX - Microsoft MS-DOS Computer Pascal runtime system control". Version 1.00. Microsoft Corp. 1981. Archived from the original on 2020-02-23. Retrieved 2020-02-23. […] DX is final DS (may be negative) […] final DS value (may be negative) […]
  22. ^ "Expert Report of Robert B. K. Dewar In Response To The Report Of 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., and Sage Publications, Inc. v. Mark P. Becker, Georgia State University President, et al, Civil Action No. 1:08-CV-1425-ODE (Court document). United States District Court For The Northern District Of Georgia, Atlanta Division. p. 18. Exhibit A. Archived from the original on 2018-05-01. Retrieved 2019-04-23. […] SPACEMAKER and TERMULATOR, commodity software for IBM PC (PC DOS file compression utility and VT-100 emulator), being marketed by Realia, Inc. R.B.K. Dewar (1982-1983), 8088 assembly language, 8,000 lines […]
  23. ^ Realia, Inc. (January 1983). "If you use DOS, you need this program". PC Magazine (advertisement). Ziff-Davis Publishing. 2 (9): 417. Archived from the original on 2019-04-22. Retrieved 2019-04-22.
  24. ^ a b Dewar, Robert Berriedale Keith (1984-03-13). "DOS 3.1 ASMB (Another Silly Microsoft Bug)". info-ibmpc@USC-ISIB.ARPA. Archived from the original on 2018-05-01. Retrieved 2019-04-23. […] The /E option of the linker should generate an EXE file which is logically equivalent to the uncompressed EXE file. The current version […] results in AX being clobbered. AX on entry to an EXE file has a definite meaning (it indicates drive validity for the parameters), thus it should be passed through to the uncompressed image. Given this one very obvious violation of the interface rules, there may be others, I have not bothered to investigate further […] I did write the Realia SpaceMaker program which does a similar sort of thing to the EXEPACK option (but needless to say does not have this particular […]
  25. ^ Necasek, Michal (2018-04-30). "Realia SpaceMaker". OS/2 Museum. Archived from the original on 2019-01-27. Retrieved 2019-02-22.
  26. ^ a b c Necasek, Michal (2018-03-23). "EXEPACK and the A20-Gate". OS/2 Museum. Archived from the original on 2018-11-13. Retrieved 2019-04-20.

추가 정보