Seite 1 von 3

Bootloader

Verfasst: Mo 6. Jun 2016, 13:20
von TomCat
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

Re: Bootloader

Verfasst: Mo 6. Jun 2016, 13:46
von Heilbar
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 :-)

Re: Bootloader

Verfasst: Mo 6. Jun 2016, 13:49
von Dosenware
TomCat hat geschrieben: ich möchte ein einzelnes Programm ganz ohne Betriebssystem laufen lassen.[..]
Ist so was möglich?
Ja, das Programm nennt sich dann "Betriebsystem" ;-)

Mit einem normalen Programm ist das jedoch nicht möglich, da es auf Funktionen des Betriebsystems angewiesen ist.

Re: Bootloader

Verfasst: Mo 6. Jun 2016, 13:54
von TomCat
Dosenware hat geschrieben:
TomCat hat geschrieben: ich möchte ein einzelnes Programm ganz ohne Betriebssystem laufen lassen.[..]
Ist so was möglich?
Ja, das Programm nennt sich dann "Betriebsystem" ;-)

Mit einem normalen Programm ist das jedoch nicht möglich, da es auf Funktionen des Betriebsystems angewiesen ist.
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.

Re: Bootloader

Verfasst: Mo 6. Jun 2016, 14:00
von Dosenware
Dann gehts natürlich.

Re: Bootloader

Verfasst: Mo 6. Jun 2016, 14:08
von TomCat
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?

Re: Bootloader

Verfasst: Mo 6. Jun 2016, 14:28
von Dosenware
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

Re: Bootloader

Verfasst: Di 7. Jun 2016, 13:10
von TomCat
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?

Re: Bootloader

Verfasst: Di 7. Jun 2016, 18:10
von der_computer_sammler
.

Re: Bootloader

Verfasst: Mi 8. Jun 2016, 15:32
von TomCat
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.
Kannst du mir das genauer erklären? welchen Hexeditor benutzt du da?

Re: Bootloader

Verfasst: Mi 8. Jun 2016, 19:50
von der_computer_sammler
.

Re: Bootloader

Verfasst: Do 9. Jun 2016, 17:05
von TomCat
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

Re: Bootloader

Verfasst: Do 9. Jun 2016, 17:29
von Dosenware
TomCat hat geschrieben: mein eigentliches Programm ist eine .exe
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).

(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

Verfasst: Do 9. Jun 2016, 18:15
von TomCat
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?

Re: Bootloader

Verfasst: Do 9. Jun 2016, 18:50
von Dosenware
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).