Bootloader

Diskussion zum Thema Programmierung unter DOS (Intel x86)
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Bootloader

Beitrag 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
Benutzeravatar
Heilbar
DOS-Übermensch
Beiträge: 1678
Registriert: Mi 5. Mär 2014, 07:25
Wohnort: Hamburg

Re: Bootloader

Beitrag 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 :-)
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Re: Bootloader

Beitrag 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.
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: Bootloader

Beitrag 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.
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Re: Bootloader

Beitrag von Dosenware »

Dann gehts natürlich.
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: Bootloader

Beitrag 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?
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Re: Bootloader

Beitrag 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
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: Bootloader

Beitrag 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?
der_computer_sammler

Re: Bootloader

Beitrag von der_computer_sammler »

.
Zuletzt geändert von der_computer_sammler am Mi 2. Nov 2016, 19:03, insgesamt 1-mal geändert.
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: Bootloader

Beitrag 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?
der_computer_sammler

Re: Bootloader

Beitrag von der_computer_sammler »

.
Zuletzt geändert von der_computer_sammler am Mi 2. Nov 2016, 19:03, insgesamt 1-mal geändert.
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: Bootloader

Beitrag 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
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Re: Bootloader

Beitrag 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))
TomCat
MemMaker-Benutzer
Beiträge: 87
Registriert: Do 1. Dez 2011, 17:16

Re: Bootloader

Beitrag 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?
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Re: Bootloader

Beitrag 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).
Antworten