Bootloader
Bootloader
Hallo,
ich möchte ein einzelnes Programm ganz ohne Betriebssystem laufen lassen.
Dazu soll ein selbstgebauter Bootloader dieses Programm in den Speicher laden und ausführen.
D.h. das eigentliche Programm könnte dann einfach in bestimmten Sektoren der Festplatte gespeichert sein. Auf der Festplatte befindet sich dann nur der Bootloader und das Programm.
Ist so was möglich?
Hat das jemand hier schon mal versucht bzw. realisiert?
THX
TomCat
ich möchte ein einzelnes Programm ganz ohne Betriebssystem laufen lassen.
Dazu soll ein selbstgebauter Bootloader dieses Programm in den Speicher laden und ausführen.
D.h. das eigentliche Programm könnte dann einfach in bestimmten Sektoren der Festplatte gespeichert sein. Auf der Festplatte befindet sich dann nur der Bootloader und das Programm.
Ist so was möglich?
Hat das jemand hier schon mal versucht bzw. realisiert?
THX
TomCat
Re: Bootloader
Vielleich entschlüsselst du ein Bootloader aus einem vorhanden Programm. Damals gab es ja nur so etwas und nannte sich PC Booter. Das neuste ist dieses Schach
http://www.mobygames.com/game/pc-booter/bootchess
Unter Linux wäre das mit Syslinux möglich und heißt Extlinux. Aber gemacht habe ich das noch nicht....mir hat immer Io+msdos.sys gereicht
http://www.mobygames.com/game/pc-booter/bootchess
Unter Linux wäre das mit Syslinux möglich und heißt Extlinux. Aber gemacht habe ich das noch nicht....mir hat immer Io+msdos.sys gereicht

Re: Bootloader
Ja, das Programm nennt sich dann "Betriebsystem"TomCat hat geschrieben: ich möchte ein einzelnes Programm ganz ohne Betriebssystem laufen lassen.[..]
Ist so was möglich?

