Sourcecode Fortschritt


  • 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);
    

  • Mod

    0.0.1.200 - Rev: 779
    Kernel: 515.560 Bytes

    http://www.pcidatabase.com/pci_c_header.php (nach Überarbeitung durch Erhard Henkes wegen massiver bugs in der Produkt-Liste, ca. 1h Aufwand) eingebaut zur Erkennung von Devices.

    Noch nicht an pci-scan angeschlossen. Bitte erst testen. 😉

    bei mir: qemu und PC laufen noch. 😃



  • Diese Liste kostet ca. 300 KB. Ich weiß ja nicht, ob wir uns wirklich 20 % der Floppy damit vollstopfen wollen...


  • Mod

    0.0.1.201 - Rev: 780

    pciVendProdList.h verwendet zur Auswertung in pciScan(...)

    Beispiel qemu:

    #0 0:0.0  IRQ:0  Intel   PCI & Memory                                              
    #1 0:1.0  IRQ:0  Intel   PIIX3 PCI-to-ISA Bridge (Triton II)                       
    #2 0:1.1  IRQ:0  Intel   PIIX3 IDE Interface (Triton II)                           
    #3 0:1.2  IRQ:11 Intel   USB EHCI Controller USB EHCI F0000000h MMIO sz:4096       
    #4 0:1.3  IRQ:9  Intel   PIIX4/4E/4M Power Management Controller                   
    #5 0:2.0  IRQ:0  Cirrus  64-bit VisualMedia Accelerator                           
    #6 0:26.0 IRQ:10 Realtek Realtek RTL8139 Family PCI Fast Ethernet NIC
    

  • Mod

    Diese Liste kostet ca. 300 KB. Ich weiß ja nicht, ob wir uns wirklich 20 % der Floppy damit vollstopfen wollen...

    @MrX: man kann es ja weg lassen mittels #define _PCI_VEND_PROD_LIST_


  • Mod

    0.0.1.202 - Rev: 781

    nur IRQ != 255 angezeigt

    Aktuelle Liste von VBox:

    #1 0:1.0 IRQ:0  Intel PIIX3 PCI-to-ISA Bridge (Triton II)                       
    #2 0:1.1 IRQ:0  Intel PIIX4/4E/4M IDE Controller                                
    #3 0:2.0 IRQ:11 vend:80EEh dev:BEEFh                                            
    #4 0:3.0 IRQ:10 Intel Gigabit Ethernet Controller                               
    #5 0:4.0 IRQ:9  vend:80EEh dev:CAFEh                                            
    #6 0:5.0 IRQ:5  Intel Aureal (AD1881 SOUNDMAX) Placa Mãe Asaki P3-141           
    #7 0:6.0 IRQ:11 vend:106Bh dev:003Fh USB OHCI F0804000h MMIO sz:4096            
    #8 0:7.0 IRQ:9  Intel PIIX4/4E/4M Power Management Controller                   
    #9 0:8.0 IRQ:9  AMD PCnet LANCE PCI Ethernet Controller                         
    #10 0:11.0 IRQ:10 Intel USB 2.0 EHCI Controller USB EHCI F0900000h MMIO sz
    :4096
    

    das klingt komisch:
    vend:80EEh dev:BEEFh <---- BEEF 😃 (vendor 80EEh gibt es nicht)
    vend:80EEh dev:CAFEh <---- CAFE 😃

    vend:106Bh dev:003Fh <--- der Hersteller soll Apple sein, aber Device 003Fh gibt es nicht


  • Mod

    0.0.1.203 - Rev: 782

    memory.h eingefügt

    Paging.h/c formal überarbeitet


  • Mod

    0.0.1.203 - Rev: 783

    memory.h nachgereicht


  • Mod

    0.0.1.204 - Rev: 784

    ESC + p zeigt die Belegung der physischen Bittabelle (paging.c). Jedes Bit dort repräsentiert eine physische Page (auch Frame genannt):

    0 = frei (grün),
    1 = bereits belegt (grau)

    Man sieht, dass PrettyOS 23 1/4 MiB für sich verwendet.

    Test mit VBox und 24 MiB RAM eingestellt: Laden von mehreren User-Programmen (ca. 10) führt zum #PF mit error 6 (bit1: write access und bit2: user mode access)
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-264710.html

    Mit obigem physicalMem-Logger kann man diesen Vorgang illustrativ verfolgen. 😉



  • version 0.0.1.204 - Rev: 785

    vbe.c/h
    - Kommentare entfernt, geändert u. hinzugefügt

    other_userprogs/vgatest.c entfernt



  • version 0.0.1.204 - Rev: 786

    audio/sb16.c/.h
    - Informationen für die Programmierung eines Audiotreibers zusammengelegt (Soundblaster16).



  • Version 0.0.1.205:

    - event_list in todo_list umbenannt. Verbessert/Verallgemeinert. Nutzung reduziert.
    - memory.txt ergänzt
    - Includes aufgeräumt
    - Bootablauf verändert, Ausdruck verbessert.
    - Sonstiges^^


Anmelden zum Antworten