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. 😉


Anmelden zum Antworten