Sourcecode Fortschritt



  • Rev. 234 (versehentlich 235 in ckernel.c):

    • os.h: uintptr_t ergänzt
    • Zeilenenden der cdi-Header vereinheitlicht
    • Source-files für CDI hinzugefügt, nach kernel/cdi verschoben
    • makefile angepasst

    EDIT: Übrigens nicht nur in ckernel.c... Auch in der Anmerkung beim Commit ists falsch.



  • Rev. 235:

    - CDI-Dateien aufgeräumt


  • Mod

    Versuch die blöde händische Rev.-Angabe automatisch seitens SVN zu ersetzen ist leider misslungen:
    Rev. 236-238

    static void init()
       47 {
       48     clear_screen();
       49     settextcolor(14,0);
       50     char buf[40];
       51     const char* revStr = "$Rev$"; //SVN <--- 3 verschiedene Versuche, nix klappt
       52     strcpy(buf,"PrettyOS [");
       53     strcat(buf,revStr);
       54     strcat(buf,"]\n");
       55     printformat(buf);
       56     //printformat("PrettyOS [Version 0.0.0.235]\n");
       57     gdt_install();
       58     idt_install();
       59     timer_install();
       60     keyboard_install();
       61     syscall_install();
       62     settextcolor(15,0);
       63 }
       64
    

  • Mod



  • Erhard Henkes schrieb:

    Vielleicht schafft es doch noch jemand mit diesem RevRev:
    http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.keywords.html
    http://dev.juokaz.com/php/automatic-svn-revision-number-in-source-code

    Das mit RevRev einzubauen ist kein Problem, allerdings tut es nicht das was du dir vorstellst. Das ist nämlich nur die Revision der Datei in der es steht und nicht die des ganzen Repository. Also solange sich die ckernel.c nicht ändert zählt das nicht hoch. Das steht bei deinem ersten Link auch in dem großen gelben Kasten. Da steht zudem auch das es keine SVN Möglichkeit gibt eine globale Revision einzutragen. Das muss immer extern über ein Programm/Script erledigt werden. Ein commit Hook wäre dafür z.B. ganz passend, aber das lässt Sourceforge glaube ich nicht zu.


  • Mod

    Rev. 240: kernel.bin: 57.856 Bytes
    http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=240

    ehci.c: restart bei Host System Error (klappt endlich bei meinem störrischen PC!)

    179     if( pOpRegs->USBSTS & STS_HOST_SYSTEM_ERROR )
      180     {
      181         settextcolor(4,0);
      182         printformat("\nHost System Error Interrupt");
      183         settextcolor(15,0);
      184         pOpRegs->USBCMD &= ~CMD_ASYNCH_ENABLE;
      185         pOpRegs->USBSTS |= STS_INTMASK;
      186         printformat("\nRestart HC after fatal error");
      187         initEHCIFlag = false;
      188         startHostController();
      189         enablePorts();
      190     }
    

  • Mod

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

    sleep umgangen im restartHC aus EHCI-interrupt-handler

    Allerdings klappt das jetzt bei meinem PC nicht mehr richtig mit dem Port Reset. Fazit: wir benötigen ein sleep ohne Interrupt.



  • Revision 242:

    - Keyboard-Belegungsheader neu formatiert (Die waren so unübersichtlich)
    - keyboard_GER.h: ³ wurde nicht angezeigt -> vorerst durch 0 ersetzt
    - keyboard_US.h funktioniert nun (AltGr-Belegung fehlte)
    - NASM auf 2.08 aktualisiert (Unterschied zu rc10 nur Versionsnummer)
    - fs.h: Zeilenenden vereinheitlicht



  • Revision 243:

    - Shift-AltGr-Keycodes freigeschaltet
    - keyboard.c überarbeitet -> Wenn kein Key für z.B. Shift-AltGr vorhanden -> "Downgrade" zu AltGr u.s.w.


  • Mod

    Rev. 244:

    ckernel.c und ehci.c: Flags werden in ckernel.c jetzt nicht in sek-Schleife, sondern direkt bearbeitet, aber noch keine brauchbare Lösung für alle Fälle.


  • Mod

    Rev. 245:

    - fat12, floppy, file modular etwas besser getrennt (neu: file.h/.c)
    - Speicher für file wird per malloc geholt und anschließend wieder frei gegeben. Dies bietet nun auch die Möglichkeit andere Module als executable elf-Dateien zu laden (mal mit kernel.bin oder boot2.bin Reaktion ausprobieren).



  • Revision 246:

    Bugfixes:
    - Fehlerhafte Dateibenennung der CDI-Implementation
    - Fehler in keyboard_US.h
    - Key-Downgradereihenfolge korrigiert
    - US-Layout wird verwendet, wenn keines definiert ist. Standard natürlich weiterhin: Deutsch


  • Mod

    Rev. 247:

    ehci.c, ckernel.c und usb2.c: Versuch, den Host System Error durch mehrfachen Restart zu umgehen. Durchlauf etwas beschleunigt. Hoffentlich klappt es nun besser, damit wir mit USB 2.0 und anderen Feinheiten weiter machen können.


  • Mod

    Rev. 248: ehci.c: Zwischenschritt ( zwei zusätzliche Zeitschleifen )
    Bringt aber nix, eher schlechter (Test auf meinem Entw.-PC und bei Tobiking)


  • Mod

    Rev. 249:

    Diese Version wurde mit Basis rev. 240 bei ehci.c wieder aufgebaut, da die letzten Veränderungen keinen wirklichen Vorteil brachten. Nun fährt zumindest mein "störrischer PC" nach einigen Fehlversuchen (Host System Error) in die richtige Spur. Die Details der übertragenen Daten werden nur bei length != 0 angezeigt, um den Bildschirm nicht mit Nullen zu überladen. 😉

    Cuervo - unser Cheftester - sieht keine Fehler auf seinem Test-PC. Bei Tobiking läuft es leider noch nicht.

    Hier ein Screenshot zum vergleich mit dem eigenen Ergebnis:
    http://www.henkessoft.de/OS_Dev/Bilder/rev249.PNG 🙂


  • Mod

    Rev. 250:
    - Bessere Hi-Speed-Erkennung (vs. J-State)
    - Systemfrequenz erhöht von 100 Hz auf 1000 Hz


  • Mod

    Rev. 251:

    ckernel.c, util.c: Testversion für rdtsc-Messung pro Millisekunde (Ziel: sleep ohne Interrupt)
    http://en.wikipedia.org/wiki/Time_Stamp_Counter

    64-bit register present on all x86 processors since the Pentium. It counts the number of ticks since reset. Instruction RDTSC returns the TSC in EDX:EAX.

    Test wird momentan in der Zeitanzeige der kernel-idle-loop durchgeführt, weil wir dort einen Messabstand von jeweils einer Sekunde haben.

    while( true )
    {
        //...
    
        OldRdtscValue = CurrentRdtscValue;
    
        if( CurrentSeconds != CurrentSecondsOld )
        {
            // all values 64 bit
            CurrentRdtscValue = rdtsc();
            RdtscDiffValue = CurrentRdtscValue - OldRdtscValue;
            uint64_t RdtscKCounts = RdtscDiffValue>>10; // divide by 1024
    
            uint32_t RdtscKCountsHi    = RdtscKCounts >> 32;
            uint32_t RdtscKCountsLo    = RdtscKCounts & 0xFFFFFFFF;
    
            if(RdtscKCountsHi==0)
            {
                printformat("\nRdtsc/ms: %d\n",(RdtscKCountsLo/1000)<<10 );
            }
            else
            {
                printformat("\nRdtscKCountsHi: %d RdtscKCountsLo: %d\n",
    	                       RdtscKCountsHi,    RdtscKCountsLo );
            }
            //...
        }
        //...
    }
    

    Funktioniert bestens! 🙂
    Allerdings benötigen wir da einen Mittelwert aus mehreren Messsungen, wobei man die ersten verwerfen muss, wie man im Test sehr gut sieht. Das könnten wir im EHCI-Modul einsetzen, um unabhängig vom Timer-Interrupt Delays durchführen zu können.

    Anmerkung:
    uint64_t RdtscKCounts = RdtscDiffValue>>10; // divide by 1024
    Diese Zeile anstelle direkte Division durch 1000 ist notwendig, weil der x86 hier keine Funktionen zur Verfügung stellt für unsigned long long. Die Korrektur (RdtscKCountsLo/1000)<<10 erfolgt dann auf 32-Bit-Niveau.


  • Mod

    Rev. 252:

    ckernel.c: CPU Frequenz (MHz) in Statuszeile ergänzt. Ausdruck im normalen Bildschirmbereich ausgeblendet. Bitte prüfen, ob es überall stimmt. Was passiert, wenn man PCs vor Pentium verwendet?


  • Mod

    Rev. 253:

    Zwischenschritt zum Test von delay(...µs) anstelle sleepMilliSeconds(...ms).
    Hat irgendwo noch eine Loop zuviel in ehci.c 😃


  • Mod

    Rev. 254:

    in usb2.c waren auch noch sleepMilliSeconds(...), die im INT geblockt haben.
    Zwar immer noch nicht rund, aber jetzt stimmt die Basis zum Experimentieren, zumindest halbwegs.


Anmelden zum Antworten