Mit einem normalen Programm ist das jedoch nicht möglich, da es auf Funktionen des Betriebsystems angewiesen ist.
Re: Bootloader
nein, da mein Programm keinerlei Betriebssystem-Funktionen benutzt. nur ganz wenige Bios-Funktionen, der Rest(auch Tastatur) ist direkt programmiert und so benötigt es kein Betriebssystem. der Dateizugriff soll auch direkt auf die HDD- Sektoren via Bios int 13h erfolgen.Dosenware hat geschrieben:Ja, das Programm nennt sich dann "Betriebsystem"TomCat hat geschrieben: ich möchte ein einzelnes Programm ganz ohne Betriebssystem laufen lassen.[..]
Ist so was möglich?
Mit einem normalen Programm ist das jedoch nicht möglich, da es auf Funktionen des Betriebsystems angewiesen ist.
Re: Bootloader
Dann gehts natürlich.
Re: Bootloader
Ich brauche also zuerst einen Bootloader, der mein Programm aufruft, bzw. und ein Programm, dass dann direkt(ohne DOS-Aufrufe) mein Programm aufruft.
Würde das genügen?
hat jemand so was schon mal gemacht?
Würde das genügen?
hat jemand so was schon mal gemacht?
Re: Bootloader
Wenn du sonst nichts auf der HDD haben willst, kannst du deinen Bootloader einfach in den MBR schreiben (erster Sektor der HDD)
PS. der MBR muss mit $AA55 abgeschlossen werden, sonst startet das Bios diesen nicht.
Siehe auch:
https://de.wikipedia.org/wiki/Master_Bo ... au_des_MBR
PS. der MBR muss mit $AA55 abgeschlossen werden, sonst startet das Bios diesen nicht.
Siehe auch:
https://de.wikipedia.org/wiki/Master_Bo ... au_des_MBR
Re: Bootloader
so der mini-bootloader ist fertig und mit nasm zu einer binär-Datei kompiliert. jetzt geht es darum diese 512 Byte in den Master-boot-record einer Diskette zu kopieren.
wie bekommt man nun diese Datei in den MBR?
mit bios int 13h einfach kopieren?
wie bekommt man nun diese Datei in den MBR?
mit bios int 13h einfach kopieren?
Re: Bootloader
.
Zuletzt geändert von der_computer_sammler am Mi 2. Nov 2016, 19:03, insgesamt 1-mal geändert.
Re: Bootloader
Kannst du mir das genauer erklären? welchen Hexeditor benutzt du da?der_computer_sammler hat geschrieben:Mit 'nem Hex-Editor in ein Image einer (leeren) Disk kopieren und auf Diskette zurückschreiben.Ok, geht sicher auch anders, aber so auf jeden Fall. Hab ich schon ein paar hundert Mal gemacht.
Re: Bootloader
.
Zuletzt geändert von der_computer_sammler am Mi 2. Nov 2016, 19:03, insgesamt 1-mal geändert.
Re: Bootloader
Danke erstmal,
so das hat jetzt soweit funktioniert. jetzt habe ich das nächste Problem.
mein eigentliches Programm ist eine .exe dieses habe ich ab Sektor 2 mit int 13h direkt auf die Diskette geladen.
der Bootloader liest dieses Programm nach Adresse x1000 ein und springt dann dorthin.
Leider läuft mein Programm nicht an. Es passiert rein gar nichts.
Was kann das sein?
Liegt es daran, dass es eine exe ist?
THX TomCat
so das hat jetzt soweit funktioniert. jetzt habe ich das nächste Problem.
mein eigentliches Programm ist eine .exe dieses habe ich ab Sektor 2 mit int 13h direkt auf die Diskette geladen.
der Bootloader liest dieses Programm nach Adresse x1000 ein und springt dann dorthin.
Leider läuft mein Programm nicht an. Es passiert rein gar nichts.
Was kann das sein?
Liegt es daran, dass es eine exe ist?
THX TomCat
Re: Bootloader
Exedateien bestehen aus einem Header und dem eigentlichen Programm, entweder du bastelst dir einen Loader für Exedateien (was schwierig werden könnte da der Compiler (weis ja nicht was du nimmst) dann evtl. noch ein paar Dosaufrufe dazwischenschmeißt), oder du bastelst dir Comdateien (die haben keinen Header).TomCat hat geschrieben: mein eigentliches Programm ist eine .exe
(Das geht z.b. indem du dein Programm als com Linkst, oder du den EXE Header entfernst - letzteres funktioniert aber nicht bei jedem Programm (zuzüglich der Problematik mit den Dosaufrufen, die der Compiler evtl. noch mit einbaut))
Re: Bootloader
danke,
also ich verwende den MASM 6.11 . Mein programm ist ein reines Assemblerprogramm das geladen werden soll. Sind halt mehrere Segmente: Data , Stack etc. definiert. Kein Tiny-Model.
Wie ist das bei einer .com -Datei?
das Hauptproblem scheint ja zu sein, dass das Programm an der richtigen stelle in den Hauptspeicher kopiert werden muss da alle sprung-adressen ja physikalisch sind.
Oder täusche ich mich da?
also ich verwende den MASM 6.11 . Mein programm ist ein reines Assemblerprogramm das geladen werden soll. Sind halt mehrere Segmente: Data , Stack etc. definiert. Kein Tiny-Model.
Wie ist das bei einer .com -Datei?
das Hauptproblem scheint ja zu sein, dass das Programm an der richtigen stelle in den Hauptspeicher kopiert werden muss da alle sprung-adressen ja physikalisch sind.
Oder täusche ich mich da?
Re: Bootloader
Bei einer Com hast du offiziell (Dosferatu und Co. werden da sicher wissen wie man drum rum kommt) nur ein Segment...
Und: Die Sprungadressen sind relativ - das Programm weis halt vorher nicht an welche Adresse es geladen wird.
Wichtig ist das der Offset stimmt - z.b. werden Comdateien immer an Speicheradresse 100h geladen, die 256bytes davor gehöhren zum "Programmsegmentpräfix" von Dos - wie das bei Exe-dateien ist, musst du jetzt mal schauen.
PS. Du müsstest übrigens noch die Segmentregister initialisieren, bei Com dürften alle den gleichen Wert haben (gibt ja nur ein Segment).
Und: Die Sprungadressen sind relativ - das Programm weis halt vorher nicht an welche Adresse es geladen wird.
Wichtig ist das der Offset stimmt - z.b. werden Comdateien immer an Speicheradresse 100h geladen, die 256bytes davor gehöhren zum "Programmsegmentpräfix" von Dos - wie das bei Exe-dateien ist, musst du jetzt mal schauen.
PS. Du müsstest übrigens noch die Segmentregister initialisieren, bei Com dürften alle den gleichen Wert haben (gibt ja nur ein Segment).