tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von BassBox
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
1400
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Hi,
    nach vielen erfolglosen Versuchen hab ich es geschafft, in einem eigenen OS in den Protected Mode zu wechseln.
    Interrupts sind anscheinend nicht erlaubt (int 10h z.B. endet in einer 3rd exception).
    Wie kann ich dann in den Grafikmodus schalten und Pixel setzen?
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  2. #2
    BassBox Tutorials.de Gastzugang
    Hallo,
    Bist wohl auch unter die OS entwickler gegangen? Ich schreibe schon set einiger zeit an meinem egenen.
    Wenn du einen interrupt im Protected Mode ansprechen willst dann beachte das :http://www.fh-zwickau.de/doc/prmo/pm...ext/p_all8.htm

    Da steht wie es geht. Aber es gibt auch noche eine funktion zur pixelausgabe ohne int:
    PlotPixel: ;ax = farbe ;bx = y koordiante ;cx = x koordinate
    pusha
    push ax
    mov ax,0xA000
    mov es,ax
    mov di,bx
    shl di,6
    shl bx,4
    add di,bx
    mov bx,cx
    shr bx,3
    add di,bx
    and cx,7
    mov ah,128
    shr ah,cl
    mov dx,03ceh
    mov al,8
    out dx,ax
    mov dl,[es:di]
    pop ax
    mov [es:di],al
    popa
    ret

    Diese funktion ist wie funktion 0ch im int 10h nur mit anderen parametern.
    Du musst aber befor du in den Protected Mode wechselst musst du in den Grafik modus 12 wechseln und Hier der code zum wechseln im realmode:
    set_mode12:
    mov ax, 12h
    int 10h
    ret

    LG
    BassBox
    Geändert von BassBox (22.11.10 um 18:52 Uhr)
     

  3. #3
    BassBox Tutorials.de Gastzugang
    Hallo,
    Bist wohl auch unter die OS entwickler gegangen? Ich schreibe schon set einiger zeit an meinem egenen.
    Wenn du einen interrupt im Protected Mode ansprechen willst dann beachte das :http://www.fh-zwickau.de/doc/prmo/pm...ext/p_all8.htm

    Da steht wie es geht. Aber es gibt auch noche eine funktion zur pixelausgabe ohne int:

    PlotPixel: ;ax = farbe ;bx = y koordiante ;cx = x koordinate
    pusha
    push ax
    mov ax,0xA000
    mov es,ax
    mov di,bx
    shl di,6
    shl bx,4
    add di,bx
    mov bx,cx
    shr bx,3
    add di,bx
    and cx,7
    mov ah,128
    shr ah,cl
    mov dx,03ceh
    mov al,8
    out dx,ax
    mov dl,[es:di]
    pop ax
    mov [es:di],al
    popa
    ret

    Diese funktion ist wie funktion 0ch im int 10h nur mit anderen parametern.
    Du musst aber befor du in den Protected Mode wechselst musst du in den Grafik modus 12 wechseln und Hier der code zum wechseln im realmode:
    set_mode12:
    mov ax, 12h
    int 10h
    ret
    LG
    BassBox
    Jellysheep bedankt sich. 

  4. #4
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Vielen Dank!
    Bist wohl auch unter die OS entwickler gegangen?
    Ja! :-D Seit ein paar Monaten versuche ich mich da mal dran , auch wenn viele sagen, dass das OS-Entwickeln Zeitverschwendung ist.
    Danke für die Funktion!
    In den Grafikmodus kann ich im Realmode schon, kann ich auch im Protected-Mode in den Grafik-Modus wechseln?
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  5. #5
    BassBox Tutorials.de Gastzugang
    Ja normalerweise schon. Aber dazu musst halt int 10h ansprechen und das funktioniert halt nur über den Umweg (siehe Link) oder (habs noch nicht ausprobiert) du setzt die parameter für den Int und dann machst du einfach call mit der Offset des Ints.
    Gruß
    BassBox
     

  6. #6
    BassBox Tutorials.de Gastzugang
    Sorry das mir die Idee erst jetzt kommt:
    Dul lädst im Rmode die ivt an eine andere Stelle des Arbeitsspeichers:
    mov ax,0
    mov es,ax
    mov word [offset_int_10h],[es:4*10h]
    mov word [CS_int_10h],[es:4*10h+2]

    So, jetzt stehen in den variablen das Code Segment vom int 10h und die offset.
    im pmode kannst die dann aufrufen.
    ZB(weis net ob des so klappt)
    mov ax,[es:4*10h+2]
    mov cs,ax
    call far [es:4*10h]

    Das Problem wir warscheinlich sein das ein int mit iret beendet wir, und wir deshalb noch ein paar kleinichkeiten auf den Stack schieben müssen. Ich weiß gerade nicht genau was auf den stack muss aber ich guck mal in meinem Assembler Buch nach.
     

  7. #7
    Skini Skini ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    173
    Prinzipiell empfehle ich dir www.lowlevel.eu die deutsch sprachige OS-Dev Community. Die gibt es auch im IRC #lost auf euirc.net
    Skini
     
    Neulich im IRC:
    <a> Da scheine ich selbst in Assembler besser zu runden als du in C. ;-)
    <b> for(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);
    <a> b löst das also brav iterativ, nur daß man dann Fortran nimmt, muß er noch lernen.
    <b> fortran(rounded_data_size = data_size; rounded_data_size & 3; rounded_data_size++);

    Ich bin eine Fee:
    Wenn ich die Hex-werte der Buchstaben meines Namens addiere, bin ich 1FE.

  8. #8
    stephsto stephsto ist offline Mitglied Gold
    Registriert seit
    Mar 2004
    Beiträge
    127
    Nun ihr könnt euch auch ein Protected Mode Interface der VESA Grafikerweiterung eures BIOS holen. Ihr müsst bedenken, dass sobald ihr in den PMode wechselt die IVT nicht mehr vorhanden ist. Deshalb gibt es keinen int10 mehr. Außerdem solltet ihr euch abgewöhnen von Funktionen zu sprechen. Der int 10h ist ein Software Interrupt. Ich habe das in einem System mal so gelöst, dass ich mir ein PMode Interface im Realmode vorbereitet und später im PMode geladen habe. Dann habe ich den int10 wieder mit den ursprünglichen Funktionen belegt. Ist aber eigentlich nicht notwendig.
     
    Assembler ist der wahre Weg zum GUI.

  9. #9
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Ah ok, interessante Vorschläge!
    @BassBox:
    Deine Pixel-Setzen-Funktion funktioniert bei mir nicht. Wenn ich sie nach "[Bits 32]" stehen habe, stürtzt Bochs (o.ä.) ab und zeigt das an:
    Code :
    1
    2
    
    0x00000000000081b4>> mov es, ax : 8EC0
    >>PANIC<< exception(): 3rd (13) exception with no resolution
    Wenn ich die Zeile "mov es, ax" auskommentiere, kommt kein Fehler, aber auch kein Pixel.
    Wenn ich die Funktion über das "[Bits 32]" schiebe, kommt dieser Fehler:
    Code :
    1
    2
    
    0x0000000007200002>> (invalid)  : FFFF
    >>PANIC<< exception(): 3rd (13) exception with no resolution
    Woran liegt das? Gibt es andere Funktionen, um Pixel auf dem Bildschirm zu zeichnen?
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  10. #10
    BassBox Tutorials.de Gastzugang
    ich weiß es (glaube ich) du musst das ganze auf 32 bit register erweitern also mov es,eax
     

  11. #11
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Dann kommt leider der gleiche Fehler, er meldet wieder die (nicht vorhandene) Zeile "mov es, ax".
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  12. #12
    BassBox Tutorials.de Gastzugang
    komisch, probiers mal in virtual box. Vieleicht is ja ein fehler von bochs?
     

Ähnliche Themen

  1. Assembler Graphic Mode
    Von simicoder im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 30.09.10, 13:33
  2. [Assembler] Interrupts im Protected Mode
    Von Aiju im Forum Sonstige Sprachen
    Antworten: 3
    Letzter Beitrag: 09.07.06, 21:48
  3. Was ist das Beste um in den Protected-Mode zu schalten
    Von billgatesm im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 30.07.05, 18:53
  4. Dual Channel Mode/AGP Mode
    Von LostProphet im Forum Hardware
    Antworten: 1
    Letzter Beitrag: 24.02.05, 13:18
  5. protected mode einschalten
    Von Tanor im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 17.02.05, 12:59

Stichworte