Autor Thema: Bootloader  (Gelesen 20940 mal)

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #20 am: 02. March 2004, 22:15 »
Ich habe die Programme eigentlich nie selbst mit MASM ausprobiert.
Ich hab sie mir zwar mal angeschaut, aber das wars dann auch.

Auch wenn der Syntax für NASM anders ist als in dem Buch, so gibt das Buch doch eine Menge an Infos, die auch für NASM verwendet werden können.
Die Art und Weise wie ASM-Code formuliert wird, ändert sich ja nicht, lediglich der Syntax ist etwas anders.

Also kannst du aus dem Buch auch lernen wenn du NASM benutzt.

Wenn du das eBook haben willst, dann melde dich bei mir per Mail oder ICQ.
----------------------
Redakteur bei LowLevel

bscreator

  • Gast
Gespeichert
« Antwort #21 am: 02. March 2004, 22:16 »
Da hat mir wohl einer meiner Kumpels einen ziemlichen Sch...dreck erzählt. Schon das erste Programm läuft nicht. Hey TeeJay, wenn Du mit diesem Buch angefangen hast, welchen Assembler hast Du dann verwendet ?

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #22 am: 02. March 2004, 22:45 »
Ich sag ja. Ich hab die Programme aus dem Buch nicht ausprobiert.
Ich hab erst mit NASM richtig angefangen in Assembler zu programmieren.

Und da musst du dir halt mal die Doku von NASM durchlesen. UNd dann kannst du auch den Syntax davon.
----------------------
Redakteur bei LowLevel

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #23 am: 08. March 2004, 18:29 »
moin TeeJay hab ma ne Frage zu deinem Bootloader bevor ich deinen entdeckt habe habe ich versucht selber einen zu schreiben. Is noch in arbeit
wollt mal fragen ob ich das RootDir und die FAT nich besser an die Stelle schreibe an die der Kernel geladen wird schreibe. das RootDir die FAT durchsuche alle Parameter die ich brauche auf den Stack pushe und dann den Kernel mit den werten vom stack lade. Den Bootloader brauch ich ja sowieso nur um den Kernel zu laden. Übersehe ich da was wichtiges oder wie ist deine bzw. eure Meinung dazu.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #24 am: 08. March 2004, 18:31 »
Zu spät deutsches Sprache schweres Sprache
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #25 am: 08. March 2004, 20:06 »
Hoi.
Du musst dir folgendes überlegen:
Zuerst musst du den Eintrag deiner Kerneldatei im Rootdir erstmal finden.
Dazu müsstest du die Sektoren in denen das RootDir enthalten ist komplett oder jeweils einzeln in den Speicher laden. (In meinem Loader hab ich sie einzeln geladen).
Wo du diese hinlädst ist vollkommen wurst, solange sie innerhalb der 1 MB Grenze sind und du nicht den Code deines Bootloaders überschreibst :)
Diese Daten müssen nicht ständig im SPeicher bleiben, da du das Rootdir ja nur einmal durchsuchen musst. Wenn du den Eintrag dort gefunden hast musst du aus diesem Eintrag den Startsektor der Kerneldatei lesen. Sobald du diesen hast ist das Rootdir uninteressant und alle Sektoren können dann auch im Speicher überschrieben werden.

Nun musst du die FAT-Tabelle lesen. Da diese jedoch etwas blöd aufgebaut ist (12 Bit pro Eintrag) empfielt es sich auf jeden Fall diese komplett in den Speicher zu lesen.

Von hier aus kannst du zwei wege gehen.
1. Du liest immer nur den Fat-Eintrag des nächsten Sektors und liest diesen Sektor dann in den Speicher. So hab ich das gemacht. Hier musst du dann aber aufpassen das du die FAT Tabelle im Speicher nicht überschreibst.

2. Du liest alle benötigen Fat Einträge und schreibst (wie von dir vorgeschlagen) alle der Reihe nach auf den Stack und liest dann alle Sektoren in einem Rutsch aus ohne jedesmal erst in der FAT nachzuschauen. In diesem Fall kann dann auch die FAT im Speicher überschrieben werden.

