Autor Thema: PM funzt wieder mal net  (Gelesen 14157 mal)

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« am: 12. August 2005, 14:12 »
Moin,
nach langer Zeit hab ich wieder mein OS rausgekramt um daran weiter zu machen. Aber nun soll das ganze endlich im PMode laufen. Tut es aber nicht.

Ich habe den Code aus dem PM Tuto als Kernel genommen, der auszuführende Code nachdem in den PM geschaltet werden soll ist einfach nur JMP $. Bochs liefert mir aber immer diesen Fehler:
prefetch: getHostMemAddr vetoed direct read, pAddr=0x000a0000
Habt ihr ne Ahnung was ich falsch mache ? Der Kernelcode ist 1:1 die Kernel16.asm - File aus dem Tut.

Irgendwie hab ich bislang noch kein Glück mit den PM Geschichten gehabt :(

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #1 am: 12. August 2005, 14:37 »
Ich würde sagen Speicherschutzfehler.
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,...

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 12. August 2005, 14:39 »
aha. das hilft mir jetzt net wirklich weiter. ich mein ich hab den code 1:1 übernommen. woran liegt es dass es net funzt ?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 12. August 2005, 14:42 »
check mal die konfigurationsdatei von bochs und schau da mal ob du das für die größe des speichers was korrektes angegeben hast. oder nimm gleich eine fertige config. war da keine bei dem tutorial bei?
Dieser Text wird unter jedem Beitrag angezeigt.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #4 am: 12. August 2005, 14:42 »
Hast du alles übernommen?
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,...

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 12. August 2005, 14:49 »
Beim Tuto war keine Config dabei. Glaube auch nicht dass es daran liegt, wenn ich die Disk ins Laufwerk lege und neu starte lädt er kurz meinen Bootloader, gibt irgendeinen Müll auf dem Bildschirm aus und startet wieder neu.

@joachim_neu: Ja.

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 13. August 2005, 00:37 »
Mensch nu lasst einen armen verwahrlosten Coder doch net so hängen :cry:  :wink:

Der Bootloader lädt den Kernel an 0x0190 in den Speicher. Der Kernel prüft dann nur noch schnell ob ein 386 vorhanden ist, aktiviert A20 und dann kommt der PM ins Spiel (soll er zumindest :( )

WhiteDragon

  • Beiträge: 124
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 13. August 2005, 08:54 »
Sag mal, hast du auch schon eine IDT? Sonst kannst du mit PM ja nicht viel anfangen, außer vielleicht dem UnReal Mode...

Ansonsten ist es nicht mehr schwer:
- Interrupts disablen
- GDT laden
- Bit 0 in CR0 setzen
- FAR-Jump mit dem Code-Deskriptor
- DS, ES, FS, GS mit Daten-Deskriptor laden

Da du die GDT schon stehen hast, sollte das kein großes Problem sein. Hoffe ich zumindest - ich drück dir die Daumen!

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 13. August 2005, 21:48 »
Moin, erstmal danke für die Tips, jetzt funktioniert es.
Aber nur wenn ich es direkt im Bootloader mache. Hat jemand ne Ahnung warum ? Weil jetzt weiß ich net weiter, wie ich den Kernel laden soll, so ganz ohne Interrupts :P und ich glaub für nen Floppydrive is der bootsektor n bissel zu klein, oder ?!

achja es gab mal so ne seite, hab leider vergessen wie die heißt, die war ziemlich farbenfroh, da gabs so linuxkram und ein paar tutos wie man z.B. nen floppydriver schreibt. weiß evtl. wer welche seite ich meine ? kann er mir den link dafür geben ?

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 13. August 2005, 21:56 »
Ganz einfach, indem man den Kernel läd, bevor man die Interrupts ausschaltet.

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 13. August 2005, 22:35 »
hmm aber ich wollte den kernel gerne überhalb bzw. genau auf die 1MB-Marke laden. irgendwelche vorschläge ?

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 13. August 2005, 22:39 »
Naja, dazu wirst du wohl einen Floppy Treiber brauchen.
Mein üblicher Vorschlag wäre es, GRUB zu benutzen :D

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 13. August 2005, 22:42 »
näääh wenn schon denn schon :P

mh ich weiß dass hier im forum mal die adresse einer website gepostet wurde wo was über FDD controller und dessen programmierung etc. stand. hat keiner ne ahnung welche seite ich meine ?! ich hab meinen pc formatiert, daher mussten die meisten links aus meiner liste weichen

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 13. August 2005, 22:53 »

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 14. August 2005, 00:00 »
rofl ey da will man mal nen FDC treiber coden und dann pisst sich NASM bereits bei den OUT-Befehlen an:

;general FDC setup
out 0x3F2, 00000000b ;floppy drive A:
out 0x3F7, 0x00 ;1.44" floppy disk

;read sector
out 0x3F5, 01010110b ;command: read sector; read, MFM
out 0x3F5, 00000000b ;floppy drive A:

mov al, byte [Track]
out 0x3F5, al ;track

mov al, byte [Head]
out 0x3F5, al ;head

mov al, byte [Sector]
out 0x3F5, al ;sector

out 0x3F5, 2 ;sector size = 128 * 2² = 512
out 0x3F5, 18 ;sectors per track
out 0x3F5, 0x1B ;GAP3 length
out 0x3F5, 0xFF ;unused


argh!
Zitat von: NASM
ERROR: invalid combination of opcode and operand


heut klappt ech garnix :-({|=

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #15 am: 14. August 2005, 01:28 »
der Out-Befehl kann nur dann direkt mit Portadressen gefüttert werden, wenn diese innerhalb der 0 - 255 liegen. Wenn du Ports darüber ansprichst, musst du die Portadresse in DX laden und dann DX im out-Befehl angeben.
----------------------
Redakteur bei LowLevel

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 14. August 2005, 02:21 »
ja, das kam mir nach dem studieren der NASM referenz auch in den sinn ;) danke, jetzt funzt der code. das FDD reagiert, mal sehen ob ich nun meine sektoren ausgelesen bekomme. ich meld mich wieder wenns klappt.
werd mich mal kurz in den DMA kram einarbeiten dann sehen wa weiter

WhiteDragon

  • Beiträge: 124
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 14. August 2005, 07:24 »
Zitat von: ICC
näääh wenn schon denn schon :P


Nimm's mir nicht übel, aber du solltest prüfen, wo das Problem genau liegt. Ich schalte meinen PM erst im Kernel ein, weil ich im Bootsektor FAT12 unterstütze, um "ganz normale" Disketten verwenden zu können. Und es macht auch sehr viel mehr Sinn, dem PM erst im Kernel zu verwenden!

Gruß!

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 14. August 2005, 14:09 »
kein problem, genau so wollte ich es ja auch machen. aber der exakt gleiche pm code funzt im bootloader, aber nicht im kernel. und um das problem rauszufinden poste ich ja hier  :roll:

€dit: alter!!! ich habs doch tatsächlich geschafft nen floppydriver zu schreiben! DMA umd FDC kram sind garnet mal so schwer wie ich gedacht habe. also erstmal danke für eure hilfe, ich denke jetzt kommt mein projekt wieder etwas voran!

*cheers*

Paul

  • Beiträge: 41
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 14. August 2005, 21:54 »
HA!!!
Ich weiß jetzt warum ich im Kernel nicht in den PM wechseln konnte.
Ich habe die Segentregister DS, ES etc. an CS angeglichen. Aber die sind dem PM-Loader egal, ich muss DS, ES etc. auf 0 setzen und den Kram per ORG regeln.
Nun gehts! \:D/

 

Einloggen