PC ohne Betriebssystem rudimentär kontrollieren

Software für PC wie Open Office, Antvirenprogramme, Firewalls usw. Programmiersprachen wie Visual Basic, Pascal, C++.

Software für PC wie Open Office, Antvirenprogramme, Firewalls usw. Programmiersprachen wie Visual Basic, Pascal, C++.

Moderator: Moderatorengruppe

PC ohne Betriebssystem rudimentär kontrollieren

Neuer Beitragvon Master-Jimmy am Mittwoch 18. April 2007, 22:40

Der Titel sagt's ja eigentlich schon:

Ich habe seit längerem im Sinn mal einen Versuch zu starten einen PC ohne Betriebssystem zu benutzen.-Also kein Windows, DOS, UNIX, Linux usw. (Ich hab aber nicht im Sinn ein OS zu entwickeln, damit mir das keiner falsch versteht!)

Ich stelle mir das für den allerersten Anfang folgendermassen vor:

Ich schreibe in Assembler ein einfaches Programm, das weder DOS-Interrupts noch sonstwas verwendet.

Dieses Programm sollte mein Test-Computer(Intel Pentium 3) dann auch ohne irgendwelche "Zusatzsachen" ganz gut verstehen?
Oder ist hier evtl. schon ein erster Fehler in meinen Gedanken, dass man z. B. den Prozessor erst gewissermassen initialisieren muss?

Sprich, reicht es, wenn ich es irgenwie fertigbringe, das Assembler-Programm in den RAM zu schaufeln, und den Prozessor dann anweise, das auszuführen was dort steht?

Keine Festplatte, denke ich wäre schlau, weil sowas doch gut auf eine Diskette passen müsste, und die Diskette auf jeden Fall einfacher handzuhaben ist als eine Harddisk.

P.S.: Kennt jemand evtl. Seiten wo solche Sachen beschrieben sind(englich, deutsch oder französisch, den Rest versteh ich leider nicht...)?
Vorallem wie ich das Programm dann in den RAM bekommen würde, ist mir noch etwas schleierhaft(Ist dafür der sog. Bootloader verantwortlich??). Normalerweise macht dies ja das Betriebssystem, welches hier dann nicht vorhanden wäre.

Ich denke ein Sichwort wäre sicher Bootdiskette, die machen ja gewissermassen das was ich will. Gibts da auch OpenSource-Varianten, bei denen man dann sehen kann, was sie tun befor sie z. B. DOS geladen haben?
Benutzeravatar
Master-Jimmy
Threadstarter
26144
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Master-Jimmy am Mittwoch 18. April 2007, 23:03

Noch was:
Ich hab nicht vor das in ein zwei Wochen oder so zu realisieren.

Es ist mir schon klar, dass das ziemlichschwierig ist, auch wenn ich die Erwartungen erstmal ganz rudimentär gesetzt habe.

Mit Jahren zu rechnen ist hier sicher nicht nur angebracht, sondern geradezu obligatorisch.

Das komplizierteste wäre woll dieser Bootloader?-Das gibts aber OpenSource.
So einen müsst man also erstmal gut verstehen und dann möglichst gleich übernehmen.
Benutzeravatar
Master-Jimmy
Threadstarter
26145
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Erfinderlein am Donnerstag 19. April 2007, 05:09

Hallo,

der erste Denkfehler ist schon der von dir vage angedeutete. Ohne Betriebssystem geht gar nichts. Das Kleinstmögliche wäre ja das BIOS und was meinst du, für was die beiden Buchstaben OS da stehen. Das DOS ist ja schon eine Erweiterung für den Betrieb von Platten, mehr nicht. Ohne das auch kein Diskettenlaufwerk.

Wenn du das alles weglassen willst und keinen Ersatz dafür schreiben willst, was auch den Rahmen des üblichen sprengen würde, stehst du vor einem haufen dummer Transistoren und das wars.( Bei meinem zuletzt gebauten nur mal als Beispiel über 300 Millionen davon.)

Du müsstest schon zurück zu Einzelbausteinen wie Vergleichern,Addierern, Schieberegister, Gattern und wenn es bequem werden soll kleine FPROM´s. Wenn du viel Platz hast tuns bekanntlich auch Relais, smile. Text auf einem Bildschirm kannst du dir natürlich abschminken.
Gezwungenermassen verzichtest du dann auch noch auf deine Assemblerprogrammierung, denn um das zu lesen braucht es minimal ein OS.

Also überlege noch einmal ganz genau was du willst.

