PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehr als 64k RAM im Real-Mode


Lord_Otter
29.08.2002, 20:27
Hi !
Ich wollte mal (möglichst) mal den gesammten RAM für mein Programm ausnutzen, OHNE dabei die Hilfe des Protected Modes zu verwenden.
Das müsste doch eigentlich gehen, oder ?


Felix Kaiser
30.08.2002, 12:40
Wenn du NUR über den RealMode gehen willst, definitiv NICHT möglich!

Deswegen wurde damals von Lotus, Intel, Microsoft (LIM) der EMS Speicher Manager entwickelt, gerade um vereinfacht auf den oberen Speicherbereich zuzugreifen, in dem der Speichermanager automatisch Switches und Callbacks zwischen RealMode und ProtectedMode regelt. Hat nur den Nachteil, dass man nicht direkt auf den Speicher zugreifen kann, nur über den Manager. Ähnlich arbeiten auch XMS Speichermanager. Am besten ist immernoch direkt den Protected Mode zu nutzen, dafür ist er ja da!

Lord_Otter
30.08.2002, 16:20
Ja, aber ich will nicht imme im Protected Mode programmieren. Also es get, ist aber kompliziert, ja ?
Der Protected-Mode hat doch auc Nachteile, oder nicht ?

Felix Kaiser
30.08.2002, 17:25
Der wohl einzige Nachteil des Protected Mode ist, dass RealMode Code nicht unmittelbar ausgeführt werden kann. Aber das interessiert wohl nicht weiter. Es gibt so gesehen keine Nachteile.

Jan Krüger
30.08.2002, 18:56
unter nativem DOS gibt es nur natürlich das problem, dass kein protected mode speicher- und pagingmanager vorhanden ist und du dir somit selber einen programmieren müsstest. und API hättest du auch keine. aber sonst... :D

Lord_Otter
30.08.2002, 22:05
In diesem Fall würde ich mich so was selber basteln.

Felix Kaiser
31.08.2002, 10:52
Sehr komplex und zeitaufwendig. Wenns denn RealMode sein muss, benutze die XMS Schnittstelle. Es gibt für jedes DOS System entsprechende Treiber, die in der Regel auch immer geladen sind. Außerdem benutzt jedes andere Programm was mehr Speicher braucht im RealMode auch eben dies. Soweit ich weiß laufen die DPMI Kernel von Borland (oder zumindest die 32Bit Kernel) auch nicht ohne einen entsprechenden Treiber, wie z.B. HIMEM.SYS.

Lord_Otter
31.08.2002, 13:16
OK.
Gegen HIMEN.SYS hab' ich nichts, das ist eh immer installiert.

Diogenes
31.08.2002, 15:08
Wenn Du Dich auf die berüchtigten 640kB beschränken willst, dann setze die Heap-Grenze (hab' vergessen, die das heißt. Fängt auf jeden Fall mit Heap...) hinunter. Der darüber liegende ist dann komplett ungenutzt (abgesehen von diversen Kartenberechen) und kann mit Long-Pointern (Mem-Array) nach Belieben mißbraucht werden.

Lord_Otter
31.08.2002, 18:55
Ah danke, das ist doch schon was. Das reicht locker.

Schutsch
19.09.2002, 18:13
Ich hab früher auch den unreal-Mode benutzt :

Der geht so :

Pmode mit kleiner GDT initalisieren.
32-Bit Segment (FLAT z.B.) laden.
Pmode beenden.

Segment nicht überschreiben.

Dann kann man auf den gesammten Speicher so zugreifen :

Lesen :
MOV Reg,[FS:32-Bit Offset] ; 32-Bit Offset benötigt DB 67h Pref
Schreiben :
MOV [FS:32-Bit Offset],Reg

Diese beiden Operationen sollten als Inline-Funktioen
aus dem Debugger hergestellt werden.

Lord_Otter
20.09.2002, 16:40
Das verstehe ich zwar nicht so ganz, aber ich werde mich mal erkundigen...

Felix Kaiser
20.09.2002, 20:17
Du wechselst in den 32-Bit PMode (darf kein Speichertreiber geladen sein bzw. System darf nicht im V86 sein!), lädst eine primitive GDT, setzt z.B. den Selektor 000Ch auf Base 0, Limit 4G, wechselst zurück in den RealMode, die GDT lässt du so und du lässt den FS den Selektor 000Ch stehen. Soweit ich das verstanden hab kannst du dann FS über ein 32-Bit Offset indizieren und somit auf den RAM bis 4G zugreifen.

Lord_Otter
11.11.2002, 18:54
Naja, ich hab' mal den EMS ausprobiert (Real-Mode natürlich).
Ich habe 64 freie Seiten => 1024 KB => 1 MB.

1 Megabyte zusätzlich reicht zwar, aber wo bleibt der Rest ? Für mein Programm habe ich standardmäßig 1 MB, jetzt per EMS nochmal 1 MB, amcht 2 MB.

Bei 128 MB Ram fehlt da noch was.

Wird der Rest von Windows verwendet oder hat mein DOS-Programm (das ja unter Windows ausgeführt wird) nicht mehr Speicherplatz zur Verfügung ?

Ich wollte das mal unter DOS (also ohne Windows) testen, aber da war leider kein EMS installiert. :mauer:

Schaf
11.11.2002, 20:09
du brauchst einen extended memory manager, wie z.b. emm386.exe von m$. den packst dir in die config.sys, vielleicht noch ein paar parameter, und dann kannst du deinen xms in ems konvertieren. xms ist ursprünglich alles über 1 mb.

Lord_Otter
12.11.2002, 09:45
Verstehe, danke !