Xel: Wie erkennt Com eine Startdiskete

Hi alle zusammen,

Ich habe mal eine Frage die ich mit Google nicht beantworten kann:

Wie erkennt Bios (oder was auch immer) das es sich um eine eingelegte Diske um eine Startdiskete handelt und sie lädt?
Muss eine .exe Datei einen bestimmten Namen haben oder...???

  1. Halihallo Xel

    Wie erkennt Bios (oder was auch immer) das es sich um eine eingelegte Diske um eine Startdiskete handelt und sie lädt?

    http://www.nondot.org/sabre/os/files/Booting/BootSector.html
    Der Byteoffset 510 des ersten Sektors (Sektor 0,0,0) muss die
    Bytefolge AA55 hex enthalten. Das ist für BIOS das Indiz, dass die
    Disk einen gültigen Bootsektor enthält. Falls diese Bytefolge nicht
    gefunden wird, wird die Meldung "No operating system. Please insert
    disk" (o.ä.) vom BIOS angezeigt (bzw. in der in BIOS definierten
    Reihenfolge andere Laufwerke getestet).

    Muss eine .exe Datei einen bestimmten Namen haben oder...???

    Nein, es geht nur um den Bootsektor, der erste Sektor einer Platte.

    Viele Grüsse

    Philipp

    1. Hallo,

      könnte ich mir selbst eine Startdiskette erstellen, wenn ich z.B: in QBasic ein Programm schreibe und ich will das es Startet wenn man beim Systemstart die Diskete einlegt?
      Wäre das möglich?

      1. Moin!

        könnte ich mir selbst eine Startdiskette erstellen, wenn ich z.B: in QBasic ein Programm schreibe und ich will das es Startet wenn man beim Systemstart die Diskete einlegt?
        Wäre das möglich?

        Bei QBasic ist die Sache viel einfacher:

        1. Du brauchst ein Betriebssystem auf der Diskette. Windows erstellt dir ja gerne solch eine Startdiskette - und QBasic läuft bei mir immer noch unter "Ist für DOS", also gehen alle notwendigen Dateien auf eine Diskette drauf.

        2. brauchst du den QBasic-Interpreter auf der Diskette.

        3. brauchst du noch eine autoexec.bat-Datei im Hauptverzeichnis der Diskette. In diese Datei schreibst du den DOS-Befehl zum Start deines Programms rein, welcher dann automatisch am Ende des Bootvorgangs aufgerufen wird.

        - Sven Rautenberg

        1. Hi,

          ich glaube du hast mich falsch verstanden, ich will selbst ein Programm schreiben das Bootet, nur ist das möglich??

          1. Halihallo Xel

            ich glaube du hast mich falsch verstanden, ich will selbst ein Programm schreiben das Bootet, nur ist das möglich??

            http://my.execpc.com/~geezer/osd/index.htm
            http://www.nondot.org/sabre/os/articles

            Und suche in Google.

            Auf jeden Fall kann ich dir guten Gewissens sagen, dass es nicht
            einfach sein wird... Es gehört viel Wissen und viel Erfahrung dazu
            (dich ich übrigens auch nicht habe und somit dir auch nicht helfen
            kann). Komm von QBasic weg, das ist dafür einfach nicht zu
            gebrauchen. Bootsektoren werden mit Assembler geschrieben, genauso
            der Secondary Bootloader. Das Mini-OS, dass dann eine .exe oder eine
            .com lädt kannst du dann meinetwegen mit C oder Pascal programmieren,
            geht auch mit QBasic, aber umständlich. Ein QBasic-Programm dann
            auszuführen geht aber selbst dann noch nicht, da du einerseits einen
            .exe-Loader schreiben musst, der die .exe einliest und auch starten
            kann (eine .com zu starten ist einfach, aber dann bist du auf 64kb
            Speicher beschränkt) und zweitens das komplette DOS emulieren musst,
            da QBasic dieses verwendet...

            Viele Grüsse

            Philipp

      2. Halihallo Xel

        könnte ich mir selbst eine Startdiskette erstellen, wenn ich z.B: in QBasic ein Programm schreibe und ich will das es Startet wenn man beim Systemstart die Diskete einlegt?

        Fast unmöglich. Erstens müsste das Programm (als .com) kleinergleich
        510 Bytes gross sein (mit fast jeder höhreren Programmiersprache
        unmöglich) und zweitens (da du auf 510 Bytes beschränkt bist) enthält
        der Bootsector ein secondary Bootloader, der dann den eigentlichen
        Systemkernel in den Speicher lädt. Diese Aufgabe lässt sich
        eignetlich nur über Assembler umsetzen, da direkt auf BIOS Routinen
        zugegriffen werden muss und zwar so kompakt, dass es eben in 510
        Bytes möglich ist.

        Wäre das möglich?

        Nicht direkt. Was du tun kannst ist das QBasic Programm in .com
        umzuwandeln und es über den secondary Booloader direkt an eine
        fixe Adresse des Speichers lädst und über einen FAR JMP dort hin
        springst. .com deswegen, weil du dann keinen .EXE-Loader zu
        programmieren brauchst (das ist dann nochmals beträchtlicher
        Aufwand!). Eine com-Datei ist eine staatische 1:1 Kopie des
        Segmentes, das dann ausgeführt wird (bis auf den PSP, aber ich will
        jetzt ungern weiter ausführen, lies die Doku, wenn es dich
        interessiert).

        Ohne tiefe Kenntnisse und Erfahrung (die ich auch nicht habe, um dies
        gleich zu sagen) wirst du das aber kaum hinkriegen...

        Kannst du nicht einfach eine DOS-Startdiskette erstellen und dein
        QBasic programm über autoexec.bat starten? - Das ist vergleichsweise
        *verdammt* einfach :-)

        Viele Grüsse

        Philipp

      3. Halihallo Xel

        könnte ich mir selbst eine Startdiskette erstellen, wenn ich z.B: in QBasic ein Programm schreibe und ich will das es Startet wenn man beim Systemstart die Diskete einlegt?

        Eine etwas einfachere Lösung für deinen Wunsch:
        http://www.freedos.org/

        Etwas Sourcecode anpassen, neu kompilieren und auf die Disk packen.
        Der Vorteil daran wäre, dass du das FreeDOS (im Gegensatz zu anderen
        DOSen) selbstständig nach deinem Wunsch anpassen kannst und selber
        nicht's grossartig selber programmieren musst.
        C- und System-/Computerkenntnisse dennoch vorausgesetzt...

        Viele Grüsse

        Philipp

  2. Hallo Xel.

    Wie erkennt Bios (oder was auch immer) das es sich um eine eingelegte Diske um eine Startdiskete handelt und sie lädt?

    Verantwortlich für die Erkennung als bootfähige Diskette bzw. Startdiskette ist der so genannte Bootsektor. Das ist der erste Sektor eines Mediums (Diskette, Festplatte, CD-ROM etc.), dort liegen die Daten, die das Betriebssystem veranlassen, die Diskette als startfähig zu erkennen. Im BIOS kann man die Bootoptionen bzw. die Reihenfolge, in welcher das System nach bootfähigen Medien suchen soll, festlegen.

    Muss eine .exe Datei einen bestimmten Namen haben oder...???

    Der Bootsektor enthält bei FAT-Systemen (MS-DOS, Windows) bestimmte Daten, die das Betriebssystem startet, bei anderen Systemen (z.B. Linux) ist er IIRC leer. Der Bootsektor hat bei FAT-Systemen grundsätzlich folgenden Aufbau:

    • Sprungbefehl zum Urlader (ohne den geht nichts),
    • Parameterblock (z.B. Hersteller, Versionsnummer, physikalischer Aufbau des Mediums),
    • der eigentliche Urlader (auch "Bootstrab-Loader"),
    • Fehlermeldungen, Systemdateinamen u.ä.,
    • Endekennzeichen des Bootsektors

    Wie gesagt, das oben stehende gilt für alle FAT-Systeme, wie es bei Linux oder OS/2 aussieht, entzieht sich meiner Kenntnis.

    Freundschaft!
    Siechfred

    --
    Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
    Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
    1. Hallo Siechfried,

      Der Bootsektor enthält bei FAT-Systemen (MS-DOS, Windows) bestimmte Daten, die das Betriebssystem startet, bei anderen Systemen (z.B. Linux) ist er IIRC leer.

      Das *kann* nicht sein. Denn das BIOS macht beim Booten nichts anderes, als den Bootsektor an eine feste Speicheradresse (nämlich 0x07C00) zu laden und den Code ab Offset 0x0000 in diesem Sektor auszuführen. Erst danach wird's systemspezifisch.
      Ein Linux, OS/2, und werweißwasnoch hat also auch einen Bootsektor. Der hat zwar einen anderen Startcode und andere Daten, aber er ist erstmal da.

      Das musste ja mal gesagt werden. ;))

      Martin

      --
      Die letzten Worte des Briefträgers:
      Braaaaaves Hundchen!
      1. Hallo Martin.

        Der Bootsektor enthält bei FAT-Systemen (MS-DOS, Windows) bestimmte Daten, die das Betriebssystem startet, bei anderen Systemen (z.B. Linux) ist er IIRC leer.
        Das *kann* nicht sein.

        Wie gesagt, Linux ist nicht mein Metier.

        Das musste ja mal gesagt werden. ;))

        Is' scho' recht :-)

        Freundschaft!
        Siechfred

        --
        Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
        Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
        1. Wie gesagt, Linux ist nicht mein Metier.

          Meins auch nicht. Aber mit dem, was tief im Innern des PCs abläuft - unabhängig vom Betriebssystem - kenne ich mich einigermaßen aus.

          Freundschaft!

          Danke, gern doch! Prost!

          Martin