1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
11
11
ZUGRIFFE
1400
1400
EMPFEHLEN
-
19.11.10 22:36 #1
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?
-
22.11.10 18:05 #2BassBox 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
BassBoxGeändert von BassBox (22.11.10 um 18:52 Uhr)
-
22.11.10 18:06 #3BassBox 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
-
23.11.10 20:49 #4
Vielen Dank!
Ja! :-D Seit ein paar Monaten versuche ich mich da mal dranBist wohl auch unter die OS entwickler gegangen?
, 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?
-
24.11.10 16:08 #5BassBox 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
-
23.12.10 09:56 #6BassBox 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.
-
Prinzipiell empfehle ich dir www.lowlevel.eu die deutsch sprachige OS-Dev Community. Die gibt es auch im IRC #lost auf euirc.net
SkiniNeulich 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.
-
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.
-
20.01.11 17:12 #9
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:
Wenn ich die Zeile "mov es, ax" auskommentiere, kommt kein Fehler, aber auch kein Pixel.Code :1 2
0x00000000000081b4>> mov es, ax : 8EC0 >>PANIC<< exception(): 3rd (13) exception with no resolution
Wenn ich die Funktion über das "[Bits 32]" schiebe, kommt dieser Fehler:
Woran liegt das?Code :1 2
0x0000000007200002>> (invalid) : FFFF >>PANIC<< exception(): 3rd (13) exception with no resolution
Gibt es andere Funktionen, um Pixel auf dem Bildschirm zu zeichnen?
-
20.01.11 17:54 #10BassBox Tutorials.de Gastzugang
ich weiß es (glaube ich) du musst das ganze auf 32 bit register erweitern also mov es,eax
-
20.01.11 18:08 #11
Dann kommt leider der gleiche Fehler, er meldet wieder die (nicht vorhandene) Zeile "mov es, ax".
-
21.01.11 15:27 #12BassBox Tutorials.de Gastzugang
komisch, probiers mal in virtual box. Vieleicht is ja ein fehler von bochs?
Ähnliche Themen
-
Assembler Graphic Mode
Von simicoder im Forum Sonstige SprachenAntworten: 2Letzter Beitrag: 30.09.10, 13:33 -
[Assembler] Interrupts im Protected Mode
Von Aiju im Forum Sonstige SprachenAntworten: 3Letzter Beitrag: 09.07.06, 21:48 -
Was ist das Beste um in den Protected-Mode zu schalten
Von billgatesm im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 30.07.05, 18:53 -
Dual Channel Mode/AGP Mode
Von LostProphet im Forum HardwareAntworten: 1Letzter Beitrag: 24.02.05, 13:18 -
protected mode einschalten
Von Tanor im Forum Sonstige SprachenAntworten: 1Letzter Beitrag: 17.02.05, 12:59





Zitieren
Login