Also du siehst es gibt sehr unterschiedliche Methoden. Deine (2.) finde ich dabei auch garnicht mal so schlecht. Man muß dann nicht so mit dem Speicher aufpassen. Jedoch ist auch Methode 1 sehr einfach umzusetzen, da man ja 1 MB speicher für sich hat und das sollte genügen um da einzelne Bereiche auseinander zu halten.

Wäre gut möglich das dein Bootloader mit deiner Methode vielleicht sogar kompakter ist als meiner. Jedenfalls würde ich mir diesen gerne mal anschauen wenn er denn fertig ist und läuft!

mfg
TeeJay

PS: Find ich gut das du dir selbst mal Gedanken dazu machst und nicht einfach nur Software von anderen kopierst. Auch wenn das natürlich hier bei LowLevel nicht verboten ist. Jedoch ist der Lerneffekt wesentlich höher :)
----------------------
Redakteur bei LowLevel

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #26 am: 21. March 2004, 23:07 »
Moin TeeJay
Hab jetzt mal nen bischen rumprobiert
und ich bin überzeugt das deine Methode die bessere ist. Das Problem ist nämlich das man die FAT Anträge falschrum auf den Stack pushen muss. Ich könnte den Kernel dann nich gemütlich laden indem ich mir einfach jeden wert pope. Ich müsste die Werte entweder umdrehen was wohl hinsichtlich der begrenzten Ressourcen den code ziemlich aufblähen würde oder ich müsste die Werte anders adressieren was ich aber als  Lösung sehr unschön finde, Ich will ja eigentlich den Vorteil des Stacks nutzen was aber dann einfach quatsch wäre.

Also hab ich mir gedacht ich nehm mir einfach gedacht ich versuch deinen Bootloader zu optimieren.
Hab den jetz so umgeschrieben das er das ganze RootDir lädt. Der Vorteil ist das man hier die selbe Methode verwenden kann wie die um die Fattable zu laden. dadurch spart man wieder etwas code. Außerdem hab ich noch die Rechnung um aus der LHS die CHS zu machen geändert.

;Aus Logischer Sektornummer die CHS Adresse errechnen
    mov         ax,[Param1]
       xor         dx,dx
       mov        bx,18
       div         bx
       inc         dx
       mov                    [Var3],dx
       xor                dx,dx
       mov                    bx,2
       div                 bx
       mov                    [Var1],ax
      mov                [Var2],dx

Ich denke das ist viel zweckdienlicher als nochma komplett nen eigenen Loader zu schreiben die meisten Funktionen kann man ja eh nicht viel anders gestalten.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #27 am: 21. March 2004, 23:08 »
ohja deutsch is schon manchmal schwer
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #28 am: 21. March 2004, 23:20 »
Jo klar. Dazu ist der Code ja auch gedacht.

Das mit dem Laden des kompletten RootDirs hatte ich mir im nachhinein auch überlegt. Aber da hatte ich keine Lust mehr das umzuschreiben.


Aber find ich gut das du erstens mit meinem Code zurechtkommst und damit auch noch rumspielen kannst :)

Das mit deinem Stack hätte man wie folgt lösen können.
Du zählst einfach in einer Variable mit wie viele Einträge du auf den Stack pushst, und dann kannst du ja auch ganz einfach errechnen wo im Stack der erste Eintrag steht und dann jeweils immer den nächsten Laden.

Aber es gibt sicher 100 Möglichkeiten wie man das machen kann. Hauptsache ist ja das der Kernel geladen wird.
----------------------
Redakteur bei LowLevel

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #29 am: 22. March 2004, 08:16 »
hallo, ich kann den bootloader nicht aufrufen, da kommt immer

"Fehler:

Der angegebene Link exisitiert oder funktioniert nicht. Bitte schreiben Sie mir eine Mail an:

masta_ace_inc@gmx.de

Und teilen Sie mir das Problem mit.

Vielen Dank! "

Was soll ich machen?
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,...

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #30 am: 22. March 2004, 14:13 »
Jo sorry. Ich hatte die Scripte und Verzeichnisse etwas umgestellt. Den Link hier im Thread hatte ich noch nicht umgestellt. Ist aber soeben passiert.
----------------------
Redakteur bei LowLevel

 

Einloggen