Sourcecode Fortschritt


  • Mod

    Version 33:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=33

    Auf mancher Hardware klappt das Auslesen von Floppy-Inhalten nur jedes zweite Mal (Grund noch nicht klar). Work-around:
    - User-Funktion floppy_dir() und Kernel-Funktion flpydsk_read_directory() erhielten einen Rückgabewert. fdir liest nun noch ein zweites Mal, wenn der Rückgabewert keine Inhalte anzeigt.
    - DMA-Puffer wird vor dem Auslesen der root dir gelöscht, damit man die echten gelesenen Inhalte und keine alten Daten sieht.
    - Timeout wurde von 5 auf 2 Sekunden verkürzt.


  • Mod

    Version 34:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=34

    - time.h/time.c ergänzt, Datum/Zeit aus cmos.h/c in dieses Modul überführt
    - Statusleiste: Datum und Zeit, zusätzlich vergangene Sekunden seit dem Start
    - aktuelles FloppyImage.bin
    - einiges wurde ausgeblendet (Ausdruck nach 'Diagnose' verlagert)

    FloppyImage (im Verzeichnis 'kernel') wurde mitgeliefert, damit man die neuesten Features sofort ansehen kann, z.B. mit Qemu (batch-Datei für Windows):

    qemu-system-x86_64.exe -usbdevice mouse -fda FloppyImage.bin -boot a -localtime
    

  • Mod

    Version 35:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=35

    - NULL als (void*) 0 redefiniert, wie in C üblich (vorher nur 0)
    - NULL in paging.c ausgetauscht gegen 0 (wegen error: cast pointer to integer)
    - itoa und reverse von K&R (siehe wikipedia), strcpy von wikipedia
    - Rotierender ASCII Stern wurde umgefärbt und nach unten rechts in Statusleiste verschoben
    - 2-Klausel-BSD-Lizenz und Disclaimer in os.h und ckernel.c für weitere Diskussionen erstmalig eingefügt, aber ganz unten wie abgesprochen (einmalig!)

    Offenes Problem:
    In char* getCurrentDateAndTime(char* pStr) muss wie folgt

    int i; for(i=0;i<80;++i){pStr[i] = 0;}
    

    der als Zeiger übergebene DateAndTime-String gelöscht werden. Ansonsten geht die Ausgabe schief und das OS stürzt wegen buffer overflow ab. Der Fehler liegt nicht in strcpy oder itoa, soweit ich das bisher sehe, also entweder in der Funktion selbst oder in strcat.

    Der work-around funktioniert aber gut.


  • Mod

    Version 36:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=36

    - Kleiner Bug beim Auslesen von Root Dir behoben (Punkt zwischen Name und Extension wurde immer beim ersten Mal nicht gesetzt, jetzt dann, wenn Eintrag nicht Volume Label ist)

    Lob an unseren Chef-Tester Cuervo, dem aufgefallen ist, dass da BOOT2SYS steht anstelle BOOT2.SYS, wenn das Label leer war

    Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/PrettyOS_rev36.PNG


  • Mod

    Version 37:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=37

    - Fehlerhaftes strcat ausgetauscht gegen Variante aus wikipedia, die strcpy und strlen einsetzt. Nun kann die for-Schleife am Anfang von getCurrentDateAndTime entfallen, die den ganzen String auf 0 setzte.


  • Mod

    Version 38:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=38

    Heute ist mal wieder Spaß angesagt:
    - Modul gags.h/c mit fahrendem Zug (aus wikipedia) <--- unbedingt ansehen!

    Dass dieses Modul nichts in einem "bare bone" Kernel zu suchen hat, ist mir selbstverständlich klar! Das war nur ein Test für das Feature Laufband. Ich habe eine einfache Idee - ohne großen API-Aufwand - gesucht für ein Programm, das man von der Floppy Disk laden und im User-Space laufen lassen kann. Das kam dabei heraus. 😉

    Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/FahrenderZug.PNG

    #include "os.h"
    #include "gags.h"
    
    // Zug als Beispiel übernommen aus
    // http://de.wikipedia.org/wiki/ASCII-Art#Allgemeine_Beispiele
    // TODO: eigene ASCII-Art erzeugen
    
    char* line1 = "  _______                _______      <>_<>                                     "    ;
    char* line2 = " (_______) |_|_|_|_|_|_|| [] [] | .---|'\"`|---.                                 "   ;
    char* line3 = "`-oo---oo-'`-oo-----oo-'`-o---o-'`o\"O-OO-OO-O\"o'                                "  ;
    
    void showTrain(int8_t val)
    {
        int i;
        char temp1,temp2,temp3;
        switch(val)
        {
            case 1:
                temp1 = line1[79];
                temp2 = line2[79];
                temp3 = line3[79];
    
                for(i=79;i>0;--i)
                {
                    line1[i] = line1[i-1];
                    line2[i] = line2[i-1];
                    line3[i] = line3[i-1];
                }
                line1[0] = temp1;
                line2[0] = temp2;
                line3[0] = temp3;
                k_printf(line1,46,0xE);
                k_printf(line2,47,0xE);
                k_printf(line3,48,0xE);
            break;
    
            default:
            break;
        }
    }
    

    -----------------------------------------------

    Version 39:

    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=39

    - Laufband ("fahrender Zug") im Kernel aus Effizienzgründen entfernt (auskommentiert) :xmas1:

    // showTrain(1); // TODO: transfer to user space as elf exec format; k_printf as syscall
    

    -----------------------------------------------

    Version 40:

    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=40

    - gags.h/c im Kernel entfernt
    - syscalls ergänzt
    - showInfo(val) testweise im User-Bereich eingebaut; Laufband-Funktion noch nicht vorhanden (TODO: separate Task)
    - makefile korrigiert im User-Bereich



  • Der Zug ist mega cool!

    Version 41: Unterstriche in den Ordnernamen und das Präfix "k_" in Funktionsnamen entfernt.


  • Mod

    Version 42:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=42

    - getCurrentSeconds() in userlib.h/c nachgerüstet (program.c wird jetzt kompiliert) <--- Dank an Cuervo für das Auffinden dieses Fehlers
    - gags.h/c im Kernel gelöscht (Funktion ist in program.c)

    Der Zug ist mega cool!

    Thanks! 🙂



  • Version 43:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=43

    - In start.asm aus user/user_program_c das Ausnullen der BSS entfernt, ist afaik sowieso schon auf 0 und ergab bei mir wegen Integer-Underflow in ecx 'nen fiesen Fehler.

    - Noch zwei oder drei Funktionen mit "k_"-Präfix gefunden und korrigiert.

    - kernel/gdt.inc gelöscht, da anscheinend ungenutzt (dann auch stage2_bootloader/gdt2.inc wieder in gdt.inc umbenannt)

    - mingw32-make.exe, nasmw.exe, CreateFloppyImage.exe, BootDisk2BootStick.exe, dd.exe und bochs.bxrc in Ordner "tools"

    - Das Erstellen des Images, Entfernen aller .o-Dateien jetzt in globalem makefile

    - Aufrufen von Bochs, Qemu oder das Bauen der Diskette in Batch-File. Die Batch-Datei kann "einfach so" aufgerufen werden, dann kompiliert alles. Wird als Parameter "bochs" übergeben, wird das Image in Bochs ausgeführt. Wird (evtl zusätzlich) "disc" übergeben, wird alles auf die Diskette geschrieben. Für Qemu und anderes können wir auch noch was basteln. Und das ganze noch als Shellskript für die Linuxer schreiben, ist bisher nur als Stub vorhanden.

    TODO:
    Der Stack der User-Prozesse muss vom Kernel gesetzt werden, jeder braucht auch seinen eigenen Stack. In unserem User-Programm zumindest wird der Stack händisch auf 0x60000 gesetzt. Erhard, du kennst dich in dem Tasking-Modul doch aus, magst du mal probieren, jedem Prozess seinen eigenen Stack zu geben? Irgendwo unter 0xC0000000 oder so.. 🙂

    @Erhard: Wird "quickformat_Floppy_A.bat" noch gebraucht?



  • Version 44 & 45: Minimale Änderungen. U.a. die Linux-Version von CreateFloppyImage hinzugefügt. Ging aber nicht so einfach, weil einmal ein Ordner mit demselben Namen existiert hatte, schien SVN zu stören. Egal, es heißt jetzt CreateFloppyImage2.


  • Mod

    Version 45 baut so nicht auf:

    G:\OSDev\PrettyOS\trunk\Source>tools\mingw32-make OS=WINDOWS
    nasmw -f bin stage1_bootloader/boot.asm -Istage1_bootloader/ -o stage1_bootloader/boot.bin
    nasmw -f bin stage2_bootloader/boot2.asm -Istage2_bootloader/ -o stage1_bootloader/boot2.bin
    rm .o -f
    i586-elf-gcc user/user_program_c/
    .c -c -Iuser/user_program_c -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin
    i586-elf-ld *.o -T user/user_program_c/user.ld -Map user/user_program_c/kernel.map -nostdinc -o user/user_program_c/program.elf
    c:\crosstools\bin\i586-elf-ld.exe: warning: cannot find entry symbol _start; defaulting to 01400000
    rm *.o -f
    tools/make_initrd user/init_rd_img/test1.txt file1 user/init_rd_img/test2.txt file2 user/init_rd_img/test3.txt file3 user/user_program_c/program.elf shell
    writing file user/init_rd_img/test1.txt->file1 at 0x1304
    writing file user/init_rd_img/test2.txt->file2 at 0x1327
    writing file user/init_rd_img/test3.txt->file3 at 0x134a
    writing file user/user_program_c/program.elf->shell at 0x1910
    mv initrd.dat kernel/initrd.dat
    rm .o -f
    i586-elf-gcc kernel/
    .c -c -Ikernel/include -std=c99 -march=i386 -mtune=i386 -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude
    nasmw -O32 -f elf kernel/data.asm -Ikernel/ -o data.o
    nasmw -O32 -f elf kernel/flush.asm -Ikernel/ -o flush.o
    nasmw -O32 -f elf kernel/interrupts.asm -Ikernel/ -o interrupts.o
    nasmw -O32 -f elf kernel/kernel.asm -Ikernel/ -o kernel.o
    nasmw -O32 -f elf kernel/process.asm -Ikernel/ -o process.o
    i586-elf-ld *.o -T kernel/kernel.ld -Map kernel/kernel.map -nostdinc -o kernel/kernel.bin
    rm *.o -f
    tools/CreateFloppyImage2 PrettyOS FloppyImage.bin stage1_bootloader/boot.bin stage2_bootloader/boot2.bin kernel/kernel.bin
    Cannot open the file 'stage2_bootloader/boot2.bin'
    mingw32-make: *** [ckernel] Error -1

    Wenn ich build.bat disc in der Konsole eingebe, wird boot2.sys nicht kopiert.

    boot2.bin landet in stage1_bootloader :xmas2:

    ---------------------------------------------------------

    Notwendige Korrektur:

    makefile, , Zeile 26/27:

    boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc)
    	$(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE2DIR)/boot2.bin
    

    boot.asm, Zeile 264:

    ImageName      db "BOOT2   BIN"
    

    boot.asm, Zeile 268:

    msgFailure     db 0x0D, 0x0A, "BOOT2.BIN MISSING", 0x0D, 0x0A, 0
    

    boot2.asm, Zeile 26:

    msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN", 0x0D, 0x0A, 0x0A, 0
    

    Dann startet aber der Kernel immer noch nicht! 😕


  • Mod

    Version 46:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=46

    Die neuen Bezeichnungen boot2.bin und kernel.bin wurden überall eingebaut und der Fehler im Makefile behoben.

    Der Kernel wird aber noch nicht gestartet! 😕


  • Mod

    Version 47:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=47

    Nun überall Großschrift in den asm für die Dateinamen (BL1, BL2)
    Alles auf BIN gesetzt (nicht mehr SYS)
    Fehler im makefile berichtigt: start.asm (user) wurde nicht assembliert

    Nun gibt es einen ASSERTION Fehler:
    ASSERTION FAILED((const void*)(header->entry) == USERCODE_VADDR) at kernel/elf.c
    :153OPERATING SYSTEM HALTED



  • Sorry für die Verwirrung! Bin auch gerade online gegangen weil ich die Fehler bemerkt hatte, beim Übertragen auf den INet-Rechner ist wohl was schief gelaufen.

    Die meisten Sachen hast du ja erfolgreich behoben, die start.asm aus dem User-Prozess muss noch mitkompiliert werden (ist irgendwie aus dem Makefile rausgeflutscht) und ein assert muss aus elf.c raus:
    ASSERT( (const void*)(header->entry) == USERCODE_VADDR );
    Das User-Programm startet nämlich nicht bei 0x01400000, sondern 0x200 Bytes später. Warum auch immer. Funktioniert aber trotzdem.
    => Version 48


  • Mod

    Folgendes geht bei mir lokal:

    - ASSERTION in Zeile 153 auskommentiert, damit die shell startet (Grund für diese Maßnahme momentan unklar)
    - readelf und batch-Datei in User
    - floppy_build.bat für direktes Starten des Build-Prozesses im Explorers

    Momentan kann ich nicht committen wegen Konflikt

    Super! Badestrand und ich haben das gleiche gemacht. Ich schieb mal meine Luxusklasse-Ausführung für faule Windows-Anwender hinterher:

    Version 49
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=49

    In bochs bevorzuge ich übrigens

    floppya: 1_44=a:, status=inserted

    Vielleicht sollte man auf Dauer zwei verschiedene versionen anbieten.


  • Mod

    Version 50:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=50

    Nun ist BOOT2.BIN und KERNEL.BIN im makefile groß geschrieben, damit es auch unter Linux problemlos läuft. 🙂

    elf.c:
    Zeile 129: ASSERT( header->phnum == 1 );
    Zeile 152: ASSERT( (const void*)(ph->vaddr) == USERCODE_VADDR );
    müssen evtl. unter Linux noch auskommentiert werden.

    In Windows klappt das mit dem Cross-Compiler auch mit den ASSERTs.


  • Mod

    Version 51: (badestrand)
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=51
    - Run the build.bat file with qemufloppy or qemuimage as parameter to start qemu.

    Version 52: (Erhard Henkes)
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=52
    - Systemfrequenz auf 1000 Hz erhöht
    - getCurrentMilliseconds() ergänzt (syscall)
    - "Zug" bewegt sich alle 20 Millisekunden flüssig nach vorne

    Es war mir ein Bedürfnis den "Zug" (Beispielanwendung für das dreizeilige Laufband) zu :xmas1: Weihnachten :xmas2: betriebsbereit zu haben. Er läuft im User-Bereich (z.Z. noch in der Shell) lässt sich durch den neuen Millisekunden-Timer und die neue System-Frequenz von 1000 Hz ziemlich rasant über den Bildschirm bewegen. Leider ist er noch keine eigene Task. Daher kann man ihn z.B. mit langwierigen Aktionen wie 'fdir' ausstoppen.

    😉 Anstelle des Zuges könnte auch Ihre Werbung stehen. 😉


  • Mod

    Version 53:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=53

    - Folgendes auskommentiert in elf.c:
    Zeile 11: static const void* USERCODE_VADDR = (void*)0x01400000;
    Zeile 129: ASSERT( header->phnum == 1 );
    Zeile 152: ASSERT( (const void*)(ph->vaddr) == USERCODE_VADDR );

    - Folgendes ergänzt:
    Zu den CFLAGS noch "-m32" hinzufügen
    In die Linkerscripte (kernel.ld, user.ld) "OUTPUT_ARCH(i386)" hinzufügen

    Nun sollte es von Seiten Linux und 64-Bit keine Barrieren geben. Erste Tests bestätigen dies! 🙂

    http://www.cyberciti.biz/tips/compile-32bit-application-using-gcc-64-bit-linux.html


  • Mod

    Version 54:
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=54

    - build.sh für Linux ergänzt
    - tools/bochsrc ergänzt
    - Zug auf vielfachen Wunsch etwas ausgebremst (40 Zeichen/sec) :xmas1:

    Der "Zug" steht nur stellvertretend für das zukünftige Informationsband, in dem Diagnosedaten angegeben werden. Wir wollen ja ein Lehr-OS schaffen.


  • Mod

    Version 55:

    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=55

    -fno-pic im makefile ergänzt
    in userlib.c __asm__ anstelle asm

    Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/Rev55.PNG 🙂


Anmelden zum Antworten