Sourcecode Fortschritt
-
Revision 332:
* Verbesserung des Makefiles (MrX hat einen Fehler gemacht, gcc wurde 2x gesetzt und somit das Auswahlverfahren umgangen)
Ansonsten war das Makefile wirklich gut^^
-
Rev. 333:
kleine Änderungen
-
Rev. 334:
task.c: address of exit at top of stack in create_thread (avoids exit in body of functions)
-
Revision 335:
- "typedef-structs" in os.h eingesetzt
- start.asm von Altlasten befreit
- Screenshot nun auf Knopfdruck (Ctrl+s)
- Pointer-Typ-Änderungen (BT 2982518)
-
Revision 336:
- ehci.c: Port-Info (Infobereich) korrigiert
- keyboard.c: Ausgabe von 's' unterdrückt bei Strg+s (screenshot)
- file.c: Textausgabe (Info) beim Abspeichern verbessertSimulation mit Qemu:
<Floppy Disc Directory> PRETTYOS 0 byte (vol) 1st sector: 31 BOOT2.BIN 957 byte (arc) 1st sector: 33 KERNEL.BIN 79864 byte (arc) 1st sector: 35 HELLO.ELF 7791 byte (arc) 1st sector: 191 TIME4.TXT 4100 byte (arc) 1st sector: 207
TIME4.TXT:
PrettyOS [Version 0.0.0.336] Shell -------------------------------------------------------------------------------- Mouse sent unknown package! Memory size: 128 MiB / 134 MB (134217728 Bytes) #0 0:0.0 dev:1237h vend:8086h IRQ:0 #1 0:1.0 dev:7000h vend:8086h IRQ:0 #2 0:1.1 dev:7010h vend:8086h IRQ:0 #3 0:1.2 dev:24CDh vend:8086h IRQ:11 USB EHCI F0000000h MMIO sz:4096 >>> >>> function: analyzeEHCI HCIVERSION: 0100h HCSPARAMS: 00000004h Ports: 4 HCCPARAMS: 00000080h No ext. capabil. OpRegs Address: F0000020h #4 0:1.3 dev:7113h vend:8086h IRQ:9 #5 0:2.0 dev:00B8h vend:1013h IRQ:0 #6 0:31.0 dev:8139h vend:10ECh IRQ:11 BaseAddressRTL8139_MMIO mapped to virtual address FFF00000h 1.44 MB FDD device 0 <RAM Disk at C0007000h DIR> dev 35 info 12918 shell >>> >>> function: initEHCIHostController >>> >>> function: startHostController reset HC >>> >>> function: DeactivateLegacySupport DeactivateLegacySupport: eecp = 0000h No valid eecp found. HCHalted bit set to 0 (OK), ports can be enabled now. >>> >>> function: enablePorts >>> >>> function: resetPort 1 $> -------------------------------------------------------------------------------- _______ _______ <>_<> (_______) |_|_|_|_|_|_|| [] [] | .---|'"`|---. `-oo---oo-'`-oo-----oo-'`-o---o-'`o"O-OO-OO-O"o' -------------------------------------------------------------------------------- Friday, April 09, 2010, ........ 3 s runtime. CPU: 7289 MHz /
TODO:
@Cuervo: Dieses "Mouse sent unknown package!" könnte man vielleicht noch untersuchen oder unterdrücken. Sieht unschön aus.
-
Es ist mir nicht gelungen, das screenshot in keyboard.c auf thread umzusetzen, weder mit noch ohne Konsole. Das Problem liegt vermutlich im Speicherbereich (#PF, manchmal auch #GPF oder Reboot je nach Versuchen).
Denkbare Möglichkeiten:
task.c: Konsole aufräumen (übrigens auch, wenn gar keine da ist, z.B. bei create_thread(...) ?? )
file.c: Speicher-Handling beim File schreiben
console.c: screenshot hat einen Parameter
-
Wir müssen "Mouse sent unknown package" nicht anzeigen, aber es tritt (theoretisch) nur auf, wenn die Maus wirklich einen Fehler macht.
Das ganze funktioniert in etwa so:* Maus wird initialisiert
* Mausverhalten wird eingestellt
* Wenn möglich wird das Mausrad dazugeschaltet
* IRQ 12 Handler wird installiert* Maus sendet 3 oder 4 Pakete auf einmal, jedes allerdings mit einem eigenen Interrupt
* Wenn der Zähler noch bei 0 ist wird überprüft, ob das erste empfangene Paket wirklich das erste ist.
(anscheinend fangen nicht alle Mäuse bei Paket 1 an. Das war auch der Fehler, den ich zuerst nicht gefunden habe)
* Wenn das nicht das 1. Paket ist, wird diese Fehlermeldung angezeigt, wenn doch, wird der Zähler erhöht und auf das nächste Paket gewartet.d.h. Dieser Fehler tritt nur 1x am Anfang auf. Wenn er ständig auftritt (also nach jeder Maus-Statusausgabe), dann sendet die Maus 4 statt 3 oder 3 statt 4 Pakete, obwohl meine Initialisierung das ausschließen sollte. Aber bei Mäusen kann man nie wissen. Ausserdem tritt dieser 'Mouse sent unknown package' Fehler bei mir nur in Emulatoren auf, auf realen PCs hatte ich ihn nie...
-
Revision 337:
- Bugfix in task.c/.h: Console nur gelöscht, wenn sie dem Thread/Task gehört.
-
Rev. 338:
Ctrl + t ==> Screenshot_easy (void, ohne Parameter) als Thread (macht noch Probleme von TTT aus, von Konsole M aus geht es gut!
Ctrl + s ==> normale Screenshot-Funktion
-
Revision 339:
- Ordnerstruktur Userprogramme umgebaut
- makefiles userprogramme aktualisiert
- Weitere Userprogs mitgeliefert.
- makefile bindet diese Userprogs ins FloppyImage ein.
- screenshot-Fkts. jetzt in video.c
- Hello-Programm nicht mehr TTT
-
ich finde Cuervo's wunderbarere Bootscreen sollte für die Nachwelt fest gehalten werden (natürlich Strg + t während des Bootens):
PrettyOS [Version 0.0.0.339] Console 0: Booting ... -------------------------------------------------------------------------------- ###### ## ## ##### #### ######## ### ### ####### ###### ######## ### ### ######### ####### ### ### ## ## #### ############## ## ### #### ### ## ### ### ###### ###################### ### ### ### #### #### ## ##### ####################### ## ## ### ##### ######## #### ######## ### ### #### ### ### ### ###### ####### #### ######## ### ### #### ### ### ## ##### ###### ### ###### ### #### ###### ### ### ### ### ### ### #### #### ###### #### ## ## ### #### ### ######## ########### ##### ########## ######## ### ### ######## ##### ##### #### ######## ####### ## ## ###### ### ### ### ##### ##### ## ## ## Copyright (c) 2010 The PrettyOS Team This bootscreen has been created by
... und der USB-transfer ist auch ein "Foto" wert:
PrettyOS [Version 0.0.0.339] Shell -------------------------------------------------------------------------------- Enabling Async Schedule >>> >>> function: showPacket virtAddrBuf0: C0006000h 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 setup packet: >>> >>> function: showPacket virtAddrBuf0: C020B000h 80h 06h 00h 01h 00h 00h 12h 00h setup: >>> >>> function: showStatusbyteQTD QTD: C020A000h Statusbyte: 00h in: >>> >>> function: showStatusbyteQTD QTD: C0005000h Statusbyte: 00h 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 ownedScreenshot Test $> -------------------------------------------------------------------------------- Port: 4, device not attached -------------------------------------------------------------------------------- Friday, April 09, 2010, 20:42:18 13 s runtime. CPU: 7571 MHz \
Das gelingt übrigens nur mit:
create_thread((task_t*)pODA->curTask, &screenshot_easy);
also ohne eigene Konsole (ckernel.c, line 246)
Bei den User-Programmen, jetzt übrigens deutlich zahlreicher im Floppy-Image (thx to MrX), kommt es mit Strg+t noch zum reboot, kA warum, mit Strg+s geht es.
-
Rev. 340:
video.c:
- Thread-Problem bei screenshot gelöst durch verlagern von videoscreen[4000+98] vom stack in den globalen speicher!
- das newline bei Zeile 50 nicht mehr angefügt:static void catchVidmem() { int32_t NewLine = 0; for (uint16_t i=0; i<4000;i++) { uint16_t j=i+2*NewLine; videoscreen[j] = *(uint8_t*)(0xB8000 + 2*i); // only signs, no attributes if ( (i%80 == 79) && (i!=3999) ) { videoscreen[j+1]= 0xD; // CR videoscreen[j+2]= 0xA; // LF NewLine++; } } }
TODO: Kernel-Stack vergörßern
-
Revision 341:
Ergebnisse des CodeReviews: fpu.c, ckernel.c, paging.c, kheap.c
-
Die Bildschirmfotos sind plötzlich unleserlich.
-
Rev. 342:
now screenshot works correct again (ctrl+s: process, ctrl+t: thread)
-
Rev. 343:
- pci.c: EHCI Basisadresse von ID-mapping auf freies mapping umgestellt
- ckernel.c: create_cthread((task_t*)pODA->curTask, &initEHCIHostController, "EHCI");
- os.h: uint32_t pciEHCInumber; // pci device number in ODA
-
Rev. 344:
build.bat angepasst, dass auch bei floppy_build.bat alle User-Programme auf der Floppy ankommen.
-
Rev. 345:
EHCI-Ablauf im EHCI-Interrupt beschleunigt: bisher bestens bewährte Methode mitttels Flag setzen und in kernel idle loop einen Thread starten
Ausgabe nun in eigenem "Fenster":
PrettyOS [Version 0.0.0.345] Console 0: EHCI Ports -------------------------------------------------------------------------------- >>> >>> function: createQTD >>> >>> function: createQTD >>> >>> function: createQH >>> >>> function: createQH Enabling Async Schedule >>> >>> function: showPacket virtAddrBuf0: C0213000h 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 Port: 4, device not attached setup packet: >>> >>> function: showPacket virtAddrBuf0: C0215000h 80h 06h 00h 01h 00h 00h 12h 00h setup: >>> >>> function: showStatusbyteQTD QTD: C0214000h Statusbyte: 00h in: >>> >>> function: showStatusbyteQTD QTD: C0212000h Statusbyte: 00h 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 -------------------------------------------------------------------------------- Saturday, April 10, 2010, 20:27:33 9 s runtime. CPU: 7345 MHz -
-
Rev. 346:
EHCI Start und EHCI Port Change jetzt in eigenen Konsolen, die man mit Tastendruck schließen kann, so dass man diese in Ruhe beschauen oder "fotografieren" (strg+s oder strg+t) kann.
Die Vorgehensweise an einem Beispiel, damit wir das gemeinsam diskutieren/optimieren können:
in ckernel.c:
am anfang:portCheckFlag = false; // EHCI port change
später in der idle loop:
if ((portCheckFlag == true) && (CurrentSeconds >= 3) && pODA->pciEHCInumber) { portCheckFlag = false; create_cthread((task_t*)pODA->curTask, &portCheck, "EHCI Ports"); }
in ehci.c:
der EHCI-Interrupthandler:void ehci_handler(registers_t* r) { //... if (pOpRegs->USBSTS & STS_PORT_CHANGE) { settextcolor(9,0); printf("Port Change"); settextcolor(15,0); pOpRegs->USBSTS |= STS_PORT_CHANGE; if (enabledPortFlag) { portCheckFlag = true; } }
void portCheck() { showPORTSC(); checkPortLineStatus(); settextcolor(13,0); printf("\n>>> Press key to close this console. <<<"); settextcolor(15,0); while(!checkKQ_and_return_char()); }
-
Nach hartem "Kampf" im IRC nun Revision 347:
- Ergebnisse Code Review pci.c
- syscall zur Begrenzung des Scrollbereichs.
- Math-Fkts. von Iteem (Danke dafür!) eingebaut.