home *** CD-ROM | disk | FTP | other *** search
- FASTMOVE
- Vier GIGABYTE im Real Mode des 80386 adressieren
- (aus der c't 1/90 S.212ff)
-
- Das Programm FASTMOVE klinkt sich in den Interrupt 15h ein und reicht alle
- BIOS-Aufrufe weiter, mit Ausnahme der MoveBlock-Funktion. Wenn diese Funktion
- aufgerufen wird, liest das Programm die Quell- sowie Zieladresse aus den durch
- ES:SI angegebenen Deskriptoren aus und kopiert die Daten dann einfach via MOVS.
- Die etwas ungew÷hnliche vollstΣndige Angabe von
- 'MOVS DWORD PTR [ESI],DWORD PTR [EDI]'
- ist notwendig, damit TASM nicht nur das 32-Bit-PrΣfix 66h, sondern auch noch
- das 'address size prefix' 67h ausgibt, das auf 32-Bit-Adressierung umschaltet.
- (Was sich in keiner Dokumentation findet: auch der ZΣhler CX wird auf die volle
- Breite von 32 Bit, ECX, umgeschaltet.)
- WΣhrend der Installationsphase des Programmes FASTMOVE wird die Adressleitung
- A20 freigegeben und bleibt dann auch weiterhin mit dem Prozessor verbunden. Das
- ist v÷llig unproblematisch, denn eine Software, die den 'wrap around' ben÷tigt
- geh÷rt ins RaritΣtenkabinett. Auch gibt es so gut wie keinerlei Software (au▀er
- dem alten INT 15h), die am A20 Gate 'rumprogrammiert, so da▀ die neue BlockMove
- Routine nicht jedesmal - unter UmstΣnden zeitraubend - Gate A20 aufs neue frei-
- schalten mu▀. Gegebenenfalls kann man an der bezeichneten Stelle ein
- CALL GATE_A20_EIN
- einfⁿgen.
- Weiterhin lΣ▀t der INT 15h natⁿrlich A20 auch nach Abschlu▀ unberⁿhrt, was ein
- gro▀er Vorteil gegenⁿber der ersetzten Routine ist; denn nun kann man auch TSR's
- sicher im HiMem (Speicherbereich zwischen 100000h und 10FFF0h) unterbringen.
- Sollte beim Umschaltversuch von Gate A20 der Tastaturprozessor des AT aus irgend-
- welchen Grⁿnden nicht reagieren, so bricht das Programm mit einer Fehlermeldung
- und ohne Installation ab.
- Assembliert wird das Programm mit
- TASM: TASM FASTMOVE
- TLINK FASTMOVE /X/T
-
- MASM: MASM FASTMOVE
- LINK FASTMOVE
- EXE2BIN FASTMOVE.EXE FASTMOVE.COM
-
- Neben dem schnellen Schieben erm÷glicht FASTMOVE den Programmierern auch den
- direkten Speicherzugriff in die 4 GByte-Welt hinein - und zwar wundersch÷n li-
- near (nach dem Motto: 'Weg mit den Segmenten'). Eigentlich brΣuchte man dazu
- nicht einmal den neuen INT 15h, sondern nur die Uminitialisierung der Deskrip-
- tor-Caches und die Freigabe der A20, was das Programm auf wenige Zeilen schrump-
- fen lie▀e. Es wΣre dann nicht einmal n÷tig, es resident zu laden. Der alte INT
- 15h wⁿrde jedoch die A20 wieder sperren, sobald die BlockMove-Routine aufgeru-
- fen wird (z.B. bei Benutzung einer RAM-Disk im extended Memory). Dadurch bekΣme
- man unsch÷ne L÷cher in den linearen Adre▀bereich hinein. Folglich ist es durch-
- aus sinnvoll, den INT 15h zu Σndern, um die A20 dauerhaft freizugeben. Das fun-
- ktioniert aber nur, wenn man keine Software geladen hat, die selber an der A20
- herumprogrammieren, wie z.B. HMS.
- In Turbo Pascal 4.0 ... ist die lineare Adressierung dank dews Datentypes
- 'longint' als Index recht einfach und sehr schnell, wenige Zeilen Inline-Code
- (als zeitsparende Makros programmiert) reichen aus. Die vorgestellte Unit
- NOLIMIT liefert den 32-Bit-Ersatz fⁿr MEM und MEMW zum einen als Funktion
- GETMEMB/W und als Prozedur SETMEMB/W. Darⁿber hinaus kennt sie 'Peek' und
- 'Poke' fⁿr 32-Bit-Daten: SET/GETMEML.
-
-