simpler Bootscreen

Diskussion zum Thema Programmierung unter DOS (Intel x86)
dosuser60
MemMaker-Benutzer
Beiträge: 76
Registriert: Fr 16. Sep 2011, 16:33
Wohnort: Husum

simpler Bootscreen

Beitrag von dosuser60 »

Folgendes Problem:

Ich habe mir neulich Gedanken gemacht, ob man bei DOS nicht einfach alle Meldungen beim Start durch eine Art "Bootscreen" ersetzen kann. Ich habe dann auch mal sowas ähnliches in Batch geschrieben und dann versucht das Skript vor allen Treibern in der config.sys zu starten. Dabei sind zwei Probleme aufgetreten:

1. Ich hatte nicht die geringste Ahnung, wie ich eine Anwendung, welche sich nach einer Zeit (nach dem Bootvorgang) schließt, in der config.sys starte.

2. Ich gehe mal davon aus, das die command.com, welche der Batch-Interpreter ist (glaube ich zumindest), erst nach den Startdateien ausgeführt wird, was zur Folge hätte, dass das Batch-Programm dann nicht ausgeführt wird.

Eine meiner Ideen wäre gewesen, die Bildschirmausgaben abzufangen oder zu ersetzen. Leider fehlen mir die nötigen Programmierkenntnisse, da ich glaube, dass das Beeinflussen der Bildschirmausgaben nur in Assembler möglich ist.

Meine Frage ist nun, ob es möglich wäre, einen simplen Bootscreen zu programmieren, welcher die ganzen Meldungen beim Start ausblendet und stattdessen eine ASCII-Grafik anzeigt. Eine praktische Zusatzfunktion wäre eine Taste, welche das Anzeigen des Bootscreens verhindern würde, um z.B. Fehler bei Treibern und ähnlichem zu finden. Ich würde mich über Hilfe freuen.
MfG

Marcel (dosuser60)
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: simpler Bootscreen

Beitrag von freecrac »

Hallo Marcel,
dosuser60 hat geschrieben:Folgendes Problem:

Ich habe mir neulich Gedanken gemacht, ob man bei DOS nicht einfach alle Meldungen beim Start durch eine Art "Bootscreen" ersetzen kann. Ich habe dann auch mal sowas ähnliches in Batch geschrieben und dann versucht das Skript vor allen Treibern in der config.sys zu starten. Dabei sind zwei Probleme aufgetreten:

1. Ich hatte nicht die geringste Ahnung, wie ich eine Anwendung, welche sich nach einer Zeit (nach dem Bootvorgang) schließt, in der config.sys starte.

2. Ich gehe mal davon aus, das die command.com, welche der Batch-Interpreter ist (glaube ich zumindest), erst nach den Startdateien ausgeführt wird, was zur Folge hätte, dass das Batch-Programm dann nicht ausgeführt wird.

Eine meiner Ideen wäre gewesen, die Bildschirmausgaben abzufangen oder zu ersetzen. Leider fehlen mir die nötigen Programmierkenntnisse, da ich glaube, dass das Beeinflussen der Bildschirmausgaben nur in Assembler möglich ist.

Meine Frage ist nun, ob es möglich wäre, einen simplen Bootscreen zu programmieren, welcher die ganzen Meldungen beim Start ausblendet und stattdessen eine ASCII-Grafik anzeigt. Eine praktische Zusatzfunktion wäre eine Taste, welche das Anzeigen des Bootscreens verhindern würde, um z.B. Fehler bei Treibern und ähnlichem zu finden. Ich würde mich über Hilfe freuen.
es wäre schon möglich so eine Art Treiber für die Config.sys zu programmieren, von wo aus gewöhnliche Bildschirmausgaben die über Bios-Software Interrupts vorgenommen werden auf die eigenen Routine zu verbiegen.
Wenn jedoch eine Bildschirmausgabe direkt in den Bildschirmspeicher des Textbildschirmes(in B800:0) vorgenommen wird, kann das damit nicht verhindert werden.

(Batchdateien werden erst ab der Autoexec.bat verarbeitet.)

Auf dieser Seite findet man ein Beispiel für einen Device-Treiber: http://www.programmershelp.co.uk/assy/DRIVER.ASM

