Sourcecode Fortschritt



  • version 0.0.1.182 - Rev: 761

    ethernet.c/.h
    - Weiter aufgeräumt und in die Protokoll header in spezifischen Dateien (ipv4.c/.h und arp.c/.h) umkopiert


  • Mod

    0.0.1.183 - Rev: 762

    Fehler #PF (qemu) durch HOTFIX in task.c behoben



  • Version 0.0.1.184:

    - CPUID ausgelesen. VendorID wird korrekt angezeigt, restliche Funktionen _sollten_ auch funktionieren, sie sind schwer zu testen, auch wenn die Ergebnisse die ich kriege plausibel wirken. Die Möglichkeit, die CPUID in Bochs zu verstellen funktioniert leider nicht -> Vermutlich Bug in Bochs
    - Verbesserung am serial-Treiber


  • Mod

    0.0.1.185 - Rev: 764

    - udp weiter ausgewertet (protokolle)
    - ip/arp auswertung vereinfacht
    - projektdateien
    - sound abgeschaltet



  • Revision 765:

    * Serial.c korrigiert

    Senden und empfangen klappt jetzt einwandfrei, das einzige Problem ist sleepMilliSeconds(8); in ckernel.c, das isz zu lange um alle Nachichten zu erhalten, verkürzt man es aber, erhält man viele einzelne Nachichten...-.-



  • version 0.0.1.187 - Rev: 766

    vbe.c
    - setVideoMemory(...) Bild Darstellung in der Horizontalen in den verschiedenen Auflösungen angepasst. Die Vertikale ist noch um ca. 5 Pixel zu weit oben.



  • Version 0.0.1.188

    - Bugfix in paging.c - VBox sollte jetzt auch mit VT-x laufen (Danke, Tobiking)
    - Bugfix in console.c
    - Bugfix in tasking.c


  • Mod

    Dokumentation der Änderung in paging.c:

    // Page table entries, identity mapping 
    for (int j=0; j<1024; ++j)
    {
        kernel_pd->tables[i]->pages[j] = addr | MEM_PRESENT | MEM_WRITE;
        addr += PAGESIZE;
    }
    

    Änderung: | MEM_WRITE ⚠



  • Version 0.0.1.189:

    - vbe.c: Bugfix: Cursor kein Nullpointer mehr (garkein Pointer mehr)
    - vbe.c: Bugfix: In drawChar funktionieren nun \n, \r und \t korrekt.
    - Codevereinfachungen


  • Mod

    Version 0.0.1.190 - Rev: 769

    if(task->threads)
    {
        for(element_t* e = task->threads->head; e != 0; e = e->next)
        {
           //kill(e->data);  /// HACK -> #PF on some systems
        }
        // list_DeleteAll(task->threads);
    }
    
    // list_Delete(tasks, task);
    scheduler_deleteTask(task);
    

    die list_... wurden auskommentiert. #PF wurde bei list_DeleteAll festgestellt



  • Version 0.0.1.191:

    - Tja... (mehr) Hack als Bugfix^^ Einige Dinge in task.h/c auskommentiert


  • Mod

    Version 0.0.1.192 - Rev: 771

    - bit9 OSFXSR in cr4 nicht gesetzt (für FXSAVE und FXSTORE, das wir nicht verwenden) hilft für K6-2
    - FPU test eingebaut

    uint32_t cr4;
        __asm__ volatile("mov %%cr4, %0;" : "=r" (cr4));
    
        // cr4 |= 1<<9; // set OSFXSR (bit 9)
    
        // reload CR4, init FPU
        __asm__ volatile("mov %0, %%cr4; finit;" : : "r"(cr4));
    
        fpu_setcw(0x37F); // set the FPU Control Word
    
    static void fpu_test()
    {
        double squareroot = sqrt(2.0);
        squareroot = fabs(squareroot);
        squareroot /= sqrt(2.0);
        if (squareroot == 1.00) 
        {
            textColor(0x0A);
            printf("\nFPU-test OK\n");
            textColor(0x0F);
        }
        else
        {
           textColor(0x0C); 
           printf("\nFPU-test ERROR\n");
           textColor(0x0F);
        }
    }
    

    OSFXSR
    Operating System Support for FXSAVE and FXRSTOR instructions (bit 9 of CR4) — When set, this flag:
    (1) indicates to software that the operating system supports the use of the FXSAVE and FXRSTOR instructions,
    (2) enables the FXSAVE and FXRSTOR instructions to save and restore the contents of the XMM and MXCSR registers along with the contents of the x87 FPU and MMX registers, and
    (3) enables the processor to execute SSE/SSE2/SSE3/SSSE3/SSE4 instructions, with the exception of the PAUSE, PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI, CLFLUSH, CRC32, and POPCNT.

    If this flag is clear, the FXSAVE and FXRSTOR instructions will save and restore the contents of the x87 FPU and MMX instructions, but they may not save and restore the contents of the XMM and MXCSR registers. Also, the processor will generate an invalid opcode exception (#UD) if it attempts to execute any SSE/SSE2/SSE3 instruction, with the exception of PAUSE, PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI, CLFLUSH, CRC32, and POPCNT.

    The operating system or executive must explicitly set this flag.

    NOTE
    CPUID feature flags FXSR indicates availability of the FXSAVE/FXRSTOR instructions. The OSFXSR bit provides operating system software with a means of enabling FXSAVE/FXRSTOR to save/restore the contents of the X87 FPU, XMM and MXCSR registers. Consequently OSFXSR bit indicates that the operating system
    provides context switch support for SSE/SSE2/SSE3/SSSE3/SSE4.


  • Mod

    0.0.1.193 - Rev: 772

    - fpu_test() nach fpu.c verlagert

    Schutz bei fehlendem CPU-Feature FPU:
    - if (cpu_supports(CF_FPU)) fpu_install(); // ckernel.c
    - if (cpu_supports(CF_FPU)) fpu_test(); // ckernel.c



  • Version 0.0.1.194:

    - list.c: Bug in list_Delete gefixt
    - task.c/scheduler.c: Log verbessert
    - task.c/scheduler.c: Alte Hacks wieder entfernt, da zugrunde liegende Fehler behoben sind (nicht initialisierte Variable & Gekillter freetimeTask)
    - Aufgeräumt


  • Mod

    Endlich das Task-Disaster besiegt. Wirklich geholfen hat die Visualisierung in Form des Task-log:

    current task: pid: 9                                                            
    running tasks:                                                                  
    pid: 0  esp: 0018FF00h  eip: 00000000h  PD: 00A22000h  k_stack: 00000000h       
              child-threads: 9                                                      
    pid: 9  esp: C0204E8Ch  eip: 00114D9Eh  PD: 00A22000h  k_stack: C0204EE0h       
            parent: 0                                                               
    pid: 8  esp: C0001F68h  eip: 00114D9Eh  PD: C0207000h  k_stack: C00020E8h       
    freetime task:                                                                  
    pid: 2  esp: C0003E8Ch  eip: 00114D9Eh  PD: 00A22000h  k_stack: C0003EE0h
    

    Da sah man die versehentlichen "Kills" und falschen Verwandschaftsbeziehungen. 😃

    Dies war die Stelle, die das Reboot-Chaos der letzten Versionen verursacht hat und nun glatt durchläuft:

    task.c:

    // kill all child-threads of this task
        if(task->threads)
        {
            for(element_t* e = task->threads->head; e != 0; e = e->next)
            {
                kill(e->data);
            }
            list_DeleteAll(task->threads);
        }
    
        list_Delete(tasks, task);
        scheduler_deleteTask(task);
    

    Codewort: Kindermörder 😃


  • Mod

    0.0.1.195 - Rev: 774

    - ckernel.c: line (anstelle for-loop, mit FPU-Fkt. fabs) und drawCircle (mit FPU-Fkt. sqrt)
    - beep aus


  • Mod

    0.0.1.196 - Rev: 775

    types.h: #define BIT(n) (1<<(n))


  • Mod

    0.0.1.197 - Rev: 776

    void* paging_acquire_pcimem(uint32_t phys_addr, uint32_t numberOfPages)

    abgeändert wegen vbe.c: setVideoMemory
    Diese Funktion ist nun deutlich bereinigt. 😃

    void setVideoMemory()
    {
         uint32_t numberOfPages = vgaIB->TotalMemory * 0x10000 / PAGESIZE;
         SCREEN = (uint8_t*)paging_acquire_pcimem(mib->PhysBasePtr, numberOfPages);
         printf("\nSCREEN (phys): %X SCREEN (virt): %X\n",mib->PhysBasePtr, SCREEN);
         printf("\nVideo Ram %u MiB\n",vgaIB->TotalMemory/0x10);     
    }
    


  • ehenkes: Du hast vergessen zu erwähnen, dass Du dabei auch gleich den Verschiebungsfehler in VBE eliminiert hast.

    Version 0.0.1.198:

    - Cuervos Testergebnisse hochgeladen
    - Besserer Skalierungsalgorithmus
    - VBE läuft nun in separatem Thread - Zeitersparnis beim booten


  • Mod

    0.0.1.199 - Rev: 778

    Probeweise zurückverlagert, bitte testen:

    kheap.h:

    #define PLACEMENT_BEGIN   ((uint8_t*) 0x1000000)     // 16 MiB
    #define PLACEMENT_END     ((uint8_t*) 0x1400000)     // 20 MiB
    

    Wegen Überschneidung mit Floppy beim DMA-Puffer (0x1000 - 0x33FF):

    setVgaInfoBlock((VgaInfoBlock_t*)0x3400);
    setModeInfoBlock((ModeInfoBlock_t*)0x3600);
    

Anmelden zum Antworten