Um Steuerungsabläufe zu realisieren gibt es genügend andere Möglichkeiten.
Zwischen Lokikpyramide und Mikroprozessor steht zum Beispiel der 1974 von mir demonstrierte "Makroprozessor", welcher mit einem eventabhängig fortschaltenden Adresszähler eine MUX-Baugruppe adressiert, welche ihrerseits die Eingänge scannt und über FPROMS und oder speichernde DEMUX-Gruppen Ausgänge steuert. Mit einem einzigen Timer kann man dann beliebig viele Zeiten einfliessen lassen, deren Daten aus einem Prom oder von Vorwahlschaltern kommen können.

Soviel zu deinem Traum

LG aus GR
Lothar Gutjahr bestätigt:Senneca hatte recht. Wir haben nicht zu wenig Zeit, sondern vergeuden zu viel.
Benutzeravatar
Erfinderlein
26146
Co-Admin
 
Beiträge: 4275
Registriert: Donnerstag 9. Januar 2003, 18:21
Wohnort: Neukirchen a.T.
Postleitzahl: 83364
Land: Germany / Deutschland

Re: PC ohne Betriebssystem rudimentär kontrollieren

Neuer Beitragvon Martin67 am Donnerstag 19. April 2007, 05:42

Master-Jimmy hat geschrieben:Der Titel sagt's ja eigentlich schon:

Ich habe seit längerem im Sinn mal einen Versuch zu starten einen PC ohne Betriebssystem zu benutzen.-Also kein Windows, DOS, UNIX, Linux usw. (Ich hab aber nicht im Sinn ein OS zu entwickeln, damit mir das keiner falsch versteht!)

Ich stelle mir das für den allerersten Anfang folgendermassen vor:

Ich schreibe in Assembler ein einfaches Programm, das weder DOS-Interrupts noch sonstwas verwendet.

Dieses Programm sollte mein Test-Computer(Intel Pentium 3) dann auch ohne irgendwelche "Zusatzsachen" ganz gut verstehen?
Oder ist hier evtl. schon ein erster Fehler in meinen Gedanken, dass man z. B. den Prozessor erst gewissermassen initialisieren muss?

Sprich, reicht es, wenn ich es irgenwie fertigbringe, das Assembler-Programm in den RAM zu schaufeln, und den Prozessor dann anweise, das auszuführen was dort steht?

Keine Festplatte, denke ich wäre schlau, weil sowas doch gut auf eine Diskette passen müsste, und die Diskette auf jeden Fall einfacher handzuhaben ist als eine Harddisk.

P.S.: Kennt jemand evtl. Seiten wo solche Sachen beschrieben sind(englich, deutsch oder französisch, den Rest versteh ich leider nicht...)?
Vorallem wie ich das Programm dann in den RAM bekommen würde, ist mir noch etwas schleierhaft(Ist dafür der sog. Bootloader verantwortlich??). Normalerweise macht dies ja das Betriebssystem, welches hier dann nicht vorhanden wäre.

Ich denke ein Sichwort wäre sicher Bootdiskette, die machen ja gewissermassen das was ich will. Gibts da auch OpenSource-Varianten, bei denen man dann sehen kann, was sie tun befor sie z. B. DOS geladen haben?


Hallo,

Der Bootvorgang von Diskette läuft so ab:

Nach dem Hardwarecheck und dem Aufruf des VGA-BIOS, versucht das PC-BIOS von einem Datenträger zu booten. Dabei geht es nach der Reihenfolge vor, wie sie im BIOS-Setup festgelegt ist. Hier muss dann Dein Floppy stehen.

Das BIOS ließt den Bootsektor der Diskette aus und speichert diesen an die Realmode-Adresse 0000:7C00. Anschließend führt es einen Far-Jump an die genannte Stelle durch. Ab hier gehört der "PC" Deinem Assemblerprogramm.

Zum Pentium. Der Prozessor muss initialisiert werden! Die Frage ist, wie weit Du gehen willst. Am Anfang befindet sich die CPU im Real-Mode. Es kommt jetzt darauf an, ob Dir dieser Mode ausreicht. Das Umschalten in den Protected-Mode ist jedenfalls ein schwieriges Unterfangen.

Im Realmode, steht Dir nur das 1MB vom Arbeitsspeicher zur Verfügung die restliche 500MB oder mehr sind nicht ansprechbar. Du kannst Dir den Prozessor in diesem Mode als super schnellen 8086 vorstellen. Hinzu kommen natürlich weitere Befehle, die der Pentium auch im Real-Mode unterstützt.

Einige Interrupt-Handler (z.B. INT 15h) sind bereits vom BIOS, bzw von der Grafikkarte (INT 10h) initialisiert und können zur Bildschirmausgabe, und für einige Peripheriegeräte verwendet werden. Aber denk nur nicht, dass Dir z.B USB zur Verfügung steht.