Um allerdings zu verstehen was dort in diesem Beispiel gemacht wird sind Kenntnisse über Assembler-Programmierung nötig.
Allerdings wäre das Beeinflussen der Bildschirmausgaben mit jeder Sprache möglich mit der man auf den Speicher direkt zugreifen kann und auch mit C, oder Pascal könnte man einen solchen Device-Treiber programmieren.
Um eine Bildschirmausgabe über Bios-Software Interrupts zu machen wird z.B. der Befehl: "int 10h" aufgerufen. Dieser Befehl springt zu der Adresse die sich in 10h*4 = 40h befindet. Dort befindet sich eine Sprungadreese zu der weitergesprungen wird. Diese Sprungadresse läßt sich auf die eigenen Routine verbiegen, so das jeder Aufruf von Int 10h nun in die eigenen Routine springt.

Einen Treiber zu programmieren ohne eine Programmiersprache zu kennen dürfte allerdings unmöglich sein. Zum Anfang wäre es daher sinnvoll zunächst kleinere Anwendungen zu programmieren, um damit Erfahrungen zu sammeln, bevor man sich an die Programmierung eines Treiber wagt.

Dirk
Benutzeravatar
SharpClaw
DOS-Kenner
Beiträge: 409
Registriert: So 23. Jul 2006, 19:09

Re: simpler Bootscreen

Beitrag von SharpClaw »

Kann man da nicht einen grafischen Grub einfrickeln? Oder greift der erst nach den ganzen Boot-Angaben?
Es gibt ja Mainboards, die das von Werk aus machen (HP-Vectra z.B.). Vielleicht könnte man solch einen Rechner umbasteln?
Doch bräucht' es ganze Scharen Von Zauberern, und Zeit
Das Schöne zu bewahren Und die Gerechtigkeit.

Nun will ich nicht mehr weinen. Komm, führ mich in dein Land!
Will mich mit ihr vereinen In deiner sanften Hand...

ASP - Zaubererbruder (Am Ende)
dosuser60
MemMaker-Benutzer
Beiträge: 76
Registriert: Fr 16. Sep 2011, 16:33
Wohnort: Husum

Re: simpler Bootscreen

Beitrag von dosuser60 »

An eine Art Treiber hatte ich auch gedacht. Allerdings gehe ich davon aus, dass dieser "Treiber" dann weiterhin Speicher verbrauchen würde. Dass das ganze auch in C geschrieben werden kann, wusste ich nicht. Aber ich wüsste im Moment auch nicht, wie ich das Schreiben sollte. Ich kenne zwar schon Teile von C, aber so weit, dass ich auf Speicher zugreifen kann, bin ich noch nicht. Bei Assembler bin ich auch noch ganz am Anfang. Aber ich werde mich trotzdem mal auf die Suche nach einer Lösung machen, da ich ja nun einige Anhaltspunkte habe. Eine weitere Idee meinerseits wäre, sich mal über die Funktionsweise bei Windows zu informieren. Danke für die Hilfe, freecrac.
MfG

Marcel (dosuser60)
tom4DOS
BIOS-Flasher
Beiträge: 390
Registriert: Do 24. Feb 2011, 17:20
Wohnort: München

Re: simpler Bootscreen

Beitrag von tom4DOS »

Vielleicht noch als Ergänzung: Das, was Du da vorhast, gibt es ja eigentlich schon; vorausgesetzt, Du benutzt den DOS-Unterbau von Windows 95 oder 98. Da gabs auch immer ein Bootlogo, welches direkt beim DOS-Start angezeigt wurde (falls man es nicht in der msdos.sys deaktiviert hatte). Das Logo konnte man, soweit ich mich entsinne, auch gegen ein eigenes austauschen. Ich weiß zwar nicht mehr genau, wie, aber ich glaube, man mußte eine Bitmap-Grafik mit bestimmten Abmessungen als LOGO.SYS unter C:\ ablegen. Dann wurde diese Grafik beim Booten angezeigt.
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: simpler Bootscreen

Beitrag von freecrac »

