From: aw4@irz407.inf.tu-dresden.de (Andreas Westfeld)
Newsgroups: de.comp.os.misc
Subject: Re: Problem: MS-DOS/A20-Leitung/DR-DOS
Date: 12 Jan 1993 11:10:02 GMT
Organization: Dept. of Computer Science, TU Dresden, Germany
Distribution: world
Reply-To: westfeld@freia.inf.tu-dresden.de
NNTP-Posting-Host: irz407.inf.tu-dresden.de


In article <1ica61INNmis@irz401.inf.tu-dresden.de>, ss5@irz402.inf.tu-dresden.de (Steffen Schwigon) writes:
>Path: irz401!irz402.inf.tu-dresden.de!ss5
>From: ss5@irz402.inf.tu-dresden.de (Steffen Schwigon)
>Newsgroups: de.comp.os.misc
>Subject: Problem: MS-DOS/A20-Leitung/DR-DOS
>Date: Tue, 5 Jan 93 16:40:49 MET
>Organization: Dept. of Computer Science, TU Dresden, Germany
>Lines: 33
>Distribution: world
>Message-ID: <1ica61INNmis@irz401.inf.tu-dresden.de>
>Reply-To: ss5@irz402.inf.tu-dresden.de (Steffen Schwigon)
>NNTP-Posting-Host: irz402.inf.tu-dresden.de
>
>
>Hallo Leute.
>
>Folgendes Problem:
>
>Ich habe einen relativ alten 486/25 (DX, kein SX ! Ja, so etwas gab es mal !), 
>das BIOS ist von 1990 (Award).
>  Was genau ist diese A20-Leitung. Klingt irgendwie nach 'Adresse' und '20 Bit'. 
>  Ich hab auch schon gehoert, dass dieses Problem angeblich oefters bei diversen
>  alten 386ern auftauchen soll.

A20 (Adressleitung 20) ist ein Phaenomen, welches ab dem AT
auftaucht. Der XT und frueher hat einen maximalen Adressraum von
1 MB. Das sind 2^20 Bytes. Dazu braucht der Rechner genau 20
Adressleitungen (A0...A19). Ein 80286 kann aber 16 MB adressieren,
wofr 4 weitere Adressleitungen (A20...A23) benoetigt werden.

Nun gibt es einen incompatiblen Effekt zwischen 8086 und 80286 (im
real mode):

Eine Adresse wird aus Segment und Offset gebildet (jeweils 16 bit).
Die Adresse berechnet sich 16*Segment+Offset. Es gibt mehrere
Mglichkeiten auf ein und die selbe Adresse zuzugreifen:
z. B.: 0040:006C=0000:046C=0046C usw.

Aber: Beim 8086 bedeutet die Adresse FFFF:0010 das selbe wie
0000:0000 nmlich 00000. Beim 80286 bedeutet FFFF:0010 die Adresse
100000. Diese Adressierungsart macht sich HIDOS.SYS von DR DOS
zunutze, um im real mode auf den sog. unteren Zusatzspeicher
zuzugreifen. Dorthin wird der Systemkern ausgelagert, so da knappe
64 kB mehr zur Verfgung stehen (unterhalb der 640 kB Grenze).

Um beide Rechner kompatibel zu machen, wird die A20 einfach
abgeschaltet, so da im erwhnten Beispiel 100000 ebenfalls zu 00000
wird (alle Adressen hexadezimal!). Bei meinem 80286 lt sich
diese Leitung ber eine I/O-Portadresse schalten.

DOS mu nun, wenn der Kern in das Segment FFFF ausgelagert wird,
dafr sorgen, das die A20 eingeschaltet bleibt. Dafr gibt es
verschiedene Mglichkeiten (maschinenabhngig).

Ich hatte z. B. ein Problem, wenn ich auf der RAM-Disk gearbeitet
habe whrend KEYB GR hochgeladen war. Der Sache bin ich auf den
Grund gegangen: VDISK.SYS verwendet eine BIOS-Funktion des INT 15 (67)
, um Blcke aus dem Zusatzspeicher zu holen. Dazu schaltet mein
BIOS in den protected mode, A20 an, kopiert, hot-reset (zurck
in den real mode), A20 aus (!!). Und bevor HIMEM.SYS die A20 wieder
einschalten kann, habe ich wahrscheinlich einen Keyboard-Interrupt
ausgelst (int 9). Der int 9-vector zeigt aber in das Segment FFFF,
also wenn die A20 ausgeschaltet ist in die Interrupt-Vektor-Tabelle
am Seicheranfang. Dort stehen natrlich keine vernnftigen Befehle
und schon garnicht zur Tastaturbehandlung.

Es gibt zwei Lsungen des Problems:
BIOS wechseln
KEYB GR nicht hochladen

Ich habe eine dritte Variante gewhlt und einen Treiber geschrieben
(ca. 600 Bytes), der die Funktion 67 des int 15 ersetzt und die
A20 am Ende nicht (!) ausschaltet.
--
Andreas Westfeld                 =aeoeuesz