Osys15 - das ASM OS | Jetzt als Gast-OS für Windows HIER zum Download verfügbar! SDK nun auch verfügbar!

  • Natürlich. Bloß bei mit korrigiert Der Debugger beim Compilne diese Fehler wie Leerzeichen, Anführungsstrichen usw...
    Deshalb dachte ich er hätte einen anderen Compiler benutzt.

    MfG, campweb

    • Offizieller Beitrag

    vergleicht mal den source der ersten seite mit den seiten:


    LOL - Ein Schelm, wer Böses dabei denkt.

    @campweb: Ich bitte um einen Nachweis, dass auch der (ja wohl übereinstimmende) Code der geposteten Links von dir stammt. Anderenfalls Ist das hier ein Plagiat und wir müssen davon ausgehen, dass du dich mit fremden Federn schmücken willst. :wacko:

  • Ich darf den Code weiterverwenden, da hab ich gefragt, kanns aber natürlich gerne noch dazu schreiben. Hab mich da auch mit anderen beraten über die Verwendung des Code (osdev.org...). Außerdem hab ich den Code von einem "how to make your own OS" Tutorial, der ist weit verbreitet. Bei mir korrigiert emu trotzdem diese kleine Fehler...
    Naja, um des Guten Willen willen schreib ich mal die Herkunft mit rein.

  • Und weil der Code schon so fertig war, hab ich mal nach vielem Lesen usw. einen komplett eigenen (naja bis auf die get_string-methode) Code geschrieben, der Bootloader funktioniert (endlich), hat die Bootsignatur und gibt ohne Text direkt an den Kernel weiter. Bei dem gibt s allerdings gerade Probleme mit dem Textanzeigen und dem Befehl erkennen.
    Das hat aber wirklich was, so ein noch unkonfortableres Betriebssystem als DOS mit assembler zu programmieren. Ich werde, wenn die Konsole funktioniert, mal versuchen Zahlen in Strings umzuwandeln um die Zeit anzeigen zu können ^^

    2 Mal editiert, zuletzt von TheShadowAE (5. Juni 2011 um 17:39)

    • Offizieller Beitrag

    Naja, um des Guten Willen willen schreib ich mal die Herkunft mit rein.


    Das sollte man auch erwarten können. Ich habe auch nichts dagegen, wenn Code von mir anderswo Verwendung findet, schließlich befürworte ich den Open-Source Gedanken. Aber es ist ein Mindestmaß an Anstand, dass man Quellen angibt (auch wenn man keine Doktorarbeit schreibt).
    Es ist der einzige Dank, den ein Open-Source Programmierer erhält, dass sein Name in den Credits auftaucht. Das sollte man immer berücksichtigen.

  • Zitat

    Ich werde, wenn die Konsole funktioniert, mal verushcen Zahlen in Strings umzuwandeln um die Zeit anzeigen zu können

    Dem Manne kann geholfen werden.... :D
    Die Funktion int2ascii (in C gibts das als "itoa" ) hatte ich im Primzahlenprogramm verwendet, um die Integer als "Zahl" darstellen zu können.

    Spoiler anzeigen
    [autoit]

    #include <AssembleIt.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $int = 123456;2 ^ 32 - 1 ;maximal 2^32-1
    $string = " " ;Platz reservieren, max 10 ziffern bei 2^32-1

    [/autoit] [autoit][/autoit] [autoit]

    ;wandelt eine integer-"Zahl" in einen ascii-"String"
    $ret = _assembleit("str", "int2string", "int", $int, "str*", $string)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, $string, $ret)
    ;wie man sieht, übergibt AutoIt im Speicher nur eine KOPIE des Strings an den DLL-Call!
    ;Der ursprüngliche String bleibt erhalten!
    ;in $ret wird nur diese KOPIE überschrieben bzw zurückgegeben

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func int2string()
    _("use32")
    _("mov ebx,dword[esp+4]") ;erster Parameter ist die Zahl
    _("mov edi,dword[esp+8]") ;zweiter Parameter ist der Pointer auf den Pointer des strings
    _("mov edi,[edi]") ;ESI=Pointer auf den String
    _("mov esi,edi") ;adresse sichern

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _("call _int2ascii") ;integer in string umwandeln

    [/autoit] [autoit][/autoit] [autoit]

    _("mov eax,esi") ;in EAX den Pointer auf den Stringanfang, damit $ret den string enthält
    _("ret")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;EDI = Anfangsadresse String
    ;EBX = Integer
    _("_int2ascii:")
    _("pusha ");alle benötigten Register sichern
    _("mov eax, ebx "); Zahl laden
    _("mov ebx, 10 "); Divisor
    _("xor ecx, ecx "); ECX=0 (Anzahl der Ziffern)
    _("Schleife_1: ")
    _("xor edx, edx "); EDX=0
    _("div ebx "); EDX:EAX / EBX = EAX Rest EDX
    _("add cl,1 "); ADD soll schneller sein als INC
    _("push dx "); LIFO
    _("or eax, eax "); AX = 0?
    _("jnz Schleife_1 "); nein: nochmal
    _("Schleife_2: ")
    _("pop ax "); gepushte Ziffern zurückholen
    _("or al, 00110000b "); Umwandlung in ASCII
    _("stosb "); Nur AL nach [EDI] (EDI ist ein Zeiger auf den String)
    _("loop Schleife_2 "); bis keine Ziffern mehr da sind

    [/autoit] [autoit][/autoit] [autoit]

    _("mov byte [edi],0 "); Nullbyte als stringende (für AutoIt), man könnte auch ein Komma (ascii=2C) oder sonstwas einsetzen

    [/autoit] [autoit][/autoit] [autoit]

    _("popa");Register wiederherstellen
    _("ret");zurück zum call

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>int2string

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Hey

    Also wenn ich auch nur irgendetwas von Assembler verstehen würde, dann würd ich ja gerne helfen, aber das hab ich ja nunmal leider nicht und irgendwie find ich Assembler auch doof, weil es so viele verschiedene Arten gibt, die alle etwas anders sind (FASM, NASM,....).

    Aber die Idee find ich auf jeden Fall super :thumbup:

    Eine Frage hab ich noch: Mich stört bei Mac/Linux und Co. sehr dass keine Windows Programme ausgeführt werden können (ausser mit WINE, aber das find ich auch kacke) wäre das denn hier realisierbar?

    DFPWare

  • Super, wenn ich es nicht selber schaff, dann hab ich was zum nachgucken ^^
    Ich hab mal probiert mit emu in den protected mode zu gehen, aber emu unterstützt das nicht und bei virtual box gabs dann auch einen Prozessorabsturz, deswegen musste ich das erstmal aufgeben. Vielleicht besrog ich mir mal einen neuen Emulator der auch die CMOVxx Befehle und den PM (protected mode) unterstützt. Meine Fehler im System sind übrigens weg, ich ärger mich nur um das automatische Scrollen des Textes nach oben, welches manchmal irgendwie passiert.

    EDIT:
    DFPWare
    Du kannst den Kernel auch in C/C++ mit den richtigen Tools erstellen. Wenn du nicht alle DLLs von WIndows kopieren willst, dann ist es nicht möglich exen auszuführen, wenn du keinen Emulator mit den selben Funktionen erstellst, jedenfalls wüsste ich das nur so. Allerdings enthält jede Datei einen ByteCode, solange keine externen, betriebsystemspezifische Dateien/Funktionen aufgerufen werden, kann man das auch portieren. ".com" und ".bin" müsste man leicht ausführen lassen können.
    (.bin: Bytecode in Speicher laden, Adresse pushen, wohin der Code zurückspringen soll (das macht call, soweit ich weiß), und mit einem ret oder jmp [esp/sp] springt er zurück.) Wenn meine Konsole fertig ist, versuche ich mal irgendwie (vielleicht auch in der Virtual Box o.ä.) ein paar Dateien zu lesen und schreiben zu können, um Anwenderspezifische Dateien zu erlauben^^

    4 Mal editiert, zuletzt von TheShadowAE (5. Juni 2011 um 12:21)

  • So, ich hab jetzt mein eigenes Betriebssystem fertig. Alles außer die Funktion Input (aka load_string) hab ich selber geschrieben, die Hilfe von dir brauchte ich schönerweise gar nicht :)
    Die Benutzung ist genauso wie mit dem anderen OS hier, boot.bin in Sector 1, os.bin in Sector 2. Von Floppy booten, Run.
    Bis jetzt kann es nur (Hilfe wird am Anfang angezeigt) die Zeit anzeigen (das dauert seine Zeit, emu ist ziemlich langsam), Hilfe anzeigen und rebooten. Die Konsole ist leicht erweiterbar. Wenn ich rausfinde, wie ich das auf der VirtualBox gestartet krieg, oder es einen Emulator gibt, bei dem Man Dateien schreiben kann, wird das noch eingeführt. Im Real-Mode werd ich denk ich mal ersteinmal bleiben, damit ich ausführbare .bin-Dateien machen kann. Vielleicht kann man auch .com ausführen. Irgendwann werd ich damit aber auch aufhören. Wenn ich im Protected Mode bin, kann ich mal versuchen etwas Grafik reinzubringen und dann ein paar schöne Funktionen reinbringen.
    Letzendlich wird das erstmal zum Spaß bleiben und nicht mit Windows usw. konkurrieren.

    Code und Binary im Anhang

    @campweb Sorry das ich hier den Thread missbrauche :P

  • Is egal, bin inzwischen ein Stück weiter las du. Der Kerneldebugger funzt auf jeden Fall schonmal, und ist nicht mehr nur ein Text. Eines kleines "Tron" Progrämmchen ist auch schon drin, genauso wie ein Klavierpsielapp ;-). Ich arbeite gerade an der Implementierung des Tastaturtreibers und des Netzwerktreibers. Ich bin übrigens von emu auf NASM als Compile und quemu als Emulator umgestigen, das OS läuft jetzt aus einen Image heraus...

  • Ich versuch grade in VBoc zu portieren, aber da bleibt der immer bei einem blinkenden Cursor stehen (er bootet also schon vom Image, aber sieht aus, als würde er driekt stehen bleiben

  • Eigentlich bin ich ja gar nicht da, aber ... :D

    Um das in VB zu booten musst du mit VFD ein A: erstellen und dann mit PARTCOPY (saugen von Google) oder Writebin draufschreiben. Wenn du nach diesem Prozess im Arbeitsplatz A: siehst, aber es nicht öffnen kannst (Dateisystem nicht kompatibel) dann kannst du es als Hostlaufwerk in VB einbinden.

    Andere viel einfachere Möglichkeit: Lad dir PowerISO, pack Kernel und Loader in ein .img und lad dir quemu (Die kleine und einfache Alternative von VB ;)) und lass quemu das Image booten.

    PS: Endlich funktioniert der Tastatur, Sound und Netztreiber. Die Anzahl der CPU-Kerne wird jetzt auch ermittelt und die Arbeitsspeicherauslatung wird auch angezeigt. Packete senden per Ethernet, einfaches T&R ohne Iformationen funktioniert auch schon.

  • Hallo.
    Wenn ich mit EMU Compiliere, dann bekomme ich keine .bin file :(
    Wäre schön wenn einer mir sagen könntes, was ich dagegen machen kann...
    MfG. PrideRage

    Edit: Hab die .bin files jetzt, wäre schön wenn du einen funktionierenden Source-Code providen würdest :rolleyes:

    Edit2: Du meintest, dass das mit dem "RUN" nur kurz dauert. Nach 10 Minuten sagt mir das programm dann "The program is haltet", und somit läuft das Proggi nicht, Zeitverschwendung für mich imo.!!


    Edit3: Läuft!

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

    2 Mal editiert, zuletzt von PrideRage (9. Juni 2011 um 15:54)

  • Wenn du meinst...

    Naja, bin inziwschen fast fertig, jetzt muss ich mir irgendwoher ein USB-Floppydrive besorgen...

  • Ich habe mir die Scource und emu8086 mal runtergeladen.
    Ich habe mit Emu8086 die File erstellt, aber beim compillieren kommen immer errors.
    ist die Source in post 1 aktuell, oder muss ich noch irgenwas bei EMU8086 einstellen?Noch zu meien Vorgehen ich habe mit emu 2 neue Files erstellt(BIN format) und den Codereinkopiert dann kommen flogende Fehlermeldungen:
    Loader

    Spoiler anzeigen


    kernel

    Spoiler anzeigen

    So long Storyteller

    Make it idiot proof, and someone will build a better idiot!

    Ich würd so gern die Welt verändern, aber Gott gibt mir den Quellcode nicht.