Autor Thema: Bochs ja, reales booten ... nein  (Gelesen 16018 mal)

ODIN

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« am: 24. January 2005, 15:44 »
Hallo Leute!
Ich habe ein großes Problem ... also folgendes...

Ich programmiere mein eigenes kleines OS ...
Bis jetzt habe ich BOCHS für die simulation benutzt.
Hat alles funktioniert ... gab sogar schon eine commandoeingage =)

Aber als ich das Image auf eine Diskette gespielt habe um zu sehen wie das in echt so is ... und nichts hat funktioniert. Es kam nur ein schwarzer Bildschirm und der Cursor hat ganz oben links geblinkt und bei tastendruck wurde neugstartet.

Wenn ich in bochs von der Diskette boote geht alles ganz normal ...

Kann mir jemand helfen ? Ich werde jetzt ein bisschen rumtesten und sehen wie ich das weitermache.

mfg ODIN - Daniel

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #1 am: 24. January 2005, 15:51 »
gib mal den code oder zumindest den teil, der dir das problem zu sein scheint.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

clemensoft

  • Beiträge: 92
    • Profil anzeigen
    • http://www.clemensoft.de
Gespeichert
« Antwort #2 am: 24. January 2005, 19:08 »
Ich nehme an, du benutzt den Dummy-Kernel von LL1 als Grundlage? Nicht jedes BIOS kann Teletype, besser selber Treiber schreiben!

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 24. January 2005, 19:13 »
Zitat von: clemensoft
Ich nehme an, du benutzt den Dummy-Kernel von LL1 als Grundlage? Nicht jedes BIOS kann Teletype, besser selber Treiber schreiben!

Das BIOS muss aber schon ziemlich alt sein, wenn es das nicht beherrscht.

ODIN

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 24. January 2005, 19:58 »
Hi Leute!
Thx amal ...

Naja ich mein mein Bootsektor gibt als allererstes einen String mit den Biosinterrupts aus...

In einer früheren Version als der Bootloader in entwicklung bei mir war, hat das funktioniert und das war der gleiche code ...

komisch

@clemensoft ... wie meinst du treiber schreiben ... wie soll ich meiner kiste das sprechen beibringen ohne biosinterrupts ?

Hast du da eventuell ein paar links ? =)

lg Daniel

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 24. January 2005, 20:09 »
Zitat von: ODIN

@clemensoft ... wie meinst du treiber schreiben ... wie soll ich meiner kiste das sprechen beibringen ohne biosinterrupts ?


Ganz einfach, der Grafikspeicher (sozusagen das, welches die Grafikkarte auf den Bildschirm schreibt) liegt bei B8000h. Dort belegt jedes Zeichen 2 Byte. Das erste Byte ist das Attribut, zB Farbe, das zweite das ZEichen. So sind alle ZEichen nacheinander gespeichert.

clemensoft

  • Beiträge: 92
    • Profil anzeigen
    • http://www.clemensoft.de
Gespeichert
« Antwort #6 am: 24. January 2005, 20:15 »
Genau. Hier mal ein Beispielcode, der den Bildschirm löscht und einen nullterminierten String in esi an die erste Bildschirmzeile ausgibt. Fallst du den Code benutzen willst, bitte meine Mailaddi in den Credits erwähen :lol:
Für Real-Mode mach einfach die e's vor den registern weg und packe alles in segmente
EDIT: Hab ich schon für dich gemacht

debug_print:
mov es,0xB800
xor di,di
mov cx, 80*2*25
xor ax, ax
rep stosb
mov es,0xB800
xor di,di
debug_print.1:
lodsb
or al, al
jz debug_print.2
stosb
mov al, 12
stosb
jmp debug_print.1
debug_print.2:
ret

ODIN

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 24. January 2005, 22:46 »
Ok super! Das hat funktioniert! Super...

Nur wie schreib ich nun einen Tastaturtreiber ? Ich mein wo bekomm ich alle Funktionen her die ich vorher aus den Interrupts genommen habe? Wenn die Interrupts nicht funktionieren werden die tastaturinterrupts auch nicht funktionieren. ich werde das mal nachschaun und melde mich dann wieder...

Thx!

lg Daniel

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #8 am: 24. January 2005, 23:05 »
Der Tastaturtreiber liest einfach nur den Scancode aus port 0x60 aus und wandelt diesen wenn möglich in einen Ascii-Code um. Anschliessend schreibt er diesen Code in einen Puffer, aus dem man dann die Zeichen lesen kann. Was man damit anstellt wirst du ja selbst wissen.
Aber, wenn du die Treiber eh alle selbst schrieben willst/musst, kannst du dich auch gleich in den ProtectedMode begeben, da du das BIOS-Zeug ja eh nicht nimmst, einen anderen Grund für den RM sehe ich nicht.
Achso falls die Int's generell nicht gehen, schau mal ob irgendwie ein cli nicht wieder aufgehoben wird. Ist mir auch schon mal passiert, hatte ein sti auskommentiert und mich gewundert warum der Int 13h meinen Kernel nicht geladen hat, ohne die IRQ's geht's da nicht. Vielleicht ist das ein Grund.
Just guessed^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

ODIN

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 25. January 2005, 13:32 »
Hi!

Ok das is gut das werd ich machen ... aber Protected Mode is doch schwer oder? Ich hab da mal so was gelesen aber das is doch schwer?!? Kann mir wer ein Tutorial geben oder etwas wo ich mich reinlesen kann?

Thx

mfg Daniel

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #10 am: 25. January 2005, 14:10 »
ne, is net alzu schwer. geh einfach hin, hol dir den scancode aus 0x60, sag dem keyboard, dass du ihn hast (keine ahnung, ob man das noch muss, aber beim 8086er wars so) schau, ob es shift ist, wenn ja, dann setze den wert einer var auf 1, wenn es der wert für loslassen ist, dann setz den wert auf 0 und dann schau dir die werte an, lade eine tabelle, die dir für die scancodes die ascii-codes sagt, und fertig ;-)
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

 

Einloggen