Eigenes Betriebssystem -> Bootloaderproblem

  • Sehr geehrte WINHISTORY-User,
    Ich bin ein Hobbyprogrammierer und besonders „Spaßig“ finde ich das programmieren von bootfähigen Systemen (Betriebsystemen). Nur bin ich auch da noch eine Art Anfänger. Somit weis ich bei der Assemblerprogrammierung nicht wie man korrekt von Datenträgern, in meinem Fall Disketten, liest und frage daher euch ;)
    Mein Problem: Ich möchte, da ich mein System nicht nur sechs Sektoren groß sein soll, die komplette Diskette in den Arbeitsspeicher laden. Doch schon beim tüfteln an einer Subroutine die die ersten 3 Spuren lädt scheitere ich.
    Spur 1 und Spur 2 werden korrekt geladen doch bei Spur 3 scheitert es.
    Hier erstmal der Code:

    Die Subroutine „load3“ ist dabei das Sorgenkind und lädt leider nicht das, was sie soll. Aber warum nicht? Diese Subroutine lädt irgend etwas aus dem freien Speicher der Diskette was ich daran erkenne das jede menge ‚F6’-Bytes in den Arbeitsspeicher geladen werden wo eigentlich der weiterführende Code des Kernels hin sollte. :/
    Wie kann ich dafür sorgen das die 3. Spur die ich möchte geladen wird?

    Zusammenfassend: Ich habe ein Image geschrieben welches auf Diskette formatiert wird (oder halt mit Bochs emuliert wird) welches sich beim booten in den RAM laden soll (nur der Bootsektor soll aber draußen bleiben). Die Test-Subroutine lädt jedoch ab spur 3 vom falschen Ort. Was ist der Fehler an der Subroutine?

    Danke im Voraus!
    Mit freundlichen Grüßen euer Klebestreifchien.

    PS.: Dieser Thread wurde hierher verschoben weil Thema treffender ist!

    EDIT: Habe hier noch schnell Korrekturen am Code vorgenommen. Funkt aber immer noch nicht, ist aber richtiger als vorher!

  • Das sieht mir eher nach einer Art Bootloader aus, aber kein Betriebssystem, oder?

    Mir fehlen da grundlegende Dinge, wie IDT, GDT, Paging, Sheduler, Multitasking und Multithreading ;)

  • Es gibt nen guten grund dafür, dass ich mir keinen eigenen Bootloader baue..

    Hast du mal ein paar Details?

    Programmiersprache?
    Prozessor?
    Realmode/Protected Mode?
    Du rufst da das BIOS auf? Den Luxus hab ich nicht.. (Protected Mode, noch keinen VM86-support)


  • Es gibt nen guten grund dafür, dass ich mir keinen eigenen Bootloader baue..

    Hast du mal ein paar Details?

    Programmiersprache?
    Prozessor?
    Realmode/Protected Mode?
    Du rufst da das BIOS auf? Den Luxus hab ich nicht.. (Protected Mode, noch keinen VM86-support)

    ...Assembler (NASM)
    ...x86-Prozessor (Standard-Computer)
    ...Ich glaube Realmode. Kann ich aber nicht sicher sagen.


    Das sieht mir eher nach einer Art Bootloader aus, aber kein Betriebssystem, oder?

    Mir fehlen da grundlegende Dinge, wie IDT, GDT, Paging, Sheduler, Multitasking und Multithreading ;)

    Ich sagte ja auch das es ein Bootfähiges System ist und versuche die Bezeichnung als „Betriebsystem“ noch zu vermeiden da (noch) nicht die von dir genanten Funktionen enthalten sind. Ich jedoch frage mich woher du das weist? Wobei du nicht einmal den kompletten Code kennst… ;)

  • Bin von dem Code ausgegangen, den du gepostet hast, wobei ich zugeben muss, dass ich auch den nicht 100%ig verstehe. Ich habe 2012 mal für Intel 8051 Mikrocontroller Assemblerprogramme geschrieben und schon vorher und auch danach mit V2_OS rumgespielt und versucht, das zu modifizieren.

    Früher wollte ich auch einmal ein eigenes Betriebssystem schreiben, aber es gibt schon so viele angefangene Projekte, sodass ich mir dann dachte, dass es nicht sinnvoll ist, noch ein Projekt zu eröffnen und dann auf der digitalen Müllhalde (Internet) verrotten zu lassen.

    Lowlevel.eu ist auch eine sehr interessante Seite, wenn man sich für Betriebssysteme interessiert.

    Wegen der Frage, Real Mode oder Protect Mode, ich bin mir ziemlich sicher, dass du im Real Mode arbeitest, weil du müsstest sonst die CPU explizit in den Protected Mode umschalten.
    Momentan bin ich dabei, den Code von dir genauer zu analysieren und verstehen, bin aber noch nicht wirklich weit dabei (Hat aber nichts damit zu tun, weil er schlecht oder unübersichtlich ist, sondern weil ich mir da immer wieder noch sehr viel Grundlagenwissen anlesen muss).

  • Ist ja in Ordnung. Lowlevel.eu kenne ich bereits. Habe dort nur leider nichts Genaueres zu diesem Thema gefunden. Ich habe nur die Subroutinen die für das laden der Diskette verantwortlich ist gepostet. Diese Routine ist jedoch erst einmal nur ein Prototyp der sobald das Problem gelöst ist weiter ausgebaut und verbessert wird.
    Da ich tatsächlich nicht absichtlich den Protected-Mode aktiviert habe muss ich deiner antwort zu folge durchaus im Real-Mode sein.

  • Beitrag von Klebestreifen (5. August 2015 um 14:27)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!