Arbeitsspeicher im Real-Mode
-
Hallo,
wie kann ich auf den Arbeitsspeicher über 64K hinaus zugreifen? (aus meinem os = real mode). Also mit folgendem:mov ah,88h int 15h
bekomme ich die Größe des erweiterten Spechers in das Register AX gelegt. Also weiß ich dadurch wie viel erweiterten Speicher ich habe, nur wie nutze ich den auch?! Danke!
-
Meinst du 640KB?
Gibt verschiedene Möglichkeiten. Entweder über XMS, wenn himem.sys geladen ist oder auch über EMS, wenn emm386.exe mit EMS-Unterstützung geladen ist. Wenn keines da ist, geht es auch über irgendeinen BIOS-Interrupt (eh irgendwas mit int 15h). Dann musst du dich aber außerdem ums A20 Gate kümmern.
-
Hi,
danke erstmal. Hast du zufällig ein Link, der das Thema ein wenig vertieft?
-
Hi.
Sowohl EMS, wie auch XMS-Doku habe ich auf meiner Seite zum Download:
http://BTM.homeip.net/index.php/page_8/Object_9 (PCGPE 10 / XMS gibt's nochmal einzeln...) *werbung*
Ansonsten haettest du auch sehr schnell was mit google gefunden...Um das nochmal zu betonen: Es handelt sich hierbei um DOS-Treiber.
Und mit int 15h geht das wohl auch, auch wenn ich das fuer wenig sinnvoll halte: http://www.ctyme.com/intr/rb-1527.htm etc.
Da waere es vielleicht sinnvoller, gleich in diesen "32Bit-RealMode" (Voodoo-Dingens, oder wie auch immer sich der jetzt nennt :D) zu schalten. Funktioniert praktisch wie der RealMode, nur dass du ueber die 32Bit-Register Zugriff auf 4GB Speicher hast...
-
Hi,
ich würde ja gerne den Protected Mode für ein OS benutzen, jedoch gibts da zwei Probleme, ich habe noch kein Tutorial gefunden mit beispielen und vorgehensweisen, die nasmw.exe (assembler) akzeptiert. Außerdem würde das mit der Hardwareansteuerung über Interrupts ja auch nicht merh gehen, oder? Kannst du mir sagen, ob das doch geht und wo ich eine Tutroial finde, was ich auch mit nasmw realisieren kann? Danke.
-
sevobal schrieb:
ich würde ja gerne den Protected Mode für ein OS benutzen, jedoch gibts da zwei Probleme, ich habe noch kein Tutorial gefunden mit beispielen und vorgehensweisen, die nasmw.exe (assembler) akzeptiert.[...]Kannst du mir sagen, [...] wo ich eine Tutroial finde, was ich auch mit nasmw realisieren kann?
Das nasm "vorgehensweisen" nicht akzeptiert, halte ich ehrlichgesagt fuer unwahrscheinlich.
Dass es Codeschnippsel aus Tutorials o.Ae. nicht akzeptiert, die der NASM-Syntax nicht folgen, ist klar.
Nun verstehe ich aber nicht ganz, wo dein Problem zB. mit dem in den FAQ verlinkten Tutorial liegt. Ist zwar keine Schritt-fuer-Schritt-Anleitung zT. "wie bastel ich mir mein ProtectedMode-OS mit NASM (den kompletten Quellcode zum fertigen OS gibt's auf der letzten Seite)" (sowas kenne ich nicht/will ich auch nicht kennen - weisst du ja vielleicht schon :D), aber es ist doch alles sehr schoen beschrieben (sogar deutsch) und mit Grafiken illustriert - zudem gibt es auch noch schoen uebersichtliche und kommentierte Beispielcodes zu jedem Abschnitt.Wenn du dein OS jetzt nicht nur via C&P aus anderer Leute Codes zusammenpappst, ein wenig Sachverstand, Creativitaet und Geduld/Zeit besitzt und dich mit der NASM-Syntax auskennst (setze ich bei deinem Vorhaben mal alles voraus ;)) sollte es hier IMHO an sich keine Probleme geben.
sevobal schrieb:
Außerdem würde das mit der Hardwareansteuerung über Interrupts ja auch nicht merh gehen, oder?
Jo, groesstenteils wuerde da nichts mehr laufen.
Aber wenn dir der Zugriff auf den erweiterten Speicher so wichtig ist, gibt es da wie gesagt noch diesen RealMode-Hack...
-
Alternativ kann man ja trotzdem im echten Protected Mode bleiben und für die Interrupts einfach zurückschalten, wie es die guten alten DOS Extender gemacht haben.
-
Okay, dann dürfte alles klar sein, nunn nochmal was anderes (letzte Frage versprochen
) wo liegt hier genau der fehler?
jmp starting kursor1 DW 0,0 DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h DB 000h,000h,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh DB 00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,000h,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,000h,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh DB 00Eh,00Eh,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,00Eh,00Eh,00Eh,00Eh DB 00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,000h,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh DB 000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,00Eh,00Eh DB 00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,000h,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh DB 00Eh,00Eh,000h,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h DB 00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,000h,000h,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh DB 00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,000h,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,00Eh,000h,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,00Eh,00Eh,00Eh,00Eh,000h DB 000h,00Eh,00Eh,00Eh,00Eh,00Eh,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,000h,00Eh,00Eh,00Eh,000h,0FFh,000h,000h,00Eh,00Eh,00Eh,000h,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,00Eh,00Eh,000h DB 0FFh,0FFh,0FFh,000h,000h,000h,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,000h,00Eh,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,000h DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh DB 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,000h,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh starting: mov ah,4Fh mov al,02h mov bx,101h int 10h mov ah,0Ch mov bh,0 mov dx,0 mov cx,0 mov al,kursor1 int 10h
-
Der Code enthaelt IMHO keine syntaktischen Fehler.
Was sonstige Fehlfunktionen des Codes anbelangt, kann ich so nur spekulieren, und darauf habe ich keinen Bock.