Knowledge (XXG)

A20 line

Source 📝

1052:. Under CP/M-80, the warm boot may be accessed by a system call with a function code of 0 for a jump to location 0. CP/M-86, however, does not support the jump to location 0. As a result, you must change this program exit in the translated program if the program is to run correctly. Provided that the call to location 5 is replaced with INT #224, that the warm boot change is made, and that the registers are mapped correctly, there should be little problem in getting the translated program to access the CP/M-86 system functions. Gaining Access to 1060:, for accessing the system, an additional mechanism is provided for "preexisting" programs that is compatible with CP/M-80 calling conventions, at least for functions in the range of 0-36. As far as system calls within the allowed function range are concerned, the programmer doesn't have to do anything to translated programs to get them to run under MS-DOS other than to correctly map the registers. MS-DOS also supports the warm boot function of CP/M-80. A jump to location 0 under MS-DOS executes a software interrupt, 303:(some sources incorrectly claim that A20 support was removed). Rather than the CPU having a dedicated A20M# pin that receives the signal whether or not to mask the A20 bit, it has been virtualized so that the information is sent from the peripheral hardware to the CPU using special bus cycles. From a software point of view, the mechanism works exactly as before, and an operating system must still program external hardware (which in-turn sends the aforementioned bus cycles to the CPU) to disable the A20 masking. 172:, its startup mode, so that it could run operating systems and programs that were not written for protected mode. The 80286 did not force the A20 line to zero in real mode, however. Therefore, the combination F800:8000 would no longer point to the physical address 0x00000000, but to the address 0x00100000. As a result, programs relying on the address wrap around would no longer work. To remain compatible with such programs, IBM decided to correct the problem on the 1554:), 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 22: 1538:- 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 1221:
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.
1265:
of the address, the part we are interested in, is located at offset 6 within the PSP, following the instruction's op-code at offset 5. The upshot of this is that if DOS has less than 64K to give our programs, we can use this field to learn how many bytes are available — a technique that should work with most or all windowing and multitasking systems.
131:. There are many combinations of segment and offset that produce the same 20-bit physical address. Therefore, there were various ways to address the same byte in memory. For example, here are four of the 4096 different segment:offset combinations, all referencing the byte whose physical address is 0x000FFFFF (the last byte in 1 MB-memory space): 284:, which when asserted low forces bit 20 of the physical address to be zero for all on-chip cache- or external-memory accesses. It was necessary, since the 80486 introduced an on-chip cache and so masking this bit in external logic was no longer possible. Software still needs to manipulate the gate and must still deal with external peripherals (the 241:
facilities of the processor; physical memory may be mapped to multiple virtual addresses. Thus, the memory mapped at the first megabyte of virtual memory may be mapped again in the second megabyte of virtual memory. The operating system may intercept changes to Gate A20 and make corresponding changes
1817:
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
1264:
By a process too bizarre and complicated to explain, the segmented address is set so that it serves two purposes. Not only does it point to the DOS function dispatcher, but the offset part also indicates how much of the code segment we can use (up to hex FFF0, 16 bytes short of 64K). The offset part
1220:
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
1215:
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,
485:
With the DOS kernel relocated into higher memory areas, low memory increasingly became available for programs, causing those depending on the wraparound to fail. The executable loaders in newer versions of DOS attempt to detect some common types of affected programs and either patch them on-the-fly
1558:
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
474:
and DOS programmers, for example, to have one segment that has access to program data (such as from F800:0000 to F800:7FFF, pointing to the physical addresses 0x000F8000–0x000FFFFF), as well as the I/O data (such as the keyboard buffer) that was located in the first memory segment (with addresses
1705:
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
443:
16-bit target address stored at offset +6 to +7 in the zero page could deliberately also be interpreted as the size of the first memory segment. In order to emulate this in DOS with its 8086 segment:offset addressing scheme, the far call entry point's 16-bit offset had to match this segment size
148:
Referenced the last way, an increase of one in the offset yields F800:8000, which is a proper address for the processor, but since it translates to the physical address 0x00100000 (the first byte over 1 MB), the processor would need another address line for actual access to that byte. Since
1455:
maintenance utility and a veteran in the DOS disassembly area, the notorious "Packed File Corrupt" error message than began appearing everywhere shortly after the introduction of DOS 5.0 is directly due to the fact that the A20 line is enabled, and the original unpacking routine depended on the
447:
A20 had to be disabled for the wraparound to occur and DOS programs using this interface to work. Newer DOS versions which can relocate parts of themselves into the HMA, typically craft a copy of the entry point at FFFF:00D0 in the HMA (which again resolves to physical 0x001000C0), so that the
1039:
Gaining access to CP/M-86 requires placing the function code in the CL register, placing the byte parameter in the DL register or placing the word parameter in the DX register, placing the data segment in the DS register (the data segment is usually not changed for a converted program), and
444:(i.e. 0xFEF0), which is stored at offset +6 to +7 in the PSP, overlapping parts of the CALL 5. The only way to reconcile these requirements was to choose a segment value that, when added to 0xFEF0, results in an address of 0x001000C0, which, on an 8086, wraps around to 0x000000C0. 198:
keyboard controller. Controlling it was a relatively slow process. Other methods have since been added to allow more efficient multitasking of programs that require this wrap-around with programs that access all of the system memory. There are multiple methods to control the A20 line.
1044:. The result is returned in the AL register if it is a byte value; if the result is a word value, it is returned in both the AX and BX registers. Double-word values are returned with the offset in the BX registers and the segment in the ES register. Conversion of programs from 268:
operating systems typically opened the A20 gate early during the boot process to never close it again. Such operating systems had no compatibility reasons for keeping it closed, and they gained access to the full range of physical addresses available by opening it.
114:
processors had 20 address lines, numbered A0 to A19; with these, the processor can access 2 bytes, or 1 MB. Internal address registers of such processors only had 16 bits. To access a 20-bit address space, an external memory reference was made up of a 16-bit
310:. Page 271 of the Intel System Programmers Manual Vol. 3A from June 2013 states: "The functionality of A20M# is used primarily by older operating systems and not used by modern operating systems. On newer Intel 64 processors, A20M# may be absent." 950:
Some programs written for the 8086 rely on 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
295:
removes compatibility for the A20 line: "If A20M# generation logic is still present in the system, this logic must be terminated such that software writes to I/O port 92, bit 1, do not result in A20M# being asserted to the processor."
187:. Gate-A20 can be enabled or disabled by software to allow or prevent the address bus from receiving a signal from A20. It is set to non-passing for the execution of older programs that rely on the wrap-around. At boot time, the 650:
and the non-obvious design constraints to be observed when developing resident system extensions to be loaded into the HMA, some of which are caused by the A20 gate. It also describes how to address these issues using
149:
there is no such line on the 8086 line of processors, the 21st bit above, while set, gets dropped, causing the address F800:8000 to "wrap around" and to actually point to the physical address 0x00000000.
1460: 532:
Various third-party utilities exist to modify compressed executables either replacing the problematic uncompression routine(s) through restubbing, or attempting to expand and restore the original file.
1550:+ 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 250:
Controlling the A20 line was an important feature at one stage in the growth of the IBM PC architecture, as it added access to an additional 65,520 bytes (64 KB − 16 bytes) of memory in
352:
for opening/closing A20. DOS itself could use the area for some of its storage needs, thereby freeing up more conventional memory for programs. That functionality was enabled by the
1768: 257:
In what was arguably a "hack", the A20 gate was originally part of the keyboard controller on the motherboard, which could open or close it depending on what behavior was desired.
1710: 971: 1818:
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
529:
in 1985) as well as the equivalent /E option in Microsoft's LINK 3.02 and higher. Programs processed with EXEPACK would display a "Packed file is corrupt" error message.
486:
to function also in low memory or load them above the first 64 KB before passing execution on to them. For programs, which are not detected automatically,
88:
is first and is therefore numbered bit 0 and signaled on line A0. A20 transmits bit 20 (the 21st bit) and becomes active once addresses reach 1 MB, or 2.
1559:
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.)
1642: 1465: 435:). However, by the design of CP/M-80, which loaded the operating system immediately above the memory available for the application program to run in, the 1463: 634: 784: 84:(2 B) = 32), which are named A0 through A31. The lines are named after the zero-based number of the bit in the address that they are transmitting. The 1093: 1091: 1089: 1087: 1085: 1083: 1081: 1079: 1077: 1075: 1073: 1071: 1069: 1646: 1499: 1020: 424:. The CALL 5 handler this entry point refers to resides at the machine's physical address 0x000000C0 (thereby overlapping the four bytes of the 191:
first enables Gate-A20 when it counts and tests all of the system memory, and then disables it before transferring control to the operating system.
1411:
Undocumented DOS: A programmer's guide to reserved MS-DOS functions and data structures - expanded to include MS-DOS 6, Novell DOS and Windows 3.1
1188: 955:
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
1016: 1438: 768: 1315: 686: 1805: 1581: 1259: 1959: 1048:
to CP/M-86, then, requires replacing the call to location 5 with the software interrupt INT #224. Another necessary change involves the
1703: 1443:
Leaving the A20 line enabled causes problems with programs that expect wraparound to occur One such program was the unpacking routine
337:
managers usually provide this functionality. A20 handlers are named after the 21st address line of the microprocessor, the A20 line.
1428: 1416: 1151: 1121: 1113: 822: 758: 746: 1882: 1347: 885: 1249: 1935: 1289: 894: 656: 1709:(Court document). United States District Court For The Northern District Of Georgia, Atlanta Division. p. 18. Exhibit A. 1467:(NB. On page 350, the book has a detailed description of the inner workings of the problematic EXEPACK uncompression routine.) 959:, and a special instruction is placed in the lower memory locations above 1 megabyte–for example, address 100000h or 100010h. 2029: 577: 1981: 1847: 1915: 1622: 1792: 1734: 664: 397: 413: 361: 65: 1678: 917:, and is not recommended for new programs. Memory size. This is the number of bytes available in the program segment. 2044: 1577:
NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds
583: 482:, the first 64 KB of RAM, a condition that was always true in older DOS versions without load-high capabilities. 307: 300: 1377: 934: 914: 354: 663:
drivers capable of relocating into the HMA and similar to a (more sophisticated) method used as the basis for the
2039: 2034: 2005: 987:"Upward migration - Part 1: Translators - Using translation programs to move CP/M-86 programs to CP/M and MS-DOS" 425: 417: 123:
number, shifted 4 bits to the left so as to produce a 20-bit physical address. The resulting address is equal to
1487: 625:[Loading drivers dynamically (Intra-segment offset relocation to load TSRs into the HMA)] (in German). 839: 264:, the A20 gate was still present in Intel CPUs until 2008. As the gate was initially closed right after boot, 718: 622: 97: 1305:
header changes BIOSINIT.A86 1.39 93/11/08 23:19:22 SetupHMA does CALL5 initialisation now fixup JMPF in
242:
to the virtual-memory address space, which also makes irrelevant the efficiency of Gate-A20 line toggling.
1633: 1212: 1000: 986: 432: 401: 292: 1907: 1764: 1511: 1241: 506: 487: 85: 1180: 206:
memory accesses above 1 MB, just those in the 1–2 MB, 3–4 MB, 5–6 MB, etc. ranges.
1574:
Paul, Matthias R. (1997-07-30) . "V.4. Bessere Speicherausnutzung mit selbsthochladenden Programmen".
1415:. The Andrew Schulman Programming Series (1st printing, 2nd ed.). Reading, Massachusetts, USA: 814: 526: 459:(1987) is one of the programs depending on the CALL 5 interface to be set up correspondingly. 409: 25:
The high memory area is only available in real mode on 80286 processors if the A20 gate is enabled.
1750: 1596: 1452: 1012: 867: 678: 514: 456: 1796: 1575: 1420: 750: 1819: 1434: 1424: 1339: 1285: 1255: 1245: 1117: 1004: 965: 818: 764: 754: 561: 326: 230: 210:
software cared only about the area slightly above 1 MB, so the Gate-A20 line was enough.
1977:
Making Code Work Better - How to minimize the size of 80x86 code and sometimes make it faster
1951: 623:"Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)" 1551: 1491: 1306: 952: 647: 626: 571: 566: 518: 460: 405: 330: 220: 49:-based computer system. The A20 line in particular is used to transmit the 21st bit on the 1674: 1608: 652: 334: 73: 1141: 630: 1874: 223:
does in the bootup process, often before control has been passed to the kernel from the
1409: 898: 545: 265: 238: 214: 165: 740: 2023: 1931: 1702:"Expert Report of Robert B. K. Dewar In Response To The Report Of Kenneth D. Crews". 1404: 1281: 475:
F800:8000 to F800:FFFF pointing to the physical addresses 0x00000000 to 0x00007FFF).
391: 69: 1067: 428:
entry point reserved for INT 30h and the first byte of INT 31h in the x86
386:
to implement the DOS CALL 5 entry point at offset +5 to +9 (which emulates the
1495: 1318: 1233: 1108:
Schäpers, Arne (1991). "Kapitel 5: EXEC im Detail - Program Segment Prefix (PSP)".
935:"Method and operating system for executing programs in a multi-mode microprocessor" 588: 57: 21: 1975: 1839: 1451:
to reduce its size! According to Phillip Gardner, author of the shareware DOSMAX
1064:, which is functionally a program end and the normal way to exit from a program. 989:[Using translation programs to move CP/M programs to CP/M-86 and MS-DOS] 773: 1911: 1801: 1755: 1407:; Maxey, David; Michels, Raymond J.; Kyle, Jim (1994) . Williams, Andrew (ed.). 537: 494: -L can be used to force programs to be loaded above the first 64 KB. 394: 273: 234: 173: 161: 111: 50: 1722: 1547: 1543: 1535: 1523: 1519: 956: 510: 498: 479: 367: 261: 195: 180: 107: 103: 42: 38: 1008: 451:
One program known to use the CALL 5 interface is the DOS version of the
164:
microprocessor. The 80286 could address up to 16 MB of system memory in
1670: 1444: 1302: 1049: 938: 549: 429: 345: 251: 207: 169: 157: 61: 1056:
Although MS-DOS has a "preferred" mechanism through a soft-ware interrupt,
1003:
pp. 321–322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344 .
1531: 541: 1369: 1823: 1539: 1522:", by extending the memory block containing the program's environment 1515: 1448: 1146: 1061: 1057: 1045: 1041: 1036: 646:(NB. Gives a comprehensive overview on the history and "nature" of the 522: 452: 421: 387: 285: 277: 224: 1997: 1974:
Ingenoso, Tony (1998-12-20). "Chapter 13 - The A20 gate and the HMA".
501:
itself as well as by programs compiled with it, including Microsoft's
183:
on the A20 line between the processor and system bus, which got named
1730: 1726: 1671:"NAME ENTX - Microsoft MS-DOS Computer Pascal runtime system control" 1310: 1208: 1204: 1200: 1053: 660: 491: 464: 383: 379: 323: 1706:
State University President, et al, Civil Action No. 1:08-CV-1425-ODE
856:
SYS–0047. A20M# is always de-asserted (pulled high) at the processor
1690:
DX is final DS (may be negative) final DS value (may be negative)
1456:
segment wraparound effect to properly expand the compressed files.
941:. US06722052, US4779187A. Archived from the original on 2018-09-23 20: 1613:(NB. The provided link points to a HTML-converted version of the 1398: 1396: 1394: 887:
86-DOS - Disk Operating System for the 8086 - Programmer's Manual
710: 168:. However, the CPU was supposed to emulate an 8086's behavior in 1555: 1527: 1217: 995: 893:. Version 0.3 (Preliminary ed.). Seattle, Washington, USA: 502: 471: 436: 188: 1447:'s own linker originally included with any file that had been 440: 349: 341: 217: 153: 46: 1530:-format programs with no fixups, and (since 1990-05-25) also 348:
have the "extra task" of managing A20. HIMEM.SYS provided an
160:(1984) machine, it decided to use the new higher-performance 785:"Envisioning a Simplified Intel Architecture for the Future" 505:. Other commonly used development utilities using this were 213:
Enabling the Gate-A20 line is one of the first steps that a
1641:. Personal Computer Computer Language Series (1 ed.). 928: 926: 478:
This trick works for as long as the code isn't executed in
1826:
option (but needless to say does not have this particular
1282:"Caldera OpenDOS Machine Readable Source Kit (M.R.S) 7.01" 237:, allows the A20 wrap-around to be simulated by using the 847:. Intel Corporation and Microsoft Corporation. p. 52 739:
Shanley, Tom; Anderson, Don (1995). Swindle, John (ed.).
16:
Signal in the system bus of an x86-based computer system
1868: 1866: 1864: 1216:
it would wrap around (a well understood feature of the
448:
interface can work without regard to the state of A20.
194:
Originally, the logic gate was a gate connected to the
1276: 1274: 868:
Intel System Programmers Manual Vol. 3A from June 2013
679:"Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1" 470:
Also, to save program space, a trick was used by some
1998:"x86 architecture legacy stuff: KBC, PS/2, and A20M#" 1569: 1567: 1174: 1172: 1170: 1168: 1103: 1101: 306:
Intel no longer supports the A20 gate, starting with
880: 878: 876: 378:
Since 1980, the address wrap was internally used by
1333: 1331: 1329: 1327: 1211:, used a clever trick. The byte at offset 5 of the 517:in 1982 and used to compress early versions of the 1822:program which does a similar sort of thing to the 1408: 1737:(1982-1983), 8088 assembly language, 8,000 lines 1481: 1479: 1477: 1475: 1473: 1238:The Peter Norton Programmer's Guide to the IBM PC 544:) use the A20 line. UEFI boot loaders use 32-bit 455:compiler. Also, the SPELL utility in Microsoft's 408:). This was, in particular, utilized by programs 1136: 1134: 1110:DOS 5 für Programmierer: Die endgültige Referenz 970:: CS1 maint: bot: original URL status unknown ( 467:(1993) requires the CALL 5 fix-up as well. 1725:and TERMULATOR, commodity software for IBM PC ( 1518:programs above the 64K mark, that is, outside " 915:translation of 8080/Z80 programs into 8086 code 616: 614: 612: 610: 608: 606: 604: 1787: 1785: 1542:starts KERNEL.EXE (0 relocation items). the 260:In order to keep full compatibility with the 72:. For example, a processor with 4 GB of 8: 1797:"DOS 3.1 ASMB (Another Silly Microsoft Bug)" 299:Support for the A20 gate was changed in the 1643:International Business Machines Corporation 1181:"Who needs the address wraparound, anyway?" 404:(PSP) (which partially resembles CP/M-80's 56:A microprocessor typically has a number of 1733:emulator), being marketed by Realia, Inc. 985:Taylor, Roger; Lemmons, Phil (June 1982). 1580:. Release 157 (in German) (3 ed.). 1142:"Format of Program Segment Prefix (PSP)" 705: 703: 254:, without significant software changes. 1751:"If you use DOS, you need this program" 600: 400:entry point at offset +5 to +7) in the 1604: 1594: 1321:M.R.S.: IBMBIO\BIOSINIT.A86 SetupHMA ) 963: 1488:"Re: masm .com (PSP) related trouble" 1301:BIOSINIT.A86 1.40 93/11/11 12:25:29 1128:(1123+v pages, foldout, 5.25"-floppy) 329:software that controls access to the 227:(in the case of Linux, for example). 179:That was accomplished by inserting a 76:physical space requires 32 lines (log 7: 897:1980. pp. 7, 17. Archived from 811:Protected mode software architecture 1340:"The A20-Gate: It Wasn't WordStar" 913:This form is provided to simplify 14: 1534:-format programs compressed with 1486:Paul, Matthias R. (2002-10-07) . 1459:(xviii+856+vi pages, 3.5"-floppy 1417:Addison Wesley Publishing Company 1114:Addison Wesley (Deutschland) GmbH 747:Addison-Wesley Publishing Company 667:in the author's FreeKEYB driver.) 202:Disconnecting A20 would not wrap 1040:executing a software interrupt, 745:(3 ed.). Mindshare, Inc. / 677:Paul, Matthias R. (2002-04-11). 621:Paul, Matthias R. (2002-02-02). 2008:from the original on 2021-08-15 1984:from the original on 2019-11-18 1962:from the original on 2019-07-28 1950:Necasek, Michal (2018-01-30) . 1938:from the original on 2017-09-09 1918:from the original on 2017-09-09 1885:from the original on 2018-11-13 1850:from the original on 2019-01-27 1808:from the original on 2018-05-01 1771:from the original on 2019-04-22 1713:from the original on 2018-05-01 1681:from the original on 2020-02-23 1652:from the original on 2020-05-29 1584:from the original on 2016-11-04 1502:from the original on 2017-09-03 1380:from the original on 2019-01-29 1350:from the original on 2018-09-23 1292:from the original on 2021-08-07 1191:from the original on 2020-02-19 1154:from the original on 2020-02-17 1026:from the original on 2020-01-16 895:Seattle Computer Products, Inc. 721:from the original on 2021-11-30 689:from the original on 2020-02-21 657:intra-segment offset relocation 637:from the original on 2017-09-09 1873:Necasek, Michal (2018-03-23). 1838:Necasek, Michal (2018-04-30). 1793:Dewar, Robert Berriedale Keith 1338:Necasek, Michal (2018-03-16). 1179:Necasek, Michal (2011-09-13). 1116:. pp. 148–151, 971–972 . 578:LOADFIX (CONFIG.SYS directive) 1: 1749:Realia, Inc. (January 1983). 1729:file compression utility and 1514:(since 1988-07-08) will load 1368:Parsons, Jeff (2018-05-27) . 665:dynamic dead code elimination 414:assembly language translators 1912:"A20 - a pain from the past" 1370:"Somebody Put a SPELL On Me" 933:Letwin, James (1985-04-10). 1996:Ludloff, Christian (2011). 1930:Collins, Robert R. (2001). 999:. Vol. 7, no. 6. 841:PC 2001 System Design Guide 584:Incomplete address decoding 291:The PC System Design Guide 2061: 1875:"EXEPACK and the A20-Gate" 1112:(in German) (1 ed.). 497:The trick was utilized by 280:added a special pin named 119:address added to a 16-bit 95: 426:interrupt service routine 418:Seattle Computer Products 301:Nehalem microarchitecture 1240:(Illustrated ed.). 1617:, which is part of the 838:"Chapter 3 PC System". 742:ISA System Architecture 344:, HMA managers such as 98:x86 memory segmentation 41:lines that make up the 1908:Brouwer, Andries Evert 1001:BYTE Publications Inc. 540:boot loaders (such as 507:executable compressors 433:interrupt vector table 402:Program Segment Prefix 233:, introduced with the 80:(4 GB) = log 60:equal to the base-two 26: 2030:X86 memory management 1932:"A20/Reset Anomalies" 1765:Ziff-Davis Publishing 1512:DR Concurrent DOS 386 1242:Microsoft Corporation 809:Shanley, Tom (1996). 412:from CP/M-80 through 86:least significant bit 24: 815:Taylor & Francis 499:IBM/Microsoft Pascal 370:configuration file. 1840:"Realia SpaceMaker" 1309:for CALL5 link for 659:, a method used by 2045:IBM PC compatibles 1403:Schulman, Andrew; 1035:Gaining Access to 521:) and Microsoft's 515:Robert B. K. Dewar 410:machine-translated 366:directives in the 127: × 16 + 27: 1820:Realia SpaceMaker 1759:(advertisement). 1439:978-0-201-63287-3 769:978-0-201-40996-3 655:, backdoors, and 562:Bug compatibility 374:Affected programs 231:Virtual 8086 mode 64:of the number of 2052: 2040:X86 architecture 2035:Memory expansion 2016: 2014: 2013: 1992: 1990: 1989: 1970: 1968: 1967: 1952:"WordStar Again" 1946: 1944: 1943: 1926: 1924: 1923: 1894: 1893: 1891: 1890: 1870: 1859: 1858: 1856: 1855: 1835: 1829: 1828: 1814: 1813: 1789: 1780: 1779: 1777: 1776: 1746: 1740: 1739: 1719: 1718: 1699: 1693: 1692: 1687: 1686: 1673:. Version 1.00. 1667: 1661: 1660: 1658: 1657: 1651: 1640: 1630: 1624: 1620: 1616: 1612: 1606: 1602: 1600: 1592: 1590: 1589: 1571: 1562: 1561: 1508: 1507: 1483: 1468: 1458: 1414: 1400: 1389: 1388: 1386: 1385: 1365: 1359: 1358: 1356: 1355: 1335: 1322: 1314: 1298: 1297: 1278: 1269: 1267: 1260:978-0-91484546-1 1230: 1224: 1223: 1197: 1196: 1176: 1163: 1162: 1160: 1159: 1138: 1129: 1127: 1105: 1096: 1066: 1032: 1031: 1025: 992: 982: 976: 975: 969: 961: 957:memory below 64K 953:MicroSoft PASCAL 947: 946: 930: 921: 919: 910: 909: 903: 892: 882: 871: 865: 859: 858: 853: 852: 846: 835: 829: 828: 806: 800: 799: 797: 796: 781: 775: 772: 736: 730: 729: 727: 726: 707: 698: 697: 695: 694: 674: 668: 645: 643: 642: 631:de.comp.os.msdos 618: 572:High memory area 567:Computer storage 519:Norton Utilities 461:Sun Microsystems 365: 358: 331:high memory area 221:operating system 74:byte-addressable 68:in its physical 37:, is one of the 2060: 2059: 2055: 2054: 2053: 2051: 2050: 2049: 2020: 2019: 2011: 2009: 1995: 1987: 1985: 1973: 1965: 1963: 1949: 1941: 1939: 1929: 1921: 1919: 1906: 1903: 1901:Further reading 1898: 1897: 1888: 1886: 1872: 1871: 1862: 1853: 1851: 1837: 1836: 1832: 1811: 1809: 1791: 1790: 1783: 1774: 1772: 1748: 1747: 1743: 1716: 1714: 1701: 1700: 1696: 1684: 1682: 1675:Microsoft Corp. 1669: 1668: 1664: 1655: 1653: 1649: 1645:. August 1981. 1638: 1635:Pascal Compiler 1632: 1631: 1627: 1618: 1614: 1603: 1593: 1587: 1585: 1573: 1572: 1565: 1526:+ always loads 1505: 1503: 1485: 1484: 1471: 1431: 1402: 1401: 1392: 1383: 1381: 1367: 1366: 1362: 1353: 1351: 1337: 1336: 1325: 1295: 1293: 1280: 1279: 1272: 1262:. p. 263: 1252: 1232: 1231: 1227: 1194: 1192: 1178: 1177: 1166: 1157: 1155: 1140: 1139: 1132: 1124: 1107: 1106: 1099: 1029: 1027: 1023: 990: 984: 983: 979: 962: 944: 942: 932: 931: 924: 907: 905: 901: 890: 884: 883: 874: 866: 862: 850: 848: 844: 837: 836: 832: 825: 808: 807: 803: 794: 792: 783: 782: 778: 761: 738: 737: 733: 724: 722: 709: 708: 701: 692: 690: 676: 675: 671: 640: 638: 620: 619: 602: 597: 558: 376: 360: 353: 335:Extended-memory 316: 248: 100: 94: 83: 79: 35:address line 20 17: 12: 11: 5: 2058: 2056: 2048: 2047: 2042: 2037: 2032: 2022: 2021: 2018: 2017: 1993: 1971: 1947: 1927: 1902: 1899: 1896: 1895: 1860: 1830: 1795:(1984-03-13). 1781: 1741: 1694: 1662: 1625: 1563: 1469: 1429: 1405:Brown, Ralf D. 1390: 1360: 1323: 1270: 1250: 1225: 1164: 1130: 1122: 1097: 977: 922: 872: 860: 830: 823: 817:. p. 60. 801: 776: 759: 731: 717:. 2021-07-19. 699: 669: 599: 598: 596: 593: 592: 591: 586: 581: 575: 569: 564: 557: 554: 546:protected mode 509:like Realia's 375: 372: 327:memory manager 315: 312: 266:protected-mode 247: 244: 239:virtual memory 215:protected-mode 166:protected mode 146: 145: 142: 139: 136: 93: 90: 81: 77: 15: 13: 10: 9: 6: 4: 3: 2: 2057: 2046: 2043: 2041: 2038: 2036: 2033: 2031: 2028: 2027: 2025: 2007: 2003: 1999: 1994: 1983: 1979: 1978: 1972: 1961: 1957: 1953: 1948: 1937: 1933: 1928: 1917: 1913: 1909: 1905: 1904: 1900: 1884: 1880: 1876: 1869: 1867: 1865: 1861: 1849: 1845: 1841: 1834: 1831: 1827: 1825: 1821: 1807: 1803: 1802: 1798: 1794: 1788: 1786: 1782: 1770: 1766: 1762: 1758: 1757: 1752: 1745: 1742: 1738: 1736: 1732: 1728: 1724: 1712: 1708: 1707: 1698: 1695: 1691: 1680: 1676: 1672: 1666: 1663: 1648: 1644: 1637: 1636: 1629: 1626: 1623: 1621:collection.) 1610: 1598: 1583: 1579: 1578: 1570: 1568: 1564: 1560: 1557: 1553: 1549: 1545: 1541: 1537: 1533: 1529: 1525: 1521: 1520:lowest memory 1517: 1513: 1501: 1497: 1493: 1489: 1482: 1480: 1478: 1476: 1474: 1470: 1466: 1464: 1461: 1457: 1454: 1450: 1446: 1440: 1436: 1432: 1430:0-201-63287-X 1426: 1422: 1418: 1413: 1412: 1406: 1399: 1397: 1395: 1391: 1379: 1375: 1371: 1364: 1361: 1349: 1345: 1341: 1334: 1332: 1330: 1328: 1324: 1320: 1316: 1313: 1312: 1308: 1304: 1291: 1288:1997-05-01 . 1287: 1286:Caldera, Inc. 1283: 1277: 1275: 1271: 1266: 1261: 1257: 1253: 1247: 1243: 1239: 1235: 1234:Norton, Peter 1229: 1226: 1222: 1219: 1214: 1210: 1206: 1202: 1190: 1186: 1182: 1175: 1173: 1171: 1169: 1165: 1153: 1149: 1148: 1143: 1137: 1135: 1131: 1125: 1123:3-89319-350-2 1119: 1115: 1111: 1104: 1102: 1098: 1094: 1092: 1090: 1088: 1086: 1084: 1082: 1080: 1078: 1076: 1074: 1072: 1070: 1068: 1065: 1063: 1059: 1055: 1051: 1047: 1043: 1038: 1022: 1018: 1014: 1010: 1006: 1002: 998: 997: 988: 981: 978: 973: 967: 960: 958: 954: 940: 936: 929: 927: 923: 918: 916: 904:on 2019-06-23 900: 896: 889: 888: 881: 879: 877: 873: 869: 864: 861: 857: 843: 842: 834: 831: 826: 824:0-201-55447-X 820: 816: 812: 805: 802: 790: 786: 780: 777: 774: 770: 766: 762: 760:0-201-40996-8 756: 752: 748: 744: 743: 735: 732: 720: 716: 712: 706: 704: 700: 688: 684: 680: 673: 670: 666: 662: 658: 654: 649: 636: 632: 628: 624: 617: 615: 613: 611: 609: 607: 605: 601: 594: 590: 587: 585: 582: 579: 576: 573: 570: 568: 565: 563: 560: 559: 555: 553: 551: 547: 543: 539: 534: 530: 528: 527:Reuben Borman 524: 520: 516: 512: 508: 504: 500: 495: 493: 489: 483: 481: 476: 473: 468: 466: 462: 458: 454: 449: 445: 442: 438: 434: 431: 427: 423: 419: 415: 411: 407: 403: 399: 396: 393: 389: 385: 381: 373: 371: 369: 363: 356: 351: 347: 343: 338: 336: 332: 328: 325: 321: 313: 311: 309: 304: 302: 297: 294: 289: 287: 283: 279: 275: 270: 267: 263: 258: 255: 253: 245: 243: 240: 236: 232: 228: 226: 222: 219: 216: 211: 209: 205: 200: 197: 192: 190: 186: 182: 177: 175: 171: 167: 163: 159: 156:designed the 155: 150: 143: 140: 137: 134: 133: 132: 130: 126: 122: 118: 113: 109: 105: 99: 91: 89: 87: 75: 71: 70:address space 67: 63: 59: 58:address lines 54: 52: 48: 44: 40: 36: 32: 23: 19: 2010:. Retrieved 2002:sandpile.org 2001: 1986:. Retrieved 1976: 1964:. Retrieved 1955: 1940:. Retrieved 1920:. Retrieved 1887:. Retrieved 1878: 1852:. Retrieved 1843: 1833: 1816: 1810:. Retrieved 1800: 1773:. Retrieved 1760: 1754: 1744: 1735:R.B.K. Dewar 1721: 1715:. Retrieved 1704: 1697: 1689: 1683:. Retrieved 1665: 1654:. Retrieved 1634: 1628: 1619:MPDOSTIP.ZIP 1615:NWDOSTIP.TXT 1586:. Retrieved 1576: 1510: 1504:. Retrieved 1496:alt.lang.asm 1442: 1410: 1382:. Retrieved 1373: 1363: 1352:. Retrieved 1343: 1319:OpenDOS 7.01 1300: 1294:. Retrieved 1263: 1251:0-91484546-2 1237: 1228: 1203:, and hence 1199: 1193:. Retrieved 1184: 1156:. Retrieved 1145: 1109: 1034: 1028:. Retrieved 994: 980: 949: 943:. Retrieved 912: 906:. Retrieved 899:the original 886: 863: 855: 849:. Retrieved 840: 833: 810: 804: 793:. Retrieved 788: 779: 741: 734: 723:. Retrieved 714: 691:. Retrieved 682: 672: 639:. Retrieved 589:Boot loaders 535: 531: 525:(written by 513:(written by 496: 484: 477: 469: 450: 446: 377: 339: 319: 317: 305: 298: 290: 288:) for that. 281: 271: 259: 256: 249: 229: 212: 203: 201: 193: 184: 178: 151: 147: 128: 124: 120: 116: 101: 55: 34: 30: 28: 18: 1956:OS/2 Museum 1879:OS/2 Museum 1844:OS/2 Museum 1756:PC Magazine 1605:|work= 1419:. pp.  1344:OS/2 Museum 1268:(426 pages) 1205:PC DOS 1185:OS/2 Museum 749:. pp.  683:freedos-dev 538:Legacy BIOS 392:CALL 5 320:A20 handler 314:A20 handler 274:Intel 80486 235:Intel 80386 174:motherboard 162:Intel 80286 112:Intel 80186 51:address bus 2024:Categories 2012:2022-01-02 1988:2019-11-18 1980:(e-book). 1966:2019-07-28 1942:2017-09-09 1922:2017-09-09 1889:2019-04-20 1854:2019-02-22 1812:2019-04-23 1775:2019-04-22 1723:SPACEMAKER 1717:2019-04-23 1685:2020-02-23 1656:2018-09-23 1588:2014-08-06 1548:PC DOS 5.0 1536:SpaceMaker 1524:DR DOS 5.0 1506:2017-09-03 1462:) Errata: 1384:2019-04-21 1354:2018-09-23 1296:2022-01-02 1195:2020-02-19 1158:2019-12-19 1095:(13 pages) 1030:2020-01-15 945:2018-09-23 920:(41 pages) 908:2011-09-13 851:2023-06-03 795:2023-05-22 725:2021-07-19 715:OSDev Wiki 711:"A20 Line" 693:2020-02-21 641:2017-07-02 595:References 548:or 64-bit 511:Spacemaker 480:low memory 368:CONFIG.SYS 262:Intel 8086 196:Intel 8042 181:logic gate 108:Intel 8088 104:Intel 8086 96:See also: 43:system bus 39:electrical 1607:ignored ( 1597:cite book 1516:EXEPACKed 1492:Newsgroup 1449:EXEPACKed 1445:Microsoft 1307:hi-memory 1050:warm boot 1009:0360-5280 939:Microsoft 789:intel.com 627:Newsgroup 580:(PTS-DOS) 550:long mode 430:real mode 406:zero page 346:HIMEM.SYS 252:real mode 225:bootstrap 208:Real-mode 170:real mode 158:IBM PC AT 144:F800:7FFF 141:F555:AAAF 138:FFFF:000F 135:F000:FFFF 62:logarithm 2006:Archived 1982:Archived 1960:Archived 1936:Archived 1916:Archived 1910:(2001). 1883:Archived 1848:Archived 1806:Archived 1769:Archived 1711:Archived 1679:Archived 1647:Archived 1582:Archived 1500:Archived 1378:Archived 1348:Archived 1290:Archived 1236:(1985). 1189:Archived 1152:Archived 1150:. 2000. 1042:INT #224 1021:Archived 966:cite web 719:Archived 687:Archived 635:Archived 556:See also 542:GNU GRUB 457:Word 3.0 246:A20 gate 185:Gate-A20 92:Overview 1824:EXEPACK 1767:: 417. 1540:WIN.COM 1494::  1147:INTER61 1062:INT #32 1058:INT #33 1046:CP/M-80 1037:CP/M-86 791:. Intel 629::  536:Modern 523:EXEPACK 488:LOADFIX 453:Small-C 422:TRANS86 390:-style 388:CP/M-80 333:(HMA). 308:Haswell 293:PC 2001 286:chipset 278:Pentium 125:segment 121:segment 1731:VT-100 1727:PC DOS 1677:1981. 1544:MS-DOS 1437:  1427:  1423:–350. 1311:PC-NFS 1258:  1248:  1209:MS-DOS 1201:86-DOS 1120:  1054:MS-DOS 1017:BYTEDJ 1015:  1007:  821:  767:  757:  661:DR-DOS 492:MEMMAX 465:PC-NFS 384:MS-DOS 380:86-DOS 324:IBM PC 129:offset 117:offset 110:, and 45:of an 1763:(9). 1650:(PDF) 1639:(PDF) 1317:(NB. 1303:VDISK 1024:(PDF) 1013:CODEN 991:(PDF) 902:(PDF) 891:(PDF) 845:(PDF) 753:–80. 653:stubs 574:(HMA) 416:like 362:HIDOS 357:=HIGH 282:A20M# 152:When 66:words 33:, or 1609:help 1556:.COM 1532:.COM 1528:.EXE 1435:ISBN 1425:ISBN 1374:PCjs 1256:ISBN 1246:ISBN 1218:8086 1118:ISBN 1005:ISSN 996:BYTE 972:link 819:ISBN 765:ISBN 755:ISBN 503:MASM 472:BIOS 437:8080 395:BDOS 382:and 318:The 276:and 272:The 189:BIOS 102:The 29:The 1552:HMA 1453:UMB 1421:349 1213:PSP 648:HMA 490:or 441:Z80 398:API 364:=ON 359:or 355:DOS 350:API 342:DOS 340:In 322:is 218:x86 204:all 154:IBM 47:x86 31:A20 2026:: 2004:. 2000:. 1958:. 1954:. 1934:. 1914:. 1881:. 1877:. 1863:^ 1846:. 1842:. 1815:. 1804:. 1799:. 1784:^ 1753:. 1720:. 1688:. 1601:: 1599:}} 1595:{{ 1566:^ 1509:. 1498:. 1490:. 1472:^ 1441:. 1433:. 1393:^ 1376:. 1372:. 1346:. 1342:. 1326:^ 1299:. 1284:. 1273:^ 1254:. 1244:. 1198:. 1187:. 1183:. 1167:^ 1144:. 1133:^ 1100:^ 1033:. 1019:. 1011:. 993:. 968:}} 964:{{ 948:. 937:. 925:^ 911:. 875:^ 854:. 813:. 787:. 763:. 751:79 713:. 702:^ 685:. 681:. 633:. 603:^ 552:. 463:' 420:' 176:. 106:, 53:. 2015:. 1991:. 1969:. 1945:. 1925:. 1892:. 1857:. 1778:. 1761:2 1659:. 1611:) 1591:. 1546:/ 1387:. 1357:. 1207:/ 1161:. 1126:. 974:) 870:. 827:. 798:. 771:. 728:. 696:. 644:. 439:/ 82:2 78:2

Index


electrical
system bus
x86
address bus
address lines
logarithm
words
address space
byte-addressable
least significant bit
x86 memory segmentation
Intel 8086
Intel 8088
Intel 80186
IBM
IBM PC AT
Intel 80286
protected mode
real mode
motherboard
logic gate
BIOS
Intel 8042
Real-mode
protected-mode
x86
operating system
bootstrap
Virtual 8086 mode

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.