Sourcecode Fortschritt


  • 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. 🙂


  • Mod

    Rev. 357:

    read_directory: bei nur 3 Zeichen im Namen noch ein '\t' ausgeben
    ehci: Restart nach Host System Error per Einschub einer Message in event loop getriggert

    if (pOpRegs->USBSTS & STS_HOST_SYSTEM_ERROR)
        {
            settextcolor(4,0);
            printf("\nHost System Error");
            settextcolor(15,0);
            pOpRegs->USBCMD &= ~CMD_ASYNCH_ENABLE; // necessary?
            pOpRegs->USBSTS |= STS_HOST_SYSTEM_ERROR;
            settextcolor(14,0);
            printf("\nInit EHCI after fatal error");
            settextcolor(15,0);
            addEvent(&EHCI_INIT);
        }
    

    Hier mal ein dickes Lob an MrX für die Realisierung der Event Queue und Loop! Echt klasse das Teil. 👍


  • Mod

    Rev. 358:

    ehci.c / usb2.c: Debug-Ausgaben etwas verdichtet, damit das auf einen Bildschirm passt



  • Revision 359:

    - current_task weggemacht
    - new_task wird nicht direkt aktiviert, sondern in der task-Queue am Ende eingefügt
    - Projektfile aufgeräumt
    - kleiner Shell-Fehler behoben.


  • Mod

    Rev. 360:

    Damit wir mal mit float arbeiten können:

    userlib:
    - ftoa anstelle float2string
    - atof

    - hello: rechnet pq-formel

    bitte testen, ob alles stimmt. 😉


  • Mod

    Rev. 361:

    waren noch einige Korrekturen notwendig


  • Mod

    Rev. 362:

    - in PQEQ.ELF umbenannt und auch in FloppyImage eingebunden, damit man das überhaupt laden kann
    - header für beep aus ckernel.c entfernt

    Wer die Ergebnisse des pq-equation-programms überprüfen will, dem empfehle ich folgendes C++-Programm:

    #include <iostream>
    #include <limits> // wait()
    #include <cmath>  // sqrt(...)
    using namespace std;
    
    void wait()
    {
      cin.clear();
      cin.ignore(numeric_limits<streamsize>::max(), '\n');
      cin.get();
    }
    
    int main()
    {
     cout << "Calculation of quadratic equation of type x*x + p*x + q = 0"
          << endl << endl;
    
     double p, q, x1, x2;
     cout << "Please enter p: ";
     cin  >> p;
     cout << "Please enter q: ";
     cin  >> q;
    
     x1 = -p/2 + sqrt( p*p/4.0 - q );
     x2 = -p/2 - sqrt( p*p/4.0 - q );
    
     cout << endl << "x1 = " << x1 << endl << "x2 = " << x2 << endl;
    
     wait();
    }
    

  • Mod

    Rev. 363:

    Code Review elf.c


  • Mod

    Rev. 364:

    gdt.c: |0xF bei granularity entfernt


  • Mod

    Rev. 365:

    ckernel.c: bss nullen

    siehe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-260731-and-start-is-140.html (aber natürlich nicht statisch, sondern mit Variablen aus dem Linker-Skript)



  • Revision 366:

    - os.h auseinandergenommen und andere Header-Umsortierungen (Darum so ein Riesen-Commit)
    - _template_header.h entfernt sowie readelf.exe + read_program_elf.bat entfernt
    - Doppeltes PQ-EQ entfernt
    - atof und ftoa statt float2string in util.c
    - math.c -> util.c


  • Mod

    Rev. 367:

    ehci/usb variiert, so dass man bei QTD alle Parameter für einen Request übergeben kann; struct und show-Fkt. für ConfigurationDesriptor


  • Mod

    rev. 368:

    ehci/usb: zwei Abfragen hintereinander: erst device, dann configuration.
    Allerdings läuft das auf qemu. Mit real PC gibt es noch Probleme, die mir aber bezüglich der Ursache noch nicht klar sind. Da bitte ich um Mithilfe bei der Ursachenfindung, damit wir uns von EHCI lösen und zu USB2 übergehen können.

    PrettyOS [Version 0.0.0.368]                               Console 1: EHCI Ports
    --------------------------------------------------------------------------------
    
    >>> >>> function: showPORTSC                                                    
    >>> >>> function: checkPortLineStatus                                           
    
    >>> Status of USB Ports <<<                                                     
    port 1: 0000100Dh, line: 00h  SE0,power on, enabled, EHCI owned                 
    >>> Press key to start USB-Test. <<<                                            
    >>> >>> function: testTransfer                                                  
    Test transfer with device address: 0                                            
    
    Enabling Async Schedule                                                         
    
    >>> >>> function: showPacket                                                    
    virtAddrBuf0: C0218000h                                                         
    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                            
    
    >>> >>> function: testTransfer                                                  
    Test transfer with device address: 0                                            
    
    Enabling Async Schedule                                                         
    
    >>> >>> function: showPacket                                                    
    virtAddrBuf0: C0220000h                                                         
    09h 02h 20h 00h 01h 01h 00h C0h 00h                                             
    >>> >>>function: showConfigurationDesriptor                                     
    length:               9         descriptor type:      2                         
    total length:         32        number of interfaces: 1                         
    ID of config:         0001h     ID of config name     0000h                     
    Remote Wakeup:        no        Self-powered:         yes                       
    max power (mA):       0                                                         
    
    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                 
    >>> Press key to close this console. <<<                                        
    --------------------------------------------------------------------------------
    Thursday, April 15, 2010, 00:37:36   22 s runtime. CPU: 3746 MHz               \
    


  • Erhard Henkes schrieb:

    rev. 368:

    Erhard Henkes, ich prophezeihe: PrettyOS wird dein Lebenswerk. 😃


  • Mod

    ich prophezeihe: PrettyOS wird dein Lebenswerk. 😃

    Ja, es hat schon etwas Faszinierendes. 😉 Die Spannung lässt nicht nach. Gerade das Thema EHCI/USB oder später der Ausbau des Netzwerk-Codes stellen gewisse Anforderungen. Für viele sind aber auch die Themen Memory Management, Programming/Scheduling, Interprocess Communication oder Application Programming Interface reizvoller. Von den User-Programmen, eigenen Compilern usw. mal gar nicht anzufangen. 😃

    Das lässt sich aber nur im Team bewältigen. 🙂



  • Erhard Henkes schrieb:

    ich prophezeihe: PrettyOS wird dein Lebenswerk. 😃

    Ja, es hat schon etwas Faszinierendes. Die Spannung lässt nicht nach. Gerade das Thema EHCI/USB oder später der Ausbau des Netzwerk-Codes stellen gewisse Anforderungen. Für viele sind aber auch die Themen Memory Management, Programming/Scheduling, Interprocess Communication oder Application Programming Interface reizvoller. Von den User-Programmen, eigenen Compilern usw. mal gar nicht anzufangen.

    Das lässt sich aber nur im Team bewältigen.

    Na, dann wünsche ich Dir und deinem Team weiterhin viel Spaß und Erfolg. 🙂


  • Mod

    @Z: wie wäre es, wenn Du bei uns mal mithilfst und auch Freude am Experimentieren/Tüfteln hast? Bei EHCI/USB könnte ich z.Z. einen Mitdenker/Tester gut brauchen. 😉

    Rev. 369:

    - ehci/usb2: Debug-Prints reduziert, damit man die USB-Ergebisse besser sieht

    Testen mit qemu: http://download.tyndur.org/temp/qemu-ehci.tgz

    Konsole M (kernel/shell):

    Port Change                                                                     
    ehci_handler: USB Interrupt                                                     
    ehci_handler: USB Interrupt
    

    Konsole 0:

    >>> >>> function: initEHCIHostController                                        
    >>> >>> function: startHostController (reset HC)                                
    DeactivateLegacySupport: eecp = 0000h                                           
    No valid eecp found.                                                            
    
    >>> >>> function: enablePorts                                                   
    >>> >>> function: resetPort 1                                                   
    >>> >>> function: resetPort 2                                                   
    >>> >>> function: resetPort 3                                                   
    >>> >>> function: resetPort 4
    

    Konsole 1:

    >>> Status of USB Ports <<<                                                     
    port 1: 0000100Dh, line: 00h  SE0,power on, enabled, EHCI owned                 
    >>> Press key to start USB-Test. <<<                                            
    
    USB2: GET_DESCRIPTOR device, dev: 0 endpoint: 0                                 
    12h 01h 00h 02h 00h 00h 00h 40h 00h 00h 00h 00h 00h 00h 01h 02h 03h 01h         
    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                            
    
    USB2: GET_DESCRIPTOR config, dev: 0 endpoint: 0                                 
    09h 02h 20h 00h 01h 01h 00h C0h 00h                                             
    length:               9         descriptor type:      2                         
    total length:         32        number of interfaces: 1                         
    ID of config:         0001h     ID of config name     0000h                     
    Remote Wakeup:        no        Self-powered:         yes                       
    max power (mA):       0                                                         
    
    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
    


  • Erhard Henkes schrieb:

    @Z: wie wäre es, wenn Du bei uns mal mithilfst und auch Freude am Experimentieren/Tüfteln hast?

    Danke, aber nein. Ich bin in meiner Freizeit schon voll ausgelastet.
    Du schaffst das schon. 👍



  • Revision 370:

    - Ergebnisse Codereview video.c
    - Nicht-Multithreaded screenshot-Funktionen entfernt
    - CDI-Header von Doxygen-Formatierung und für PrettyOS nicht relevanten Inhalten befreit
    - bochs.bxrc: PANIC-Meldungen werden ignoriert -> Fehler beim Start fällt weg.


  • Mod

    Revision 371:

    kdebug(...) eingeführt (verbesserte Übersichtlichkeit und zentrale Wartbarkeit).

    /// Diagnosis-Output - activates prints to the screen about some details and memory use
    #define _DIAGNOSIS_
    
    #ifdef _DIAGNOSIS_
     #define kdebug(...)   \
      settextcolor(3,0);    \
      printf(__VA_ARGS__);  \
      settextcolor(15,0);
    #else
     #define kdebug(...)
    #endif
    

    Vielen Dank an noob_lolo für diesen konstruktiven und konkreten Ratschlag. 👍


Anmelden zum Antworten