# MyOS ändern



## serverinc (3. Februar 2011)

Hallo zusammen.
in den Thema "Ein eigenes kleines Betriebssystem funktioniert nicht" wurde ein Archiv namens "MyOS.rar" hochgeladen.
jetzt meine frage:
wie kann ich den code ändern?
z.b. Die stelle mit der BETA Version soll raus und die Farbe soll etwas anders sein.
Wie stelle ich das an?
ich würde mich über antworten, Anregungen und Tipps freuen.


----------



## sheel (3. Februar 2011)

Willkommen bei tutorials.de 

Kennst du dich mit C aus?

Die Stelle mit "Beta" ist in der Datei boot\loader\start.c

Gruß


----------



## serverinc (4. Februar 2011)

Also ich kenne mich ein wenig mit C++ aus.
ist da denn so ein Großer unterschied.
Also wenn ich in der start.c den code ändere, müsste ich das nur noch kompilieren.
Aber muss ich  nicht auch die iso Image ändern? -Wie tue ich das?


----------



## sheel (4. Februar 2011)

serverinc hat gesagt.:


> Also ich kenne mich ein wenig mit C++ aus.
> ist da denn so ein Großer unterschied.


Nein. Hast du dir die Datei einmal angeschaut?
Sie sieht zwar auf den ersten Blick aufgrund der Interrupts und eingebundenen Assemblersachen etwas verwirrend aus, aber ein printf wirst du doch wohl ändern können...



serverinc hat gesagt.:


> Also wenn ich in der start.c den code ändere, müsste ich das nur noch kompilieren.
> Aber muss ich  nicht auch die iso Image ändern? -Wie tue ich das?


 
Eine Makefile ist dabei, auch ein Programm cdmake (mit Quelltext) im Ordner tools...was braucht man mehr?


----------



## serverinc (4. Februar 2011)

Klar kann ein printf ändern.
Ich hab mir die Datei noch nicht angesehen.

Nur ich weis nicht was ich mit dem Makefile machen soll.
Bei dem cdmake Programm gehe ich mal davon aus das ich das Ausführen muss.


----------



## sheel (4. Februar 2011)

Ein Makefile besteht aus Anweisungen, wie welche Dateien kompiliert werden sollen.
Statt jede datei einzeln zu kompilieren (und dabei immer aufpassen muss, welche datei welche anderen braucht, damits geht) startet man einmal das Makefile, das alles ordentlich kompiliert und dann auch cdmake startet.

Vorteil: Man muss es nur einmal schreiben, danach nur noch starten und fertig
Nachteil: Man braucht ein eigenes Programm, das solche Makefiles abarbeiten kann.

Wenn du so ein Programm nicht hast, musst du
entweder dir eins installieren (und auch ggf. bestimmte Compiler, für die das Makefile geschrieben wurde, oft der gcc)
oder eben alles einzeln kompilieren und dann selbst cdmake ausführen.
Sowas strapaziert die Nerven, vor allem wenn den Code jemand anderes geschrieben hat und man sich in der Struktur nicht auskennt.

Gruß


----------



## serverinc (4. Februar 2011)

Ich habe das ebnend mal mit gcc ausprobiert.
(mit der gcc.exe von Dev C++) also funktioniert hat das nicht. Oder gibt es da einen Speziellen code?
Kannst du mir ein alternatives Programm empfehlen? 

MfG


----------



## sheel (4. Februar 2011)

Zuerst einmal: gcc ist nicht von DevC++
DevC++ ist nur eine grafische "Erweiterung" davon, von anderen Herstellern, und veraltert (weil nicht mehr weiterentwickelt).

Und was genau hast du probiert, was hat nicht funktioniert, welche Fehlermeldungen etc?
Und was ist für dich "spezieller Code"?

Ist dir klar, das gcc nur für den C-Teil ist, und nicht für Assembler und Makefiles.
Man kann eben kein Betribssystem ohne Assembler schreiben.
Möglichkeiten dafür wären NASM, MASM etc...


----------



## serverinc (4. Februar 2011)

Ich weis das DevC++ total veraltet ist.
Ich habe die gcc.exe aus dem bin Ordner verwendet. 
Versucht habe ich es auf verschiedenen wegen....
Rein theoretisch müsste ich ja nur die start.c kompilieren und dann die cdmake.exe ausführen.

Das man kein OS ohne Assembler schreiben kann ist mir bewusst.


----------



## sheel (4. Februar 2011)

serverinc hat gesagt.:


> Rein theoretisch müsste ich ja nur die start.c kompilieren und dann die cdmake.exe ausführen.


 
Nein, so einfach ist es eben nicht (leider).

Wenn du nur die start.c wie ein normales Programm kompilierst, würdest du auch nur ein normales Windows/Linux-Programm bekommen.
Vorausgesetzt, du gibst dem Linker alle anderen vorkompilierten Files, die die start.c braucht.
Vorausgesetzt in der start.c oder irgendeiner der dazugelinkten Dateien wäre ein main.
Da gbts aber keins.

Du musst zuerst jede C-Datei kompilieren, aber *nicht* linken.
Dann auch jede Assembler-Datei übersetzen.
Dann über noch drei Hilfsprogramme einen Binärsalat bekommen, den du dann mit cdmake wegschreiben kannst...die genauen Programmaufrufe findet man in der Makefile.

Gruß


----------



## serverinc (4. Februar 2011)

Okay vielen dank bis hierher schon mal ich versuche das gleich mal. 
die asm Dateiene wandele ich mit dem befehl:
	
	
	



```
nasm -f bin -o <datei.bin> <datei.asm>
```
 um. ist richtig so oder?
Und die c Dateien kompiliere ich zu einer Ausführbaren Datei also ganz normal?


----------



## sheel (4. Februar 2011)

Wenn du nasm und gcc hast, brauchst du doch nur im Makefile nachschauen...dort steht jede datei drinnen, die übersetzt werden muss, und auch jedesmal die Parameter für gcc/nasm dabei.

Die anderen verwendetet Programme sollten alle im Ordner tools sein.

Und die C-Dateien machst du eben *nicht* zu fertigen Programmen.
Siehe meinen vorigen Post. Was du dem Gcc übergeben musst, um die benötigte Ausgabe zu lierfern, steht eben im Makefile.


----------



## jkallup (4. April 2011)

Hallo,

da hat sich doch glatt der Fehlerteufel eingeschlichen!
Nach download dss Archives sind ein paar kleine Änderungen notwendig.
Und in der Tat schaut die Ausgabe unter Linux virtual box recht lustig aus.
Vielleicht weil ich es unter Windows und VMWare getestet habe.
Leider habe ich das Image nicht zur Hand, da ich gerade auf Arbeit sitze.
Werde es aber heute abend zur Verfügung stellen mit alle nötigen Tools - für Linux, falls noch Interesse besteht.


----------



## jkallup (13. September 2013)

```
void print(char *msg, unsigned int line)
{
    char *vidmem = (char *)0xB8000;
    unsigned int i = line*80*2, color = 0x07;  // color 7 = grau

		
	
	while(*msg != 0)
	{ 		  	
		  vidmem[i] = *msg;
		  i++;
		  vidmem[i] = color;
		  i++;
		  *msg++;
	}
}
```


----------

