Sourcecode Fortschritt


  • Mod

    Es ist mir nicht gelungen, das screenshot in keyboard.c auf thread umzusetzen, weder mit noch ohne Konsole. Das Problem liegt vermutlich im Speicherbereich (#PF, manchmal auch #GPF oder Reboot je nach Versuchen).

    Denkbare Möglichkeiten:
    task.c: Konsole aufräumen (übrigens auch, wenn gar keine da ist, z.B. bei create_thread(...) ?? )
    file.c: Speicher-Handling beim File schreiben
    console.c: screenshot hat einen Parameter



  • Wir müssen "Mouse sent unknown package" nicht anzeigen, aber es tritt (theoretisch) nur auf, wenn die Maus wirklich einen Fehler macht.
    Das ganze funktioniert in etwa so:

    * Maus wird initialisiert
    * Mausverhalten wird eingestellt
    * Wenn möglich wird das Mausrad dazugeschaltet
    * IRQ 12 Handler wird installiert

    * Maus sendet 3 oder 4 Pakete auf einmal, jedes allerdings mit einem eigenen Interrupt
    * Wenn der Zähler noch bei 0 ist wird überprüft, ob das erste empfangene Paket wirklich das erste ist.
    (anscheinend fangen nicht alle Mäuse bei Paket 1 an. Das war auch der Fehler, den ich zuerst nicht gefunden habe)
    * Wenn das nicht das 1. Paket ist, wird diese Fehlermeldung angezeigt, wenn doch, wird der Zähler erhöht und auf das nächste Paket gewartet.

    d.h. Dieser Fehler tritt nur 1x am Anfang auf. Wenn er ständig auftritt (also nach jeder Maus-Statusausgabe), dann sendet die Maus 4 statt 3 oder 3 statt 4 Pakete, obwohl meine Initialisierung das ausschließen sollte. Aber bei Mäusen kann man nie wissen. Ausserdem tritt dieser 'Mouse sent unknown package' Fehler bei mir nur in Emulatoren auf, auf realen PCs hatte ich ihn nie...



  • Revision 337:

    - Bugfix in task.c/.h: Console nur gelöscht, wenn sie dem Thread/Task gehört.


  • Mod

    Rev. 338:

    Ctrl + t ==> Screenshot_easy (void, ohne Parameter) als Thread (macht noch Probleme von TTT aus, von Konsole M aus geht es gut!
    Ctrl + s ==> normale Screenshot-Funktion



  • Revision 339:

    - Ordnerstruktur Userprogramme umgebaut
    - makefiles userprogramme aktualisiert
    - Weitere Userprogs mitgeliefert.
    - makefile bindet diese Userprogs ins FloppyImage ein.
    - screenshot-Fkts. jetzt in video.c
    - Hello-Programm nicht mehr TTT


  • Mod

    ich finde Cuervo's wunderbarere Bootscreen sollte für die Nachwelt fest gehalten werden (natürlich Strg + t während des Bootens):

    PrettyOS [Version 0.0.0.339]                              Console 0: Booting ...
    --------------------------------------------------------------------------------
    
           ######                    ##    ##               #####       ####        
          ########                  ###   ###              #######     ######       
          ########                  ###   ###             #########   #######       
          ###  ###  ## ##    ####  ##############    ##  ###   ####  ###  ##        
          ###  ### ######  ######################   ### ###     ###  ####           
         ####  ##  #####  #######################   ##  ##      ###  #####          
         ######## ####    ######## ###   ###  #### ### ###      ###   ######        
         #######  ####   ########  ###   ###  #### ### ###      ##     #####        
         ######   ###    ######    ###  ####   ######  ###     ###       ###        
         ###      ###    ###      ####  ####   ######  ####    ##   ##   ###        
        ####      ###    ######## ###########  #####   ##########  ########         
        ###      ###     ######## ##### #####  ####     ########   #######          
        ##       ##       ######   ###   ###   ###       #####      #####           
                                               ##                                   
                                              ##                                    
                                             ##                                     
    
                         Copyright (c) 2010 The PrettyOS Team                       
    
                         This bootscreen has been created by
    

    ... und der USB-transfer ist auch ein "Foto" wert:

    PrettyOS [Version 0.0.0.339]                                               Shell
    --------------------------------------------------------------------------------
    
    Enabling Async Schedule                                                         
    
    >>> >>> function: showPacket                                                    
    virtAddrBuf0: C0006000h                                                         
    12h 01h 00h 02h 00h 00h 00h 40h 00h 00h 00h 00h 00h 00h 01h 02h 03h 01h         
    >>> >>>function: showDeviceDesriptor                                            
    
    length:            18                                                           
    descriptor type:   1                                                            
    USB specification: 2.0                                                          
    USB class:         0000h                                                        
    USB subclass:      0000h                                                        
    USB protocol       0000h                                                        
    max packet size:   64                                                           
    vendor:            0000h                                                        
    product:           0000h                                                        
    release number:    0.0                                                          
    manufacturer:      0001h                                                        
    product:           0002h                                                        
    serial number:     0003h                                                        
    number of config.: 1                                                            
    
    setup packet:                                                                   
    >>> >>> function: showPacket                                                    
    virtAddrBuf0: C020B000h                                                         
    80h 06h 00h 01h 00h 00h 12h 00h                                                 
    setup:                                                                          
    >>> >>> function: showStatusbyteQTD                                             
    QTD: C020A000h Statusbyte: 00h                                                  
    in:                                                                             
    >>> >>> function: showStatusbyteQTD                                             
    QTD: C0005000h Statusbyte: 00h                                                  
    
    port 2: 00001004h, line: 00h  SE0,power on, enabled, EHCI owned                 
    port 3: 00001004h, line: 00h  SE0,power on, enabled, EHCI owned                 
    port 4: 00001004h, line: 00h  SE0,power on, enabled, EHCI ownedScreenshot Test  
    
    $>                                                                              
    
    --------------------------------------------------------------------------------
    Port: 4, device not attached                                                    
    
    --------------------------------------------------------------------------------
    Friday, April 09, 2010, 20:42:18   13 s runtime. CPU: 7571 MHz                 \
    

    Das gelingt übrigens nur mit:

    create_thread((task_t*)pODA->curTask, &screenshot_easy);
    

    also ohne eigene Konsole (ckernel.c, line 246) 😉

    Bei den User-Programmen, jetzt übrigens deutlich zahlreicher im Floppy-Image (thx to MrX), kommt es mit Strg+t noch zum reboot, kA warum, mit Strg+s geht es.


  • Mod

    Rev. 340:

    video.c:
    - Thread-Problem bei screenshot gelöst durch verlagern von videoscreen[4000+98] vom stack in den globalen speicher!
    - das newline bei Zeile 50 nicht mehr angefügt:

    static void catchVidmem()
    {
        int32_t NewLine = 0;
    
        for (uint16_t i=0; i<4000;i++)
        {
            uint16_t j=i+2*NewLine;
            videoscreen[j] = *(uint8_t*)(0xB8000 + 2*i); // only signs, no attributes
            if ( (i%80 == 79) && (i!=3999) )
            {
                videoscreen[j+1]= 0xD; // CR
                videoscreen[j+2]= 0xA; // LF
                NewLine++;
            }
        }
    }
    

    TODO: Kernel-Stack vergörßern 🙂



  • Revision 341:

    Ergebnisse des CodeReviews: fpu.c, ckernel.c, paging.c, kheap.c


  • Mod

    Die Bildschirmfotos sind plötzlich unleserlich. 😕


  • Mod

    Rev. 342:

    now screenshot works correct again (ctrl+s: process, ctrl+t: thread)


  • Mod

    Rev. 343:

    - pci.c: EHCI Basisadresse von ID-mapping auf freies mapping umgestellt
    - ckernel.c: create_cthread((task_t*)pODA->curTask, &initEHCIHostController, "EHCI");
    - os.h: uint32_t pciEHCInumber; // pci device number in ODA


  • Mod

    Rev. 344:

    build.bat angepasst, dass auch bei floppy_build.bat alle User-Programme auf der Floppy ankommen.


  • Mod

    Rev. 345:

    EHCI-Ablauf im EHCI-Interrupt beschleunigt: bisher bestens bewährte Methode mitttels Flag setzen und in kernel idle loop einen Thread starten

    Ausgabe nun in eigenem "Fenster": 🙂

    PrettyOS [Version 0.0.0.345]                               Console 0: EHCI Ports
    --------------------------------------------------------------------------------
    
    >>> >>> function: createQTD                                                     
    
    >>> >>> function: createQTD                                                     
    
    >>> >>> function: createQH                                                      
    
    >>> >>> function: createQH                                                      
    
    Enabling Async Schedule                                                         
    
    >>> >>> function: showPacket                                                    
    virtAddrBuf0: C0213000h                                                         
    12h 01h 00h 02h 00h 00h 00h 40h 00h 00h 00h 00h 00h 00h 01h 02h 03h 01h         
    >>> >>>function: showDeviceDesriptor                                            
    
    length:            18                                                           
    descriptor type:   1                                                            
    USB specification: 2.0                                                          
    USB class:         0000h                                                        
    USB subclass:      0000h                                                        
    USB protocol       0000h                                                        
    max packet size:   64                                                           
    vendor:            0000h                                                        
    product:           0000h                                                        
    release number:    0.0                                                          
    manufacturer:      0001h                                                        
    product:           0002h                                                        
    serial number:     0003h                                                        
    number of config.: 1                                                            
    Port: 4, device not attached                                                    
    setup packet:                                                                   
    >>> >>> function: showPacket                                                    
    virtAddrBuf0: C0215000h                                                         
    80h 06h 00h 01h 00h 00h 12h 00h                                                 
    setup:                                                                          
    >>> >>> function: showStatusbyteQTD                                             
    QTD: C0214000h Statusbyte: 00h                                                  
    in:                                                                             
    >>> >>> function: showStatusbyteQTD                                             
    QTD: C0212000h Statusbyte: 00h                                                  
    
    port 2: 00001004h, line: 00h  SE0,power on, enabled, EHCI owned                 
    port 3: 00001004h, line: 00h  SE0,power on, enabled, EHCI owned                 
    port 4: 00001004h, line: 00h  SE0,power on, enabled, EHCI owned                 
    --------------------------------------------------------------------------------
    Saturday, April 10, 2010, 20:27:33   9 s runtime. CPU: 7345 MHz                -
    

  • Mod

    Rev. 346:

    EHCI Start und EHCI Port Change jetzt in eigenen Konsolen, die man mit Tastendruck schließen kann, so dass man diese in Ruhe beschauen oder "fotografieren" (strg+s oder strg+t) kann.

    Die Vorgehensweise an einem Beispiel, damit wir das gemeinsam diskutieren/optimieren können:

    in ckernel.c:
    am anfang:

    portCheckFlag   = false;  // EHCI port change
    

    später in der idle loop:

    if ((portCheckFlag == true) && (CurrentSeconds >= 3) && pODA->pciEHCInumber)
                {
                    portCheckFlag = false;
                    create_cthread((task_t*)pODA->curTask, &portCheck, "EHCI Ports");
                }
    

    in ehci.c:
    der EHCI-Interrupthandler:

    void ehci_handler(registers_t* r)
    {
        //...
    
        if (pOpRegs->USBSTS & STS_PORT_CHANGE)
        {
            settextcolor(9,0);
            printf("Port Change");
            settextcolor(15,0);
    
            pOpRegs->USBSTS |= STS_PORT_CHANGE;
    
            if (enabledPortFlag)
            {
                portCheckFlag = true;
            }
        }
    
    void portCheck()
    {
        showPORTSC();
        checkPortLineStatus();
        settextcolor(13,0);
        printf("\n>>> Press key to close this console. <<<");
        settextcolor(15,0);
        while(!checkKQ_and_return_char());
    }
    


  • Nach hartem "Kampf" im IRC 😉 nun Revision 347:

    - Ergebnisse Code Review pci.c
    - syscall zur Begrenzung des Scrollbereichs.
    - Math-Fkts. von Iteem (Danke dafür!) eingebaut.


  • Mod

    Rev. 348:

    - rtl8139.h geschaffen
    - EHCI und RTL8139 Funktionen aus os.h entfernt
    - kleine Verbesserungen (falscher Kommentar in rtl8139, Klammer)

    Tests:

    Bochs: alles ok (hat kein EHCI)
    Qemu: alles ok (incl. EHCI)
    VMWare: bricht im Bootscreen ab
    VBox: USB devices lassen sich nicht einbinden, sonst alles ok
    Auf real Hardware Probleme z.T. bei Memory-Erkennung und bei EHCI MMIO.



  • Revision 349:

    - Flags durch Events ersetzt.
    - -fno-common als gcc-schalter genutzt -> Der Kampf um "extern" ist vorbei, die pro-extern-Fraktion hat (zum Glück 😉 ) gewonnen
    -- Daraus resultierende Fehler behoben
    - "pause" nach dem compilieren in build.bat


  • Mod

    Rev. 350:

    os.h u. ckernel.c: kleine Aufräumarbeiten



  • Revision 351:

    - Anderes Eventsystem: Fkt-Ptr. basiert
    - pciList von überflüssigem _Diagnosis_ befreit.
    - list.c: Fehler in listShowElement und listDeleteAll behoben


  • Mod

    Rev. 352:

    - zwischenschritt ehci.c (#PF bei thread "EHCI")

    warum ist der thread zum EHCI init nur "user"?

    PrettyOS [Version 0.0.0.352]                                     Console 0: EHCI
    --------------------------------------------------------------------------------
    
    Page Fault ( - user-mode) at 00041D92h - EIP: 00041D92h                         
    err_code: 00000005h address(eip): 00041D92h                                     
    edi: 00000000h esi: 00000000h ebp: 00000000h eax: 00000000h ebx: 00000000h ecx: 
    00000000h edx: 00000000h                                                        
    cs: 0000001Bh ds: 00000023h es: 00000023h fs: 00000023h gs 00000023h ss 00000023
    h                                                                               
    int_no 14 eflags 00010202h useresp 01420000h                                    
    
    Page Fault!                                                                     
    | <Exception - System Halted> Press key for exit from the task! |
    

Anmelden zum Antworten