SharpClaw hat geschrieben:Kann man da nicht einen grafischen Grub einfrickeln?
Einen eigenen Boottmanager könnte man auch im Bootsektor plazieren, um darüber DOS zu booten.
Oder greift der erst nach den ganzen Boot-Angaben?
Nö, ein Bootmanager wird ja zu aller erst gestartet bevor ein OS gebootet wird.
Es gibt ja Mainboards, die das von Werk aus machen (HP-Vectra z.B.). Vielleicht könnte man solch einen Rechner umbasteln?
Dieses Mainboard kenne ich nicht. Du meinst wahrscheinlich über ein Hotkey läßt sich vor dem Booten ein Fenster mit Bootauswahl öffnen, so dass man auswählen kann über welches Laufwerk gebootet werden soll.
Danach kann aber auch noch ein Bootmanager im dortigen Bootsektor (wenn vorhanden) eine erneute Auswahl zur Verfügung stellen. Je Platte können ja bis zur 4 primäre FAT16-Partitionen angelegt und wechselweise dort ein DOS gebooten werden.
Der Bootmanager muss dann die anderen drei primären Partitionen vestecken.

Vom Bootmanager aus wäre es wohl ebenso wie über einen Treiber in der Config.sys möglich den Vektor vom INT 10h für die Bioldschirmasugabe zu verbiegen, doch ein nachfolgender Treiber kann das auch.
So vermute ich könnte beispielsweise Display.sys ebenfalls den Vektor vom INT 10h verbiegen und die Umleitung auf unseren Treibers wieder heraus schmeissen. Ich bin mir aber nicht sicher ob Display.sys es macht.

Dirk
dosuser60
MemMaker-Benutzer
Beiträge: 76
Registriert: Fr 16. Sep 2011, 16:33
Wohnort: Husum

Re: simpler Bootscreen

Beitrag von dosuser60 »

Wenn DOS ab 7.0 einen Bootscreen unterstützt, könnte man doch eigentlich die benötigten Systemdateien auf ein DOS 6.0 kopieren, oder? Andernfalls könnte man doch ein Bitmap erstellen und als Treiber (*.sys) in die config.sys einbinden.

Marcel (dosuser60)
MfG

Marcel (dosuser60)
tom4DOS
BIOS-Flasher
Beiträge: 390
Registriert: Do 24. Feb 2011, 17:20
Wohnort: München

Re: simpler Bootscreen

Beitrag von tom4DOS »

dosuser60 hat geschrieben:Wenn DOS ab 7.0 einen Bootscreen unterstützt, könnte man doch eigentlich die benötigten Systemdateien auf ein DOS 6.0 kopieren, oder?
Also eigentlich nimmt man eher alle Dateien vom Win9x-DOS-Unterbau (nennen wir ihn mal DOS 7), die es gibt und ergänzt dann fehlende Dienstprogramme aus einer DOS-6.2-Installation. Das gibt aber u.U. dann Meldungen wie "Inkompatible DOS-Version".
Andernfalls könnte man doch ein Bitmap erstellen und als Treiber (*.sys) in die config.sys einbinden.
Nö, nicht wirklich: Treiber == Programmcode, Bitmap == Daten ==> Bitmap wie Treiber laden wird nicht funktionieren.

Gruß, Thomas
Benutzeravatar
SharpClaw
DOS-Kenner
Beiträge: 409
Registriert: So 23. Jul 2006, 19:09

Re: simpler Bootscreen

Beitrag von SharpClaw »

@ freecrac > Nein, nein, Hotkey meine ich nicht. Bei meinem Kayak hats auch so einen Bootbildschirm und ich meine die IBM machten das auch, zumindest eine zeitlang. Da prangt ein großes HP-Logo, ein Hinweis mit der HTML-Adresse und unten die möglichen Tasten (ESC um Bootscreen zu verlassen, F8 fürs Bios usw.). Das sind zumeist recht einfache Bilder, die - vermutlich - wie die alten Energy-Save und AMI-Bios Logos im Bios mitgespeichert wurden.

BTW. kann man nicht darüber gehen? Soweit ich weiß kann man diese Bilder auswechseln...
Doch bräucht' es ganze Scharen Von Zauberern, und Zeit
Das Schöne zu bewahren Und die Gerechtigkeit.

Nun will ich nicht mehr weinen. Komm, führ mich in dein Land!
Will mich mit ihr vereinen In deiner sanften Hand...

ASP - Zaubererbruder (Am Ende)
dosuser60
MemMaker-Benutzer
Beiträge: 76
Registriert: Fr 16. Sep 2011, 16:33
Wohnort: Husum

