Sourcecode Fortschritt



  • 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! |
    

  • Mod

    Rev. 353:

    work-around, bis das thema ring0/ring3 geklärt ist bei threads:
    task.c, line 229/230:

    // new_task->privilege = parentTask->privilege;
        new_task->privilege = 0; /// TEST
    


  • Revision 354:

    - create_thread nimmt keinen parentTask mehr, ist jetzt immer current_task
    - Optimierungen in userlib.c
    - list.c: Überflüssige (und m.E. falsche, mglw. Memory-Leaks produzierende) Fkt. entfernt
    - abs heißt nun fabs, nimmt doubles und nutzt die FPU



  • Revision 355:

    - Projektfile für VC++. Wer will kann auch welche für andere IDEs machen.
    - pODA ist nun kein Pointer mehr und heißt somit ODA.


  • Mod

    Rev. 356:

    Vor USB-Transfer wird gestoppt (Tastendruck), damit sind mehrere Konsolen bereit dazu.
    USB-Transfer klappt aber bisher nur einmal erfolgreich bei real Hardware)

    Da EHCI/USB2 noch ziemlich unübersichtlich ist durch die Vielzahl der Ports und Möglichkeiten, hier die Konsolen meines "Entwicklungs-PCs":

    Konsole M:

    PrettyOS [Version 0.0.0.355]                                               Shell
    --------------------------------------------------------------------------------
    1.44 MB FDD device 0                                                            
    
    #0  0:0.0        dev:2774h vend:8086h IRQ:0                                     
    #1  0:1.0        dev:2775h vend:8086h IRQ:5                                     
    #2  0:27.0       dev:27D8h vend:8086h IRQ:3                                     
    #3  0:28.0       dev:27D0h vend:8086h IRQ:5                                     
    #4  0:28.4       dev:27E0h vend:8086h IRQ:5                                     
    #5  0:28.5       dev:27E2h vend:8086h IRQ:11                                    
    #6  0:29.0       dev:27C8h vend:8086h IRQ:11  USB UHCI 6000h I/O sz:-65504      
    #7  0:29.1       dev:27C9h vend:8086h IRQ:11  USB UHCI 6400h I/O sz:-65504      
    #8  0:29.2       dev:27CAh vend:8086h IRQ:11  USB UHCI 6800h I/O sz:-65504      
    #9  0:29.3       dev:27CBh vend:8086h IRQ:3  USB UHCI 7000h I/O sz:-65504       
    #10  0:29.7      dev:27CCh vend:8086h IRQ:11  USB EHCI CDBFF800h MMIO sz:1024   
    EHCI_MMIO CDBFF800h mapped to virt addr FF000000h, offset: 0800h                
    
    >>> >>> function: analyzeEHCI                                                   
    EHCI bar get_phys_Addr: 0DBFF800h                                               
    HCIVERSION: 0100h HCSPARAMS: 00104208h Ports: 8                                 
    HCCPARAMS: 00006871h                                                            
    OpRegs Address: FF000820h                                                       
    #11  0:30.0      dev:244Eh vend:8086h IRQ:0                                     
    #12  0:31.0      dev:27B8h vend:8086h IRQ:0                                     
    #13  0:31.1      dev:27DFh vend:8086h IRQ:0                                     
    #14  0:31.2      dev:27C0h vend:8086h IRQ:5                                     
    #15  0:31.3      dev:27DAh vend:8086h IRQ:0                                     
    #16  1:3.0       dev:8023h vend:104Ch IRQ:11                                    
    #17  1:4.0       dev:8211h vend:1283h IRQ:3                                     
    #18  1:5.0       dev:4320h vend:11ABh IRQ:11                                    
    #19  2:0.0       dev:3132h vend:1095h IRQ:11                                    
    #20  3:0.0       dev:108Bh vend:8086h IRQ:5                                     
    
    <RAM Disk at C0002000h DIR> dev                                                 
    35      info                                                                    
    9562    shell                                                                   
    
    >>> >>> function: ehci_handler: Port Change                                     
    >>> >>> function: ehci_handler: Port ChangeScreenshot (Thread)                  
    
    $>                                                                              
    
    --------------------------------------------------------------------------------
        _______                _______      <>_<>                                   
       (_______) |_|_|_|_|_|_|| [] [] | .---|'"`|---.                               
      `-oo---oo-'`-oo-----oo-'`-o---o-'`o"O-OO-OO-O"o'                              
    --------------------------------------------------------------------------------
    Monday, April 12, 2010, 00:38:22   47 s runtime. CPU: 3753 MHz                 \
    

    Konsole 0:

    PrettyOS [Version 0.0.0.355]                                     Console 0: EHCI
    --------------------------------------------------------------------------------
    
    >>> >>> function: initEHCIHostController                                        
    
    >>> >>> function: startHostController (reset HC)                                
    waiting for HC reset                                                            
    
    >>> >>> function: DeactivateLegacySupport                                       
    
    DeactivateLegacySupport: eecp = 0068h                                           
    eecp = 0068h, eecp_id = 0001h                                                   
    set OS-Semaphore.                                                               
    BIOS-Semaphore being not set.                                                   
    OS-Semaphore being set.                                                         
    Check: BIOSownedSemaphore: 0 OSownedSemaphore: 1                                
    
    >>> >>> function: ehci_handler: Port Change                                     
    HCHalted bit set to 0 (OK), ports can be enabled now.                           
    >>> >>> function: enablePorts                                                   
    
    >>> >>> function: resetPort 1                                                   
    >>> >>> function: resetPort 2                                                   
    >>> >>> function: resetPort 3                                                   
    >>> >>> function: resetPort 4                                                   
    >>> >>> function: resetPort 5                                                   
    >>> >>> function: resetPort 6                                                   
    >>> >>> function: resetPort 7                                                   
    >>> >>> function: resetPort 8                                                   
    >>> Press key to close this console. <<<
    

    Konsole 1:

    PrettyOS [Version 0.0.0.355]                               Console 1: EHCI Ports
    --------------------------------------------------------------------------------
    
    >>> >>> function: showPORTSC                                                    
    
    >>> >>> function: checkPortLineStatus                                           
    
    >>> Status of USB Ports <<<                                                     
    port 1: 00001801h, line: 02h  J-state                                           
    port 2: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                 
    >>> Press key to start USB-Test. <<<
    

    Konsole 2:

    PrettyOS [Version 0.0.0.355]                               Console 2: EHCI Ports
    --------------------------------------------------------------------------------
    
    >>> >>> function: showPORTSC                                                    
    
    >>> >>> function: resetPort 8                                                   
    >>> >>> function: checkPortLineStatus                                           
    
    >>> Status of USB Ports <<<                                                     
    port 1: 00001801h, line: 02h  J-state                                           
    port 2: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                 
    >>> Press key to start USB-Test. <<<
    

    Taste auf Konsole 2 bringt einen korrekten USB-Transfer. 🙂


Anmelden zum Antworten