1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

MyOS ändern

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von serverinc, 3. Februar 2011.

  1. serverinc

    serverinc Grünschnabel

    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.
     
  2. sheel

    sheel I love Asm Administrator

    Willkommen bei tutorials.de :)

    Kennst du dich mit C aus?

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

    Gruß
     
  3. serverinc

    serverinc Grünschnabel

    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?
     
  4. sheel

    sheel I love Asm Administrator

    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...

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

    serverinc Grünschnabel

    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.
     
  6. sheel

    sheel I love Asm Administrator

    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 gefällt das.
  7. serverinc

    serverinc Grünschnabel

    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
     
  8. sheel

    sheel I love Asm Administrator

    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...
     
  9. serverinc

    serverinc Grünschnabel

    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.
     
  10. sheel

    sheel I love Asm Administrator

    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ß
     
  11. serverinc

    serverinc Grünschnabel

    Okay vielen dank bis hierher schon mal ich versuche das gleich mal.
    die asm Dateiene wandele ich mit dem befehl:
    Code (Text):
    1.  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?
     
  12. sheel

    sheel I love Asm Administrator

    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.
     
  13. jkallup

    jkallup Erfahrenes Mitglied

    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.
     
  14. jkallup

    jkallup Erfahrenes Mitglied

    Code (C):
    1. void print(char *msg, unsigned int line)
    2. {
    3.     char *vidmem = (char *)0xB8000;
    4.     unsigned int i = line*80*2, color = 0x07;  // color 7 = grau
    5.  
    6.        
    7.    
    8.     while(*msg != 0)
    9.     {          
    10.           vidmem[i] = *msg;
    11.           i++;
    12.           vidmem[i] = color;
    13.           i++;
    14.           *msg++;
    15.     }
    16. }
     
Die Seite wird geladen...