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
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.