Sourcecode Fortschritt
-
0.0.1.180 - Rev: 759
Auf paging_get_phys_addr(virtual address) vereinfacht (wird immer kernel_pd verwendet)
-
Revision 0.0.1.181:
- Serial-Treiber gefixt und erweitert.
- task.c: create_vm86_ThreadTaskBase weggemacht
- task.c: kill und restart angelegt.
- task.c: Threads werden gekillt, wenn der Parenttask verschwindet
- Diverse Kleinigkeiten
-
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
-
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
-
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
-
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
-
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
-
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 eingebautuint32_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.
-
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
-
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
-
0.0.1.195 - Rev: 774
- ckernel.c: line (anstelle for-loop, mit FPU-Fkt. fabs) und drawCircle (mit FPU-Fkt. sqrt)
- beep aus
-
0.0.1.196 - Rev: 775
types.h: #define BIT(n) (1<<(n))
-
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); }