Sourcecode Fortschritt
-
Rev. 357:
read_directory: bei nur 3 Zeichen im Namen noch ein '\t' ausgeben
ehci: Restart nach Host System Error per Einschub einer Message in event loop getriggertif (pOpRegs->USBSTS & STS_HOST_SYSTEM_ERROR) { settextcolor(4,0); printf("\nHost System Error"); settextcolor(15,0); pOpRegs->USBCMD &= ~CMD_ASYNCH_ENABLE; // necessary? pOpRegs->USBSTS |= STS_HOST_SYSTEM_ERROR; settextcolor(14,0); printf("\nInit EHCI after fatal error"); settextcolor(15,0); addEvent(&EHCI_INIT); }
Hier mal ein dickes Lob an MrX für die Realisierung der Event Queue und Loop! Echt klasse das Teil.
-
Rev. 358:
ehci.c / usb2.c: Debug-Ausgaben etwas verdichtet, damit das auf einen Bildschirm passt
-
Revision 359:
- current_task weggemacht
- new_task wird nicht direkt aktiviert, sondern in der task-Queue am Ende eingefügt
- Projektfile aufgeräumt
- kleiner Shell-Fehler behoben.
-
Rev. 360:
Damit wir mal mit float arbeiten können:
userlib:
- ftoa anstelle float2string
- atof- hello: rechnet pq-formel
bitte testen, ob alles stimmt.
-
Rev. 361:
waren noch einige Korrekturen notwendig
-
Rev. 362:
- in PQEQ.ELF umbenannt und auch in FloppyImage eingebunden, damit man das überhaupt laden kann
- header für beep aus ckernel.c entferntWer die Ergebnisse des pq-equation-programms überprüfen will, dem empfehle ich folgendes C++-Programm:
#include <iostream> #include <limits> // wait() #include <cmath> // sqrt(...) using namespace std; void wait() { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); } int main() { cout << "Calculation of quadratic equation of type x*x + p*x + q = 0" << endl << endl; double p, q, x1, x2; cout << "Please enter p: "; cin >> p; cout << "Please enter q: "; cin >> q; x1 = -p/2 + sqrt( p*p/4.0 - q ); x2 = -p/2 - sqrt( p*p/4.0 - q ); cout << endl << "x1 = " << x1 << endl << "x2 = " << x2 << endl; wait(); }
-
Rev. 363:
Code Review elf.c
-
Rev. 364:
gdt.c: |0xF bei granularity entfernt
-
Rev. 365:
ckernel.c: bss nullen
siehe: http://www.c-plusplus.net/forum/viewtopic-var-t-is-260731-and-start-is-140.html (aber natürlich nicht statisch, sondern mit Variablen aus dem Linker-Skript)
-
Revision 366:
- os.h auseinandergenommen und andere Header-Umsortierungen (Darum so ein Riesen-Commit)
- _template_header.h entfernt sowie readelf.exe + read_program_elf.bat entfernt
- Doppeltes PQ-EQ entfernt
- atof und ftoa statt float2string in util.c
- math.c -> util.c
-
Rev. 367:
ehci/usb variiert, so dass man bei QTD alle Parameter für einen Request übergeben kann; struct und show-Fkt. für ConfigurationDesriptor
-
rev. 368:
ehci/usb: zwei Abfragen hintereinander: erst device, dann configuration.
Allerdings läuft das auf qemu. Mit real PC gibt es noch Probleme, die mir aber bezüglich der Ursache noch nicht klar sind. Da bitte ich um Mithilfe bei der Ursachenfindung, damit wir uns von EHCI lösen und zu USB2 übergehen können.PrettyOS [Version 0.0.0.368] Console 1: EHCI Ports -------------------------------------------------------------------------------- >>> >>> function: showPORTSC >>> >>> function: checkPortLineStatus >>> Status of USB Ports <<< port 1: 0000100Dh, line: 00h SE0,power on, enabled, EHCI owned >>> Press key to start USB-Test. <<< >>> >>> function: testTransfer Test transfer with device address: 0 Enabling Async Schedule >>> >>> function: showPacket virtAddrBuf0: C0218000h 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 >>> >>> function: testTransfer Test transfer with device address: 0 Enabling Async Schedule >>> >>> function: showPacket virtAddrBuf0: C0220000h 09h 02h 20h 00h 01h 01h 00h C0h 00h >>> >>>function: showConfigurationDesriptor length: 9 descriptor type: 2 total length: 32 number of interfaces: 1 ID of config: 0001h ID of config name 0000h Remote Wakeup: no Self-powered: yes max power (mA): 0 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 >>> Press key to close this console. <<< -------------------------------------------------------------------------------- Thursday, April 15, 2010, 00:37:36 22 s runtime. CPU: 3746 MHz \
-
Erhard Henkes schrieb:
rev. 368:
Erhard Henkes, ich prophezeihe: PrettyOS wird dein Lebenswerk.
-
ich prophezeihe: PrettyOS wird dein Lebenswerk.
Ja, es hat schon etwas Faszinierendes. Die Spannung lässt nicht nach. Gerade das Thema EHCI/USB oder später der Ausbau des Netzwerk-Codes stellen gewisse Anforderungen. Für viele sind aber auch die Themen Memory Management, Programming/Scheduling, Interprocess Communication oder Application Programming Interface reizvoller. Von den User-Programmen, eigenen Compilern usw. mal gar nicht anzufangen.
Das lässt sich aber nur im Team bewältigen.
-
Erhard Henkes schrieb:
ich prophezeihe: PrettyOS wird dein Lebenswerk.
Ja, es hat schon etwas Faszinierendes. Die Spannung lässt nicht nach. Gerade das Thema EHCI/USB oder später der Ausbau des Netzwerk-Codes stellen gewisse Anforderungen. Für viele sind aber auch die Themen Memory Management, Programming/Scheduling, Interprocess Communication oder Application Programming Interface reizvoller. Von den User-Programmen, eigenen Compilern usw. mal gar nicht anzufangen.
Das lässt sich aber nur im Team bewältigen.
Na, dann wünsche ich Dir und deinem Team weiterhin viel Spaß und Erfolg.
-
@Z: wie wäre es, wenn Du bei uns mal mithilfst und auch Freude am Experimentieren/Tüfteln hast? Bei EHCI/USB könnte ich z.Z. einen Mitdenker/Tester gut brauchen.
Rev. 369:
- ehci/usb2: Debug-Prints reduziert, damit man die USB-Ergebisse besser sieht
Testen mit qemu: http://download.tyndur.org/temp/qemu-ehci.tgz
Konsole M (kernel/shell):
Port Change ehci_handler: USB Interrupt ehci_handler: USB Interrupt
Konsole 0:
>>> >>> function: initEHCIHostController >>> >>> function: startHostController (reset HC) DeactivateLegacySupport: eecp = 0000h No valid eecp found. >>> >>> function: enablePorts >>> >>> function: resetPort 1 >>> >>> function: resetPort 2 >>> >>> function: resetPort 3 >>> >>> function: resetPort 4
Konsole 1:
>>> Status of USB Ports <<< port 1: 0000100Dh, line: 00h SE0,power on, enabled, EHCI owned >>> Press key to start USB-Test. <<< USB2: GET_DESCRIPTOR device, dev: 0 endpoint: 0 12h 01h 00h 02h 00h 00h 00h 40h 00h 00h 00h 00h 00h 00h 01h 02h 03h 01h 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 USB2: GET_DESCRIPTOR config, dev: 0 endpoint: 0 09h 02h 20h 00h 01h 01h 00h C0h 00h length: 9 descriptor type: 2 total length: 32 number of interfaces: 1 ID of config: 0001h ID of config name 0000h Remote Wakeup: no Self-powered: yes max power (mA): 0 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
-
Erhard Henkes schrieb:
@Z: wie wäre es, wenn Du bei uns mal mithilfst und auch Freude am Experimentieren/Tüfteln hast?
Danke, aber nein. Ich bin in meiner Freizeit schon voll ausgelastet.
Du schaffst das schon.
-
Revision 370:
- Ergebnisse Codereview video.c
- Nicht-Multithreaded screenshot-Funktionen entfernt
- CDI-Header von Doxygen-Formatierung und für PrettyOS nicht relevanten Inhalten befreit
- bochs.bxrc: PANIC-Meldungen werden ignoriert -> Fehler beim Start fällt weg.
-
Revision 371:
kdebug(...) eingeführt (verbesserte Übersichtlichkeit und zentrale Wartbarkeit).
/// Diagnosis-Output - activates prints to the screen about some details and memory use #define _DIAGNOSIS_ #ifdef _DIAGNOSIS_ #define kdebug(...) \ settextcolor(3,0); \ printf(__VA_ARGS__); \ settextcolor(15,0); #else #define kdebug(...) #endif
Vielen Dank an noob_lolo für diesen konstruktiven und konkreten Ratschlag.
-
Rev. 372:
erweiterte Abfrage via USB2.0: device, config, interface, endpoints
Test mit qemu:
USB2: GET_DESCRIPTOR device, dev: 0 endpoint: 0 12h 01h 00h 02h 00h 00h 00h 40h 00h 00h 00h 00h 00h 00h 01h 02h 03h 01h 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 USB2: GET_DESCRIPTOR config, dev: 0 endpoint: 0 09h 02h 20h 00h 01h 01h 00h C0h 00h 09h 04h 00h 00h 02h 08h 06h 50h 00h 07h 05h 81h 02h 40h 00h 00h 07h 05h 02h 02h 40h 00h 00h length: 9 descriptor type: 2 total length: 32 number of interfaces: 1 ID of config: 0001h ID of config name 0000h remote wakeup: no self-powered: yes max power (mA): 0 length: 9 descriptor type: 4 interface number: 0 alternate Setting: 0 number of endpoints: 2 interface class: 8 interface subclass: 6 interface protocol: 80 interface: 0000h length: 7 descriptor type: 5 endpoint in/out: in endpoint number: 1 attributes: 02h max packet size: 64 interval: 0 length: 7 descriptor type: 5 endpoint in/out: out endpoint number: 2 attributes: 02h max packet size: 64 interval: 0
Erläuterung: descriptor type
1: device
2: configuration
3: string (oben noch nicht genutzt)
4: interface
5: endpointAbfrage ist noch nicht variabel eingerichtet, klappt zur Zeit nur mit einem Interface und zwei Endpoints.
Die Spezifikation ist hier am einfachsten erklärt: http://www.beyondlogic.org/usbnutshell/usb5.htm