Es kommt wie gesagt darauf an, wie weit Du gehen willst und was Du machen willst.
Aus meiner Sicht, ist es ein erheblicher Programmieraufwand, um die Ressourcen eines Pentiums nur im geringsten auszunutzen.


Gruß

Martin
Martin67
26147
Bronze Mitglied
 
Beiträge: 83
Registriert: Samstag 20. Januar 2007, 07:38

Neuer Beitragvon Master-Jimmy am Donnerstag 19. April 2007, 08:47

Ich habe mittlerweile eine (gute?) Site gefunden:
www.biehlos.biehler-josef.de

@Erfinderlein:
Ich glaub du hast mich falsch verstanden.
Ich will nicht die Hardware selber löten! Das BIOS nutze ich selbst verständlich so wie es da ist.
Um auf Disketten zuzugreifen braucht man nicht unbedingt DOS-Interrupts. Das sollte mit den Funktionen welche das BIOS bietet ganz gut gehen.
Ich hab mir das schon überlegt, keine Angst!
Es scheint eher plötzlich grad viel einfacher als ich mir's vorgestellt hab...

@Was ich für den Anfang will: Bei einem PC, der keine oder eine leere Festplatte hat, ein Hallo Welt! auf den Screen schreiben und ihn nach ein paar Sekunden wieder ausschalten.

Protected Mode ist dazu sicher nicht nötig weil 1MB längstens reichen dürfte.
Benutzeravatar
Master-Jimmy
Threadstarter
26149
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon anders am Donnerstag 19. April 2007, 10:28

Das BIOS allein kann schon sehr viel!

Ich habe noch ein altes Buch von Peter Norton: "Programmer's Guide to the IBM PC &PS/2", Microsoft Press 1988, ISBN 1-55615-131-4.
Darin sind u.a. die ROM-Bios Interrupts sehr gründlich erklärt und es gibt auch ein paar Beispiele zu Benutzung.
Damit kannst du dein Vorhaben sicherlich problemlos realisieren.
Da das aber viel zuviel zum Scannen ist, solltest du mal schauen, ob du das Buch oder den Nachfolger in einer öffentlichen Bücherei oder antiquarisch findest.

Ich habe hier nur mal die "kurze" Auflistung der Bios-Services reingestellt. Die ausführliche Beschreibung jedes Services steht im Buch.
Sie haben keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
anders
26152
Moderator
 
Beiträge: 4690
Registriert: Freitag 28. Februar 2003, 13:46

Neuer Beitragvon anders am Donnerstag 19. April 2007, 10:30

Noch eins.
Sie haben keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
anders
26153
Moderator
 
Beiträge: 4690
Registriert: Freitag 28. Februar 2003, 13:46

Neuer Beitragvon derguteweka am Donnerstag 19. April 2007, 17:32

Moin,

Du kannst dich auch mal durch die sourcen von Grub (dem Linux Bootloader) durchwurschteln, dort z.b. im File stage1.S ist Assemblercode fuer einen Bootsektor; dort werden schon diverse BIOS-Calls aufgerufen, um z.b. was am Bildschirm auszugeben, oder Sektoren von Floppy/Festplatte zu lesen.

Edit: Unios waer' vielleicht auch was fuer dich:
http://gok.customer.netspace.net.au/resources/

Es ist aber immer recht muehsam und wenn man eh' schon eine Bootfloppy macht, dann kann man da auch bequem ein DOS mit eigener Applikation oder einen Linuxkernel+Busybox+Appl. zusammenpopeln; da macht dann das programmieren der Applikation deutlich mehr Spass, weil man sich nicht mehr um wirklich jeden Pups kuemmern muss. Unter Linux geht sogar gleich Multithreading und Netzwerkfaxen; naja, bei DOS eher nicht so :D

Gruss
WK
derguteweka
26160
Moderator
 
Beiträge: 1048
Registriert: Freitag 18. August 2006, 15:47

Neuer Beitragvon Master-Jimmy am Donnerstag 19. April 2007, 18:52

Mühsam finde ich das eben für einmal nicht!-Ich will ja genau das.

Multithreading, GUI, Multitasking und Konsorten interessieren mich überhaupt nicht(da nehm ich gleich Windows, Linux, ...), ich will jetzt vor allem mal mit diesem "Hallo Welt!" starten.

Danach kann ich's dann sehr wahrscheinlich zwar doch nicht lassen noch eine Art minimal OS zu entwickeln.-So in Richtung ein paar Funktionen von DOS nachprogrammieren...

