Sourcecode Fortschritt
-
Rev. 168:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=168ehci.c Korrekturen??
-
Rev. 169:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=169ehci.c
Ports: (zusätzlich: wait und set reset bit to 0)
for(uint8_t j=1; j<=numPorts; j++) { pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) |= (1<<12)); // power on pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) &= ~(1<<2)); // set bit2 to 0 pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) |= (1<<8)); // set reset bit to 1 sleepMilliSeconds(50); // wait pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) &= ~(1<<8)); // set reset bit to 0 }
-
Erhard Henkes schrieb:
for(uint8_t j=1; j<=numPorts; j++) { pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) |= (1<<12)); // power on pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) &= ~(1<<2)); // set bit2 to 0 pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) |= (1<<8)); // set reset bit to 1 sleepMilliSeconds(50); // wait pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) &= ~(1<<8)); // set reset bit to 0 }
Kleiner Verbesserungsvorschlag um den Code "schöner" zu machen (ungetestet)
for(uint8_t j=1; j<=numPorts; j++) { volatile uint32_t *p = (volatile uint32_t*)(opregs + 0x44 + 4*(j-1)) pOpRegs->PORTSC[j] = (*p |= (1<<12)); // power on pOpRegs->PORTSC[j] = (*p &= ~(1<<2)); // set bit2 to 0 * Schlechter Kommentar. Was macht dieses Bit? * pOpRegs->PORTSC[j] = (*p |= (1<<8)); // set reset bit to 1 sleepMilliSeconds(50); // wait pOpRegs->PORTSC[j] = (*p &= ~(1<<8)); // set reset bit to 0 }
Spart das mehrfache und fehleranfällige Hinschreiben dieses langen Ausdrucks.
Nachtrag: Um 1-Bit Werte lesbarer zu machen, könntest Du folgendes tun und zu den System-Headers hinzufügen...
#define BIT0 (1<<1) #define BIT1 (1<<2) #define BIT2 (1<<3) /* usw */
-
Z schrieb:
Nachtrag: Um 1-Bit Werte lesbarer zu machen, könntest Du folgendes tun und zu den System-Headers hinzufügen...
#define BIT0 (1<<1) #define BIT1 (1<<2) #define BIT2 (1<<3) /* usw */
Bit 0 ist aber (1<<0), wenn ich dich richtig verstehe, und Bit 1 wäre (1<<1) usw..
Erhard Henkes schrieb:
for(uint8_t j=1; j<=numPorts; j++) { pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) |= (1<<12)); // power on pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) &= ~(1<<2)); // set bit2 to 0 pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) |= (1<<8)); // set reset bit to 1 sleepMilliSeconds(50); // wait pOpRegs->PORTSC[j] = (*((volatile uint32_t*)(opregs + 0x44 + 4*(j-1))) &= ~(1<<8)); // set reset bit to 0 }
Sieht übrigens kaputt aus. Ich wage einfach mal zu bezweifeln, dass der erste Rootport nicht genommen werden darf, denn du fängst ja hier mit dem zweiten an, wie es aussieht...
-
Rev. 170:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=170- video.c/os.h und userlib.c/.h: puts nimmt nun const char* statt char* (puts sollte den String nicht verändern und const char* ist besser für C++-Userprogs)
- user/user_test_cpp: Skeleton für C++-Userprogs
- user/user_tools/userlib.hpp: userlib-Header für C++
mfg
Mr. X
-
Rev. 171:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=171- Diverse Änderungen bezüglich const char* statt char*
- u.a. Anpassung der "Deklaration" der Syscalls (nicht sicher, ob richtig (compiliert aber); Wurde jedenfalls in 170 vergessen)
Diese Revision nimmt keine Änderungen am OS vor, es handelt sich eher um "Schönheitskorrekturen"
mfg
Mr. X
-
Rev. 172:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=172ehci.h/.c: Konstanten (define) eingebaut, Port-Nummerierung korrigiert
-
XanClic schrieb:
Z schrieb:
Nachtrag: Um 1-Bit Werte lesbarer zu machen, könntest Du folgendes tun und zu den System-Headers hinzufügen...
#define BIT0 (1<<1) #define BIT1 (1<<2) #define BIT2 (1<<3) /* usw */
Bit 0 ist aber (1<<0), wenn ich dich richtig verstehe, und Bit 1 wäre (1<<1) usw..
Oh Ja, Du hast natürlich recht.
-
Rev. 173:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=173- ehci.c Zwischenschritt (INT-Handler implementiert, Problem: INT aktivieren: Absturz)
-
Rev. 174:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=174- ehci.c Zwischenschritt (Code vereinfacht: Strukturen direkt aufgesetzt. Thx to Tobiking)
Real PC geht
Falls sich dies bewährt, wird der überflüssige Code entfernt.
-
Rev. 175
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=175- Kernel verkleinert (weniger Files in initrd.dat: nur noch "info.txt")
- ehci.c bereinigt
- makefile bei initrd angepasstkernel.bin: 50.624 Bytes
siehe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-260731-and-start-is-68.html (thx to +gjm+)
-
Rev. 176
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=176PortStatus wird bei Änderungen in Zeile 46-48 "Info-Bereich" ausgegeben.
Test auf Real PC i.O., VBox hängt bei mir.
-
Rev. 177
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=177Wie 176, nur notdürftig via Polling (in kernel-schleife den handler aufrufen)
PortStatus wird bei Änderungen in Zeile 46-48 "Info-Bereich" ausgegeben.
Test auf Real PC i.O., VBox läuft.
-
Rev. 178
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=178- math.c: power "überarbeitet"
- keyboard.c: Einsatz von memset
- nasmw.exe/nasm.exe: nasm statt nasmw, zugleich auf 2.08rc10 aktualisiert
- makefiles auf nasm.exe angepasst
- userlib.hpp: Einrückungen korrigiert
http://www.henkessoft.de/OS_Dev/Bilder/rev178.PNG <--- mit Sun VBox (funktioniert aber einfach nicht zuverlässig, geht immer wieder verloren an den Host)
-
Rev. 179
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=179ehci.c: wieder zurück gebaut auf Interrupt-Technik, also kein Poliing mehr in der Kernel-Loop!
Dank VMWare.
-
Rev. 180
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=180ehci.c: DeactivateLegacySupport eingebaut
-
Rev. 181
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=181ehci.c: bei eecp == 0xFF wird die Schleife verlassen
Bei meinem real PC ist z.B. eecp == 0x70 und das nächste Byte dann 0xFF.
-
Rev. 182
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=182- Shell (user_program_c) umgebaut: u.a. jetzt mit Eingabecache
- Überflüßige Variable im makefile für userprogs entfernt
-
Rev. 183:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=183Experimenteller Zwischenschritt bei ehci.c:
Wenn mehr als 2 EHCI Devices da sind, wird nur das erste genomme
-
Rev. 184:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=184ehci.c: Korrektur (eecp und eecp_id)
jetzt kommt bei mir: eecp = 0070h, eecp_id = 0001h
Bei Cuervo und Tobiking gehen nun real PCs endlich!
Hier noch ein work-around für MM-Probleme:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-260731-and-start-is-67.htmlSind mehrere EHCI-Host-Controller vorhanden, kann momentan nur der erste beim PCI-Scan initialisiert werden.
pci.c, line 202-206if(!EHCIflag) { analyzeEHCI(bar); initEHCIHostController(number); }
Sun VirtualBox geht auch nicht! (seit Interrupts, Polling aus USBSTS ging leidlich)
Qemu, Bochs und MS VPC bieten uns momentan kein USB EHCI.