Wie erkennt Com eine Startdiskete
Xel
- sonstiges
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...???
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
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?
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
Hi,
ich glaube du hast mich falsch verstanden, ich will selbst ein Programm schreiben das Bootet, nur ist das möglich??
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
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
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
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:
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
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
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
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