Danke für die Tipps!
Ich werd mich dann mal an die Arbeit machen und melde mich sicher mit einigen Fragen, die ihr hoffentlich beantworten könnt :wink:
Benutzeravatar
Master-Jimmy
Threadstarter
26162
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Master-Jimmy am Donnerstag 19. April 2007, 21:49

Wie gross ist eigentlich dieser Bootsektor der Diskette, resp. wie gross darf das Programm werden?
Benutzeravatar
Master-Jimmy
Threadstarter
26163
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Richi am Freitag 20. April 2007, 00:12

Bootsektor beträgt 512 kbit
Richi
26164
Gold Mitglied
 
Beiträge: 380
Registriert: Montag 13. September 2004, 16:10

Neuer Beitragvon anders am Freitag 20. April 2007, 01:35

@Richi:
Der Unterschied zwischen Bit und Byte und was der Vorsatz k bedeutet, ist dir aber schon bekannt ?
Es macht wirklich keinen Spaß, derartig kompetente Auskünfte ertragen zu müssen.

@Master-Jimmy:
Die Sektorgröße der gebräuchlichen Disketten beträgt genau wie bei den Harddisks 512 Byte.
Normalerweise sind die 512Byte des Bootsektors (logischer Sektor 0) aber bei weitem nicht ausgenutzt.

Um das Einlesen des Bootsektors brauchst du dich nicht zu kümmern, denn das erledigt das BIOS nach dem Einschalten automatisch.
Dein "Hello World"-Programm wirst du problemlos darin unterbringen können und eine weitere Datenträger Struktur brauchst du dann nicht.

Als erstes prüft das BIOS, anhand des Bytes in Offset 0 (Adresse 100h im Speicher), ob die Diskette (oder Harddisk) bootbar ist oder nicht.
Wenn sie nicht bootbar ist, so steht dort eine 0, sonst der 1.Befehl des Bootprogramms.
Normalerweise ist das ein 3 Byte langer Jump über ein paar vom Betriebssystem reservierten Bytes hinweg, in denen Information über Größe Name, Aufbau etc des Datenträgers stehen.
Das braucht dich aber nicht zu interessieren, du kannst dein Program sofort beginnen lassen.
Der Bootsektor wird ab Adresse 100h im Speicher abgelegt.
Typischerweise sieht er etwa so aus:

EB 3C 90 (JMP 013eh)
dann folgen 8 Bytes OEM-Name und DOS-Version
1 word: bytes pro sektor,
1 byte: sectors per cluster,
usw
usw
bis ab Offset 3eh (siehe obigen Jump) der eigentliche Bootstraploader folgt.
Mit diesen ganzen Informationen weiss das BIOS aber nichts anzufangen, die werden schon vom auf der Diskette befindlichen Bootstrap Loader verarbeitet.
Das BIOS weiß nur, wie es den 1.Sektor liest und führt dann stur das dort beginnende Programm aus.


Do kannst dir einen passenden Bootsektor unter DOS mit dem zum Lieferumfang gehörenden Progrämmchen debug.exe schreiben und abspeichern, aber für Windows und MSDOS gibt es auch Diskeditoren, die komfortabler zu bedienen sind und es auch erlauben beliebige Sektoren zu lesen oder zu schreiben.
anders
26165
Moderator
 
Beiträge: 4690
Registriert: Freitag 28. Februar 2003, 13:46

Neuer Beitragvon Richi am Freitag 20. April 2007, 08:56

Bootsektor beträgt 512 kbit
Richi
26169
Gold Mitglied
 
Beiträge: 380
Registriert: Montag 13. September 2004, 16:10

Neuer Beitragvon Master-Jimmy am Freitag 20. April 2007, 09:34

Nein!

Der Bootsektor ist der erste Sektor der Diskette, also Sektor-0. Da alle Sektoren 512Byte gross sind, ist auch der Bootsektor 512Byte gross.
Benutzeravatar
Master-Jimmy
Threadstarter
26170
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Neuer Beitragvon Master-Jimmy am Freitag 20. April 2007, 09:37

Vielleicht verwechselst du das mit der Grösse des RAM denn ich zur Verfügung habe?
Das geht nämlich so in diese Richtung.
Im RealMode sind's ja bekanntlich 1MB. Davon kann man aber nur etwas mehr als die Hälfte nutzen. 1MB/2 --> 512kByte
Benutzeravatar
Master-Jimmy
Threadstarter
26171
Titanium Mitlgied
 
Beiträge: 401
Registriert: Mittwoch 11. April 2007, 10:21
Postleitzahl: 00000
Land: not selected

Nächste

Zurück zu Computer Software

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste