Sourcecode Fortschritt


  • Mod

    taljeth in #lost: ... bei jedem Treiber das .driver_init aufrufen, und dann für jedes PCI-Gerät die .device_init, bis sich ein Treiber für zuständig erklärt

    static struct cdi_net_driver driver = {
        .drv = {
            .name           = DRIVER_NAME,
            .type           = CDI_NETWORK,
            .bus            = CDI_PCI,
            .init           = e1000_driver_init,
            .destroy        = e1000_driver_destroy,
            .init_device    = e1000_init_device,
            .remove_device  = e1000_remove_device,
        },
    
        .send_packet        = e1000_send_packet,
    };
    

    Es fehlt noch:

    e1000_init_device(/*  struct cdi_bus_data*  */); // CDI
    

    Woher bekommt man diese Daten für struct cdi_bus_data? Beim Aufruf haben wir das korrekte pci device bereits identifiziert mit allen PCI-Daten (bus:device.function).

    Bei VBox kann man mit der "Intel PRO/1000 MT Desktop" die "e1000" im PCI Scan emulieren.



  • Version 0.0.3.162:

    - CDI weitergebaut, läuft nun teilweise
    -> "Linkermagie" gefixt. Section war falsch angegeben.
    -> Geräte werden nun initialisiert
    -> CDI-List vollständig implementiert, andere Teile weiter implementiert
    - Makefile: Automatischer build aller Unterordner von /kernel
    - Bugfix: Backspace-"Zeichen" wird nicht mehr auf den Bildschirm geschrieben
    - Bugfix: PrettyOS läuft wieder auf Rechnern mit 4 GiB RAM. (Dazu musste die Speicheranordnung geändert werden, damit zugleich eine Optimierung für Rechner mit weniger Speicher möglich bleibt)



  • Version 0.0.3.163:

    - Bugfix: MAC wird bei CDI-Netzwerkkarten in network_adapter_t-Struktur kopiert


  • Mod

    Der via CDI eingebundene e1000-Treiber läuft nun.
    Test: qemu 0.14.1 browser.elf


  • Mod

    version = "0.0.3.164 - Rev: 1365"

    - Wochentag-Formel korrigiert (Alternative: http://de.wikipedia.org/wiki/Gaußsche_Wochentagsformel#4._Allgemeing.C3.BCltige_Formel)
    - Formale Änderungen

    siehe auch: http://www.c-plusplus.net/forum/294811-10


  • Mod

    version = "0.0.3.165 - Rev: 1366"

    Wochentag-Formel nochmals überarbeitet:

    static uint16_t days[12] = {  0,  31,  59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
    
    static bool isLeapyear(uint16_t year)
    {
        return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
    }
    
    static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
    {
        day += 6; // 1.1.2000 was a saturday
        day += (year-2000) * 146097.0/400.0 + days[month-1];
    
        if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
        {
            day--;
        }
    
        return ( day % 7 + 1 );
    }
    

  • Mod

    version = "0.0.3.166 - Rev: 1367"

    (in ckernel.c versehentlich eins zu hoch)

    Dank an Volkard für seine Hinweise. Damit haben wir nun auch vor 2000 den Wochentag im Griff:

    static uint16_t days[12] = {  0,  31,  59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
    
    static bool isLeapyear(uint16_t year)
    {
        return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
    }
    
    // Gregorian calender started 15th October 1582
    static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
    {
        day += 6; // 1.1.1600 was a saturday
        day += (year/*-1600*/) * 146097.0/400.0 + days[month-1];	
    
        if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
        {
            day--;
        }
    
        return ( day % 7 + 1 );
    }
    


  • Version 0.0.3.168:

    - Ordnerstruktur angepasst:
    -- Ordner tasking und util geschaffen
    - Devicemanager-Schnittstelle verbessert



  • Version 0.0.3.169:

    - Clang ins Buildsystem vollständig integriert
    - __unix__ durch Compilererkennung ersetzt (-> Damit "out-of-the-box"-Lauffähig mit GCC 4.5, 4.6 und clang)
    - Ergebnis von calculateWeekday gecacht - Nur noch bei Veränderung des Wochentags aufgerufen


  • Mod

    version = "0.0.3.170 - Rev: 1370"

    Formale Änderungen, Arrays in keyboard.c als Tabelle übersichtlich angeordnet



  • Version 0.0.3.171:

    - Maustreiber nutzt nun Event-System
    - Paging-Modul invalidiert TLB-Einträge, wenn das aktive PD verändert wird
    - setjmp "implementiert". Funktioniert leider nicht.



  • Version 0.0.3.172:

    - %S-Option bei printf (kernel) ergänzt (gibt Größen in Bytes aus)
    - data.o/asm inkrementell gebaut
    - Größe einer disk wird angegeben bei strg+d
    - Bugfix: Event-Enum im Userspace synchronisiert -> Netzwerk geht wieder
    - Kleinere Optimierungen. U.a.:
    -- htonl und Makros CLEAR_BIT und SET_BIT (neu) als Assembler-"Intrinsics"
    -- Speicher zwischen 0 und 20 MiB mit MEM_NOTLBUPDATE versehen (wird beim Setzen von cr3 nicht aus dem TLB-Cache genommen)
    -- Weitere Funktionen inlined


  • Mod

    version = "0.0.3.172 - Rev: 1373"

    irc.c umgestellt auf DNS



  • Version 0.0.3.173:

    - Führende 0 bei ftoa ergänzt (basiert nun auf itoa) <-- Das ist sogar standardisiert: http://de.wikipedia.org/wiki/ISO_31-0 😉
    - getc, fputs, putc, sinh, cosh, tanh implementiert (-> math.h vollständig)
    - Calc überarbeitet (v0.4.0):
    -- Unterstützt nun negative Zahlen, Potenzen und Klammern
    -- Rechnung kann als Kommandozeilenargument übergeben werden
    - IRC verbessert: Server kann beim Start ausgewählt werden
    - Zeitmessung in psort verbessert: Zeit zur Ergebnisprüfung nicht mehr mitgemessen
    - FloppyImage.img nicht mehr gelöscht vorm Build
    - Bugfix: Größenangabe bei Floppys gefixt (1440 KB statt KiB als Ausgangsbasis)
    - Bugfix: pow mit Workaround korrigiert für negative Exponenten


  • Mod

    Disketten verfügen über 1440 KiB (2880*512 byte), wird aber immer als KB geschrieben.



  • Erhard Henkes schrieb:

    Disketten verfügen über 1440 KiB (2880*512 byte), wird aber immer als KB geschrieben.

    Bug beim Bugfix eingebaut. Wird behoben.



  • Version 0.0.3.174:

    - Buildsystem verbessert:
    -- Unbenutzte Symbole aus den Userbibliotheken werden nicht mehr gelinkt.
    -- Strip bereits beim Linken angewandt
    -- Userprogramme bei Änderungen an Userbibliotheken automatisch neu übersetzt
    - pow, log und log10 gefixt (neu implementiert)
    - Fix für Floppygröße aus r1374 reverted


  • Mod

    @MrX: calc.elf liefert nun bei 0^5 die 0, das ist fein, bei 5^3 kommt brav die 125, aber ab 5^4 kommt 624 raus, auch bei 5^5 eins zu wenig. Bei 25^0.5 kommt erst 1.5 dann 1. Da sollte man nachschärfen. 😉



  • Bei 25^0.5 kommt erst 1.5 dann 1

    Der Taschenrechner kann keine Fließkommazahlen. Er rechnet:
    25^0 => 1 -> 1.5 => 1,5 -> atoi("1.5") => 1

    5^4 kommt 624 raus, auch bei 5^5 eins zu wenig

    Rundungsfehler, da der Taschenrechner Integer nutzt, aber mit dem Fließkommafunktionen rechnet.


  • Mod

    Vor der Benutzung der aktuellen Version von calc.elf wird gewarnt. Die Ergebnisse sind weitgehend falsch. Das PrettyOS Team übernimmt keinerlei Haftung für evtl. daraus entstehende Schäden! 😉


Anmelden zum Antworten