Sourcecode Fortschritt


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


  • Mod

    0.0.1.206 - Rev: 788

    PCI_VEND_PROD_LIST_H weiter überarbeitet (teilweise echt übel, benötigt leider noch viel Arbeit)


  • Mod

    0.0.1.207 - Rev: 789

    PCI_VEND_PROD_LIST_H weiter überarbeitet

    Wenn wir da alle mithelfen, kann diese Liste wertvoll werden.
    In der Urform ist sie nicht zu gebrauchen gewesen. 😃


  • Mod

    0.0.1.208 - Rev: 790

    Freigabe des Userstacks:

    // free memory for user stack 
    if (task->userStack != 0)
    {
        paging_free (task->page_directory, task->userStack, task->userStackSize * PAGESIZE);
    }
    

    Test mit VBox und 24 MiB RAM:
    Zweimal ttt starten, dann das zweite ttt beenden, anschließend das erste.
    Man erkennt, dass zwei Pages noch nicht frei gegeben werden beim "kill".


Anmelden zum Antworten