Sourcecode Fortschritt
-
Rev. 231:
CDI-Header implementiert; Anpassungsaufwand notwendig
Bisher nur: in time.c cmos_read ausgetauscht gegen cdi_cmos_read
wrapper implementation: cdi_cmos.c
-
Rev. 232:
- CDI-Ordner angelegt, Header umbenannt und einsortiert
- time.c: CDI-Test auskommentiert
- cmos.h wird nun in time.c includiert statt in time.h
-
Rev. 233:
Mehrfacher testTransfer beim Hochfahren mit eingestecktem USB-Device verhindert durch initEHCIFlag
-
Rev. 234 (versehentlich 235 in ckernel.c):
- os.h: uintptr_t ergänzt
- Zeilenenden der cdi-Header vereinheitlicht
- Source-files für CDI hinzugefügt, nach kernel/cdi verschoben
- makefile angepasst
EDIT: Übrigens nicht nur in ckernel.c... Auch in der Anmerkung beim Commit ists falsch.
-
Rev. 235:
- CDI-Dateien aufgeräumt
-
Versuch die blöde händische Rev.-Angabe automatisch seitens SVN zu ersetzen ist leider misslungen:
Rev. 236-238static void init() 47 { 48 clear_screen(); 49 settextcolor(14,0); 50 char buf[40]; 51 const char* revStr = "$Rev$"; //SVN <--- 3 verschiedene Versuche, nix klappt 52 strcpy(buf,"PrettyOS ["); 53 strcat(buf,revStr); 54 strcat(buf,"]\n"); 55 printformat(buf); 56 //printformat("PrettyOS [Version 0.0.0.235]\n"); 57 gdt_install(); 58 idt_install(); 59 timer_install(); 60 keyboard_install(); 61 syscall_install(); 62 settextcolor(15,0); 63 } 64
-
Rev. 239:
wieder normalVielleicht schafft es doch noch jemand mit diesem :
http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.keywords.html
http://dev.juokaz.com/php/automatic-svn-revision-number-in-source-code
-
Erhard Henkes schrieb:
Vielleicht schafft es doch noch jemand mit diesem :
http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.keywords.html
http://dev.juokaz.com/php/automatic-svn-revision-number-in-source-codeDas mit einzubauen ist kein Problem, allerdings tut es nicht das was du dir vorstellst. Das ist nämlich nur die Revision der Datei in der es steht und nicht die des ganzen Repository. Also solange sich die ckernel.c nicht ändert zählt das nicht hoch. Das steht bei deinem ersten Link auch in dem großen gelben Kasten. Da steht zudem auch das es keine SVN Möglichkeit gibt eine globale Revision einzutragen. Das muss immer extern über ein Programm/Script erledigt werden. Ein commit Hook wäre dafür z.B. ganz passend, aber das lässt Sourceforge glaube ich nicht zu.
-
Rev. 240: kernel.bin: 57.856 Bytes
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=240ehci.c: restart bei Host System Error (klappt endlich bei meinem störrischen PC!)
179 if( pOpRegs->USBSTS & STS_HOST_SYSTEM_ERROR ) 180 { 181 settextcolor(4,0); 182 printformat("\nHost System Error Interrupt"); 183 settextcolor(15,0); 184 pOpRegs->USBCMD &= ~CMD_ASYNCH_ENABLE; 185 pOpRegs->USBSTS |= STS_INTMASK; 186 printformat("\nRestart HC after fatal error"); 187 initEHCIFlag = false; 188 startHostController(); 189 enablePorts(); 190 }
-
Rev. 241:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=241sleep umgangen im restartHC aus EHCI-interrupt-handler
Allerdings klappt das jetzt bei meinem PC nicht mehr richtig mit dem Port Reset. Fazit: wir benötigen ein sleep ohne Interrupt.
-
Revision 242:
- Keyboard-Belegungsheader neu formatiert (Die waren so unübersichtlich)
- keyboard_GER.h: ³ wurde nicht angezeigt -> vorerst durch 0 ersetzt
- keyboard_US.h funktioniert nun (AltGr-Belegung fehlte)
- NASM auf 2.08 aktualisiert (Unterschied zu rc10 nur Versionsnummer)
- fs.h: Zeilenenden vereinheitlicht
-
Revision 243:
- Shift-AltGr-Keycodes freigeschaltet
- keyboard.c überarbeitet -> Wenn kein Key für z.B. Shift-AltGr vorhanden -> "Downgrade" zu AltGr u.s.w.
-
Rev. 244:
ckernel.c und ehci.c: Flags werden in ckernel.c jetzt nicht in sek-Schleife, sondern direkt bearbeitet, aber noch keine brauchbare Lösung für alle Fälle.
-
Rev. 245:
- fat12, floppy, file modular etwas besser getrennt (neu: file.h/.c)
- Speicher für file wird per malloc geholt und anschließend wieder frei gegeben. Dies bietet nun auch die Möglichkeit andere Module als executable elf-Dateien zu laden (mal mit kernel.bin oder boot2.bin Reaktion ausprobieren).
-
Revision 246:
Bugfixes:
- Fehlerhafte Dateibenennung der CDI-Implementation
- Fehler in keyboard_US.h
- Key-Downgradereihenfolge korrigiert
- US-Layout wird verwendet, wenn keines definiert ist. Standard natürlich weiterhin: Deutsch
-
Rev. 247:
ehci.c, ckernel.c und usb2.c: Versuch, den Host System Error durch mehrfachen Restart zu umgehen. Durchlauf etwas beschleunigt. Hoffentlich klappt es nun besser, damit wir mit USB 2.0 und anderen Feinheiten weiter machen können.
-
Rev. 248: ehci.c: Zwischenschritt ( zwei zusätzliche Zeitschleifen )
Bringt aber nix, eher schlechter (Test auf meinem Entw.-PC und bei Tobiking)
-
Rev. 249:
Diese Version wurde mit Basis rev. 240 bei ehci.c wieder aufgebaut, da die letzten Veränderungen keinen wirklichen Vorteil brachten. Nun fährt zumindest mein "störrischer PC" nach einigen Fehlversuchen (Host System Error) in die richtige Spur. Die Details der übertragenen Daten werden nur bei length != 0 angezeigt, um den Bildschirm nicht mit Nullen zu überladen.
Cuervo - unser Cheftester - sieht keine Fehler auf seinem Test-PC. Bei Tobiking läuft es leider noch nicht.
Hier ein Screenshot zum vergleich mit dem eigenen Ergebnis:
http://www.henkessoft.de/OS_Dev/Bilder/rev249.PNG
-
Rev. 250:
- Bessere Hi-Speed-Erkennung (vs. J-State)
- Systemfrequenz erhöht von 100 Hz auf 1000 Hz
-
Rev. 251:
ckernel.c, util.c: Testversion für rdtsc-Messung pro Millisekunde (Ziel: sleep ohne Interrupt)
http://en.wikipedia.org/wiki/Time_Stamp_Counter64-bit register present on all x86 processors since the Pentium. It counts the number of ticks since reset. Instruction RDTSC returns the TSC in EDX:EAX.
Test wird momentan in der Zeitanzeige der kernel-idle-loop durchgeführt, weil wir dort einen Messabstand von jeweils einer Sekunde haben.
while( true ) { //... OldRdtscValue = CurrentRdtscValue; if( CurrentSeconds != CurrentSecondsOld ) { // all values 64 bit CurrentRdtscValue = rdtsc(); RdtscDiffValue = CurrentRdtscValue - OldRdtscValue; uint64_t RdtscKCounts = RdtscDiffValue>>10; // divide by 1024 uint32_t RdtscKCountsHi = RdtscKCounts >> 32; uint32_t RdtscKCountsLo = RdtscKCounts & 0xFFFFFFFF; if(RdtscKCountsHi==0) { printformat("\nRdtsc/ms: %d\n",(RdtscKCountsLo/1000)<<10 ); } else { printformat("\nRdtscKCountsHi: %d RdtscKCountsLo: %d\n", RdtscKCountsHi, RdtscKCountsLo ); } //... } //... }
Funktioniert bestens!
Allerdings benötigen wir da einen Mittelwert aus mehreren Messsungen, wobei man die ersten verwerfen muss, wie man im Test sehr gut sieht. Das könnten wir im EHCI-Modul einsetzen, um unabhängig vom Timer-Interrupt Delays durchführen zu können.Anmerkung:
uint64_t RdtscKCounts = RdtscDiffValue>>10; // divide by 1024
Diese Zeile anstelle direkte Division durch 1000 ist notwendig, weil der x86 hier keine Funktionen zur Verfügung stellt für unsigned long long. Die Korrektur (RdtscKCountsLo/1000)<<10 erfolgt dann auf 32-Bit-Niveau.