Re: simpler Bootscreen

Beitrag von dosuser60 »

tom4DOS hat geschrieben: Nö, nicht wirklich: Treiber == Programmcode, Bitmap == Daten ==> Bitmap wie Treiber laden wird nicht funktionieren.
Ich hatte eigentlich gedacht, dass man das Bild wie bei Windows einfach umbenennt und dann als Treiber lädt (wegen Endung:sys).
Welche Dateien müßten denn da kopiert und ersetzt werden. Das io.sys, msdos.sys und Command.com sowie einige Treiber (himem.sys,Emm386.exe, diverse andere DOS-Standardtreiber und einige Hardwaretreiber wegen "Windows 95/98") getauscht werden müßten ist mir klar, nur habe ich das mal mit Win98 Dateien probiert und das Ergebnis war die Fehlermeldung, dass das System ungültig sei.
MfG

Marcel (dosuser60)
Benutzeravatar
Dekay
Kommandozeilenfetischist
Beiträge: 166
Registriert: Mi 15. Jun 2005, 09:32
Wohnort: München

Re: simpler Bootscreen

Beitrag von Dekay »

Ich glaube genau das hat tom4DOS gemeint, das Umbenenen nichts bringt. Die Datei hat Microsoft wahrscheinlich deshalb LOGO.SYS genannt, damit sie bloß keiner löscht!
Du brauchst ein Programm um das Bild anzuzeigen. Das Bild laden als Programm klappt nicht.

Man kann die Datei IO.SYS nicht einfach austauschen. Die Datei benötigt auch eine bestimmte Position am Anfang der Festplatte. Dazu gits Kommandos (SYS C:).
Der Master Boot Record schaut glaube ich auch anders aus als bei DOS, immerhin ist die MSDOS.SYS vom Systemkern zur Konfigurationsdatei mutiert.
Aber selbst wenn das klappt, wie willst Du ohne Programmierung Text über die Grafik bringen?

dominik
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: simpler Bootscreen

Beitrag von freecrac »

Ein Treiber und auch jede beliebige DOS-Anwendung könnte aus zwei Teilen bestehen, u.A. den Opcodes für einen Bildbetrachter und den Daten eines Bildes welches zur Anzeige gebracht werden soll.
Einfach nur ein Bild umbenennen fügt in das Bild ja keine Opcodes eines Bildbetrachter dort mit ein. Wir müssen dafür in unserer Anwendung mit den Opcodes eines Bildbetrachter die Daten eines Bildes mit einhängen, oder ein Bild in einen freien Speicherbereich nachladen und dann über unseren Bildbetrachter zur Anzeige bringen. In beiden Fällen müssen wir in unseren Treiber selber den Code für einen Bildbetrachter schreiben, so auch den Code für eine Text-Ausgabe, wenn wir ein Text ausgeben wollen.

Die Bilddaten verschiedener Bildformate sind in der Regel kein binärgenaues Abbild des Bildspeichers. Je nach Bildformat(bmp, jpg, tga, pcx...) varieren die Bilddaten innerhalb einer Bild-Datei, so das man für jedes Bildformat einen eigenen Bildbetrachter benutzen muss. Die meisten Bildformate beinhalten am Anfang vor den reinen Bilddaten des Bildes einen Header mit wichtigen Informatien über das Bild. So findet man dort u. A. die Höhe und Breite des Bildes.
Der Header von einem 24Bit-Targa(tga)-Bild enthält gerade mal 18h Byte und danach folgen die eigentlichen Bildaten:

Code: Alles auswählen

;----------- T a r g a  -  H e a d e r --------------------------------------
TGAHEAD DB 0                           ; Länge des Identifikations-Feldes
TABLE   DB 0                           ; Flag für Farb-Tabelle 1 = F.-Tabelle
KOMP    DB 2                           ; komprimiert Bit 7 / Bit 0-6 Farbe
DACOFF  DW 0                           ; Offset der Farben nach Header
DACLEN  DW 0                           ; Länge der Farben
DACBIT  DB 0                           ; Bits pro Farbe (3Byte bei 256Farben)
X1      DW 0                           ; X-Pos.
Y1      DW 0                           ; Y-Pos.
XLEN    DW XPos                        ; Breite
YLEN    DW YPos                        ; Höhe
FAMODE  DB 18h                         ; Bits je Pixel
DIREKT  DB 0                           ; Bit 5 = 0 von unten nach oben
;----------- E n d e -- d e s -- H e a d e r s -----------------------------
Um ein Truecolor-Bild anzeigen zu können muss natürlich auch in ein True-Color-Videomode geschaltet werden. Dafür kann man die VESA-Funktionen vom VESA-Bios benutzen.
Im Public Document "vbe3.pdf " welches man sich kostenlos von vesa.org (Register/Login erforderlich) herunteladen kann sind alle Informationen darüber enthalten.

Dirk
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: simpler Bootscreen

Beitrag von freecrac »

dosuser60 hat geschrieben:An eine Art Treiber hatte ich auch gedacht. Allerdings gehe ich davon aus, dass dieser "Treiber" dann weiterhin Speicher verbrauchen würde.
Wenn unser Treiber den INT 10h auf unsere Routine verbiegt, damit wir alle folgende Bildschirmausgaben von anderen Teibern/Anwendungen beispielsweise unterdrücken können, dann muss ein Teil unseres Treibers dort wo unsere Routine enthalten ist resident im Speicher verbleiben nach dem Beenden.
Dass das ganze auch in C geschrieben werden kann, wusste ich nicht. Aber ich wüsste im Moment auch nicht, wie ich das Schreiben sollte. Ich kenne zwar schon Teile von C, aber so weit, dass ich auf Speicher zugreifen kann, bin ich noch nicht. Bei Assembler bin ich auch noch ganz am Anfang.
Bei mir ist es genau anders herum, ich programmiere überwiegend alles nur in Assembler und ich kenne mich mit C nur sehr wenig aus.
Aber ich werde mich trotzdem mal auf die Suche nach einer Lösung machen, da ich ja nun einige Anhaltspunkte habe. Eine weitere Idee meinerseits wäre, sich mal über die Funktionsweise bei Windows zu informieren. Danke für die Hilfe, freecrac.
Gerne geschehen.

Dirk
Zuletzt geändert von freecrac am Fr 23. Sep 2011, 10:45, insgesamt 1-mal geändert.
Benutzeravatar
Nilquader
CONFIG.SYS-Autor
Beiträge: 269
Registriert: Mo 26. Jan 2009, 23:00
Kontaktdaten:

Re: simpler Bootscreen

Beitrag von Nilquader »

Das LOGO.SYS von Windows-95-Unterbau-DOS ist übrigens wirklich nur eine Bitmap-Datei. Die Darstellungscode muss schon irgendwo anders im DOS 7 stecken. Ich habe damals nämlich auf jeden Fall meinen Windows-Bootscreen angepasst, indem ich die Bitmap (mit Paint) verändert habe.

Da ist eine annähernd brauchbare Anleitung:
http://www.annoyances.org/exec/show/article02-011
Pentium II, 266MHz, 64 MB RAM, 3.2 GB HDD, Voodoo 3 2000, SB AWE64 Gold, 1GB SD mit NC100SDv2-Adapter
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: simpler Bootscreen

Beitrag von freecrac »

SharpClaw hat geschrieben:@ freecrac > Nein, nein, Hotkey meine ich nicht. Bei meinem Kayak hats auch so einen Bootbildschirm und ich meine die IBM machten das auch, zumindest eine zeitlang. Da prangt ein großes HP-Logo, ein Hinweis mit der HTML-Adresse und unten die möglichen Tasten (ESC um Bootscreen zu verlassen, F8 fürs Bios usw.). Das sind zumeist recht einfache Bilder, die - vermutlich - wie die alten Energy-Save und AMI-Bios Logos im Bios mitgespeichert wurden.

BTW. kann man nicht darüber gehen? Soweit ich weiß kann man diese Bilder auswechseln...
Diese Ausgabe am Bildschirm wird vom Bios selber und noch vor dem Booten, bzw. noch vor dem Laden eines Bootmanagers ausgegeben. Wie man solche Ausgabefunktionen von einem OS aus, oder von einem Bootmanager aus benutzen kann ist mir nicht bekannt.

Dirk
Zuletzt geändert von freecrac am Fr 23. Sep 2011, 10:44, insgesamt 1-mal geändert.
Antworten