Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Projekt: OS-Development  ::  Sourcecode Fortschritt     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 22:52:17 22.11.2009   Titel:   Sourcecode Fortschritt            Zitieren

Ich würde diesen Thread gerne nutzen, um die Fortschritte festzuhalten.

Prä-Geschehenes:
Badestrand hat das Paging-Modul und Heap überarbeitet (*klick*)
Erhard hat Uhrzeit und Datum (von Cuervo und Erhard) eingebaut (*klick*)


Zuletzt bearbeitet von Erhard Henkes am 14:15:03 28.11.2009, insgesamt 1-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 22:56:31 22.11.2009   Titel:              Zitieren

Version 26: Hauptsächlich ELF-Loader, sonst einige kleine Sachen:

- Simpler (!) ELF-Loader setzt bei User-Programm Einstiegsadresse bei 0x01400000 (20 MB) voraus, lädt den Source dahin und erstellt den Task.
- Die Build.bat-Datei angepasst, dass sie auch den stage1- und stage2- bootloader miterstellt.
- Interrupt-Krams zusammengefasst, bitte um Rückmeldung. Ich wollte es vor allem übersichtlicher machen, sind auch zwei Dateien rausgeflogen.
- Key-Queue aus der ODA-Struktur nach keyboard.c verlegt
- Ausgabe der Memory Map in paging.c, wenn der Diagnose-Schalter an ist
- Zur Memory Map wird nicht mehr die Anzahl der Einträge gespeichert, die Liste endet mit einem Eintrag der Größe 0.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:27:29 23.11.2009   Titel:              Zitieren

Version 27: Kleine Korrektur in flpydsk.c
with real floppy: qemu runs 'fdir' correctly, bochs runs fdir now until return values (rev 17 works, but I do not know why), problems on real hardware still ongoing

Version 28:
changes in cmos.c for weekday (there have been problems at some hardware)
switch_context (syscall) uses 0x7E as interrupt no.
task switch now works with 0x20 or 0x7E

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:14:53 23.11.2009, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:30:06 24.11.2009   Titel:              Zitieren

Version 29:
Floppy disk driver a little bit improved (qemu, virtualBox runs smoothly)

But still problems with bochs, virtualPC and real hardware.
On real hardware there are time critical steps (now transfer repeated until size=2 (512K sectors size) is returned), and there is a read-sector stop at track limit ( stops at C H S 0 1 18 (LBA 35), does not go to 1 0 2 (LBA 37) ).

Version 30:
Little bug fixes
rotating asterisk got green color

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:48:46 24.11.2009, insgesamt 2-mal bearbeitet
SchnippeSchnapp
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.10.2009
Beiträge: 23
Beitrag SchnippeSchnapp Mitglied 19:30:29 25.11.2009   Titel:              Zitieren

Verzeih die kurze Frage hier - aber weswegen denn auf einmal Englisch in nem eher deutschen Forum wo doch auch all die anderen Diskussionen auf Deutsch geführt werden?

Is das ned eher Sinnfrei? ;)

(Und wenn die Frage hier ner reinpasst büdde abspalten oder so :) )
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:07:08 25.11.2009   Titel:              Zitieren

Sorry, bei mir Gewohnheit. Merke das manchmal garnicht mehr. Hier ist übrigens Englisch und Deutsch akzeptiert.

http://www.c-plusplus.de/forum/viewtopic-var-t-is-252232.html
Zitat:
Sprachen in diesem Subforum: Deutsch und Englisch
Languages at this sub-forum: German and English

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:32:32 28.11.2009, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:09:02 26.11.2009   Titel:              Zitieren

Version 31:
Floppy-Treiber etwas optimiert,
Problem in timer.c behoben (war Ursache für das fdir Problem)

Nun läuft fdir auf Bochs, VirtualBox, qemu und 2 von 3 PCs (also noch Verbesserungsbedarf); VirtualPC geht auch noch nicht

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:28:34 27.11.2009, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:28:09 27.11.2009   Titel:              Zitieren

Version 32:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=32

- getCurrentSeconds() eingebaut: liefert Zeit in Sekunden seit PrettyOS-Start (allerdings ticks-abhängig, funktioniert nicht zwischen cli/sti)
- Statusleiste (status bar) implementiert; Scrolling, Cursor- und Tasksteuerung angepasst
- Floppy-Treiber beim Warten auf Interrupt und auf Read/Write-Transfer um einen Timeout (5 sec) erweitert, damit Kernel hier nicht mehr dauerhaft bei ausbleibendem Interrupt o.ä. hängen bleibt (auf 2 von 3 PCs wird das root directory mit fdir gelesen, ansonsten geht es nach 5 sec weiter im Code mit Fehlermeldung "timeout"). VirtualPC bleibt jetzt auch nicht mehr hängen, funktioniert aber noch nicht richtig bezüglich root dir Ausgabe.
Auf VMWare läuft PrettyOS auch (Aussage Cuervo).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:18:33 28.11.2009, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:24:42 28.11.2009   Titel:              Zitieren

Version 33:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=33

Auf mancher Hardware klappt das Auslesen von Floppy-Inhalten nur jedes zweite Mal (Grund noch nicht klar). Work-around:
- User-Funktion floppy_dir() und Kernel-Funktion flpydsk_read_directory() erhielten einen Rückgabewert. fdir liest nun noch ein zweites Mal, wenn der Rückgabewert keine Inhalte anzeigt.
- DMA-Puffer wird vor dem Auslesen der root dir gelöscht, damit man die echten gelesenen Inhalte und keine alten Daten sieht.
- Timeout wurde von 5 auf 2 Sekunden verkürzt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:28:10 28.11.2009, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 05:26:10 29.11.2009   Titel:              Zitieren

Version 34:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=34

- time.h/time.c ergänzt, Datum/Zeit aus cmos.h/c in dieses Modul überführt
- Statusleiste: Datum und Zeit, zusätzlich vergangene Sekunden seit dem Start
- aktuelles FloppyImage.bin
- einiges wurde ausgeblendet (Ausdruck nach 'Diagnose' verlagert)

FloppyImage (im Verzeichnis 'kernel') wurde mitgeliefert, damit man die neuesten Features sofort ansehen kann, z.B. mit Qemu (batch-Datei für Windows):
Code:
qemu-system-x86_64.exe -usbdevice mouse -fda FloppyImage.bin -boot a -localtime
Code:
qemu-system-x86_64.exe -usbdevice mouse -fda FloppyImage.bin -boot a -localtime
Code:
qemu-system-x86_64.exe -usbdevice mouse -fda FloppyImage.bin -boot a -localtime

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 05:53:55 29.11.2009, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:02:36 29.11.2009   Titel:              Zitieren

Version 35:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=35

- NULL als (void*) 0 redefiniert, wie in C üblich (vorher nur 0)
- NULL in paging.c ausgetauscht gegen 0 (wegen error: cast pointer to integer)
- itoa und reverse von K&R (siehe wikipedia), strcpy von wikipedia
- Rotierender ASCII Stern wurde umgefärbt und nach unten rechts in Statusleiste verschoben
- 2-Klausel-BSD-Lizenz und Disclaimer in os.h und ckernel.c für weitere Diskussionen erstmalig eingefügt, aber ganz unten wie abgesprochen (einmalig!)

Offenes Problem:
In char* getCurrentDateAndTime(char* pStr) muss wie folgt
C/C++ Code:
int i; for(i=0;i<80;++i){pStr[i] = 0;}
C/C++ Code:
int i; for(i=0;i<80;++i){pStr[i] = 0;}
C/C++ Code:
int i; for(i=0;i<80;++i){pStr[i] = 0;}

der als Zeiger übergebene DateAndTime-String gelöscht werden. Ansonsten geht die Ausgabe schief und das OS stürzt wegen buffer overflow ab. Der Fehler liegt nicht in strcpy oder itoa, soweit ich das bisher sehe, also entweder in der Funktion selbst oder in strcat.

Der work-around funktioniert aber gut.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:05:16 29.11.2009, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:41:07 29.11.2009   Titel:              Zitieren

Version 36:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=36

- Kleiner Bug beim Auslesen von Root Dir behoben (Punkt zwischen Name und Extension wurde immer beim ersten Mal nicht gesetzt, jetzt dann, wenn Eintrag nicht Volume Label ist)

Lob an unseren Chef-Tester Cuervo, dem aufgefallen ist, dass da BOOT2SYS steht anstelle BOOT2.SYS, wenn das Label leer war

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/PrettyOS_rev36.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:27:21 30.11.2009, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:30:12 29.11.2009   Titel:              Zitieren

Version 37:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=37

- Fehlerhaftes strcat ausgetauscht gegen Variante aus wikipedia, die strcpy und strlen einsetzt. Nun kann die for-Schleife am Anfang von getCurrentDateAndTime entfallen, die den ganzen String auf 0 setzte.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:31:58 30.11.2009   Titel:              Zitieren

Version 38:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=38

Heute ist mal wieder Spaß angesagt:
- Modul gags.h/c mit fahrendem Zug (aus wikipedia) <--- unbedingt ansehen!

Dass dieses Modul nichts in einem "bare bone" Kernel zu suchen hat, ist mir selbstverständlich klar! Das war nur ein Test für das Feature Laufband. Ich habe eine einfache Idee - ohne großen API-Aufwand - gesucht für ein Programm, das man von der Floppy Disk laden und im User-Space laufen lassen kann. Das kam dabei heraus. ;)

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/FahrenderZug.PNG

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "os.h"
#include
"gags.h"

// Zug als Beispiel übernommen aus
// http://de.wikipedia.org/wiki/ASCII-Art#Allgemeine_Beispiele
// TODO: eigene ASCII-Art erzeugen


char* line1 = "  _______                _______      <>_<>                                     "    ;
char* line2 = " (_______) |_|_|_|_|_|_|| [] [] | .---|'\"`|---.                                 "   ;
char* line3 = "`-oo---oo-'`-oo-----oo-'`-o---o-'`o\"O-OO-OO-O\"o'                                "  ;

void showTrain(int8_t val)
{
    int i;
    char temp1,temp2,temp3;
    switch(val)
    {
        case 1:
            temp1 = line1[79];
            temp2 = line2[79];
            temp3 = line3[79];

            for(i=79;i>0;--i)
            {
                line1[i] = line1[i-1];
                line2[i] = line2[i-1];
                line3[i] = line3[i-1];
            }
            line1[0] = temp1;
            line2[0] = temp2;
            line3[0] = temp3;
            k_printf(line1,46,0xE);
            k_printf(line2,47,0xE);
            k_printf(line3,48,0xE);
        break;

        default:
        break;
    }
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "os.h"
#include
"gags.h"

// Zug als Beispiel übernommen aus
// http://de.wikipedia.org/wiki/ASCII-Art#Allgemeine_Beispiele
// TODO: eigene ASCII-Art erzeugen


char* line1 = " _______ _______ <>_<> " ;
char* line2 = " (_______) |_|_|_|_|_|_|| [] [] | .---|'\"`|---. " ;
char* line3 = "`-oo---oo-'`-oo-----oo-'`-o---o-'`o\"O-OO-OO-O\"o' " ;

void showTrain(int8_t val)
{
int i;
char temp1,temp2,temp3;
switch(val)
{
case 1:
temp1 = line1[79];
temp2 = line2[79];
temp3 = line3[79];

for(i=79;i>0;--i)
{
line1[i] = line1[i-1];
line2[i] = line2[i-1];
line3[i] = line3[i-1];
}
line1[0] = temp1;
line2[0] = temp2;
line3[0] = temp3;
k_printf(line1,46,0xE);
k_printf(line2,47,0xE);
k_printf(line3,48,0xE);
break;

default:
break;
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "os.h"
#include
"gags.h"

// Zug als Beispiel übernommen aus
// http://de.wikipedia.org/wiki/ASCII-Art#Allgemeine_Beispiele
// TODO: eigene ASCII-Art erzeugen


char* line1 = "  _______                _______      <>_<>                                     "    ;
char* line2 = " (_______) |_|_|_|_|_|_|| [] [] | .---|'\"`|---.                                 "   ;
char* line3 = "`-oo---oo-'`-oo-----oo-'`-o---o-'`o\"O-OO-OO-O\"o'                                "  ;

void showTrain(int8_t val)
{
    int i;
    char temp1,temp2,temp3;
    switch(val)
    {
        case 1:
            temp1 = line1[79];
            temp2 = line2[79];
            temp3 = line3[79];

            for(i=79;i>0;--i)
            {
                line1[i] = line1[i-1];
                line2[i] = line2[i-1];
                line3[i] = line3[i-1];
            }
            line1[0] = temp1;
            line2[0] = temp2;
            line3[0] = temp3;
            k_printf(line1,46,0xE);
            k_printf(line2,47,0xE);
            k_printf(line3,48,0xE);
        break;

        default:
        break;
    }
}


-----------------------------------------------

Version 39:

http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=39

- Laufband ("fahrender Zug") im Kernel aus Effizienzgründen entfernt (auskommentiert) :xmas1:
C/C++ Code:
// showTrain(1); // TODO: transfer to user space as elf exec format; k_printf as syscall
C/C++ Code:
// showTrain(1); // TODO: transfer to user space as elf exec format; k_printf as syscall
C/C++ Code:
// showTrain(1); // TODO: transfer to user space as elf exec format; k_printf as syscall


-----------------------------------------------

Version 40:

http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=40

- gags.h/c im Kernel entfernt
- syscalls ergänzt
- showInfo(val) testweise im User-Bereich eingebaut; Laufband-Funktion noch nicht vorhanden (TODO: separate Task)
- makefile korrigiert im User-Bereich

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:31:55 06.12.2009, insgesamt 5-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 16:54:14 12.12.2009   Titel:              Zitieren

Der Zug ist mega cool!

Version 41: Unterstriche in den Ordnernamen und das Präfix "k_" in Funktionsnamen entfernt.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:04:01 13.12.2009   Titel:              Zitieren

Version 42:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=42

- getCurrentSeconds() in userlib.h/c nachgerüstet (program.c wird jetzt kompiliert) <--- Dank an Cuervo für das Auffinden dieses Fehlers
- gags.h/c im Kernel gelöscht (Funktion ist in program.c)

Zitat:
Der Zug ist mega cool!
Thanks! :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:18:45 13.12.2009, insgesamt 1-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 17:43:38 13.12.2009   Titel:              Zitieren

Version 43:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=43

- In start.asm aus user/user_program_c das Ausnullen der BSS entfernt, ist afaik sowieso schon auf 0 und ergab bei mir wegen Integer-Underflow in ecx 'nen fiesen Fehler.

- Noch zwei oder drei Funktionen mit "k_"-Präfix gefunden und korrigiert.

- kernel/gdt.inc gelöscht, da anscheinend ungenutzt (dann auch stage2_bootloader/gdt2.inc wieder in gdt.inc umbenannt)

- mingw32-make.exe, nasmw.exe, CreateFloppyImage.exe, BootDisk2BootStick.exe, dd.exe und bochs.bxrc in Ordner "tools"

- Das Erstellen des Images, Entfernen aller .o-Dateien jetzt in globalem makefile

- Aufrufen von Bochs, Qemu oder das Bauen der Diskette in Batch-File. Die Batch-Datei kann "einfach so" aufgerufen werden, dann kompiliert alles. Wird als Parameter "bochs" übergeben, wird das Image in Bochs ausgeführt. Wird (evtl zusätzlich) "disc" übergeben, wird alles auf die Diskette geschrieben. Für Qemu und anderes können wir auch noch was basteln. Und das ganze noch als Shellskript für die Linuxer schreiben, ist bisher nur als Stub vorhanden.

TODO:
Der Stack der User-Prozesse muss vom Kernel gesetzt werden, jeder braucht auch seinen eigenen Stack. In unserem User-Programm zumindest wird der Stack händisch auf 0x60000 gesetzt. Erhard, du kennst dich in dem Tasking-Modul doch aus, magst du mal probieren, jedem Prozess seinen eigenen Stack zu geben? Irgendwo unter 0xC0000000 oder so.. :)

@Erhard: Wird "quickformat_Floppy_A.bat" noch gebraucht?


Zuletzt bearbeitet von Badestrand am 17:44:35 13.12.2009, insgesamt 1-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 17:58:39 13.12.2009   Titel:              Zitieren

Version 44 & 45: Minimale Änderungen. U.a. die Linux-Version von CreateFloppyImage hinzugefügt. Ging aber nicht so einfach, weil einmal ein Ordner mit demselben Namen existiert hatte, schien SVN zu stören. Egal, es heißt jetzt CreateFloppyImage2.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:52:57 13.12.2009   Titel:              Zitieren

Version 45 baut so nicht auf:

Zitat:

G:\OSDev\PrettyOS\trunk\Source>tools\mingw32-make OS=WINDOWS
nasmw -f bin stage1_bootloader/boot.asm -Istage1_bootloader/ -o stage1_bootloader/boot.bin
nasmw -f bin stage2_bootloader/boot2.asm -Istage2_bootloader/ -o stage1_bootloader/boot2.bin
rm *.o -f
i586-elf-gcc user/user_program_c/*.c -c -Iuser/user_program_c -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin
i586-elf-ld *.o -T user/user_program_c/user.ld -Map user/user_program_c/kernel.map -nostdinc -o user/user_program_c/program.elf
c:\crosstools\bin\i586-elf-ld.exe: warning: cannot find entry symbol _start; defaulting to 01400000
rm *.o -f
tools/make_initrd user/init_rd_img/test1.txt file1 user/init_rd_img/test2.txt file2 user/init_rd_img/test3.txt file3 user/user_program_c/program.elf shell
writing file user/init_rd_img/test1.txt->file1 at 0x1304
writing file user/init_rd_img/test2.txt->file2 at 0x1327
writing file user/init_rd_img/test3.txt->file3 at 0x134a
writing file user/user_program_c/program.elf->shell at 0x1910
mv initrd.dat kernel/initrd.dat
rm *.o -f
i586-elf-gcc kernel/*.c -c -Ikernel/include -std=c99 -march=i386 -mtune=i386 -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude
nasmw -O32 -f elf kernel/data.asm -Ikernel/ -o data.o
nasmw -O32 -f elf kernel/flush.asm -Ikernel/ -o flush.o
nasmw -O32 -f elf kernel/interrupts.asm -Ikernel/ -o interrupts.o
nasmw -O32 -f elf kernel/kernel.asm -Ikernel/ -o kernel.o
nasmw -O32 -f elf kernel/process.asm -Ikernel/ -o process.o
i586-elf-ld *.o -T kernel/kernel.ld -Map kernel/kernel.map -nostdinc -o kernel/kernel.bin
rm *.o -f
tools/CreateFloppyImage2 PrettyOS FloppyImage.bin stage1_bootloader/boot.bin stage2_bootloader/boot2.bin kernel/kernel.bin
Cannot open the file 'stage2_bootloader/boot2.bin'
mingw32-make: *** [ckernel] Error -1



Wenn ich build.bat disc in der Konsole eingebe, wird boot2.sys nicht kopiert.

boot2.bin landet in stage1_bootloader :xmas2:

---------------------------------------------------------

Notwendige Korrektur:

makefile, , Zeile 26/27:
Code:
boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc)
    $(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE2DIR)/boot2.bin
Code:
boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc)
$(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE2DIR)/boot2.bin
Code:
boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc)
    $(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE2DIR)/boot2.bin


boot.asm, Zeile 264:
Assembler Code:
ImageName      db "BOOT2   BIN'
Assembler Code:
ImageName db "BOOT2 BIN'
Assembler Code:
ImageName      db "BOOT2   BIN'


boot.asm, Zeile 268:
Assembler Code:
msgFailure     db 0x0D, 0x0A, "BOOT2.BIN MISSING', 0x0D, 0x0A, 0
Assembler Code:
msgFailure db 0x0D, 0x0A, "BOOT2.BIN MISSING', 0x0D, 0x0A, 0
Assembler Code:
msgFailure     db 0x0D, 0x0A, "BOOT2.BIN MISSING', 0x0D, 0x0A, 0


boot2.asm, Zeile 26:
Assembler Code:
msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN', 0x0D, 0x0A, 0x0A, 0
Assembler Code:
msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN', 0x0D, 0x0A, 0x0A, 0
Assembler Code:
msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN', 0x0D, 0x0A, 0x0A, 0


Dann startet aber der Kernel immer noch nicht! :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:54:57 13.12.2009, insgesamt 9-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:03:34 13.12.2009   Titel:              Zitieren

Version 46:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=46

Die neuen Bezeichnungen boot2.bin und kernel.bin wurden überall eingebaut und der Fehler im Makefile behoben.

Der Kernel wird aber noch nicht gestartet! :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:45:26 13.12.2009   Titel:              Zitieren

Version 47:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=47

Nun überall Großschrift in den asm für die Dateinamen (BL1, BL2)
Alles auf BIN gesetzt (nicht mehr SYS)
Fehler im makefile berichtigt: start.asm (user) wurde nicht assembliert

Nun gibt es einen ASSERTION Fehler:
ASSERTION FAILED((const void*)(header->entry) == USERCODE_VADDR) at kernel/elf.c
:153OPERATING SYSTEM HALTED

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:55:23 13.12.2009, insgesamt 1-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 21:18:42 13.12.2009   Titel:              Zitieren

Sorry für die Verwirrung! Bin auch gerade online gegangen weil ich die Fehler bemerkt hatte, beim Übertragen auf den INet-Rechner ist wohl was schief gelaufen.

Die meisten Sachen hast du ja erfolgreich behoben, die start.asm aus dem User-Prozess muss noch mitkompiliert werden (ist irgendwie aus dem Makefile rausgeflutscht) und ein assert muss aus elf.c raus:
ASSERT( (const void*)(header->entry) == USERCODE_VADDR );
Das User-Programm startet nämlich nicht bei 0x01400000, sondern 0x200 Bytes später. Warum auch immer. Funktioniert aber trotzdem.
=> Version 48
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:25:20 13.12.2009   Titel:              Zitieren

Folgendes geht bei mir lokal:

- ASSERTION in Zeile 153 auskommentiert, damit die shell startet (Grund für diese Maßnahme momentan unklar)
- readelf und batch-Datei in User
- floppy_build.bat für direktes Starten des Build-Prozesses im Explorers

Momentan kann ich nicht committen wegen Konflikt

Super! Badestrand und ich haben das gleiche gemacht. Ich schieb mal meine Luxusklasse-Ausführung für faule Windows-Anwender hinterher:

Version 49
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=49

In bochs bevorzuge ich übrigens
Zitat:
floppya: 1_44=a:, status=inserted

Vielleicht sollte man auf Dauer zwei verschiedene versionen anbieten.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:23:55 14.12.2009, insgesamt 7-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:24:19 14.12.2009   Titel:              Zitieren

Version 50:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=50

Nun ist BOOT2.BIN und KERNEL.BIN im makefile groß geschrieben, damit es auch unter Linux problemlos läuft. :)

elf.c:
Zeile 129: ASSERT( header->phnum == 1 );
Zeile 152: ASSERT( (const void*)(ph->vaddr) == USERCODE_VADDR );
müssen evtl. unter Linux noch auskommentiert werden.

In Windows klappt das mit dem Cross-Compiler auch mit den ASSERTs.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:09:56 23.12.2009   Titel:              Zitieren

Version 51: (badestrand)
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=51
- Run the build.bat file with qemufloppy or qemuimage as parameter to start qemu.

Version 52: (Erhard Henkes)
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=52
- Systemfrequenz auf 1000 Hz erhöht
- getCurrentMilliseconds() ergänzt (syscall)
- "Zug" bewegt sich alle 20 Millisekunden flüssig nach vorne

Es war mir ein Bedürfnis den "Zug" (Beispielanwendung für das dreizeilige Laufband) zu :xmas1: Weihnachten :xmas2: betriebsbereit zu haben. Er läuft im User-Bereich (z.Z. noch in der Shell) lässt sich durch den neuen Millisekunden-Timer und die neue System-Frequenz von 1000 Hz ziemlich rasant über den Bildschirm bewegen. Leider ist er noch keine eigene Task. Daher kann man ihn z.B. mit langwierigen Aktionen wie 'fdir' ausstoppen.

;) Anstelle des Zuges könnte auch Ihre Werbung stehen. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:39:14 23.12.2009, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:41:35 23.12.2009   Titel:              Zitieren

Version 53:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=53

- Folgendes auskommentiert in elf.c:
Zeile 11: static const void* USERCODE_VADDR = (void*)0x01400000;
Zeile 129: ASSERT( header->phnum == 1 );
Zeile 152: ASSERT( (const void*)(ph->vaddr) == USERCODE_VADDR );

- Folgendes ergänzt:
Zu den CFLAGS noch "-m32" hinzufügen
In die Linkerscripte (kernel.ld, user.ld) "OUTPUT_ARCH(i386)" hinzufügen

Nun sollte es von Seiten Linux und 64-Bit keine Barrieren geben. Erste Tests bestätigen dies! :)

http://www.cyberciti.biz/tips/compile-32bit-application-using-gcc-64-bit-linux.html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:11:56 23.12.2009, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:23:04 24.12.2009   Titel:              Zitieren

Version 54:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=54

- build.sh für Linux ergänzt
- tools/bochsrc ergänzt
- Zug auf vielfachen Wunsch etwas ausgebremst (40 Zeichen/sec) :xmas1:

Der "Zug" steht nur stellvertretend für das zukünftige Informationsband, in dem Diagnosedaten angegeben werden. Wir wollen ja ein Lehr-OS schaffen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:40:28 24.12.2009, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:38:50 25.12.2009   Titel:              Zitieren

Version 55:

http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=55

-fno-pic im makefile ergänzt
in userlib.c __asm__ anstelle asm

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/Rev55.PNG :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:49:08 16.01.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:50:56 16.01.2010   Titel:              Zitieren

Version 56:

http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=56

- flpydsk_read_directory() nach fat12.c ausgelagert, da spezifisch für Dateisystem FAT12

in fat12.h/c sollen die FAT12-spezifischen Funktionen zur Dateiverwaltung auf Floppy Disk abgelegt werden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:50:22 24.01.2010   Titel:              Zitieren

Rev. 57:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=57

- fat12.h/.c: Quickformat für die FloppyDisk implementiert ("fformat")
läuft noch nicht fehlerfrei (FAT2 wird nicht analog zu FAT1 geschrieben), funktioniert aber bereits. Kann auch mit FloppyImage.bin getestet werden. Als Hex-Editor empfehle ich für die echte Floppy den Hex-Editor Neo, da dieser direkt Volumes auslesen kann.

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/Rev57.PNG

Leider fehlte in dieser Version (vielleicht auch schon vorher in 56) die fat12.c!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:57:58 24.01.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:58:51 24.01.2010   Titel:              Zitieren

Rev. 57a:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=58

- fat12.h/.c: Quickformat für die FloppyDisk implementiert ("fformat")
läuft noch nicht fehlerfrei (FAT2 wird nicht analog zu FAT1 geschrieben), funktioniert aber bereits. Kann auch mit FloppyImage.bin getestet werden. Als Hex-Editor empfehle ich für die echte Floppy den Hex-Editor Neo, da dieser direkt Volumes auslesen kann.

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/Rev57.PNG

Diese Version sollte komplett sein. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:45:25 24.01.2010   Titel:              Zitieren

Rev. 59:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=59

fat.c: FAT2 nun analog FAT1

- Noch eine Menge Optimierungspotential
- date/time fehlt noch

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:55:31 25.01.2010   Titel:              Zitieren

Rev. 60:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=60

In fat12.c - testweise - noch ein "Preformat" eingefügt, das die ersten 32 Sektoren komplett auf eine Zahl (0xAA) setzt, bevor die eigentliche Fortmatierung startet.
Die Routine muss noch auf das Track-weise Schreiben (18 Sektoren auf einmal) angepasst werden.

EDIT: das fformat ist bisher leider nur qemu-fähig. Auf echten PCs wird bisher nicht formatiert. Fehler wird durch Debuggen (ohne Preformat) gesucht. Die Funktion steigt bereits ganz vorne aus:
C/C++ Code:
    /// write bootsector
    retVal = flpydsk_write_boot_sector(&b);
    if(retVal != 0)
    {
        printformat("E_Disk - flpydsk_write_boot_sector");
        return E_DISK;
    }
C/C++ Code:
/// write bootsector
retVal = flpydsk_write_boot_sector(&b);
if(retVal != 0)
{
printformat("E_Disk - flpydsk_write_boot_sector");
return E_DISK;
}
C/C++ Code:
    /// write bootsector
    retVal = flpydsk_write_boot_sector(&b);
    if(retVal != 0)
    {
        printformat("E_Disk - flpydsk_write_boot_sector");
        return E_DISK;
    }


Problem liegt hier (um timeout-Routine ergänzt für Fehlersuche):
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int32_t flpydsk_write_sector_ia( int32_t i, void* a)
{
    memcpy((void*)DMA_BUFFER, a  , 0x200);

    uint32_t timeout = 2; // limit
    int32_t  retVal  = 0;
    while( flpydsk_write_sector(i) != 0 )
    {
        retVal = -1;
        timeout--;
        printformat("error write_sector. left: %d\n",timeout);
        if(timeout<=0)
        {
            printformat("timeout\n");
            break;
        }
    }
    if(retVal==0)
    {
        printformat("success write_sector.\n");
    }
    return retVal;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int32_t flpydsk_write_sector_ia( int32_t i, void* a)
{
memcpy((void*)DMA_BUFFER, a , 0x200);

uint32_t timeout = 2; // limit
int32_t retVal = 0;
while( flpydsk_write_sector(i) != 0 )
{
retVal = -1;
timeout--;
printformat("error write_sector. left: %d\n",timeout);
if(timeout<=0)
{
printformat("timeout\n");
break;
}
}
if(retVal==0)
{
printformat("success write_sector.\n");
}
return retVal;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int32_t flpydsk_write_sector_ia( int32_t i, void* a)
{
    memcpy((void*)DMA_BUFFER, a  , 0x200);

    uint32_t timeout = 2; // limit
    int32_t  retVal  = 0;
    while( flpydsk_write_sector(i) != 0 )
    {
        retVal = -1;
        timeout--;
        printformat("error write_sector. left: %d\n",timeout);
        if(timeout<=0)
        {
            printformat("timeout\n");
            break;
        }
    }
    if(retVal==0)
    {
        printformat("success write_sector.\n");
    }
    return retVal;
}


Das Problem mit echter Hardware liegt also in flpydsk_write_sector(i).
qemu läuft anstandslos.

Ich lade diese Version mit Fehlerroutine hoch. Vielleicht findet jemand die Lösung für flpydsk_write_sector(i).

Rev. 61:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=61

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:11:05 26.01.2010, insgesamt 8-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:04:06 27.01.2010   Titel:              Zitieren

Rev. 62:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=62

Der seek-Vorgang auf realer Hardware läuft nun so ab, dass man die Analyse des Schreibvorgangs auf realer Hardware starten kann (Meldungen sind noch merkwürdig).
Während auf qemu mit echter Floppy alles perfekt läuft, sieht das auf realer Hardware noch sehr verwirrend aus. Das Format-Ergebnis ist ebenfalls nicht ok.
Da stimmt noch etwas beim 'seek' nicht.
Siehe: http://www.c-plusplus.de/forum/viewtopic-var-t-is-253791-and-start-is-10.html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:11:00 27.01.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:04:27 27.01.2010   Titel:              Zitieren

Rev. 63:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=63

Noch einige Änderungen in flpydsk.c (seek, ...), allerdings läuft der Cylinder-Seek-Prozess auf echter Hardware beim Schreiben nicht ordnungsgemäß.

Hat jemand eine Idee? :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 05:38:48 29.01.2010   Titel:              Zitieren

Rev. 64:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=64

In flpydsk.c wurde in das seek ein calibrate (setzen auf cyl. 0) eingeschoben. Nun funktioniert das Sektor-Schreiben auf Floppy Disk auch mit echter Hardware. Die Vorgänge müssen allerdings noch massiv bezüglich Effizienz (zu langsam, Motor on/off optimieren) und Effektivität (viele seltsame Zeichen bei fdir) optimiert werden. Aber der seek-Fehler ist nun hoffentlich behoben. :)

Rev. 65:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=65
calibrate ohne motor on/off

Rev. 66:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=66
motor on/off beim Schreiben in Format ausgeschaltet, dadurch verläuft die Formatierung deutlich schneller.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:28:14 30.01.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:07:35 30.01.2010   Titel:              Zitieren

Rev 67:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=67
timeout in read_sector von 2 Sekunden auf 2 mal umgestellt (für langsame Rechner)

Danke an Cuervo für die Tests mit dem "lahmen" Schulrechner.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:21:34 30.01.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 04:19:16 31.01.2010   Titel:              Zitieren

Rev.68:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=68

fformat: Änderung im Algorithmus von "sectorenweisem" Schreiben auf Schreiben von ganzen Tracks. Nun ist das Quickformat (Bootsector, FAT1 u. FAT2, RootDir) viel schneller. Bei manchen Disketten gibt es die Fehlermeldung: No ID address mark
Ursache bisher nicht klar (hat vielleicht etwas mit quickformat zu schaffen).
Frage: was muss man machen, damit die Diskette als brauchbar/lesbar akzeptiert wird (nur wichtig für Lesen mit Hex-Editor via Windows-Laufwerk a: )

Links:
http://technet.microsoft.com/en-us/library/cc776720%28WS.10%29.aspx
http://www.microsofttranslator.com/BV.aspx?ref=CSS ....... =http://support.microsoft.com/kb/130627/en-us?fr=1
Zitat:
When you quick format an unformatted floppy disk, correct data structures are placed; however, no media test and verification of cluster usability are performed.

Was ist der "media test"?
Wie wird die "verification of cluster usability" durchgeführt?
Vor allem: wie wird dies auf der Diskette dargestellt? (dies könnte man ja antäuschen.
Die normale Kennung für Format im Datenbereich seit MSDOS ist 0xF6.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 04:20:25 31.01.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:35:28 31.01.2010   Titel:              Zitieren

Die Frage von erik.vikinger bezüglich Floppy vs USB wurde wegen der Grundsätzlichkeit für die weitere Entwicklung abgetrennt: http://www.c-plusplus.de/forum/viewtopic-var-t-is-260047.html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:09:19 31.01.2010   Titel:              Zitieren

Rev. 69:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=69

- Nur noch wichtige Meldungen beim Formatieren
- kleine Verbesserungen in fat12.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:50:23 31.01.2010   Titel:              Zitieren

Rev. 70:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=70

Vor und nach dem Formatieren wird der Inhalt des Root Directories testweise gezeigt (jeweils 2 Sekunden Pause zwischen zwei Einträgen).

Anmerkung: Test von Funktionen als Vorbereitung auf den Ladevorgang.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:53:32 02.02.2010   Titel:              Zitieren

Rev. 71:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=71

Zwischenschritte:
1) name.ext (8+3) in ROOT DIRECTORY finden (Bsp. 'KERNEL.BIN'), TODO: variabel via shell machen
2) FAT1 parsen (TODO: durch motor on/off beim read_sector(...) noch zu langsam, dadurch aber sehr gut verfolgbar)
vgl. mit http://www.henkessoft.de/OS_Dev/OS_Dev3.htm#mozTocId839021

Der Einfachheit halber wurde dies als ///TEST ... ///TEST in 'fformat' vor dem eigentlichen Quickformatvorgang eingehängt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:06:39 03.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:04:56 03.02.2010   Titel:              Zitieren

Rev. 72:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=72

Erkennung von Filename/extension stabilisiert (bei einigen Versuchen hatte es Probleme gegeben. strncpy ok?)

FAT parsen beschleunigt.

Später soll man z.B. 'kernel.bin' in der shell eingeben. Dann wird zunächst in der shell selbst nach dem Befehl gesucht und falls nicht vorhanden, das File auf der Floppy Disk gesucht und entweder geladen/ausgeführt (z.B. xxx.elf) oder nach dem Finden als nicht ausführbar dargestellt (z.B. bin oder sys oder ...).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:07:26 03.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 07:56:50 04.02.2010   Titel:              Zitieren

Rev. 73:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=73

Zwischenschritt: File wird probeweise mittels FirstCluster und zugehöriger FAT-Chain in einem Array file[...] aufgebaut.

Der Algorithmus ist allerdings nicht brauchbar, da der zweite Cluster via FAT-entry[i] gefunden wird (siehe Rev.74).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:35:04 05.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:42:30 05.02.2010   Titel:              Zitieren

Rev. 74:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=74

Zwischenschritt:
Algorithmus zum Auffinden der Cluster-Kette mittels 2nd_Cluster = FAT[1st_Cluster] als Start.

1) File 'program.elf' auf die Diskette kopieren, da dieses File gesucht wird
2) Testet den Algo mittels 'fformat'

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:54:36 05.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:52:56 05.02.2010   Titel:              Zitieren

Rev. 75:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=75

Zwischenschritt:
Suche nach 'kernel.bin' und "Laden" in ein Array file[...].
Noch immer in den fformat-Befehl eingebunden.

Nächster Schritt: Auslagern in eigene Load-Funktion und Start via Eingabe des Filenamens in der Shell.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:56:05 05.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:28:07 05.02.2010   Titel:              Zitieren

Rev. 76:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=76

fdir: file ohne Extension nun auch ohne Punkt
makefile: rm -f .o
fat12.c: algorithmus korrigiert, FAT-Clusterkette wird zu langsam gelesen

Problem: Unterschiedliche Inhalte in File-Array bei real PC (1./2. Cluster identisch eingelesen) und qemu (klappt gut). Lesevorgang? DMA?

Anmerkung:
noch bei 'fformat' testweise untergebracht, bis es richtig läuft, dann separate Load-Funktion mit Start durch die shell.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:30:44 05.02.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:10:33 06.02.2010   Titel:              Zitieren

Rev. 77:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=77

Meilenstein: (noch eingebettet in 'fformat')
Separate Load-Funktion: flpydsk_load(char* name, char* ext):
:arrow: In dieser Version gelingt erstmalig das Laden und Ausführen einer Datei (hello.elf, 3 Cluster) von Floppy Disk! :)

Screenshot: ;)
http://www.henkessoft.de/OS_Dev/Bilder/Load_Process_from_Floppy.PNG
(Anmerkung: Der dritte Cluster besteht nicht nur aus lauter Nullen, sondern enthält genau ab Byte 21 Daten unterschieldich zu 0x00. Es werden allerdings jeweils die ersten 20 Byte eines Clusters zur Kontrolle angezeigt. Der beste Beweis, dass der Vorgang klappt, ist selbstverständlich, wenn ein Programm ordnungsgemäß startet.)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:29:55 06.02.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 03:14:46 06.02.2010   Titel:              Zitieren

Rev. 78:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=78

Nun kann man den Dateinamen, z.B. "hello.elf" oder einfach "hello", auch "hello." direkt in der Shell eingeben.

Läuft allerdings noch nicht völlig rund - Zeichendarstellung verschoben, ab und zu #PF(beim Ausführen des Programms?) - aber es ist unser Einstieg in die bunte Landschaft der User-Programme, mal abgesehen von der im Kernel mittels "incbin" mitgelieferten Shell.

Zur Zeit kann nur das elf-Format "seziert" werden. Ideen für kleine Programme sind bereits genügend vorhanden. ;)

Die hoffentlich ausgeführte Datei befindet sich übrigens hier:
...\PrettyOS\trunk\Source\user\user_test_c\
Sourcecode:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
#include "userlib.h"

int main()
{
    settextcolor(12,0);
    puts("Hello, Pretty Operating System World!\n");
    puts("This piece of software was loaded by PrettyOS from your floppy disk.\n");
    settextcolor(15,0);
    return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
#include "userlib.h"

int main()
{
settextcolor(12,0);
puts("Hello, Pretty Operating System World!\n");
puts("This piece of software was loaded by PrettyOS from your floppy disk.\n");
settextcolor(15,0);
return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
#include "userlib.h"

int main()
{
    settextcolor(12,0);
    puts("Hello, Pretty Operating System World!\n");
    puts("This piece of software was loaded by PrettyOS from your floppy disk.\n");
    settextcolor(15,0);
    return 0;
}

Nun können wir entsprechende User-Programmideen umsetzen (makefile und Umgebung muss noch entsprechend erweitert werden. Ich habe das Programm hello.elf einfach durch Substitution von program.c und anschließendem Rücktausch erzeugt, denn wir müssen ja start.asm und das passende Linkerskript beim Compilieren/Linken verwenden.). Damit lenkt sich der Blick auch auf die vorhandene und noch zu erweiternde API (syscalls) und die magere/fehlende C-Bibliothek im User-Bereich.

Vielleicht findet jemand die Gründe, warum es manchmal zu #PF kommt und warum echte Hardware in einigen Fällen (auf meinem Entwicklungsrechner von ca. 2004 funktioniert es) noch Lese-Probleme macht, während es dagegen mit qemu problemlos funktioniert.

Am besten mit qemu probieren (FloppyImage.bin wird ja mitgeliefert bzw. beim Compilieren erzeugt), da es auf echter Hardware noch eindeutig zu wenig performant abläuft (im 5-10 Minuten-Bereich).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:48:41 06.02.2010, insgesamt 9-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:28:28 06.02.2010   Titel:              Zitieren

Rev. 79:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=79

Verbesserungen bei der Eingabe in der Shell

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:28:34 06.02.2010   Titel:              Zitieren

Rev. 80:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=80

Verbesserungen in fat12.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:01:28 07.02.2010   Titel:              Zitieren

Rev. 81:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=81

shell (program.c): Leereingabe abgefangen (!)
flpydsk.c: delay von 50 ms bei Lese-/Schreibvorgängen auf null reduziert

Simulation mit FloppyImage und qemu läuft nun rapide.
Echte Floppy mit qemu etwas beschleunigt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:02:29 07.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:29:16 07.02.2010   Titel:              Zitieren

Rev. 82:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=82

timer.c: Systemfrequenz reduziert von 1000 Hz (wie bei Linux) auf 100 Hz (wie früher; führt wieder zu geordneter Bildschirm-Darstellung)
fat.c: log_task_list() vor und nach dem auszuführenden Programm dargestellt, damit die Tasks demonstriert werden

Screenshot:
http://www.henkessoft.de/OS_Dev/Bilder/Rev82.PNG

Rev. 83:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=83

:arrow: Zwischenversion nur für Fehlersuche (Probleme in neuestem Sun Virtual Box und einigen qemu-Versionen)

Rev. 84:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=84
Zusätzlich Erstellungswerkzeuge für HELLO.ELF im Unterordner für eigene Experimente. TODO: alles abändern auf übergeordnet Ordner (nasm, make, userlib, ...).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 03:25:50 08.02.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 03:25:32 08.02.2010   Titel:              Zitieren

Rev. 85:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=85

Veränderungen in program.c

Läuft bei mir absturzfrei mit qemu, Sun Virtual Box, MS Virtual PC (dort allerdings Leseprobleme von Floppy)

Bitte prüfen! :)

Die roten Punkte stellen die Durchläufe durch die innere Schleife der shell dar.
Hier kann man das abstellen:
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
      while(true)
      {
          ///TEST
          settextcolor(4,0);
          puts(".");
          settextcolor(15,0);
          ///TEST
          ...
C/C++ Code:
1
2
3
4
5
6
7
8
while(true)
{
///TEST
settextcolor(4,0);
puts(".");
settextcolor(15,0);
///TEST
...
C/C++ Code:
1
2
3
4
5
6
7
8
      while(true)
      {
          ///TEST
          settextcolor(4,0);
          puts(".");
          settextcolor(15,0);
          ///TEST
          ...


TODO: Gibt man "kernel.bin" ein, so wird nur ".bin" gesucht (geht nur mit "kernel .bin")

Die Systemfrequenz wurde wieder auf 1000 Hz eingestellt, da dies anfänglich Vorteile mit Sun VB brachte.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 03:33:27 08.02.2010, insgesamt 3-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 08:40:24 08.02.2010   Titel:   Rev. 85            Zitieren

Revision 85 geht bei mir nur auf einem einzigen Computer fehlerfrei, und zwar PC 2.
PC 1 gibt einen GPF in der PCI-Liste aus und PC 3 startet neu (das ist der, der früher IMMER ging aber kaputt war und ich gestern wieder zusammengebaut habe).
In qemu läuft es, in VirtualBox auch, MS VPC hab ich nicht. In VitualBox läuft es allerdings SEHR langsam... da kann man die roten Punkte mitzählen^^
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:55:05 08.02.2010   Titel:              Zitieren

Rev. 86:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=86

- getch() in user.c umgebaut, so dass auf eine Eingabe gewartet wird.
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
unsigned char getch()
{
    unsigned char ret;
    do
    {
        __asm__ volatile( "int $0x7F" : "=a"(ret): "a"(6) );
    }
    while(ret==0);
    return ret;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
unsigned char getch()
{
unsigned char ret;
do
{
__asm__ volatile( "int $0x7F" : "=a"(ret): "a"(6) );
}
while(ret==0);
return ret;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
unsigned char getch()
{
    unsigned char ret;
    do
    {
        __asm__ volatile( "int $0x7F" : "=a"(ret): "a"(6) );
    }
    while(ret==0);
    return ret;
}

- DEBUG-Ausgaben entfernt (motor on/off; rote Punkte)

@Cuervo: bei meinen PCs läuft es

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:57:12 08.02.2010, insgesamt 1-mal bearbeitet
anubis2k5
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.09.2009
Beiträge: 26
Beitrag anubis2k5 Mitglied 21:19:08 08.02.2010   Titel:              Zitieren

Revision 86: bei Eingabe von HELLO.ELF wird -->.ELF<-- nicht gefunden.
Bei Eingabe von "hello" hingegen funktioniert es - gewollt?!

Nachtrag: Besteht die Möglichkeit einen extra Threat zum Testen der Revisionen zu öffnen? Ich glaube hier wird's langsam voll...

Nachtrag 2: Nachdem ich alle *.bin;*.map;*.elf - Dateien gelöscht habe, um ein "sauberes" System zu bekommen, musste ich feststellen, dass die Datei "HELLO.ELF" nicht gefunden wird. Wirklich aussagekräftige Fehlermeldung erhalte ich nicht. Habt ihr eine Idee?

Code:
tools/CreateFloppyImage2 PrettyOS FloppyImage.bin stage1_bootloader/boot.bin sta
ge2_bootloader/BOOT2.BIN kernel/KERNEL.BIN user/user_test_c/HELLO.ELF
Cannot open the file 'user/user_test_c/HELLO.ELF'
mingw32-make: *** [ckernel] Error -1
Code:
tools/CreateFloppyImage2 PrettyOS FloppyImage.bin stage1_bootloader/boot.bin sta
ge2_bootloader/BOOT2.BIN kernel/KERNEL.BIN user/user_test_c/HELLO.ELF
Cannot open the file 'user/user_test_c/HELLO.ELF'
mingw32-make: *** [ckernel] Error -1
Code:
tools/CreateFloppyImage2 PrettyOS FloppyImage.bin stage1_bootloader/boot.bin sta
ge2_bootloader/BOOT2.BIN kernel/KERNEL.BIN user/user_test_c/HELLO.ELF
Cannot open the file 'user/user_test_c/HELLO.ELF'
mingw32-make: *** [ckernel] Error -1


Zuletzt bearbeitet von anubis2k5 am 21:29:42 08.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:30:41 08.02.2010   Titel:              Zitieren

Im Unterverzeichnis ...\PrettyOS\trunk\Source\user\user_test_c build.bat ausführen.
Code:
mingw32-make main
Code:
mingw32-make main
Code:
mingw32-make main
==> HELLO.ELF

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:31:19 08.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:17:55 09.02.2010   Titel:              Zitieren

Rev. 87:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=87

Zwischenschritt (leider noch Fehler enthalten) mit Bitte um Fehlersuche.

task.c: exit als syscall eingebaut (beendet Prozess)
user.c: gets eingefügt

User-Programm mit gets (altes Programm in "zzz_alternative_User-Programme", falls die Fehler nerven, das sollte wiederholbarer laufen)

Systemfrequenz: 100 Hz

Diese Version sollten wir nun erstmal stabilisieren, da ich an mehreren Stellen kleine Ungenauigkeiten vermute, die nun zuschlagen.

Bei MT kann es auch zu races kommen, sodass wir noch einiges gegeneinander abschotten müssen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:41:56 09.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:22:43 11.02.2010   Titel:              Zitieren

Rev 88:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=88

Zwischenschritt mit Bitte um Fehlersuche / Ideen.

Diagnose aktiviert (PID der tasks werden angezeigt)

Absturz bei Überschreiten von exit (wird durch test-Funktion angezeigt) in start.asm verhindert durch jmp $

User-Programm mit gets <--- richtig schlimm, lange namen eingeben

Systemfrequenz: 10 Hz

Was muss durch cli/sti abgeschottet werden?
Wo sind kritische Abschnitte notwendig?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:07:17 11.02.2010   Titel:              Zitieren

Rev. 89:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=89

Fehler gefunden! Wie erwartet im Multitasking.

Während der Ausführung von gets wurde der task gewechselt. Damit fing die shell Zeicheneingaben und vor allem das ENTER (Line Feed: 10) des User-Programms ab, das dann auf das Ende des Strings wartete.

Abhilfe: Das Taskswitching wurde während gets(...) deaktiviert (wohl keine dauerhafte Lösung). Hierzu wurde ein syscall settaskflag geschaffen.

siehe: task.c, syscall.c, userlib.c

Wenn man das nachvollziehen will:
Diagnose in os.h aktivieren, dann sieht man die PID der Tasks. Einfach in gets das taskswitching zulassen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:31:02 11.02.2010   Titel:              Zitieren

Rev. 90:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=90

Fehlerbeseitigungen:
task.c: in exit() sofort task-switch nach sti(), damit der Prozess nicht hinter exit gelangen kann.
interrupts.asm: 0x7E war dort nicht eingetragen in die IDT (--> #GP)! Danke an XanClic für diesen Hinweis! :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:45:58 11.02.2010   Titel:              Zitieren

Rev. 91
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=90

userlib.h/c: itoa, atoi
Beispielprogramm hello.elf mit Collatz-Folge (3n+1)
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "userlib.h"

int main()
{
    char s[1000];
    unsigned long start; // Beginn der Berechnung bei 'start'
    unsigned long end;   // Ende der Berechnung bei 'end'
    unsigned long zahl;  // Element der Folge
    unsigned long i,j;   // Zählvariable für die Folgenlänge

    settextcolor(11,0);
    puts("--------------------------------------------------------------------\n");
    puts("Bitte geben Sie ihren Namen ein:\n");
    gets(s);
    puts("This piece of software was loaded by PrettyOS from the floppy disk of ");
    puts(s);
    putch('\n');
    puts("--------------------------------------------------------------------\n");
    puts("---                     Collatz-Folge 3n+1                       ---\n");
    puts("--------------------------------------------------------------------\n");

    /**************************** Eingabebereich ****************************/
    puts("Erste Zahl:   ");
    gets(s);
    start = atoi(s);
    puts("Letzte Zahl:  ");
    gets(s);
    end   = atoi(s);
    /**************************** Eingabebereich ****************************/

    for(j=start; j<end+1; j++)
    {
        zahl=j;
        i=1;
        putch('\n');
        itoa(j,s); // begin value
        puts(s);
        putch(' ');

        while(zahl != 1) // test on cycle 4-2-1
        {
            if( zahl % 2 == 0 )  zahl /=  2 ;           // Collatz
            else                 zahl = 3 * zahl + 1 ;  // Collatz

            itoa(zahl,s);
            puts(s); // element of the series
            putch(' ');
            i++ ;
        }

        if(zahl == 1)
        {
            puts("\tH(n): ");
            itoa(i,s);
            puts(s); // H(n) length of the series
            putch('\n');
        }
    }
    settextcolor(15,0);
    return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "userlib.h"

int main()
{
char s[1000];
unsigned long start; // Beginn der Berechnung bei 'start'
unsigned long end; // Ende der Berechnung bei 'end'
unsigned long zahl; // Element der Folge
unsigned long i,j; // Zählvariable für die Folgenlänge

settextcolor(11,0);
puts("--------------------------------------------------------------------\n");
puts("Bitte geben Sie ihren Namen ein:\n");
gets(s);
puts("This piece of software was loaded by PrettyOS from the floppy disk of ");
puts(s);
putch('\n');
puts("--------------------------------------------------------------------\n");
puts("--- Collatz-Folge 3n+1 ---\n");
puts("--------------------------------------------------------------------\n");

/**************************** Eingabebereich ****************************/
puts("Erste Zahl: ");
gets(s);
start = atoi(s);
puts("Letzte Zahl: ");
gets(s);
end = atoi(s);
/**************************** Eingabebereich ****************************/

for(j=start; j<end+1; j++)
{
zahl=j;
i=1;
putch('\n');
itoa(j,s); // begin value
puts(s);
putch(' ');

while(zahl != 1) // test on cycle 4-2-1
{
if( zahl % 2 == 0 ) zahl /= 2 ; // Collatz
else zahl = 3 * zahl + 1 ; // Collatz

itoa(zahl,s);
puts(s); // element of the series
putch(' ');
i++ ;
}

if(zahl == 1)
{
puts("\tH(n): ");
itoa(i,s);
puts(s); // H(n) length of the series
putch('\n');
}
}
settextcolor(15,0);
return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "userlib.h"

int main()
{
    char s[1000];
    unsigned long start; // Beginn der Berechnung bei 'start'
    unsigned long end;   // Ende der Berechnung bei 'end'
    unsigned long zahl;  // Element der Folge
    unsigned long i,j;   // Zählvariable für die Folgenlänge

    settextcolor(11,0);
    puts("--------------------------------------------------------------------\n");
    puts("Bitte geben Sie ihren Namen ein:\n");
    gets(s);
    puts("This piece of software was loaded by PrettyOS from the floppy disk of ");
    puts(s);
    putch('\n');
    puts("--------------------------------------------------------------------\n");
    puts("---                     Collatz-Folge 3n+1                       ---\n");
    puts("--------------------------------------------------------------------\n");

    /**************************** Eingabebereich ****************************/
    puts("Erste Zahl:   ");
    gets(s);
    start = atoi(s);
    puts("Letzte Zahl:  ");
    gets(s);
    end   = atoi(s);
    /**************************** Eingabebereich ****************************/

    for(j=start; j<end+1; j++)
    {
        zahl=j;
        i=1;
        putch('\n');
        itoa(j,s); // begin value
        puts(s);
        putch(' ');

        while(zahl != 1) // test on cycle 4-2-1
        {
            if( zahl % 2 == 0 )  zahl /=  2 ;           // Collatz
            else                 zahl = 3 * zahl + 1 ;  // Collatz

            itoa(zahl,s);
            puts(s); // element of the series
            putch(' ');
            i++ ;
        }

        if(zahl == 1)
        {
            puts("\tH(n): ");
            itoa(i,s);
            puts(s); // H(n) length of the series
            putch('\n');
        }
    }
    settextcolor(15,0);
    return 0;
}


Jede Start-Zahl endet in der Folge auf 4-2-1. Das ist die Behauptung.
siehe:
http://www.ericr.nl/wondrous/index.html
http://www.henkessoft.de/C++/C++/cpp_konsole.htm (Kap. 1.5) :)

Ein kleiner Meilenstein.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:59:35 11.02.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:44:22 12.02.2010   Titel:              Zitieren

Rev. 92:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=92

fat.h/c: FAT-Lesen/nach 12-Bit transferieren signifikant beschleunigt
(FATMAXINDEX testweise auf 300 eingestellt; das muss noch umgestellt werden)

Cuervo stellt Probleme beim Lesen von echter Floppy fest.

Bei mir klappt es auf einem PC mit der FAT, dann allerdings #PF, d.h. die gelesenen/errechneten FAT-Einträge stimmen nicht;
auf dem anderen stimmen die FAT-Einträge nicht (alles 0).
Da das bisher geklappt hat, liegt das an der Code-Änderung in fat12.c (Beschleunigung durch trackweises Lesen in ein Array).

Also leider noch nicht in Ordnung bei realer Hardware
==> Debuggen auf echter Hardware :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:31:47 12.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:55:21 12.02.2010   Titel:              Zitieren

Rev. 93:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=93

Fehler bei der Analyse der Eingabe von Filenamen in der shell behoben (Eingabe von hello.elf usw. funktioniert nun).
Dank an XanClic für den Hinweis auf die Lösung. :live:


Bis zur Lösung der Probleme mit echter Hardware bitte auf Simulationen testen (MS Virtual PC liest nicht, aber Bochs, Qemu, Sun Virtual Box funktionieren gut).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:39:46 13.02.2010, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:18:19 13.02.2010   Titel:              Zitieren

Rev. 94:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=94

fat12.c: Verbesserungen bezüglich echter Hardware
hello.c: Eingabe von 0 als erste Zahl wird abgefangen (auf 1 gesetzt)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:20:22 13.02.2010   Titel:              Zitieren

Rev. 95:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=95

fat12.c: verbesserte Fehlerabfrage bei file_ia(...) - timeout eingebaut

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:13:08 13.02.2010   Titel:              Zitieren

Rev. 96:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=96

Verbesserte Fehlermeldungen zur Fehlersuche bei echter Hardware.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:54:08 13.02.2010   Titel:              Zitieren

Rev. 97:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=97


Neu: beep(frequ, duration) als syscall und in userlib

Nun kann das Spielhallen-feeling starten
für qemu: -soundhw pcspk (als Parameter)

fat12.c: read überarbeitet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:03:43 13.02.2010   Titel:              Zitieren

Rev. 98:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=98

- Testversion for correctness of int32_t flpydsk_read_sector_ia( int32_t i, void* a) at real hardware
Currently, only each second time the read procedure to the DMA Buffer really overwrites the contents (manipulated from us to AAAA...) there.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int32_t flpydsk_read_sector_ia( int32_t i, void* a)
{
    /// TEST: change DMA before write/read
    printformat("DMA manipulation\n");
    memset((void*)DMA_BUFFER, 0x41, 0x200); // 0x41 is in ASCII the 'A'

    /// TEST: motor on/off

    flpydsk_control_motor(true);

    int32_t n, retVal;
    for(n=0;n<2;n++) // two times should be enough to overwrite the AAAA...
    {
        retVal = flpydsk_read_sector(i,0);
        if(retVal!=0)
        {
            printformat("\nread error: %d\n",retVal);
        }
    }

    memcpy( a, (void*)DMA_BUFFER, 0x200);
    return retVal;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int32_t flpydsk_read_sector_ia( int32_t i, void* a)
{
/// TEST: change DMA before write/read
printformat("DMA manipulation\n");
memset((void*)DMA_BUFFER, 0x41, 0x200); // 0x41 is in ASCII the 'A'

/// TEST: motor on/off

flpydsk_control_motor(true);

int32_t n, retVal;
for(n=0;n<2;n++) // two times should be enough to overwrite the AAAA...
{
retVal = flpydsk_read_sector(i,0);
if(retVal!=0)
{
printformat("\nread error: %d\n",retVal);
}
}

memcpy( a, (void*)DMA_BUFFER, 0x200);
return retVal;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int32_t flpydsk_read_sector_ia( int32_t i, void* a)
{
    /// TEST: change DMA before write/read
    printformat("DMA manipulation\n");
    memset((void*)DMA_BUFFER, 0x41, 0x200); // 0x41 is in ASCII the 'A'

    /// TEST: motor on/off

    flpydsk_control_motor(true);

    int32_t n, retVal;
    for(n=0;n<2;n++) // two times should be enough to overwrite the AAAA...
    {
        retVal = flpydsk_read_sector(i,0);
        if(retVal!=0)
        {
            printformat("\nread error: %d\n",retVal);
        }
    }

    memcpy( a, (void*)DMA_BUFFER, 0x200);
    return retVal;
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:35:40 13.02.2010   Titel:              Zitieren

Rev. 99:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=99

Testversion, die die Schwachstelle Floppy --> DMA_BUFFER aufdeckt und mindestens 10 mal probiert, meldet Erfolg oder Misserfolg.

Kann noch beschleunigt werden, indem man den Motor nicht anschaltet (noch Sicherheitsmaßnahme).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:20:11 14.02.2010   Titel:              Zitieren

Rev. 100:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=100

Es wurde versuchsweise ein User-TaskCounter (exit in task.c, load in fat12.c, syscall.c) eingeführt, um die shell steuern zu können. Die Shell geht nur dann in die Eingabeschleife ($>), wenn keine User-Tasks laufen.

Die Userlib wurde mit weiteren Funktionen (bereits im Kernel vorhanden) bestückt.

TODO: das Durchsuchen der rootdir muss beschleunigt werden (z.Z. sehr lahm wegen motor on und Diagnose)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:20:50 14.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:35:30 14.02.2010   Titel:              Zitieren

Rev. 101:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=101

Floppy-Motor-Steuerung verbessert (siehe flag in ODA, os.h)

Sun VB "unterbricht" nach ca. 20 mal Task 2 (shell); real PCs und qemu laufen.

Fragen:
warum bricht Sun VB ab?
warum läuft Floppy ---> DMA nicht zuverlässig (teilweise zwischen 1 bis 16 fails, gerade bei höheren Sektoren)?

Zur Zeit kann nur ein zusätzlicher Task durch Eingabe in die Shell gestartet werden, weil diese solange wartet, bis dieser wieder beendet ist (Task-Zähler).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:22:14 14.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:24:53 14.02.2010   Titel:              Zitieren

Rev. 102:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=102

- Beschleunigungen in fat12.c und flpydsk.c <--- allerdings Erkennung verschlechtert! :confused:
- gets in der user/user_program_c/userlib.c korrigiert
- __asm__ volatile ("hlt"); in der while-loop des kernels eingebaut

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:58:32 14.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:09:54 15.02.2010   Titel:              Zitieren

Rev 103:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=103

fat12.c: kleine Veränderungen
video.c: printformat um %y erweitert (gibt hexadezimal nur 2 Stellen aus, ideal für die Byte-orientierte Ausgabe von Dateiinhalten )

Diese Version läuft mit Sun Virtual Box 3.1.2, Qemu, Bochs 2.4.2 und auf realer Hardware, prinzipiell auch mit MS Virtual PC, dort jedoch mit unüberwindlichem read error (liegt angeblich an DMA autoinit).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:35:50 15.02.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:51:38 15.02.2010   Titel:              Zitieren

Rev 104:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=104

fat12.c: Vereinfachungen (sector/track) durch Zusammenlegen von Funktionen
irq.c: Ausgabe der Fehlermeldungen (#PF, #GPF) in hellrot

Diese Version läuft mit: :)
Sun Virtual Box 3.1.2,
Qemu 0.11.50,
Bochs 2.4.2,
realem PC mit Floppy Disk.

MS VPC macht noch Probleme (läuft nicht mit autoinit von DMA).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:40:40 15.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:13:25 15.02.2010   Titel:              Zitieren

Rev 105: :live: Durchbruch bei Floppy/DMA :live:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=105

Einige wesentlich Verbesserungen im Bereich Floppy/DMA/FAT12:

DMA nun ohne autoinit bit (wird von osdev.org für floppy mit autoinit empfohlen!), dafür jeweils ein erneutes DMA-Init vor dem Lesen von Floppy:
Funktioniert nun endlich sicher (Hardware unterstützt autoinit offensichtlich nicht ausreichend) und erlaubt nun auch den Einsatz von MS Virtual PC (bug: simuliert autoinit nicht).

Beim Schreiben ist autoinit noch aktiv. Das stellen wir ebenfalls um, wenn sich das Lesen von Floppy via DMA auf diese Art bewährt.

Die Motor-Steuerung wurde nun auch optimiert, sodass es nun wirklich schneller läuft. :)

Der Floppy-Motor wird bei #PF und #GPF nun auch ausgeschaltet (Hinweis von Cuervo).


TODO: Schreibvorgang checken (z.B. fformat)!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:51:44 15.02.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:18:15 16.02.2010   Titel:              Zitieren

Rev 106: :live:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=106

- Read and Write Floppy via DMA ohne autoinit läuft nun zuverlässig
- Läuft auf realer Hardware und zumindest mit folgenden PC-Simulationen: Bochs, Qemu, Sun Virtual Box, MS Virtual PC.
- Solide Basis für Weiterentwicklung

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
*************
|   | X | O |
*************
| X | O | X |
*************
|   |   |   |
*************

*************
| 0 | 1 | 2 |
*************
| 3 | 4 | 5 |
*************
| 6 | 7 | 8 |
*************

6
*************
|   | X | O |
*************
| X | O | X |
*************
| O |   |   |
*************

Spieler 2 hat gewonnen!

GAME OVER

$> fdir <--
<Floppy Disc Directory>
PrettyOS        0 byte           (vol)  1st sector: 31
BOOT2.BIN       922 byte         (arc)  1st sector: 33
KERNEL.BIN      45816 byte       (arc)  1st sector: 35
HELLO.ELF       5564 byte        (arc)  1st sector: 125

$>
-
                _______                _______      <>_<>
               (_______) |_|_|_|_|_|_|| [] [] | .---|'"`|---.
              `-oo---oo-'`-oo-----oo-'`-o---o-'`o"O-OO-OO-O"o'
Wednesday, February 17, 2010, 00:13:51     69 seconds since start.             /
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
*************
| | X | O |
*************
| X | O | X |
*************
| | | |
*************

*************
| 0 | 1 | 2 |
*************
| 3 | 4 | 5 |
*************
| 6 | 7 | 8 |
*************

6
*************
| | X | O |
*************
| X | O | X |
*************
| O | | |
*************

Spieler 2 hat gewonnen!

GAME OVER

$> fdir <--
<Floppy Disc Directory>
PrettyOS 0 byte (vol) 1st sector: 31
BOOT2.BIN 922 byte (arc) 1st sector: 33
KERNEL.BIN 45816 byte (arc) 1st sector: 35
HELLO.ELF 5564 byte (arc) 1st sector: 125

$>
-
_______ _______ <>_<>
(_______) |_|_|_|_|_|_|| [] [] | .---|'"`|---.
`-oo---oo-'`-oo-----oo-'`-o---o-'`o"O-OO-OO-O"o'
Wednesday, February 17, 2010, 00:13:51 69 seconds since start. /
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
*************
|   | X | O |
*************
| X | O | X |
*************
|   |   |   |
*************

*************
| 0 | 1 | 2 |
*************
| 3 | 4 | 5 |
*************
| 6 | 7 | 8 |
*************

6
*************
|   | X | O |
*************
| X | O | X |
*************
| O |   |   |
*************

Spieler 2 hat gewonnen!

GAME OVER

$> fdir <--
<Floppy Disc Directory>
PrettyOS        0 byte           (vol)  1st sector: 31
BOOT2.BIN       922 byte         (arc)  1st sector: 33
KERNEL.BIN      45816 byte       (arc)  1st sector: 35
HELLO.ELF       5564 byte        (arc)  1st sector: 125

$>
-
                _______                _______      <>_<>
               (_______) |_|_|_|_|_|_|| [] [] | .---|'"`|---.
              `-oo---oo-'`-oo-----oo-'`-o---o-'`o"O-OO-OO-O"o'
Wednesday, February 17, 2010, 00:13:51     69 seconds since start.             /

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:15:29 17.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:34:05 18.02.2010   Titel:              Zitieren

Rev. 107:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=107

- Einsparung von Lesezugriffen durch Cache von Track0 und Track1
- Verbesserung der Darstellung der RootDir-Inhalte

EDIT: Sun Virtual Box, MS Virtual PC laufen :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:44:06 22.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:11:28 19.02.2010   Titel:              Zitieren

Rev. 108:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=108

pci.c: Erkennen von Netzwerkkarte RTL 8139 eingebaut (thx to "tty") :)

Testen mit Qemu:
Code:
qemu-system-x86_64.exe -soundhw pcspk -usbdevice mouse -net nic,model=rtl8139,macaddr=00:12:12:12:12:12 -fda FloppyImage.bin -boot a -localtime
Code:
qemu-system-x86_64.exe -soundhw pcspk -usbdevice mouse -net nic,model=rtl8139,macaddr=00:12:12:12:12:12 -fda FloppyImage.bin -boot a -localtime
Code:
qemu-system-x86_64.exe -soundhw pcspk -usbdevice mouse -net nic,model=rtl8139,macaddr=00:12:12:12:12:12 -fda FloppyImage.bin -boot a -localtime


Wer den IRQ-Handler testen will, gibt nach dem PCI-Scan folgenden Code ein (qemu wählt bei mir IRQ 11):
C/C++ Code:
///TEST
printformat("Test with IRQ 32+11: ");
settextcolor(14,0);
__asm__ volatile( "int $43" : : "a"(0) );
settextcolor(15,0);
///TEST
C/C++ Code:
///TEST
printformat("Test with IRQ 32+11: ");
settextcolor(14,0);
__asm__ volatile( "int $43" : : "a"(0) );
settextcolor(15,0);
///TEST
C/C++ Code:
///TEST
printformat("Test with IRQ 32+11: ");
settextcolor(14,0);
__asm__ volatile( "int $43" : : "a"(0) );
settextcolor(15,0);
///TEST


Leider ist es bisher nicht gelungen, den IRQ durch "anpingen" über das Netz auszulösen.

Siehe auch Links bei:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-251851.html (unten)

EDIT: Sun Virtual Box, MS Virtual PC laufen :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:46:10 22.02.2010, insgesamt 8-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 03:28:04 20.02.2010   Titel:              Zitieren

Rev. 109:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=109

Den von tty erstellten Code auf die Vorgaben von http://lowlevel.brainsware.org/wiki/index.php/RTL8139 erweitert/angepasst:
Zitat:
1. Vom PCI-Treiber den IRQ und die I/O-Ports holen
2. IRQ-Handler und ggf. I/O-Ports registrieren
3. Einen Reset der Karte durchführen: Bit 4 im Befehlsregister (0x37, 1 Byte) setzen. Wenn ich hier Portnummern von Registern angebe, ist damit der Offset zum ersten Port der Karte gemeint, der durch die PCI-Funktionen ermittelt werden muss.
4. Aktivieren des Transmitters und des Receivers: Setze Bits 2 und 3 (TE bzw. RE) im Befehlsregister (0x37, 1 Byte). Dies darf angeblich nicht erst später geschehen, da die folgenden Befehle ansonsten ignoriert würden.
5. TCR (Transmit Configuration Register, 0x40, 4 Bytes) und RCR (Receive Configuration Register, 0x44, 4 Bytes) setzen. An dieser Stelle nicht weiter kommentierter Vorschlag: TCR = 0x03000700, RCR = 0x0000070a
6. Puffer für den Empfang (evtl auch zum Senden, das kann aber auch später passieren) initialisieren. Wir brauchen für bei den vorgeschlagenen Werten 8K + 16 Bytes für den Empfangspuffer und einen ausreichend großen Sendepuffer. Was ausreichend bedeutet, ist dabei davon abhängig, welche Menge wir auf einmal absenden wollen. Anschließend muss die physische (!) Adresse des Empfangspuffers nach RBSTART (0x30, 4 Bytes) geschrieben werden.
7. Interruptmaske setzen (0x3C, 2 Bytes). In diesem Register können die Ereignisse ausgewählt werden, die einen IRQ auslösen sollen. Wir nehmen der Einfachkeit halber alle und setzen 0xffff.
umgesetzt in pci.c

IRQ konnte aber bisher nicht über Netzwerk ausgelöst werden.

Bisheriger Versuch: Mac-Adresse ermittelt von der Netzwerkkarte mit RTL 8139, statisch in den Router (LAN, DHCP) eingetragen und IP 192.168.10.97 vergeben, dann ein "ping". Kein Erfolg, weder durch IRQ in PrettyOS noch durch erfolgreiche Rückmeldung des Pings ("Zeitüberschreitung der Anforderung", alle Pakete verloren). arp -a zeigt die IP ebenfalls nicht.

Was fehlt hier noch für diesen ersten Schritt des Auslösens des Interrupts via Netzwerk? ;)
http://prettyos.svn.sourceforge.net/viewvc/prettyos/trunk/Source/kernel/pci.c?view=markup&pathrev=109

EDIT: Sun Virtual Box, MS Virtual PC laufen :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:48:11 22.02.2010, insgesamt 7-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:03:57 20.02.2010   Titel:              Zitieren

Rev. 110:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=110

Überarbeiteter Zwischenschritt:
- bleibt in qemu hängen (keine Zurücksetzung des Reset-Bit)
- mac address wird nicht korrekt ausgegeben ?

wie kommt man korrekt an folgende Strukturen:
http://www.digitale-elektronik.de/shopsystem/rtl8139d-datasheet.pdf (S.14/15)

http://svn.rot13.org/index.cgi/pearpc/view/src/io/rtl8139/rtl8139.cc?rev=1
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* registers */
struct Registers {
    uint8  id0; // 0x00 (mac address)
    uint8  id1;
    uint8  id2;
    uint8  id3;
    uint8  id4;
    uint8  id5;
    uint16 rsvd0; // 0x06-0x07
    uint8  mar0;
    uint8  mar1;
    uint8  mar2;
    uint8  mar3;
    uint8  mar4;
    uint8  mar5;
    uint8  mar6;
    uint8  mar7;
     uint32 TxStatusD0; // 0x10
     uint32 TxStatusD1; // 0x14
     uint32 TxStatusD2; // 0x18
     uint32 TxStatusD3; // 0x1c
    uint32 TxStartAddrD0; // 0x20
    uint32 TxStartAddrD1; // 0x24
    uint32 TxStartAddrD2; // 0x28
    uint32 TxStartAddrD3; // 0x2c
    uint32 RxBufferStartAddr; // 0x30
    uint16 EarlyRxByteCount; // 0x34
    uint8  EarlyRxStatus; // 0x36
    uint8  CommandRegister; // 0x37
    uint16 CAPR; // 0x38 initial 0xfff0
    uint16 CBA; // 0x3a initial 0x0000
    uint16 InterruptMask; // 0x3c
    uint16 InterruptStatus; // 0x3e
    uint32 TxConfiguration; // 0x40
    uint32 RxConfiguration; // 0x44
    uint32 TimerCount; // 0x48
    uint32 MissedPacketCounter; // 0x4c
    uint8  Command93C46; //0x50
    uint8  Config0; // 0x51
    uint8  Config1; // 0x52
    uint8  rsvd1 ; // 0x53
    uint32 TimerInterrupt; // 0x54
    uint8  MediaStatus; // 0x58
    uint8  Config3; // 0x59
    uint8  Config4; // 0x5a
    uint8  rsvd2; // 0x5b
    uint16 MultipleInterruptSelect; // 0x5c
    uint8  PCIRevisionID; // 0x5e should be 0x10
    uint8  rsvd3; // 0x5f
    uint16 TSAD; // 0x60 Transmit Status of All Descriptors
    uint16 BMCR; // 0x62 Basic Mode Control
    uint16 BMSR; // 0x64 Basic Mode Status
    uint16 ANAR; // 0x66 Auto-Negotiation Advertisement
    uint16 ANLPAR; // 0x68 "" Link Partner
    uint16 ANER; // 0x6a "" Expansion
    uint16 DisconnectCounter; // 0x6c
    uint16 FalseCarrierSenseCounter; // 0x6e
    uint16 NWayTest; // 0x70
    uint16 RX_ER_Counter; //0x72
    uint16 CSConfiguration; // 0x74
    uint16 rsvd4;
    uint32 PHY1; //0x78
    uint32 Twister; // 0x7c
    uint8  PHY2; // 0x80
} PACKED;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* registers */
struct Registers {
uint8 id0; // 0x00 (mac address)
uint8 id1;
uint8 id2;
uint8 id3;
uint8 id4;
uint8 id5;
uint16 rsvd0; // 0x06-0x07
uint8 mar0;
uint8 mar1;
uint8 mar2;
uint8 mar3;
uint8 mar4;
uint8 mar5;
uint8 mar6;
uint8 mar7;
uint32 TxStatusD0; // 0x10
uint32 TxStatusD1; // 0x14
uint32 TxStatusD2; // 0x18
uint32 TxStatusD3; // 0x1c
uint32 TxStartAddrD0; // 0x20
uint32 TxStartAddrD1; // 0x24
uint32 TxStartAddrD2; // 0x28
uint32 TxStartAddrD3; // 0x2c
uint32 RxBufferStartAddr; // 0x30
uint16 EarlyRxByteCount; // 0x34
uint8 EarlyRxStatus; // 0x36
uint8 CommandRegister; // 0x37
uint16 CAPR; // 0x38 initial 0xfff0
uint16 CBA; // 0x3a initial 0x0000
uint16 InterruptMask; // 0x3c
uint16 InterruptStatus; // 0x3e
uint32 TxConfiguration; // 0x40
uint32 RxConfiguration; // 0x44
uint32 TimerCount; // 0x48
uint32 MissedPacketCounter; // 0x4c
uint8 Command93C46; //0x50
uint8 Config0; // 0x51
uint8 Config1; // 0x52
uint8 rsvd1 ; // 0x53
uint32 TimerInterrupt; // 0x54
uint8 MediaStatus; // 0x58
uint8 Config3; // 0x59
uint8 Config4; // 0x5a
uint8 rsvd2; // 0x5b
uint16 MultipleInterruptSelect; // 0x5c
uint8 PCIRevisionID; // 0x5e should be 0x10
uint8 rsvd3; // 0x5f
uint16 TSAD; // 0x60 Transmit Status of All Descriptors
uint16 BMCR; // 0x62 Basic Mode Control
uint16 BMSR; // 0x64 Basic Mode Status
uint16 ANAR; // 0x66 Auto-Negotiation Advertisement
uint16 ANLPAR; // 0x68 "" Link Partner
uint16 ANER; // 0x6a "" Expansion
uint16 DisconnectCounter; // 0x6c
uint16 FalseCarrierSenseCounter; // 0x6e
uint16 NWayTest; // 0x70
uint16 RX_ER_Counter; //0x72
uint16 CSConfiguration; // 0x74
uint16 rsvd4;
uint32 PHY1; //0x78
uint32 Twister; // 0x7c
uint8 PHY2; // 0x80
} PACKED;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* registers */
struct Registers {
    uint8  id0; // 0x00 (mac address)
    uint8  id1;
    uint8  id2;
    uint8  id3;
    uint8  id4;
    uint8  id5;
    uint16 rsvd0; // 0x06-0x07
    uint8  mar0;
    uint8  mar1;
    uint8  mar2;
    uint8  mar3;
    uint8  mar4;
    uint8  mar5;
    uint8  mar6;
    uint8  mar7;
     uint32 TxStatusD0; // 0x10
     uint32 TxStatusD1; // 0x14
     uint32 TxStatusD2; // 0x18
     uint32 TxStatusD3; // 0x1c
    uint32 TxStartAddrD0; // 0x20
    uint32 TxStartAddrD1; // 0x24
    uint32 TxStartAddrD2; // 0x28
    uint32 TxStartAddrD3; // 0x2c
    uint32 RxBufferStartAddr; // 0x30
    uint16 EarlyRxByteCount; // 0x34
    uint8  EarlyRxStatus; // 0x36
    uint8  CommandRegister; // 0x37
    uint16 CAPR; // 0x38 initial 0xfff0
    uint16 CBA; // 0x3a initial 0x0000
    uint16 InterruptMask; // 0x3c
    uint16 InterruptStatus; // 0x3e
    uint32 TxConfiguration; // 0x40
    uint32 RxConfiguration; // 0x44
    uint32 TimerCount; // 0x48
    uint32 MissedPacketCounter; // 0x4c
    uint8  Command93C46; //0x50
    uint8  Config0; // 0x51
    uint8  Config1; // 0x52
    uint8  rsvd1 ; // 0x53
    uint32 TimerInterrupt; // 0x54
    uint8  MediaStatus; // 0x58
    uint8  Config3; // 0x59
    uint8  Config4; // 0x5a
    uint8  rsvd2; // 0x5b
    uint16 MultipleInterruptSelect; // 0x5c
    uint8  PCIRevisionID; // 0x5e should be 0x10
    uint8  rsvd3; // 0x5f
    uint16 TSAD; // 0x60 Transmit Status of All Descriptors
    uint16 BMCR; // 0x62 Basic Mode Control
    uint16 BMSR; // 0x64 Basic Mode Status
    uint16 ANAR; // 0x66 Auto-Negotiation Advertisement
    uint16 ANLPAR; // 0x68 "" Link Partner
    uint16 ANER; // 0x6a "" Expansion
    uint16 DisconnectCounter; // 0x6c
    uint16 FalseCarrierSenseCounter; // 0x6e
    uint16 NWayTest; // 0x70
    uint16 RX_ER_Counter; //0x72
    uint16 CSConfiguration; // 0x74
    uint16 rsvd4;
    uint32 PHY1; //0x78
    uint32 Twister; // 0x7c
    uint8  PHY2; // 0x80
} PACKED;


EDIT: Sun Virtual Box, MS Virtual PC laufen :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:50:43 22.02.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:42:32 20.02.2010   Titel:              Zitieren

Rev. 111:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=111

IRQ kann jetzt über Netz ausgelöst werden! :)

BAR[1].baseAddress ist die richtige! (MMIO anstelle I/O)

Ich habe folgendes gemacht:
- im Router bei DHCP die mac-Adresse fest an eine IP gekoppelt (statisch)
- PING geschickt, "RTL8139 IRQ" kommt

TODO: hängt komplett da fest (da fehlt: 16 bit von 003Eh bis 003Fh lesen und genauso wieder zurück schreiben. "writing a 1 to any bit will reset that bit")
TODO: Basis-Adresse noch mit & 0xFFFC bearbeitet werden (analog USB-Treiber)
TODO: Ping wird nicht sauber bearbeitet, löst nur IRQ aus

Aber immerhin, Netzwerkkarte wurde erkannt und angesprochen. :) (thx to tty and homix)

Warum geht das mit qemu nicht?

Beim real PC gibt es jetzt ständig IRQ-Alarm
http://www.digitale-elektronik.de/shopsystem/rtl8139d-datasheet.pdf (S. 19 von 67)?

EDIT: Sun Virtual Box, MS Virtual PC laufen :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:53:02 22.02.2010, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:04:57 20.02.2010   Titel:              Zitieren

Rev. 112:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=112

Einige Verbesserungen in pci.c

Der IRQ muss im Handler noch zurück gesetzt werden. Dazu brauchen wir aber eine Funktion: phys. Addr. ---> virt. Addr. (gilt auch für USB)

Wir verwenden momentan die MMIO-Adresse der RTL8139 Netzwerkkarte. Mit der IO-Adresse klappt es nicht (warum? sollte gehen!).

EDIT: Sun Virtual Box, MS Virtual PC laufen :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:54:53 22.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:42:48 20.02.2010   Titel:              Zitieren

Rev. 113:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=113

Netzwerk IRQ bei RTL8139 funktioniert, der Install-Handler wurde aber wieder deaktiviert, weil wir momentan den Interrupt nicht wieder abstellen können (Paging-Problem). Erst, wenn das Design stimmt, wird daran weiter entwickelt.

EDIT: Sun Virtual Box, MS Virtual PC laufen :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:56:30 22.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:05:22 21.02.2010   Titel:              Zitieren

Rev. 114:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=114

Netzwerk IRQ bei RTL8139 funktioniert, der Install-Handler wurde wieder aktiviert, nachdem wir den Interrupt abstellen können, geht über out(...,data) also über den IO anstelle MMIO. Wir fahren momentan zweigleisig. ;)

User-Lib: auf Wunsch von tty wurde strchr(...) hinzu gefügt (bitte testen)

EDIT: Sun Virtual Box, MS Virtual PC laufen :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:58:23 22.02.2010, insgesamt 2-mal bearbeitet
Baba Yaga
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.02.2010
Beiträge: 132
Beitrag Baba Yaga Mitglied 00:31:10 21.02.2010   Titel:              Zitieren

Erhard Henkes schrieb:

wie kommt man korrekt an folgende Strukturen:
http://www.digitale-elektronik.de/shopsystem/rtl8139d-datasheet.pdf (S.14/15)

http://svn.rot13.org/index.cgi/pearpc/view/src/io/rtl8139/rtl8139.cc?rev=1
[cpp]/* registers */
struct Registers {
uint8 id0; // 0x00 (mac address)
...
uint8 PHY2; // 0x80
} PACKED;

Wieso haust Du die Register des Ethernernet-Controllers in eine Struktur? Das ist doch Blödsinn. Mach Dir Makros dafür


Zuletzt bearbeitet von Erhard Henkes am 01:40:26 22.02.2010, insgesamt 1-mal bearbeitet
XanClic
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.10.2009
Beiträge: 95
Beitrag XanClic Mitglied 01:20:10 21.02.2010   Titel:              Zitieren

Baba Yaga schrieb:
Wieso haust Du die Register des Ethernernet-Controllers in eine Struktur? Das ist doch Blödsinn. Mach Dir Makros dafür

Für MMIO ist das kein Blödsinn, für I/O-Space dann schon eher. Aber bis jetzt wird MMIO ja noch fleißig benutzt.

_________________
http://www.lowlevel.eu/
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:34:52 21.02.2010   Titel:              Zitieren

Rev. 115:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=115

Weitere Verbesserungen in pci.c bezüglich RTL8139.
Die gelesenen Inhalte (receiving buffer) werden angezeigt (Länge der Eingangsdaten (Bit 2 u.3), auf max. 300 Byte begrenzt).

Realer PC, Bochs, Qemu laufen. :)
MS VPC und Sun VB brechen nach dem Start der Shell ab. :confused:

Analyse der Daten im Receiving Buffer:
"Bytes 0-1: Paketheader (Bit 0 = ROK)"
"Bytes 2-3: Länge des Pakets"
Dann geht es mit der MAC-Adresse des Empfängers weiter (Präambel, SFD ignorieren):
http://lowlevel.brainsware.org/wiki/index.php/RTL8139#Empfangen
http://lowlevel.brainsware.org/wiki/index.php/Ethernet

Screenshot:
http://www.henkessoft.de/OS_Dev/Bilder/rev115.png

EDIT: 22.feb. :arrow: Sun VB und MS VPC laufen mit dem FloppyImage (SVN) :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:01:18 22.02.2010, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:04:16 21.02.2010   Titel:              Zitieren

Zitat:
Wieso haust Du die Register des Ethernernet-Controllers in eine Struktur?
Habe ich nicht gemacht, wollte das nur beispielhaft zeigen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:24:39 21.02.2010   Titel:              Zitieren

Rev. 116:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=116

Analyse des Receiving Buffer Contents

EDIT: Version läuft mit Sun VB und MS VPC. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:39:45 22.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:46:12 21.02.2010   Titel:              Zitieren

Rev. 117:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=117

Übersichtlichere Analyse/Darstellung des Receiving Buffers

EDIT: Version läuft mit Sun VB und MS VPC. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:37:18 22.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:35:10 21.02.2010   Titel:              Zitieren

Rev. 118:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=118

- in/out-Funktionen optimiert (util.c)
- neues TicTacToe
- einige Strukturen auf packed umgestellt

EDIT: Version läuft mit Sun VB und MS VPC. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:34:15 22.02.2010, insgesamt 1-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 18:13:28 21.02.2010   Titel:              Zitieren

Rev. 119:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=119

- Funktion eingebaut um Speicher bei 0xF...... zu ID-mappen:
bool paging_do_idmapping( uint32_t phys_addr )
- Einige kleinere syntaktische Sachen, weil's sonst (bei mir) nicht kompiliert hat.
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 20:01:51 21.02.2010   Titel:              Zitieren

Rev. 120:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=120

- Funktion "testch", um zu checken ob eine Taste gedrückt wurde und abholbereit ist
- Zug fährt jetzt unabhängig von Tastatureingaben

EDIT: nein, macht er nicht :(


Zuletzt bearbeitet von Erhard Henkes am 23:28:51 21.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:29:47 21.02.2010   Titel:              Zitieren

Rev. 121:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=121

Einige Korrekturen:
- in kernel.ld stand noch shared.o
- user/user_test_c/userlib..h/c und user/user_program_c/... waren verschieden (muss leider immer von Hand von user_program nach user_test kopiert werden.
- hello.c ist nun TTT 0.3

EDIT: Version läuft mit Sun VB und MS VPC. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:30:13 22.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:49:34 21.02.2010   Titel:              Zitieren

Problem: stellt man in ckernel.c pciScan nach Installation von Paging und versucht in pci.c

paging_do_idmapping( BaseAddressRTL8139_MMIO );

dann erhält man einen #PF.

Debugging ergibt folgendes:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
bool paging_do_idmapping( uint32_t phys_addr )
{
    // TODO: Ensure that the physical memory is not used otherwise
    // TODO: The page table entry may point to a different address
    // TODO: Create solution for addreses != 0xF...

    // Adress must be a 0xF...-address

    if ( (phys_addr & 0xF0000000) != 0xF0000000 )
        return false;

printformat("\tDEBUG: phys addr OK\n");

    const uint32_t pagenr = phys_addr/PAGESIZE;
    const uint32_t aligned = phys_addr & ~4095;

    // Setup the page
    page_table_t* pt = kernel_pd->tables[pagenr/1024];
printformat("DEBUG: behind page_table_t* pt = kernel_pd->tables[pagenr/1024];\n");

    ASSERT( pt );
    printformat("DEBUG: behind ASSERT. pt = %X\n", &pt);
    printformat("DEBUG: pt->pages[pagenr%1024] = %X\n", &(pt->pages[pagenr%1024]));

    pt->pages[pagenr%1024] = aligned | MEM_PRESENT | MEM_WRITE | MEM_KERNEL; //<--- #PF entsteht hier
printformat("DEBUG: behind pt->pages[pagenr%1024] = aligned | MEM_PRESENT | MEM_WRITE | MEM_KERNEL;\n");

    // Reserve the physical memory
    phys_set_bits( aligned, aligned+PAGESIZE, true );
printformat("DEBUG: behind phys_set_bits( aligned, aligned+PAGESIZE, true );\n");

    return true;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
bool paging_do_idmapping( uint32_t phys_addr )
{
// TODO: Ensure that the physical memory is not used otherwise
// TODO: The page table entry may point to a different address
// TODO: Create solution for addreses != 0xF...

// Adress must be a 0xF...-address

if ( (phys_addr & 0xF0000000) != 0xF0000000 )
return false;

printformat("\tDEBUG: phys addr OK\n");

const uint32_t pagenr = phys_addr/PAGESIZE;
const uint32_t aligned = phys_addr & ~4095;

// Setup the page
page_table_t* pt = kernel_pd->tables[pagenr/1024];
printformat("DEBUG: behind page_table_t* pt = kernel_pd->tables[pagenr/1024];\n");

ASSERT( pt );
printformat("DEBUG: behind ASSERT. pt = %X\n", &pt);
printformat("DEBUG: pt->pages[pagenr%1024] = %X\n", &(pt->pages[pagenr%1024]));

pt->pages[pagenr%1024] = aligned | MEM_PRESENT | MEM_WRITE | MEM_KERNEL; //<--- #PF entsteht hier
printformat("DEBUG: behind pt->pages[pagenr%1024] = aligned | MEM_PRESENT | MEM_WRITE | MEM_KERNEL;\n");

// Reserve the physical memory
phys_set_bits( aligned, aligned+PAGESIZE, true );
printformat("DEBUG: behind phys_set_bits( aligned, aligned+PAGESIZE, true );\n");

return true;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
bool paging_do_idmapping( uint32_t phys_addr )
{
    // TODO: Ensure that the physical memory is not used otherwise
    // TODO: The page table entry may point to a different address
    // TODO: Create solution for addreses != 0xF...

    // Adress must be a 0xF...-address

    if ( (phys_addr & 0xF0000000) != 0xF0000000 )
        return false;

printformat("\tDEBUG: phys addr OK\n");

    const uint32_t pagenr = phys_addr/PAGESIZE;
    const uint32_t aligned = phys_addr & ~4095;

    // Setup the page
    page_table_t* pt = kernel_pd->tables[pagenr/1024];
printformat("DEBUG: behind page_table_t* pt = kernel_pd->tables[pagenr/1024];\n");

    ASSERT( pt );
    printformat("DEBUG: behind ASSERT. pt = %X\n", &pt);
    printformat("DEBUG: pt->pages[pagenr%1024] = %X\n", &(pt->pages[pagenr%1024]));

    pt->pages[pagenr%1024] = aligned | MEM_PRESENT | MEM_WRITE | MEM_KERNEL; //<--- #PF entsteht hier
printformat("DEBUG: behind pt->pages[pagenr%1024] = aligned | MEM_PRESENT | MEM_WRITE | MEM_KERNEL;\n");

    // Reserve the physical memory
    phys_set_bits( aligned, aligned+PAGESIZE, true );
printformat("DEBUG: behind phys_set_bits( aligned, aligned+PAGESIZE, true );\n");

    return true;
}


Problematische Zeile: pt->pages[pagenr%1024] = aligned | MEM_PRESENT | MEM_WRITE | MEM_KERNEL; :confused:

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev121a_PF.JPG :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:10:18 21.02.2010, insgesamt 4-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 23:53:12 21.02.2010   Titel:              Zitieren

Das ist wirklich merkwürdig, die Pages für 3 GB bis 4 GB sind alle von vornherein gemappt; hier dürfte es eigentlich keinen Page Fault geben (siehe Funktion paging_install).
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 23:55:14 21.02.2010   Titel:              Zitieren

Also, die Page Table Einträge sind nicht auf physische Adressen gemappt, die Page Tables an sich haben aber ihren Platz. 0xC9028004 erscheint mir aber auch ein wenig hoch.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:01:01 22.02.2010   Titel:              Zitieren

Ich habe es auch unter Sun VB mit EHCI versucht (0xF08.....), gleiches Resultat. :(

Wir haben noch zwei Probleme (rev 121):
Sun VB: VERR_REM_VIRTUAL_CPU_ERROR
MS VPC: Interner Fehler auf virtuellem Computer

Beim Start der Shell (versteht momentan keiner, hat irgendwas mit dem Task-Wechsel zu tun)


Adressen mit #PF:
Adresse MMIO: in http://www.henkessoft.de/OS_Dev/Bilder/rev121a_PF.JPG zu sehen: 0xF2001000
Bei EHCI hatte ich 0xF1800000, dort knallte es auch.

pci.c line 285, falls vendor verschieden:
C/C++ Code:
if(    (pciDev_Array[number].deviceID == 0x8139) && (pciDev_Array[number].vendorID == 0x10EC) )
C/C++ Code:
if( (pciDev_Array[number].deviceID == 0x8139) && (pciDev_Array[number].vendorID == 0x10EC) )
C/C++ Code:
if(    (pciDev_Array[number].deviceID == 0x8139) && (pciDev_Array[number].vendorID == 0x10EC) )

können wir den vendorID-Zweig da raus nehmen?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:14:16 22.02.2010, insgesamt 1-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 00:09:57 22.02.2010   Titel:              Zitieren

Ok, hab den Fehler ausfindig gemacht. Sorry, war mein Bug. Hab's eingecheckt :)

Edit: Rev 124
- Einen Bug gefixt, läuft bei mir jetzt unter Bochs und Qemu.


Edit2: Das war ja ein wirklich bescheuerter Fehler. Und merkwürdig/schade, dass er sich nicht früher bemerkbar gemacht hat. Ich hatte
C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
// Setup the page tables for the kernel heap (3GB-4GB), unmapped
page_table_t* heap_pts = malloc( 256*sizeof(page_table_t), PAGESIZE );
memset( heap_pts, 0, 256*sizeof(page_table_t) );
for ( uint32_t i=0; i<256; ++i )
{
    kernel_pd->tables[768+i] = heap_pts;
    kernel_pd->codes[768+i] = (uint32_t)kernel_pd->tables[768+i] | MEM_PRESENT | MEM_WRITE;
    heap_pts += sizeof(page_table_t);  //<-----
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
// Setup the page tables for the kernel heap (3GB-4GB), unmapped
page_table_t* heap_pts = malloc( 256*sizeof(page_table_t), PAGESIZE );
memset( heap_pts, 0, 256*sizeof(page_table_t) );
for ( uint32_t i=0; i<256; ++i )
{
kernel_pd->tables[768+i] = heap_pts;
kernel_pd->codes[768+i] = (uint32_t)kernel_pd->tables[768+i] | MEM_PRESENT | MEM_WRITE;
heap_pts += sizeof(page_table_t); //<-----
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
// Setup the page tables for the kernel heap (3GB-4GB), unmapped
page_table_t* heap_pts = malloc( 256*sizeof(page_table_t), PAGESIZE );
memset( heap_pts, 0, 256*sizeof(page_table_t) );
for ( uint32_t i=0; i<256; ++i )
{
    kernel_pd->tables[768+i] = heap_pts;
    kernel_pd->codes[768+i] = (uint32_t)kernel_pd->tables[768+i] | MEM_PRESENT | MEM_WRITE;
    heap_pts += sizeof(page_table_t);  //<-----
}

An der Stelle mit dem Pfeil wurde der Zeiger natürlich um das Quadrat der Größe weiterbewegt - ich hatte "heap_pts" wie einen char-Pointer behandelt. Natürlich wird der Zeiger bei +X um X*Größe weiterbewegt. Ein += 1 wäre richtiger gewesen..


Zuletzt bearbeitet von Badestrand am 00:20:11 22.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:24:18 22.02.2010   Titel:              Zitieren

bei mir ist bisher nur rev 123 verfügbar? (in ckernel.c: rev. 124) :D

Zitat:
Das war ja ein wirklich bescheuerter Fehler.
Fehler sind immer bescheuert. :D

Super! Rev. 123 läuft schon gut. Nun können wir endlich den pciScan hinter Paging und Heap ausführen. Danke! :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:32:39 22.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:48:37 22.02.2010   Titel:              Zitieren

Rev. 124:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=124

pci.c: EHCI (USB) MMIO ebenfalls in das ID mapping eingebunden

Revisions-Nr. wieder identisch!

Real Hardware läuft (von Cuervo kommen da allerdings Problemmeldungen, sollten verschwinden, sobald das MS VPC u. Sun VB Problem gelöst wird).

Status bei den Simulationen:
Bochs 2.4.2: läuft
Qemu: läuft
MS VPC 6.0.192.0: läuft! :)
Sun VB 3.1.2 und 3.1.4: läuft! :)

@Badestrand: was hast Du da genau gerade gebogen? (wichtig, weil wir immer wieder in diese Grube fallen, ohne es zu merken)
EDIT: Ich denke, Du bist unschuldig an dieser Sache mit MS VPC und Sun VB. :D

EDIT (aus IRC):
- bei 115 hatte ich notiert, MS VPC und Sun VB brechen nach dem Start der Shell ab.
- test mit dem FloppyImage aus dem SVN: ok
- da soll man nicht durchknallen
- Die Probleme mit Sun VB und MS VPC lassen sich nicht nachvollziehen!
- alles geht plötzlich
- so liest sich das auch oft im Internet: "durch Neuinstallation von VB behoben"
- das würde ich wirklich gerne verstehen
- XanClic hat beim Suchen und Vergleichen auch nie was gefunden

Wie bekommt man das Thema "Tests mit Simulationen und realer Hardware" in den Griff?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:36:38 22.02.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:04:37 22.02.2010   Titel:              Zitieren

Rev. 125:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=125

- RTL8139.c: handler ausgelagert
- Adressen von IO komplett auf MMIO umgestellt

Rev. 126:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=126
install_RTL8139(uint32_t number) auch noch ausgelagert

Real Hardware läuft

Status bei den Simulationen:
Bochs 2.4.2: läuft
Qemu 0.11.50: läuft
MS VPC 6.0.192.0: läuft.
Sun VB 3.1.2 und 3.1.4: läuft.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:26:02 22.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:42:26 22.02.2010   Titel:              Zitieren

Rev. 127:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=127

- Zwischenschritt in RTL8139.c
- neu: ipTcpStack.h/c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:25:49 23.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:25:32 23.02.2010   Titel:              Zitieren

Rev. 128:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=128

userlib.c: gets(char*) funktionsfähig gemacht, aber irgendwie merkwürdig.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
char* gets(char* s)
{
    int i=0,flag=0;
    char c;
    //settaskflag(0);
    do
    {
        c = getch();
        if(c=='\b')  // Backspace
        {
           if(i>0)
           {
              putch(c);
              s[i-1]='\0';
              --i;
           }
           else
           {
               beep(50,20);
               if(flag==false)
               {
                   putch('\n');
                   flag=true;
               }
           }
        }
        else
        {
            s[i] = c;
            putch(c);
            flag=false;
            i++;
        }
    }
    while(c!=10); // Linefeed
    s[i]='\0';

    //settaskflag(1);
    return s;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
char* gets(char* s)
{
int i=0,flag=0;
char c;
//settaskflag(0);
do
{
c = getch();
if(c=='\b') // Backspace
{
if(i>0)
{
putch(c);
s[i-1]='\0';
--i;
}
else
{
beep(50,20);
if(flag==false)
{
putch('\n');
flag=true;
}
}
}
else
{
s[i] = c;
putch(c);
flag=false;
i++;
}
}
while(c!=10); // Linefeed
s[i]='\0';

//settaskflag(1);
return s;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
char* gets(char* s)
{
    int i=0,flag=0;
    char c;
    //settaskflag(0);
    do
    {
        c = getch();
        if(c=='\b')  // Backspace
        {
           if(i>0)
           {
              putch(c);
              s[i-1]='\0';
              --i;
           }
           else
           {
               beep(50,20);
               if(flag==false)
               {
                   putch('\n');
                   flag=true;
               }
           }
        }
        else
        {
            s[i] = c;
            putch(c);
            flag=false;
            i++;
        }
    }
    while(c!=10); // Linefeed
    s[i]='\0';

    //settaskflag(1);
    return s;
}


Vielleicht liegt es auch daran, das settaskflag ausgeschaltet wurde, bitte testen. Obiges gets ist nur work-around, aber auch gut zum Testen.
Die ausführliche Version ist hier: http://www.c-plusplus.de/forum/viewtopic-var-t-is-260731-and-start-is-50.html

Ich habe es am realen PC getestet: Da kommt man nicht mehr in die obere Zeile.
Bei qemu geht das ab und zu, also "unsauber".

Das hat mit der Task-/Video-Steuerung zu tun.
ich hoffe, dass dieses gets zunächst die Wünsche von MrX und Cuervo befriedigen. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:40:28 23.02.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:53:45 23.02.2010   Titel:              Zitieren

Rev. 129:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=129

TCP/IP-Stack leicht verändert/korrigiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:51:30 23.02.2010   Titel:              Zitieren

Rev. 130:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=130

TCP/IP-Stack leicht verändert

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev130.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:06:40 23.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:25:42 23.02.2010   Titel:              Zitieren

Rev. 131:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=131

Korrektur bei TCP/IP (zusätzlich im Screenshot oben: Erkennung von ARP) :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:26:50 23.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:19:04 24.02.2010   Titel:              Zitieren

Rev. 132:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=132

pci.c: USB EHCI: Einstieg in Daten-Ermittlung (z.B. OpRegs Adresse, siehe: http://www.c-plusplus.de/forum/viewtopic-var-t-is-253016-and-start-is-39.html)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:46:09 24.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:59:19 24.02.2010   Titel:              Zitieren

Rev. 133:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=133

- paging.c: bool paging_do_idmapping( uint32_t phys_addr ) versuchsweise ab 0xC0000000 (Grund: manche MMIO beginnen ab 0xD....... oder 0xE.......)
- ckernel.c:
C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
int main()
{
    init();
    pODA->Memory_Size = paging_install();
    printformat( "\n\nMemory size: %d KB\n", pODA->Memory_Size/1024 );
    heap_install();
    pciScan(); // scan of pci bus; results go to: pciDev_t pciDev_Array[50]; (cf. pci.h)
    tasking_install();
    sti();
C/C++ Code:
1
2
3
4
5
6
7
8
9
int main()
{
init();
pODA->Memory_Size = paging_install();
printformat( "\n\nMemory size: %d KB\n", pODA->Memory_Size/1024 );
heap_install();
pciScan(); // scan of pci bus; results go to: pciDev_t pciDev_Array[50]; (cf. pci.h)
tasking_install();
sti();
C/C++ Code:
1
2
3
4
5
6
7
8
9
int main()
{
    init();
    pODA->Memory_Size = paging_install();
    printformat( "\n\nMemory size: %d KB\n", pODA->Memory_Size/1024 );
    heap_install();
    pciScan(); // scan of pci bus; results go to: pciDev_t pciDev_Array[50]; (cf. pci.h)
    tasking_install();
    sti();

pciScan direkt hinter heap_install(). In pciScan() werden MMIO (USB EHCI, Netzwerkarte ID-gemappt.

Mal sehen, ob es klappt oder #PF hagelt? :leak:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:38:12 25.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:31:46 25.02.2010   Titel:              Zitieren

Rev. 134:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=134

Für unsere verehrten User:
void clear_screen() <--- TODO: nur oberen Bildschirmbereich löschen.
void gotoxy(unsigned char x, unsigned char y)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 07:04:10 26.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 07:39:41 26.02.2010   Titel:              Zitieren

Rev. 135:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=135

userlib.h/c: clear_screen() umgestellt auf Löschen der ersten 46 Zeilen (User-Bereich).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:07:07 26.02.2010   Titel:              Zitieren

Rev. 136:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=136

- kleine Verbesserungen nach cppcheck
- c99 im makefile bei user ergänzt

Rev. 137:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=137

ext in paging.c wieder eingefügt, ansonsten Error-Meldung.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:45:14 26.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:33:04 26.02.2010   Titel:              Zitieren

Rev. 138:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=138

neu: ehci.c (als Keimzelle für den USB 2.0 Host Controller) vergessen worden!
userlib.h/.c: clearScreen(backcolor)
flpydsk.c: Zählervariable versuchsweise im Schleifenkopf definiert (c99 style)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:59:24 26.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:59:03 26.02.2010   Titel:              Zitieren

Rev. 139:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=139

- ehci.c war vergessen worden, jetzt dabei
- fat12.c auf c99 umgestellt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:21:56 26.02.2010   Titel:              Zitieren

Rev. 140:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=140

pci.c und initrd.c auf c99 umgestellt (Zähler im Schleifenkopf)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:42:28 26.02.2010   Titel:              Zitieren

Rev. 141
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=141

rtl8139.c, util.c und userlib.c auf c99 umgestellt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:42:42 26.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:53:09 26.02.2010   Titel:              Zitieren

Rev. 142:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=142

Fehler in clear_userscreen (video.c) korrigiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:56:50 27.02.2010   Titel:              Zitieren

Rev. 144:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=144

ehci.h/c: initEHCIHostController() TEST-Version (erste Gehversuche :) )

pci.c, Zeilen 187/188:
C/C++ Code:
analyzeEHCI(bar);
initEHCIHostController();
C/C++ Code:
analyzeEHCI(bar);
initEHCIHostController();
C/C++ Code:
analyzeEHCI(bar);
initEHCIHostController();


siehe EHCI Spec Rev. 1.0, Kap. 4 "Operational Model"

Ideal: Sun VB oder reale Hardware mit EHCI USB und Netzwerkkarte 8139

(Anm:: rev. 141-143 war fehlerhaft bezüglich rtl8139.c)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 03:11:42 27.02.2010, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:32:36 27.02.2010   Titel:              Zitieren

Rev. 145:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=145

- Korrektur in RTL8139.c (reset abwarten)
- TTT 0.4 von MrX eingespielt (Sehr schön gemacht! Macht aber Probleme, wenn auf echter Hardware eine RTL8139 vorhanden ist und diese Interrupts und Prints sendet)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 00:24:40 28.02.2010   Titel:              Zitieren

Erhard Henkes schrieb:
Rev. 145:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=145

Jede Quellcodedatei die ich bisher von euch gesehen habe (diese z.B.) sieht so furchtbar unvollständig aus. ihr arbeitet wohl an 100 Baustellen gleichzeitig. ;)

_________________
a = b << c; /* shift happens */
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:33:20 28.02.2010   Titel:              Zitieren

Es gibt derzeit auch viele Baustellen... Vlt. hast Du konkrete Vorschläge, wo man was verbessern könnte? :-)
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 00:50:51 28.02.2010   Titel:              Zitieren

Mr X schrieb:
Es gibt derzeit auch viele Baustellen... Vlt. hast Du konkrete Vorschläge, wo man was verbessern könnte? :-)

Mir fällt z.B. auf, dass der Netzwerktreiber keine Sendefunktion hat, dass er direkt TCP aufruft, dass TCP nur eine Empfangsfunktion hat, die noch nicht mal TCP kann. ;) dass TCP irgendwie auch ARP teilweise behandelt, dass alles mit printformat und settextcolor durchsetzt ist, usw.

Nicht dass ich euch reinreden will, aber das sieht für mich alles sehr nach unkoordinierter Bastelei aus. ;)

_________________
a = b << c; /* shift happens */
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:57:03 28.02.2010   Titel:              Zitieren

Der Netzwerktreiber wird grad erst geschrieben; Dass der nicht besonders "schön"/funktiosfähig ist ist daher wohl eher nicht verwunderlich. Wenn Du dich damit auszukennst, wärst Du sicher eine große Hilfe bei der Entwicklung dieses Treibers...

Das settextcolor und printformat wird wohl der Übersichtlichkeit dienen.

Zitat:
Nicht dass ich euch reinreden will

Was heißt reinreden... Du kannst gerne mitmachen :) Schau doch mal im IRC vorbei...
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 01:21:54 28.02.2010   Titel:              Zitieren

Mr X schrieb:

Der Netzwerktreiber wird grad erst geschrieben; Dass der nicht besonders "schön"/funktiosfähig ist ist daher wohl eher nicht verwunderlich. Wenn Du dich damit auszukennst, wärst Du sicher eine große Hilfe bei der Entwicklung dieses Treibers...

Ich kenne mich ein wenig damit aus, zwar nicht mit dem RTL, aber Netzwerk-Treiber funktionieren nach oben hin alle ähnlich: sie haben alle eine Init, eine Send und eine Receive Funktion. Interrupt-Handling und das Weiterreichen von Paketen sollte der Treiber besser nicht selbst übernehmen. In diesem Sinne vermisse ich auch Modularität in eurem Projekt, ohne die ihr irgenwann den Überblick verlieren werdet. Gleiches gilt für Protokollstacks. Hier wird Modularität und Layering extrem wichtig, weil z.B. IP/TCP auch von WLAN, PPP, und anderen Paketdiensten "gefüttert" werden kann. Üblich für sowas sind Dispatcher-Module, also Code der dynamisch Protokolle an die Netzwerkinterfaces ankoppelt.

Mr X schrieb:

Das settextcolor und printformat wird wohl der Übersichtlichkeit dienen.

Nicht der Übersichtlichkeit des Codes ;)
Debug-Ausgaben könnt ihr z.B. über define oder Flags steuern. So wie es jetzt ist, müsst ihr später alles auskommentieren.

Mr X schrieb:

Zitat:
Nicht dass ich euch reinreden will

Was heißt reinreden... Du kannst gerne mitmachen :) Schau doch mal im IRC vorbei...

Danke für die Einladung, aber ich bin kein IRC-Fan und ausserdem ein sehr schlechter Teamplayer. Ich beschränke mich darauf, euch zu kritisieren, wenn mir etwas auffällt.

Edit: die schlimmsten Typos beseitigt

_________________
a = b << c; /* shift happens */


Zuletzt bearbeitet von Z am 01:40:52 28.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 09:26:27 28.02.2010   Titel:              Zitieren

@Z: Wir schätzen konstruktive Kritik. Daher bitte weiter machen. Zuständig für den Bereich Netzwerktreiber ist momentan übrigens 'tty'.

Wenn Du die Übersicht hast, könntest Du deine Kraft auf den USB-EHCI-Treiber lenken (ehci.c). Da schätze ich jede konkrete Unterstützung.

Zitat:
Debug-Ausgaben könnt ihr z.B. über define oder Flags steuern. So wie es jetzt ist, müsst ihr später alles auskommentieren.

Das ist richtig. Dafür verwenden wir folgenden Mechanismus:
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
#ifdef _DIAGNOSIS_
settextcolor(2,0);
printformat("%X dev: %x vend: %x\t",
           ( pciDev_t*)element,
           ((pciDev_t*)element)->deviceID,
           ((pciDev_t*)element)->vendorID);
settextcolor(15,0);
#endif
C/C++ Code:
1
2
3
4
5
6
7
8
#ifdef _DIAGNOSIS_
settextcolor(2,0);
printformat("%X dev: %x vend: %x\t",
( pciDev_t*)element,
((pciDev_t*)element)->deviceID,
((pciDev_t*)element)->vendorID);
settextcolor(15,0);
#endif
C/C++ Code:
1
2
3
4
5
6
7
8
#ifdef _DIAGNOSIS_
settextcolor(2,0);
printformat("%X dev: %x vend: %x\t",
           ( pciDev_t*)element,
           ((pciDev_t*)element)->deviceID,
           ((pciDev_t*)element)->vendorID);
settextcolor(15,0);
#endif


_DIAGNOSIS_ wird momentan in os.h gesetzt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:36:39 28.02.2010   Titel:              Zitieren

Rev. 146:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=146

in ehci.c und paging Änderungen.

Dieses merkwürdige Phänomen, das MS VPC und Sun VB nach einigen Taskwechseln stoppen, obwohl real hardware tapfer läuft, ist wieder da! Bitte suchen helfen. :)

Ich habe den Diagnosis-Modus angeschaltet (kann man in os.h abschalten).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:39:21 28.02.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:42:23 28.02.2010   Titel:              Zitieren

So... Nachdem ich heute in das Projekt bei Sourceforge aufgenommen wurde gibts hiermit:

Rev. 147
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=147

zzz_alternative_User-Programme entfernt
user/user_test_c/build.bat geändert
user/user_test_c/mingw32-make.exe entfernt
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:18:06 28.02.2010   Titel:              Zitieren

Rev. 148
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=148

user/user_test_c/makefile geändert, sodass es ohne msys funktioniert und die userlib nicht mehr im gleichen Ordner liegen muss
user/user_test_c/userlib.c/.h gelöscht, da nicht mehr nötig


EDIT: Das makefile macht auf manchen Systemen derzeit noch Probleme...


Zuletzt bearbeitet von Mr X am 14:30:48 28.02.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:30:09 28.02.2010   Titel:              Zitieren

Rev. 149
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=149

Diagnosis-Ausgabe deaktiviert
user/user_test_c/makefile korrigiert
kernel/task.c und kernel/fat12.c geändert, damit man mit -Wshadow kompilieren kann
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:39:55 28.02.2010   Titel:              Zitieren

Rev. 150
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=150

neues makefile: geht (nur) ohne msys

:arrow: :arrow: :arrow: :warning: MSYS unbedingt aus dem PATH nehmen! :warning:


Zuletzt bearbeitet von Erhard Henkes am 15:44:11 28.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:40:25 28.02.2010   Titel:              Zitieren

Rev. 151:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=151

- kernel_pd in task.c verwendet (bisher war dort NULL verwendet worden für das kernel PD)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:12:45 28.02.2010   Titel:              Zitieren

Rev. 152:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=152

  • TTT 0.41: Macht Gebrauch von der Compileroption -Wshadow, entsprechende Änderungen am Code
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 20:32:50 28.02.2010   Titel:              Zitieren

Erhard Henkes schrieb:
- kernel_pd in task.c verwendet (bisher war dort NULL verwendet worden für das kernel PD)

War aber kein Bug, sondern ein Feature.. :) Ne im Ernst, wollte das Kernel-PD private lassen. Ist aber irgendwie doch doof, ich ändere es die Tage mal, macht auch den Code ein bissl kürzer.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:24:40 28.02.2010   Titel:              Zitieren

Rev. 153:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=153

Dank des Hinweises von +gjm+ wurde endlich das Sun VB / MS VPC Problem gefunden.
Ich habe Datum/Zeit auskommentiert, bis die Funktion in Ordnung gebracht ist.

InitEHCI habe ich ebenfalls auskommentiert, da ich dies für meine Tests benötige.
Wenn jemand da mithelfen will, in pci.c aktivieren.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:12:23 28.02.2010   Titel:              Zitieren

Rev. 154:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=154

  • makefile aufgeräumt
  • user_tools ausgelagert nach user/user_tools und makefiles darauf angepasst


Anmerkung (ehenkes): Super! Nun muss man nicht nach jeder Änderung die userlib.h/c kopieren. Arbeitserleichterung und eine Fehlerquelle weniger. :live:


Zuletzt bearbeitet von Erhard Henkes am 23:55:30 28.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:49:08 28.02.2010   Titel:              Zitieren

Rev. 155:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=155

- Fehler in time.c in Fkt. getCurrentDateAndTime behoben. :)

Damit ist ein wichtiger Fehler (buffer overflow) verschwunden, der von Sun VB und MS VPC sensibel detektiert wurde.

Dank an +gjm+ für den Fehlerhinweis! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:15:06 01.03.2010   Titel:              Zitieren

Rev. 156:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=156

- Fehler in ehci.c behoben
- ehci.c: die 6 Interrupt-Bits in USBINTR auf 0 gesetzt (wenn alle 6 gesetzt sind, kommen keine Tastenanschläge mehr durch)

Tests auf realem PC und Sun VB bezüglich USB EHCI: ok :)

Rev. 157:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=157
Zwischenschritt bei ehci.c

Rev. 158:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=158
Zwischenschritt bei ehci.c

Rev. 159:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=159
Zwischenschritt bei ehci.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:20:14 02.03.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:47:25 02.03.2010   Titel:              Zitieren

Rev. 160:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=160

EHCI USB- und Port-Status ausgewertet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:30:05 02.03.2010   Titel:              Zitieren

Rev. 161:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=161

ehci.c Korrekturen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:48:57 02.03.2010   Titel:              Zitieren

Rev. 162:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=162

- Veränderungen ehci.c (hängt allerdings noch bei Einstecken von USB-Devices ??)
- util.c: memsetl (32-Bit-Werte)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:14:10 02.03.2010   Titel:              Zitieren

Rev. 163:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=163

ehci.c Zwischenschritt Port enablen (VBox klappt (leider nicht sicher), real PC noch nicht)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:14:50 02.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:41:27 02.03.2010   Titel:              Zitieren

Rev. 164:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=164

timer.c: Hinweis von +gjm+ umgesetzt, damit Sun VirtualBox die richtige Zeit seit Start anzeigt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:31:02 03.03.2010   Titel:              Zitieren

Rev. 165:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=165

ehci.c: PortStatus 1005h (EHCI-owned, PowerOn, Enabled, DeviceOnPort)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:20:20 03.03.2010   Titel:              Zitieren

Rev. 166:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=166

ehci.c
Folgendes wurde vor dem HC Init eingebaut:
stoppen - warten - resetbit auf 1 setzen - warten bis resetbit 0 wird - weiter

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:09:01 03.03.2010   Titel:              Zitieren

Rev. 167:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=167

Port Changes werden nun korrekt behandelt. :)
(Die Interrupts sind noch lahm gelegt, wir pollen)

Bitte heftig USB-Sticks und sonstige USB 2.0 Devices rein/raus. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:50:38 03.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:37:30 03.03.2010   Titel:              Zitieren

Rev. 168:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=168

ehci.c Korrekturen??

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:43:58 03.03.2010   Titel:              Zitieren

Rev. 169:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=169

ehci.c

Ports: (zusätzlich: wait und set reset bit to 0)
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
    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
    }
C/C++ Code:
1
2
3
4
5
6
7
8
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
}
C/C++ Code:
1
2
3
4
5
6
7
8
    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
    }

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:57:04 03.03.2010, insgesamt 1-mal bearbeitet
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 00:40:38 04.03.2010   Titel:              Zitieren

Erhard Henkes schrieb:

C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
    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
    }
C/C++ Code:
1
2
3
4
5
6
7
8
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
}
C/C++ Code:
1
2
3
4
5
6
7
8
    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)
C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
    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
    }
C/C++ Code:
1
2
3
4
5
6
7
8
9
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
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
    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...
C/C++ Code:
#define BIT0 (1<<1)
#define
BIT1 (1<<2)
#define
BIT2 (1<<3)
/* usw */
C/C++ Code:
#define BIT0 (1<<1)
#define
BIT1 (1<<2)
#define
BIT2 (1<<3)
/* usw */
C/C++ Code:
#define BIT0 (1<<1)
#define
BIT1 (1<<2)
#define
BIT2 (1<<3)
/* usw */

_________________
a = b << c; /* shift happens */


Zuletzt bearbeitet von Z am 00:50:37 04.03.2010, insgesamt 2-mal bearbeitet
XanClic
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.10.2009
Beiträge: 95
Beitrag XanClic Mitglied 16:43:53 04.03.2010   Titel:              Zitieren

Z schrieb:
Nachtrag: Um 1-Bit Werte lesbarer zu machen, könntest Du folgendes tun und zu den System-Headers hinzufügen...
C/C++ Code:
#define BIT0 (1<<1)
#define
BIT1 (1<<2)
#define
BIT2 (1<<3)
/* usw */
C/C++ Code:
#define BIT0 (1<<1)
#define
BIT1 (1<<2)
#define
BIT2 (1<<3)
/* usw */
C/C++ Code:
#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:
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
   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
    }
C/C++ Code:
1
2
3
4
5
6
7
8
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
}
C/C++ Code:
1
2
3
4
5
6
7
8
   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...

_________________
http://www.lowlevel.eu/


Zuletzt bearbeitet von XanClic am 16:44:25 04.03.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:12:00 04.03.2010   Titel:              Zitieren

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
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:40:32 04.03.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:22:10 04.03.2010   Titel:              Zitieren

Rev. 172:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=172

ehci.h/.c: Konstanten (define) eingebaut, Port-Nummerierung korrigiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 00:05:18 05.03.2010   Titel:              Zitieren

XanClic schrieb:
Z schrieb:
Nachtrag: Um 1-Bit Werte lesbarer zu machen, könntest Du folgendes tun und zu den System-Headers hinzufügen...
C/C++ Code:
#define BIT0 (1<<1)
#define
BIT1 (1<<2)
#define
BIT2 (1<<3)
/* usw */
C/C++ Code:
#define BIT0 (1<<1)
#define
BIT1 (1<<2)
#define
BIT2 (1<<3)
/* usw */
C/C++ Code:
#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 :eek: Ja, Du hast natürlich recht.

_________________
a = b << c; /* shift happens */
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 03:09:12 05.03.2010   Titel:              Zitieren

Rev. 173:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=173

- ehci.c Zwischenschritt (INT-Handler implementiert, Problem: INT aktivieren: Absturz)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 04:04:33 05.03.2010   Titel:              Zitieren

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. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 04:08:15 05.03.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:09:35 05.03.2010   Titel:              Zitieren

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 angepasst

kernel.bin: 50.624 Bytes
siehe: http://www.c-plusplus.de/forum/viewtopic-var-t-is-260731-and-start-is-68.html (thx to +gjm+)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:08:03 05.03.2010   Titel:              Zitieren

Rev. 176
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=176

PortStatus wird bei Änderungen in Zeile 46-48 "Info-Bereich" ausgegeben.

Test auf Real PC i.O., VBox hängt bei mir.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:04:13 05.03.2010   Titel:              Zitieren

Rev. 177
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=177

Wie 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.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:23:08 05.03.2010   Titel:              Zitieren

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)


Zuletzt bearbeitet von Erhard Henkes am 00:04:59 06.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:00:09 06.03.2010   Titel:              Zitieren

Rev. 179
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=179

ehci.c: wieder zurück gebaut auf Interrupt-Technik, also kein Poliing mehr in der Kernel-Loop! :)

Dank VMWare. :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:22:51 06.03.2010   Titel:              Zitieren

Rev. 180
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=180

ehci.c: DeactivateLegacySupport eingebaut

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:52:19 06.03.2010   Titel:              Zitieren

Rev. 181
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=181

ehci.c: bei eecp == 0xFF wird die Schleife verlassen

Bei meinem real PC ist z.B. eecp == 0x70 und das nächste Byte dann 0xFF.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:36:58 06.03.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:15:34 06.03.2010   Titel:              Zitieren

Rev. 183:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=183

Experimenteller Zwischenschritt bei ehci.c:
Wenn mehr als 2 EHCI Devices da sind, wird nur das erste genomme

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:43:43 06.03.2010   Titel:              Zitieren

Rev. 184:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=184

ehci.c: Korrektur (eecp und eecp_id)

jetzt kommt bei mir: eecp = 0070h, eecp_id = 0001h

Bei Cuervo und Tobiking gehen nun real PCs endlich! :)

:arrow: Hier noch ein work-around für MM-Probleme:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-260731-and-start-is-67.html ;)

:arrow: Sind mehrere EHCI-Host-Controller vorhanden, kann momentan nur der erste beim PCI-Scan initialisiert werden. :eek:
pci.c, line 202-206
C/C++ Code:
if(!EHCIflag)
{
    analyzeEHCI(bar);
    initEHCIHostController(number);
}
C/C++ Code:
if(!EHCIflag)
{
analyzeEHCI(bar);
initEHCIHostController(number);
}
C/C++ Code:
if(!EHCIflag)
{
    analyzeEHCI(bar);
    initEHCIHostController(number);
}


:arrow: Sun VirtualBox geht auch nicht! (seit Interrupts, Polling aus USBSTS ging leidlich) :rolleyes:

Qemu, Bochs und MS VPC bieten uns momentan kein USB EHCI. :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:07:05 06.03.2010, insgesamt 7-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:51:26 06.03.2010   Titel:              Zitieren

Rev. 185:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=185

  • Intelligenteres Caching der Eingaben: Wiedergenutzte Einträge werden nach vorne geholt
  • Scope von Variablen verkleinert
  • Länge der Strings für die Eingabe auf 70+1 reduziert von 70+10
  • Kommentare nun alle auf English (Ich hatte ausversehen Teile auf Deutsch kommentiert)
  • Tabs durch Space ersetzt (Noch ein Versehen von mir aus dem letzten Update der Shell)
  • Uralte User-Prog Versionen aktualisiert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:00:42 07.03.2010   Titel:              Zitieren

Rev. 186:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=186

- kleine Verbesserungen
- Hotfix von +gjm+ implementiert (root dir entries)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 03:15:58 07.03.2010   Titel:              Zitieren

Rev. 187:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=187

ehci.c: Gesamter Port-Status nach SE0, J- u. K-State im Handler dargestellt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:16:09 07.03.2010   Titel:              Zitieren

Rev. 188:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=188

- ehci.c: high speed test ergänzt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:08:35 07.03.2010   Titel:              Zitieren

Rev. 189:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=189

- ehci.c: Port Reset in Funktion gepackt und im Handler ergänzt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:56:40 07.03.2010   Titel:              Zitieren

Rev. 190:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=190

resetPort im IRQ-handler aktiviert, aber ohne sleepMilliSeconds

VMWare: perfekt! http://www.henkessoft.de/OS_Dev/Bilder/rev190.PNG

bei realPC:
- mal highspeed, mal J-state bei mir.
- bei Cuervo klappt es.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:35:55 07.03.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:39:05 07.03.2010   Titel:              Zitieren

Rev. 191:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=191

Shell überarbeitet:
- Del, Pos1, End, Pfeiltasten und Insert funktionieren nun
- Kleinere Vereinfachungen (Löschen sinnlosen Codes)

Rev. 192:
behebt nun auch den Fehler beim Ändern gecachter Einträge und entfernt einen überflüssigen Pointer in userlib.c (strncpy)
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=192


Zuletzt bearbeitet von Erhard Henkes am 20:25:31 07.03.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:11:44 07.03.2010   Titel:              Zitieren

Rev. 193:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=193

ehci.c: Transfer Zwischenschritt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:21:04 08.03.2010   Titel:              Zitieren

Rev. 194:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=194

ehci.c: Zwischenschritt USB 2.0 EHCI Async-Transfer

Ein großes Lob an Tobiking für die Ausdauer bei diesem schwierigen Thema und an Max Reitz (XanClic) für seine hervorragende Dokumentation - eigentlich ein Opus - im LowLevel wiki: http://lowlevel.brainsware.org/wiki/index.php/USB

Man ist in PrettyOS bei USB 2.0 an einem Punkt angekommen, wo das ergänzende Heranziehen der USB Specification Rev. 2.0, April 27, 2000 (622 Seiten) notwendig wird. XanClic legt gesteigerten Wert darauf, dass jeder der an USB 2.0 arbeitet, sich hier ebenfalls vertieft. ;) Zur Zeit befinden wir uns nach meiner Abschätzung dort im Abschnitt 9.4.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:58:42 08.03.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:36:24 08.03.2010   Titel:              Zitieren

Rev. 195:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=195

  • Shell:
    • Überflüssige Fkt. entfernt (hatte ich nach einem Versuch vergessen)
    • Schreibcursor nun in jeder Stellung sichtbar
    • Insert-Mode verbessert; Kann nun auch volle Zeilen editieren
    • Optimierungen bei Nutzung von settextcolor; Selbes Ergebnis, kleinerer Kernel
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:26:29 08.03.2010   Titel:              Zitieren

Rev. 196:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=196

ehci.h/.c: Zwischenschritt bezüglich USB-Transfer

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:35:26 08.03.2010   Titel:              Zitieren

Rev. 197:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=197

- boot2.asm und fat12.inc "hot" gefixt
- Änderungen in der shell

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:46:46 08.03.2010   Titel:              Zitieren

Ich möchte noch den Dank an +gjm+ für den Hotfix ergänzen... :)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:59:21 08.03.2010   Titel:              Zitieren

Ja, echt klasse! +gjm+ lebe hoch! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:59:38 08.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:38:49 08.03.2010   Titel:              Zitieren

Rev. 198:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=198

ehci.c: USB-Transfer-Test (leider noch nicht erfolgreich)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:15:01 09.03.2010   Titel:              Zitieren

Rev. 199:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=199

ehci.c: USB-Transfer-Test (leider noch nicht erfolgreich, aber ein Fehler in Struktur qtd_token korrigiert)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:15:42 09.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:32:37 09.03.2010   Titel:              Zitieren

Rev. 200:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=200

ehci.c: Fehler im MM bei EHCI/USB behoben, funktioniert aber noch nicht wie erwartet. Bitte um Mithilfe bei der Fehlersuche.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:45:11 10.03.2010   Titel:              Zitieren

Rev. 201:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=201

ehci.c: Zwischenschritt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:19:20 10.03.2010   Titel:              Zitieren

Rev. 202:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=202

ehci.c: Zwischenschritt
Zirkuläre Async-List

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:19:41 10.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:10:43 10.03.2010   Titel:              Zitieren

Rev. 203:

ehci.c Analyse-Zwischenschritt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:18:12 10.03.2010   Titel:              Zitieren

Rev. 204:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=204

ehci.c: Analyse der Inhalte von QH, QTD und Buffer-Pointer verbessert, damit die erwünschte Wirkung gezielter herbei geführt werden kann. ;)

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev205.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:25:39 10.03.2010, insgesamt 1-mal bearbeitet
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 20:50:11 10.03.2010   Titel:              Zitieren

Du hast ja ziemliche Mühe damit. Hier mal ein Beispiel: http://research.microsoft.com/en-us/um/redmond/pro ....... ible/src/drivers/serial/usb/master/ehci/ehci.c.htm

_________________
a = b << c; /* shift happens */
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:42:49 10.03.2010   Titel:              Zitieren

Rev. 205:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=205

  • time.c: mehrfacher Code (5x fast identisch) in Funktion ausgelagert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:32:16 10.03.2010   Titel:              Zitieren

@Z: Tobiking und ich quälen uns momentan etwas herum, aber wir kommen vorwärts.

Diesen MS-Code kennen wir schon, bringt mich aber nicht wirklich weiter.
Was soll ich z.B. damit?

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     /* Initialize the aperiodic list
     * NB: This is the endpoint #0 used during configuration, we only
     *     initialize here only the fields that will not change.
     */

     EhciWriteRegister(&Qhead->Ed.Next,
                      VirtualToPhysical(Qhead) | EHCI_POINTER_TYPE_QH);
     EhciWriteRegister(&Qhead->Ed.EndpointCaps,
                      (1 << EHCI_QH_RL_SHIFT)
                      | (8 << EHCI_QH_MPS_SHIFT)
                      | EHCI_QH_H
                      | EHCI_QH_DTC
                      | EHCI_QH_480Mbps
                      );
     EhciWriteRegister(&Qhead->Ed.TransferOverlay.Next,
                      EHCI_POINTER_TYPE_TERMINATOR);
     EhciWriteRegister(&Qhead->Ed.TransferOverlay.Alternate,
                      EHCI_POINTER_TYPE_TERMINATOR);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* Initialize the aperiodic list
* NB: This is the endpoint #0 used during configuration, we only
* initialize here only the fields that will not change.
*/

EhciWriteRegister(&Qhead->Ed.Next,
VirtualToPhysical(Qhead) | EHCI_POINTER_TYPE_QH);
EhciWriteRegister(&Qhead->Ed.EndpointCaps,
(1 << EHCI_QH_RL_SHIFT)
| (8 << EHCI_QH_MPS_SHIFT)
| EHCI_QH_H
| EHCI_QH_DTC
| EHCI_QH_480Mbps
);
EhciWriteRegister(&Qhead->Ed.TransferOverlay.Next,
EHCI_POINTER_TYPE_TERMINATOR);
EhciWriteRegister(&Qhead->Ed.TransferOverlay.Alternate,
EHCI_POINTER_TYPE_TERMINATOR);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     /* Initialize the aperiodic list
     * NB: This is the endpoint #0 used during configuration, we only
     *     initialize here only the fields that will not change.
     */

     EhciWriteRegister(&Qhead->Ed.Next,
                      VirtualToPhysical(Qhead) | EHCI_POINTER_TYPE_QH);
     EhciWriteRegister(&Qhead->Ed.EndpointCaps,
                      (1 << EHCI_QH_RL_SHIFT)
                      | (8 << EHCI_QH_MPS_SHIFT)
                      | EHCI_QH_H
                      | EHCI_QH_DTC
                      | EHCI_QH_480Mbps
                      );
     EhciWriteRegister(&Qhead->Ed.TransferOverlay.Next,
                      EHCI_POINTER_TYPE_TERMINATOR);
     EhciWriteRegister(&Qhead->Ed.TransferOverlay.Alternate,
                      EHCI_POINTER_TYPE_TERMINATOR);

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 00:11:06 11.03.2010   Titel:              Zitieren

Erhard Henkes schrieb:

Was soll ich z.B. damit?

Als Beispiel verwenden, analysieren und verstehen.
Sonst seid ihr nächstes Jahr noch nicht fertig. ;)

_________________
a = b << c; /* shift happens */
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:15:11 11.03.2010   Titel:              Zitieren

Ich zitiere mal Tobiking aus dem IRC:
Zitat:
Gerade MS Code würde ich nicht nehmen ^^


Dennoch, wenn es hakt, schauen wir da schon rein. ehci.h fand ich dort ganz gut, weil man ein Gefühl für die notwendigen Strukturen und Defines bekommt. Sind aber auch Fehler drinnen, die ich bereits gesehen habe.

Wir wühlen uns durch die Specs von EHCI und USB 2.0. Das reicht erstmal an Infos. Eher zuviel als zu wenig. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:16:30 11.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:01:22 11.03.2010   Titel:              Zitieren

Rev. 206:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=206

EHCI /USB Zwischenschritt

Transaktionen funktionieren noch nicht. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
XanClic
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.10.2009
Beiträge: 95
Beitrag XanClic Mitglied 17:32:04 11.03.2010   Titel:              Zitieren

Ich möchte ja kein Spielverderber oder Schwarzseher sein, aber vom Microsoftcode würde ich wirklich die Finger lassen. Inwieweit Linuxcode ansehen und den als Anleitung für ein BSD-OS zu nehmen schlimm ist, weiß ich nicht (denke nicht allzu schlimm), aber der MS-Code ist mit einem "All rights reserved" gekennzeichnet. Ich denke zwar nicht, dass MS euch deshalb verfolgen wird, aber trotzdem ist es rechtlich eher problematisch, sich den vorzunehmen, könnte ich mir vorstellen...

_________________
http://www.lowlevel.eu/
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:04:11 11.03.2010   Titel:              Zitieren

Wir möchten das ja auch selbst verstehen und lösen. Bei EHCI und USB 2.0 kommt es echt auf den Durchblick und das Verstehen der Abläufe an. Irgendwo haben wir einen Mechanismus - vermutlich bei EHCI - noch nicht verstanden.

Einer meiner PCs zeigt ja auch noch J-State anstelle 0x1004 oder 0x1005 (high speed enabled). VBox läuft nicht richtig.

Ich hoffe nur, dass die physikalische Adresse, die VMM zurück gibt, ok ist.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:11:09 11.03.2010   Titel:              Zitieren

Rev. 207:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=207

ehci.c:
die allokierten Bereiche auf dem Heap werden mit memset(...) durchgängig auf 0 gesetzt.

EHCI /USB Zwischenschritt, Transaktion läuft noch nicht. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:54:07 11.03.2010   Titel:              Zitieren

Rev. 208:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=208

  • Wochentage werden nun (aufgrund unterschiedlicher zählweisen unterschiedlicher cmos) berechnet statt ausgelesen.
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 23:14:02 11.03.2010   Titel:              Zitieren

XanClic schrieb:
Ich möchte ja kein Spielverderber oder Schwarzseher sein, aber vom Microsoftcode würde ich wirklich die Finger lassen. Inwieweit Linuxcode ansehen und den als Anleitung für ein BSD-OS zu nehmen schlimm ist, weiß ich nicht (denke nicht allzu schlimm), aber der MS-Code ist mit einem "All rights reserved" gekennzeichnet. Ich denke zwar nicht, dass MS euch deshalb verfolgen wird, aber trotzdem ist es rechtlich eher problematisch, sich den vorzunehmen, könnte ich mir vorstellen...

Du sollst ihn auch nicht kopieren, sondern davon lernen.

_________________
a = b << c; /* shift happens */
XanClic
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.10.2009
Beiträge: 95
Beitrag XanClic Mitglied 23:14:43 11.03.2010   Titel:              Zitieren

Z schrieb:
XanClic schrieb:
Ich möchte ja kein Spielverderber oder Schwarzseher sein, aber vom Microsoftcode würde ich wirklich die Finger lassen. Inwieweit Linuxcode ansehen und den als Anleitung für ein BSD-OS zu nehmen schlimm ist, weiß ich nicht (denke nicht allzu schlimm), aber der MS-Code ist mit einem "All rights reserved" gekennzeichnet. Ich denke zwar nicht, dass MS euch deshalb verfolgen wird, aber trotzdem ist es rechtlich eher problematisch, sich den vorzunehmen, könnte ich mir vorstellen...

Du sollst ihn auch nicht kopieren, sondern davon lernen.

Ich weiß nicht, ob es das besser macht. ;)

_________________
http://www.lowlevel.eu/
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 23:22:27 11.03.2010   Titel:              Zitieren

XanClic schrieb:
Z schrieb:
XanClic schrieb:
Ich möchte ja kein Spielverderber oder Schwarzseher sein, aber vom Microsoftcode würde ich wirklich die Finger lassen. Inwieweit Linuxcode ansehen und den als Anleitung für ein BSD-OS zu nehmen schlimm ist, weiß ich nicht (denke nicht allzu schlimm), aber der MS-Code ist mit einem "All rights reserved" gekennzeichnet. Ich denke zwar nicht, dass MS euch deshalb verfolgen wird, aber trotzdem ist es rechtlich eher problematisch, sich den vorzunehmen, könnte ich mir vorstellen...

Du sollst ihn auch nicht kopieren, sondern davon lernen.

Ich weiß nicht, ob es das besser macht.

Kommt wohl auf die Person an. Ich jedenfalls finde fremde Code-Beispiele oft sehr hilfreich.

_________________
a = b << c; /* shift happens */
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:30:31 11.03.2010   Titel:              Zitieren

@Z: in welcher Funktion läuft ein Control Transfer auf der asynchronen Liste ab?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
XanClic
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.10.2009
Beiträge: 95
Beitrag XanClic Mitglied 23:34:47 11.03.2010   Titel:              Zitieren

Z schrieb:
Kommt wohl auf die Person an. Ich jedenfalls finde fremde Code-Beispiele oft sehr hilfreich.

Hm, solche Sätze kenne ich noch von jemand anderem... Egal.

Ich natürlich auch. Mein OS steht nicht ohne Grund unter der GPL, damit ich vollkommen legal GPL-Code ansehen und mich davon (unbegrenzt weit) inspirieren lassen kann. Aber PrettyOS steht erstens nicht unter der GPL und zweitens sind bei diesem Code sogar alle Rechte vorbehalten. Und Lizenzen verletzen ist eher doof.

(Das Problem ist halt immer: Angucken ist an sich wohl kein Problem, aber wer garantiert am Ende, dass man nicht doch unbewusst kopiert hat?)

_________________
http://www.lowlevel.eu/
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 23:39:02 11.03.2010   Titel:              Zitieren

Erhard Henkes schrieb:
@Z: in welcher Funktion läuft ein Control Transfer auf der asynchronen Liste ab?

Was fragst Du mich? Ich habe mich mit USB noch nie beschäftigt. Es gibt aber IMHO ohne Ende Literatur zu USB, Bücher und Spezifikationen.

Vielleichst sucht Du mal nach einem Minimalbeispiel, etwa einer USB-Host Implementation für Mikrokontroller. Solche Codes sind weniger durchsetzt von Systemaufrufen. Im Internet solltest Du einiges finden.

Edit: Ist möglicherweise wertlos, weil zu hardwareabhängig.

_________________
a = b << c; /* shift happens */


Zuletzt bearbeitet von Z am 23:53:08 11.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:36:02 12.03.2010   Titel:              Zitieren

Rev. 209:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=209

ehci.c: einige Parameter verändert, inactive ergänzt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:48:19 12.03.2010   Titel:              Zitieren

Rev. 210:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=210

ehci: fehler in memset beseitigt

Tobiking: Host Error ab 207!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:54:29 12.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:06:32 12.03.2010   Titel:              Zitieren

Rev. 211:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=211

ehci: Änderungen von Tobiking bezüglich QH und QTD sowie Speicher eingebaut

VMWare: data: 0 :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:49:04 12.03.2010   Titel:              Zitieren

Revision 212:

- Ausgabe der Memory-Größe in Bytes, sowie in KiB/MiB/GiB (je nach Größe) und KB/MB/GB
- weekday wird nicht mehr aus cmos ausgelesen.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:00:15 12.03.2010   Titel:              Zitieren

Revision 213:

Veränderungen in ehci.c
testtransfer auch bei Anschluss eines Hispeed-Gerätes

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:42:42 12.03.2010   Titel:              Zitieren

Revision 214:

Veränderungen in ehci.c:
void* createQTD(uint32_t next, uint8_t pid, bool toggle, uint32_t tokenBytes)

zusätzlicher Parameter tokenBytes

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:28:51 12.03.2010   Titel:              Zitieren

Rev. 215:

ehci.c: kleine Veränderungen um Statusbyte der qTD anzuzeigen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:37:48 12.03.2010   Titel:              Zitieren

Rev. 216:

ehci.c: kleine Veränderungen, um Packet der qTD anzuzeigen
(Funktion ergibt allerdings #PF ??) :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 00:05:14 13.03.2010   Titel:              Zitieren

Rev. 217: Einige Mini-Änderungen, z.B. Kommentare und dergleichen.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:21:22 13.03.2010   Titel:              Zitieren

rev. 218:

Analyse-Fkt. für die data-Packets von Setup und In in EHCI USB (klappt endlich)

Da sieht man nun exakt, dass der Setup-Request stimmt.

80 06 00 01 00 00 12 00

siehe: http://www.jungo.com/st/support/documentation/wind ....... man_mhtml/node55.html#SECTION001221600000000000000

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:22:42 13.03.2010, insgesamt 1-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 00:49:11 13.03.2010   Titel:              Zitieren

rev. 219: Das MMIO der Netzwerkkarte sollte jetzt über virtuellen Speicher laufen. Bitte mal checken!
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:59:41 13.03.2010   Titel:              Zitieren

Bei mir hat es geklappt auf meinem Test-PC. Ping über Netzwerk kam sauber an. :)

Endlich auch USB: :) (auf real Hardware und auf qemu)
http://www.c-plusplus.de/forum/viewtopic-var-p-is-1868218.html#1868218
http://www.c-plusplus.de/forum/viewtopic-var-p-is-1868372.html#1868372

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:58:51 13.03.2010, insgesamt 2-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 17:01:38 13.03.2010   Titel:              Zitieren

Revision 220: User Heap, malloc/free in der User-Lib. Bisher einfacher Placement-Allokator, wer einen "richtigen" Allokator bauen will, ist herzlich eingeladen :)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:03:46 13.03.2010   Titel:              Zitieren

Badstrand: wir geben normalerweise die FloppyImage.bin mit, falls jemand das nicht selbst kompilieren kann.

Danke für das Feature.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:05:14 13.03.2010, insgesamt 1-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 17:17:54 13.03.2010   Titel:              Zitieren

Ok, Rev 221: FloppyImage.bin ist mit dabei.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:39:56 13.03.2010   Titel:              Zitieren

Rev. 222:

ehci.c:
- Virtual Box läuft nun auch (Work-around für IRQ) :)
- Status-Byte des QTD wird analysiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 19:21:11 13.03.2010   Titel:              Zitieren

Rev. 223: Bug beim Linken gefixt, siehe http://c-plusplus.de/forum/viewtopic-var-p-is-1868433.html#1868433

Erhard: Danke für diesen K(r)ampf! :)


Zuletzt bearbeitet von Erhard Henkes am 19:27:59 13.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:22:42 13.03.2010   Titel:              Zitieren

Rev. 224:

ehci.c: Veränderungen in resetPort

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:23:07 13.03.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:20:07 13.03.2010   Titel:              Zitieren

Rev. 225:

  • userlib.hpp: free und malloc ergänzt
  • Bugfix: Auswahl der passenden Speichergrößeneinheit verbessert (folgendes passiert nicht mehr: "0 GiB / 1 GB", bzw. "0 MiB / 1 MB")
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:58:41 13.03.2010   Titel:              Zitieren

Rev. 226:

ehci.c und ckernel.c:
work-around für das sleepMilliSeconds(...) Problem in resetPort(...)
Der Zähler (sehr schlechter hotfix) ist verschwunden.

Folgerung: Multithreading wird benötigt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:06:38 14.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:19:57 14.03.2010   Titel:              Zitieren

Rev. 227:

ehci.c
usb2.h/c Analyse des device-Descriptors

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:26:12 14.03.2010   Titel:              Zitieren

Rev. 228:

ehci.c
Handshake in testTransfer ergänzt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:49:21 14.03.2010   Titel:              Zitieren

Rev. 229:

kleine verbesserungen, usb.h/.c war vergessen worden

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:21:11 14.03.2010   Titel:              Zitieren

Rev. 230:

USB testTransfer von ehci.c nach usb2.c verlagert
Variablen-Deklarationen von ehci.c nach ehci.h

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:02:39 14.03.2010   Titel:              Zitieren

Rev. 231:

:arrow: CDI-Header implementiert; Anpassungsaufwand notwendig :warning:

Bisher nur: in time.c cmos_read ausgetauscht gegen cdi_cmos_read
wrapper implementation: cdi_cmos.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:13:17 14.03.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:33:00 14.03.2010   Titel:              Zitieren

Rev. 233:

Mehrfacher testTransfer beim Hochfahren mit eingestecktem USB-Device verhindert durch initEHCIFlag ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:06:58 14.03.2010   Titel:              Zitieren

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.


Zuletzt bearbeitet von Mr X am 22:13:14 14.03.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:14:26 14.03.2010   Titel:              Zitieren

Rev. 235:

- CDI-Dateien aufgeräumt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:30:01 15.03.2010   Titel:              Zitieren

Versuch die blöde händische Rev.-Angabe automatisch seitens SVN zu ersetzen ist leider misslungen:
Rev. 236-238

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static 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
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static 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
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static 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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:43:37 15.03.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:32:18 15.03.2010   Titel:              Zitieren

Rev. 239:
wieder normal

Vielleicht schafft es doch noch jemand mit diesem $Rev$:
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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:44:11 15.03.2010, insgesamt 1-mal bearbeitet
Tobiking2
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.04.2009
Beiträge: 705
Beitrag Tobiking2 Mitglied 08:21:23 15.03.2010   Titel:              Zitieren

Erhard Henkes schrieb:
Vielleicht schafft es doch noch jemand mit diesem $Rev$:
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

Das mit $Rev$ 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.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:31:23 15.03.2010   Titel:              Zitieren

Rev. 240: kernel.bin: 57.856 Bytes
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=240

ehci.c: restart bei Host System Error (klappt endlich bei meinem störrischen PC!)

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
  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     }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
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 }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
  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     }

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:39:33 15.03.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:36:30 15.03.2010   Titel:              Zitieren

Rev. 241:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=241

sleep 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.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:29:06 16.03.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:54:02 15.03.2010   Titel:              Zitieren

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
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:26:29 16.03.2010   Titel:              Zitieren

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.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:27:04 16.03.2010   Titel:              Zitieren

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.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:40:49 16.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:36:58 17.03.2010   Titel:              Zitieren

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).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:01:54 17.03.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:55:49 18.03.2010   Titel:              Zitieren

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.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:44:10 18.03.2010   Titel:              Zitieren

Rev. 248: ehci.c: Zwischenschritt ( zwei zusätzliche Zeitschleifen )
Bringt aber nix, eher schlechter (Test auf meinem Entw.-PC und bei Tobiking)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:55:54 18.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:14:24 18.03.2010   Titel:              Zitieren

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 :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:33:59 18.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:03:54 19.03.2010   Titel:              Zitieren

Rev. 250:
- Bessere Hi-Speed-Erkennung (vs. J-State)
- Systemfrequenz erhöht von 100 Hz auf 1000 Hz

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:33:43 19.03.2010   Titel:              Zitieren

Rev. 251:

ckernel.c, util.c: Testversion für rdtsc-Messung pro Millisekunde (Ziel: sleep ohne Interrupt)
http://en.wikipedia.org/wiki/Time_Stamp_Counter
Zitat:
64-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.
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 );
        }
        //...
    }
    //...
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 );
}
//...
}
//...
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 09:38:49 19.03.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:24:59 19.03.2010   Titel:              Zitieren

Rev. 252:

ckernel.c: CPU Frequenz (MHz) in Statuszeile ergänzt. Ausdruck im normalen Bildschirmbereich ausgeblendet. Bitte prüfen, ob es überall stimmt. Was passiert, wenn man PCs vor Pentium verwendet?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:46:28 19.03.2010   Titel:              Zitieren

Rev. 253:

Zwischenschritt zum Test von delay(...µs) anstelle sleepMilliSeconds(...ms).
Hat irgendwo noch eine Loop zuviel in ehci.c :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:49:45 19.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:10:39 19.03.2010   Titel:              Zitieren

Rev. 254:

in usb2.c waren auch noch sleepMilliSeconds(...), die im INT geblockt haben.
Zwar immer noch nicht rund, aber jetzt stimmt die Basis zum Experimentieren, zumindest halbwegs.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:01:22 19.03.2010   Titel:              Zitieren

Rev. 255:
Zwischenlösung.
Hauptproblem: Host System Error bei Aktivieren der asychronen Liste, der bisher nicht sicher überwunden werden kann.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:01:46 19.03.2010, insgesamt 1-mal bearbeitet
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 22:04:46 19.03.2010   Titel:              Zitieren

Erhard Henkes schrieb:

Zwar immer noch nicht rund, aber jetzt stimmt die Basis zum Experimentieren, zumindest halbwegs.

Sorry dass ich mich nochmal einmische.
Aber vor einigen Tagen hat jemand ein Entwicklungskit für USB empfohlen, ich glaube mit einem ARM-Prozessor. Ich vermute, dass ihr es mit sowas einfacher hättet. Wenn nicht, betrachtet dieses Posting bitte als hinfällig. ;)

_________________
a = b << c; /* shift happens */
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:19:50 20.03.2010   Titel:              Zitieren

Rev. 256:

Eine Version, in der jede Funktion bei EHCI und USB in der Abfolge angezeigt und mit 2 sec Pausen (delay 2000000) versehen wird, um das Debuggen zu erleichtern.

Diese Version läuft OHNE "Host System Error" auf meinem Entwicklungs-PC hoch!

Tobiking und Cuervo et. al.:
Bitte testen! Bin gespannt. Tobiking hat leider immer noch unerklärlichen Host System Error.

Wenn der Fehler auch bei euch verschwindet oder die Ursache gefunden wird, müssen wir gemeinsam heraus finden, was der wesentliche Punkt ist, um den Host System Error sicher zu vermeiden.

@Z: das Problem liegt eher im Bereich EHCI, evtl. sogar PCI. USB liegt im Wesentlichen noch vor uns. Wir quälen uns mit EHCI, um möglichst viele Mitstreiter mitzunehmen, aber wir sind auf dem richtigen Weg, auch wenn er etwas serpentinenreich ist.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 03:33:47 20.03.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:18:27 20.03.2010   Titel:              Zitieren

Rev. 258: (Rev. 257 fehlerhaft)

pciDev_t pciDev_Array[PCIARRAYSIZE];

DeactivateLegacySupport(uint32_t num) mit Debug-Prints bereichert. Offenbar Problem beim "Wait for BIOS-Semaphore being not set". EHCI muss dem Pre-OS (BIOS) entrissen werden! ;)
Wenn sowohl BIOS als OS dern HC beherrschen dürfen, muss es zwangsläufig krachen!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:27:06 20.03.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:44:35 20.03.2010   Titel:              Zitieren

Rev. 259:

pci_write_byte-Fkt. korrigiert (Danke an XanClic :live: )

BIOS ---> OS geht jetzt bei EHCI ext. cap. :)

Leider immer noch HostSystemError nach dem Einschalten der AsyncList bei meinem PC mit Ext.Cap.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:45:57 20.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:21:28 21.03.2010   Titel:              Zitieren

Rev. 260:

usb2.c: ohne "doorbell" läuft es besser

Zitat:
Interrupt on Async Advance Doorbell R/W. This bit is used as a doorbell by software to tell the host controller to issue an interrupt the next time it advances asynchronous schedule. Software must write a 1 to this bit to ring the doorbell. When the host controller has evicted all appropriate cached schedule state, it sets the Interrupt on Async Advance status bit in the USBSTS register. If the Interrupt on Async Advance Enable bit in the USBINTR register is a one then the host controller will assert an interrupt at the next interrupt threshold. See Section 4.8.2 for operational details. The host controller sets this bit to a zero after it has set the Interrupt on Async Advance status bit in the USBSTS register to a one. Software should not write a one to this bit when the asynchronous schedule is disabled. Doing so will yield undefined results.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:52:25 21.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:44:54 21.03.2010   Titel:              Zitieren

Rev. 261:

ehci.c: Fehler in DeactivateLegacySupport korrigiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:19:28 21.03.2010   Titel:              Zitieren

Rev. 262:

nur kleine Veränderungen

Der "Host System Error", der bei einigen Systemen noch kommt, kann wie folgt unterdrückt werden:

in ehci.c, Funktion void createQH(void* address, void* firstQTD, uint32_t device)
C/C++ Code:
    // uint32_t physNext = paging_get_phys_addr(kernel_pd, firstQTD);
    // head->qtd.next = physNext;
    /// TEST

    head->qtd.next = 0x1;
C/C++ Code:
// uint32_t physNext = paging_get_phys_addr(kernel_pd, firstQTD);
// head->qtd.next = physNext;
/// TEST

head->qtd.next = 0x1;
C/C++ Code:
    // uint32_t physNext = paging_get_phys_addr(kernel_pd, firstQTD);
    // head->qtd.next = physNext;
    /// TEST

    head->qtd.next = 0x1;

Damit sind die QTD vom QH entkoppelt. Was das bedeutet, ist bisher unklar.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:57:22 21.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:07:11 21.03.2010   Titel:              Zitieren

Rev. 263:

ehci.c: QTD kann nun auch NULL anstelle firstQTD annehmen, damit man QH ohne QTD erzeugen kann.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:29:08 21.03.2010   Titel:              Zitieren

Rev. 264:

ehci.c: Fehler in DeactivateLegacySupport behoben

jetzt: if(failed){/* manueller Versuch */} <--- könnte das Problem BIOS=1 && OS=1 bei störrischem BIOS lösen. Macht es aber offensichtlich nicht (Test bei Tobiking).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:43:02 21.03.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:47:21 21.03.2010   Titel:              Zitieren

Revision 265:

- Hello-Programm auf 0.5 aktualisiert (kleiner Zeilenfehler behoben)
- makefile: clear-target ergänzt, clear.bat beigelegt
- Shell wird jetzt mit der start.asm der Usertools kompiliert
- HELLO.ELF statt hello.elf
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:03:02 21.03.2010   Titel:              Zitieren

Revision 266:

- printf -> kprintf;
- printformat -> printf (Deswegen sind so viele Dateien geändert)
- Das neue printf und i2hex in userlib übernommen; my_stdarg.h mit userlib mitgeliefert
- typedefs aus os.h in userlib übernommen
- TTT auf Version 5.1 aktualisiert (Man kann nicht mehr gewinnen und zugleich Remis spielen, mglw. Verbesserung der Lauffähigkeit auf manchen PCs)


Zuletzt bearbeitet von Erhard Henkes am 01:35:49 22.03.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 03:05:09 22.03.2010   Titel:              Zitieren

Revision 267:

ehci.c: Vereinfachungen in der Ausgabe zur besseren Übersicht

interrupts.asm:
DO_IDT_ENTRY SYSCALL_NUMBER, 0x0008, 0xEE00
DO_IDT_ENTRY CONTEXT_SWITCH_CALL, 0x0008, 0x8E00 <---

syscall.c, video.c: nur Formatierung/Kommentare

User-Programm: TTT (hello.elf) Zahleneingabe wird abgebrochen
(Prompt (=Totalabbruch) bzw. unerwartete Fehlermeldung, dass Zahl bereits verwendet wird).

Irgendwas bei der Ausführung der User-Programme ist "kaputt".
DO_IDT_ENTRY CONTEXT_SWITCH_CALL, 0x0008, 0xEE00 hilft auch nichts, also OK.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 03:46:55 22.03.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:34:14 22.03.2010   Titel:              Zitieren

Ja, irgendwas ist da kaputt. Das müssen wir alles nochmal durchgehen, u.a. video.c, wie ehenkes im IRC schon sagte.

Ich hab übrigens mal die printf etwas erweitert&korrigiert, gibts bald...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:42:13 22.03.2010   Titel:              Zitieren

Rev. 268:

ehci.c und usb.c: test-transfer mit 2 QH und 3 QTD

Ablauf des USB-Transfers: http://www.henkessoft.de/OS_Dev/Bilder/rev268_asyncList.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:48:01 22.03.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:49:42 22.03.2010   Titel:              Zitieren

Rev. 269:

- printf: Ausgabe korrigiert, Funktion vereinfacht, Buffer verkleinert
- os.h/descriptor_tables.h: extern vor Funktionsdeklarationen zwecks Vereinheitlichung entfernt
- min und max von util.c nach math.c verlegt
- Klammern bei via Präprozessor definierten Fkts. ergänzt
- clear.bat: pause entfernt (Relikt vom testen der Funktionsfähigkeit)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:44:20 22.03.2010   Titel:              Zitieren

Rev. 270:

file.c: (floppy disk motor off)
C/C++ Code:
printf("file not found in root directory\n");
flpydsk_control_motor(false);
C/C++ Code:
printf("file not found in root directory\n");
flpydsk_control_motor(false);
C/C++ Code:
printf("file not found in root directory\n");
flpydsk_control_motor(false);

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:55:18 23.03.2010   Titel:              Zitieren

Rev. 271:

ehci.c:
Umsortierung entsprechend:
Intel® 82801EB (ICH5), 82801ER (ICH5R), and 82801DB (ICH4) Enhanced Host Controller Interface (EHCI)
Programmer’s Reference Manual (PRM) April 2003
Entsprechende Kommentare eingefügt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 18:14:58 23.03.2010   Titel:              Zitieren

Hey Leute,

bin ab Montag dreieinhalb Monate im Ausland, deshalb erstmal nichts mehr von mir (ich war hier in letzter Zeit ja leider eh kaum präsent).

Bin auf den dann vorherrschenden Stand gespannt, geht ja echt voran :)

Viele Grüße
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:34:33 23.03.2010   Titel:              Zitieren

Schade, das Du dann erstmal nicht weiterarbeiten kannst, an PrettyOS. :(

Aber natürlich trotzdem viel Vergnügen im Ausland. :)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:33:14 23.03.2010   Titel:              Zitieren

Rev. 272:

kleinere Veränderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:53:17 23.03.2010   Titel:              Zitieren

Rev. 273:

Vorschlag von +gjm+ im Fehler-Thread umgesetzt (keine Kernel-Ausgaben nach dem User-Programmstart im gescrollten Ausgabebereich ):
// printf("\n\n"); // <- ... sollte auf ausgaben ab hier verzichtet werden

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:58:41 23.03.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:19:53 24.03.2010   Titel:              Zitieren

Revision 274:

- makefile komplett neu (Dank auch an mastamind und Tobiking für die Hilfe)
- clean.bat statt clear.bat
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:24:07 24.03.2010   Titel:              Zitieren

Superjob! :live:

kleiner Fehler:

Code:
nasm kernel/data.asm -O32 -f elf -Ikernel/ -o object_files/kernel/data.o
kernel/data.asm:5: error: `incbin': unable to open file `initrd.dat'
mingw32-make: *** [kernel/data.o] Error 1
Code:
nasm kernel/data.asm -O32 -f elf -Ikernel/ -o object_files/kernel/data.o
kernel/data.asm:5: error: `incbin': unable to open file `initrd.dat'
mingw32-make: *** [kernel/data.o] Error 1
Code:
nasm kernel/data.asm -O32 -f elf -Ikernel/ -o object_files/kernel/data.o
kernel/data.asm:5: error: `incbin': unable to open file `initrd.dat'
mingw32-make: *** [kernel/data.o] Error 1

Kopiert man initrd.dat aus einer alten Vorlage nach ...\kernel\ dann klappts, es fehlt also dort.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:56:32 24.03.2010, insgesamt 1-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 23:11:29 24.03.2010   Titel:              Zitieren

Revision 275:

Styleguide-Anpassungen (Tabs ersetzen, "if ("s usw.)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:44:58 25.03.2010   Titel:              Zitieren

Rev. 276: kleine Veränderungen, pci_write_byte getestet in ehci.c (auskommentiert)

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
void pci_config_write_byte( uint8_t bus, uint8_t device, uint8_t func, uint8_t reg, uint8_t val )
{
    outportl(PCI_CONFIGURATION_ADDRESS,
        0x80000000
        | (bus     << 16)
        | (device  << 11)
        | (func    <<  8)
        | (reg & 0xFC) );

    outportb(PCI_CONFIGURATION_DATA + (reg & 0x03), val);
} /// correctness of function pci_config_write_byte checked with bar0 from EHCI - ehenkes, 2010-03-24
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
void pci_config_write_byte( uint8_t bus, uint8_t device, uint8_t func, uint8_t reg, uint8_t val )
{
outportl(PCI_CONFIGURATION_ADDRESS,
0x80000000
| (bus << 16)
| (device << 11)
| (func << 8)
| (reg & 0xFC) );

outportb(PCI_CONFIGURATION_DATA + (reg & 0x03), val);
} /// correctness of function pci_config_write_byte checked with bar0 from EHCI - ehenkes, 2010-03-24
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
void pci_config_write_byte( uint8_t bus, uint8_t device, uint8_t func, uint8_t reg, uint8_t val )
{
    outportl(PCI_CONFIGURATION_ADDRESS,
        0x80000000
        | (bus     << 16)
        | (device  << 11)
        | (func    <<  8)
        | (reg & 0xFC) );

    outportb(PCI_CONFIGURATION_DATA + (reg & 0x03), val);
} /// correctness of function pci_config_write_byte checked with bar0 from EHCI - ehenkes, 2010-03-24

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:50:51 25.03.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 01:09:36 25.03.2010   Titel:              Zitieren

Revision 277:

- Style-Korrekturen
- Überflüssige Binaries entfernt. Darunter auch nasm! (Muss nun extra installiert werden, PATH setzen nicht vergessen)
- makefile-Fehler bezüglich initrd.dat behoben, target für user_test_c ergänzt (derzeit deaktiviert)


Zuletzt bearbeitet von Mr X am 01:09:52 25.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:40:43 25.03.2010   Titel:              Zitieren

Rev. 278:

file.c: flpydsk_write(const char* name, const char* ext, void* memory, uint32_t size) <--- begonnen

flag in ehci.c, mit dem man den USB-Testtransfer einschalten kann, standard: aus

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:01:39 25.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:37:43 26.03.2010   Titel:              Zitieren

Rev. 279:

file.c: flpydsk_write(const char* name, const char* ext, void* memory, uint32_t size) weiter ausgebaut.
TODO:
1) FAT1 u. FAT2 aus FAT-Indices berechnen und in track0[...] übertragen.
2) File aus Memory in 512 Byte Paketen in die durch die FAT1 beschriebenen Sektoren schreiben.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:41:06 26.03.2010   Titel:              Zitieren

Rev. 280:

file.c: flpydsk_write(const char* name, const char* ext, void* memory, uint32_t size) funktioniert
Test mit Bildschirmausdruck (jede Sekunde)

Das überfordert reale Systeme. ;) (Endung txt kommt nicht an)
Daher bitte noch mit Sim testen, z.B. mit Hex-Editor ab ca. 0x15000 auf Floppy Disk nachschauen.

Am besten mit Wordpad o.ä. anschauen und Umbruch auf Fenster oder Lineal einstellen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:25:01 26.03.2010   Titel:              Zitieren

Rev. 281:

Zeilenumbruch (CR LF) eingebaut (stimmt aber noch nicht), nur noch alle 40 sec ein "screenshot". Reale Diskette: TXT wird nicht angezeigt; File kann nicht geöffnet werden. Offenbar noch fehlerhafter Aufbau.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:45:06 26.03.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:49:02 26.03.2010   Titel:              Zitieren

Rev. 282:

Zeilenumbruch nun korrekt, Bild alle 2 Sekunden für tests mit Qemu. Öffnen der FloppyImage.bin z.B. mit MS WordPad. Nun muss man bei realer Floppy Disk nach FAT und Root Dir schauen, damit man dort auch öffnen und anzeigen kann.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:21:51 28.03.2010   Titel:              Zitieren

Was sich während des Ausfalls des Forums getan hat (Wir sind nicht ausgefallen ;) ):

Revision 283:
- jetzt geht es endlich, lag an Nullen im Namen (8+3)

Revision 284:

- kprintf nimmt nun (wie printf) zusätzlich ... an.
- Versionsstring in Variable ausgelagert
- clear_userscreen heißt nun clear_console
- keyboard unterstützt nun Alt und Ctrl
- Weitere Vorbereitungen für "Multikonsolen"

Revision 285:

Revision 286:

- Multikonsolen! Umfangreiche Änderungen an video.c.
- putch (und kputch dadurch auch) überarbeitet
- Kleinere Korrekturen

mfg
Mr X

rev. 287:
styles


Zuletzt bearbeitet von Erhard Henkes am 01:03:09 28.03.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:02:35 28.03.2010   Titel:              Zitieren

Rev. 288:

ckernel.c: setupFPU implementiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:39:17 28.03.2010   Titel:              Zitieren

Rev. 289:

ehci.c: etwas vereinfachte Vorgehensweise bis zum USB-Transfer (wieder erlaubt)

Hier übrigens ein Bildschirmausdruck auf Diskette als TIME0.TXT:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PrettyOS [Version 0.0.0.289]                                               Shell
                                                                               
Memory size: 512 MiB / 536 MB  (536870912 Bytes)                                
#0  0:0.0        dev:0746h vend:1039h IRQ:0                                    
#1  0:1.0        dev:0002h vend:1039h IRQ:0                                    
#2  0:2.0        dev:0008h vend:1039h IRQ:0                                    
#3  0:2.5        dev:5513h vend:1039h IRQ:0                                    
#4  0:2.7        dev:7012h vend:1039h IRQ:10                                    
#5  0:3.0        dev:7001h vend:1039h IRQ:5  USB OHCI CFFFD000h MMIO sz:4096    
#6  0:3.1        dev:7001h vend:1039h IRQ:11  USB OHCI CFFFE000h MMIO sz:4096  
#7  0:3.2        dev:7002h vend:1039h IRQ:5  USB EHCI CFFFF000h MMIO sz:4096    
                                                                               
>>> >>> function: analyzeEHCI                                                  
HCIVERSION: 0100h HCSPARAMS: 00102306h Ports: 6                                
HCCPARAMS: 00007070h                                                            
OpRegs Address: CFFFF020h                                                      

#8  0:4.0        dev:0900h vend:1039h IRQ:11                                    
#9  0:12.0       dev:4300h vend:1186h IRQ:11                                    
#10  1:0.0       dev:4150h vend:1002h IRQ:11                                    
#11  1:0.1       dev:4170h vend:1002h IRQ:--                                    
                                                                               
1.44 MB FDD device 0                                                            
                                                                               
<RAM Disk at C0005000h DIR> dev                                                
35      info                                                                    
12115   shell                                                                  
                                                                               
$>  
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PrettyOS [Version 0.0.0.289] Shell

Memory size: 512 MiB / 536 MB (536870912 Bytes)
#0 0:0.0 dev:0746h vend:1039h IRQ:0
#1 0:1.0 dev:0002h vend:1039h IRQ:0
#2 0:2.0 dev:0008h vend:1039h IRQ:0
#3 0:2.5 dev:5513h vend:1039h IRQ:0
#4 0:2.7 dev:7012h vend:1039h IRQ:10
#5 0:3.0 dev:7001h vend:1039h IRQ:5 USB OHCI CFFFD000h MMIO sz:4096
#6 0:3.1 dev:7001h vend:1039h IRQ:11 USB OHCI CFFFE000h MMIO sz:4096
#7 0:3.2 dev:7002h vend:1039h IRQ:5 USB EHCI CFFFF000h MMIO sz:4096

>>> >>> function: analyzeEHCI
HCIVERSION: 0100h HCSPARAMS: 00102306h Ports: 6
HCCPARAMS: 00007070h
OpRegs Address: CFFFF020h

#8 0:4.0 dev:0900h vend:1039h IRQ:11
#9 0:12.0 dev:4300h vend:1186h IRQ:11
#10 1:0.0 dev:4150h vend:1002h IRQ:11
#11 1:0.1 dev:4170h vend:1002h IRQ:--

1.44 MB FDD device 0

<RAM Disk at C0005000h DIR> dev
35 info
12115 shell

$>
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PrettyOS [Version 0.0.0.289]                                               Shell
                                                                               
Memory size: 512 MiB / 536 MB  (536870912 Bytes)                                
#0  0:0.0        dev:0746h vend:1039h IRQ:0                                    
#1  0:1.0        dev:0002h vend:1039h IRQ:0                                    
#2  0:2.0        dev:0008h vend:1039h IRQ:0                                    
#3  0:2.5        dev:5513h vend:1039h IRQ:0                                    
#4  0:2.7        dev:7012h vend:1039h IRQ:10                                    
#5  0:3.0        dev:7001h vend:1039h IRQ:5  USB OHCI CFFFD000h MMIO sz:4096    
#6  0:3.1        dev:7001h vend:1039h IRQ:11  USB OHCI CFFFE000h MMIO sz:4096  
#7  0:3.2        dev:7002h vend:1039h IRQ:5  USB EHCI CFFFF000h MMIO sz:4096    
                                                                               
>>> >>> function: analyzeEHCI                                                  
HCIVERSION: 0100h HCSPARAMS: 00102306h Ports: 6                                
HCCPARAMS: 00007070h                                                            
OpRegs Address: CFFFF020h                                                      

#8  0:4.0        dev:0900h vend:1039h IRQ:11                                    
#9  0:12.0       dev:4300h vend:1186h IRQ:11                                    
#10  1:0.0       dev:4150h vend:1002h IRQ:11                                    
#11  1:0.1       dev:4170h vend:1002h IRQ:--                                    
                                                                               
1.44 MB FDD device 0                                                            
                                                                               
<RAM Disk at C0005000h DIR> dev                                                
35      info                                                                    
12115   shell                                                                  
                                                                               
$>  

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:46:38 28.03.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:10:39 28.03.2010   Titel:              Zitieren

Rev. 290:

file.c: bei Löschkennung 0xE5 (momentan nur mit anderen OS oder Hex-Editor eintragbar) wird ein root dir entry jetzt auch überschrieben.

screenshot hexeditor in root dir (224 Einträge ab 0x2600): http://www.henkessoft.de/OS_Dev/Bilder/rev290_rootdir.PNG
Man sieht sehr gut die Löschkennung 0xE5 alter File-Einträge, die jetzt überschrieben werden.

Hier ein Ausschnitt aus TIME80.TXT:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$>   test file written to FDD: 4100 bytes, 9 sectors needed.                    
free root dir entry nr. 2                                                      
                                                                               
                                                                               
>>> >>> function: initEHCIHostController                                        
                                                                               
>>> >>> function: startHostController                                          
reset HC                                                                        
                                                                               
>>> >>> function: DeactivateLegacySupport                                      
                                                                               
DeactivateLegacySupport: eecp = 0070h                                          
eecp = 0070h, eecp_id = 0001h                                                  
                                                                               
BIOS did not own the EHCI. No action needed.                                    
                                                                               
HCHalted bit set to 0 (OK), ports can be enabled now.                          
>>> >>> function: enablePorts                                                  
                                                                               
>>> >>> function: resetPort 1                                                  
>>> >>> function: resetPort 2                                                  
>>> >>> function: resetPort 3                                                  
>>> >>> function: resetPort 4                                                  
>>> >>> function: resetPort 5                                                  
>>> >>> function: resetPort 6                                                  
                                                                               
Sunday, March 28, 2010, 12:07:21   80 s runtime. CPU: 1099 MHz  
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$> test file written to FDD: 4100 bytes, 9 sectors needed.
free root dir entry nr. 2


>>> >>> function: initEHCIHostController

>>> >>> function: startHostController
reset HC

>>> >>> function: DeactivateLegacySupport

DeactivateLegacySupport: eecp = 0070h
eecp = 0070h, eecp_id = 0001h

BIOS did not own the EHCI. No action needed.

HCHalted bit set to 0 (OK), ports can be enabled now.
>>> >>> function: enablePorts

>>> >>> function: resetPort 1
>>> >>> function: resetPort 2
>>> >>> function: resetPort 3
>>> >>> function: resetPort 4
>>> >>> function: resetPort 5
>>> >>> function: resetPort 6

Sunday, March 28, 2010, 12:07:21 80 s runtime. CPU: 1099 MHz
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$>   test file written to FDD: 4100 bytes, 9 sectors needed.                    
free root dir entry nr. 2                                                      
                                                                               
                                                                               
>>> >>> function: initEHCIHostController                                        
                                                                               
>>> >>> function: startHostController                                          
reset HC                                                                        
                                                                               
>>> >>> function: DeactivateLegacySupport                                      
                                                                               
DeactivateLegacySupport: eecp = 0070h                                          
eecp = 0070h, eecp_id = 0001h                                                  
                                                                               
BIOS did not own the EHCI. No action needed.                                    
                                                                               
HCHalted bit set to 0 (OK), ports can be enabled now.                          
>>> >>> function: enablePorts                                                  
                                                                               
>>> >>> function: resetPort 1                                                  
>>> >>> function: resetPort 2                                                  
>>> >>> function: resetPort 3                                                  
>>> >>> function: resetPort 4                                                  
>>> >>> function: resetPort 5                                                  
>>> >>> function: resetPort 6                                                  
                                                                               
Sunday, March 28, 2010, 12:07:21   80 s runtime. CPU: 1099 MHz  

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:54:08 28.03.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:22:33 28.03.2010   Titel:              Zitieren

Revision 291:

- Scroll-Begrenzung durch User eingefügt (Syscall)
- Shell macht davon Gebrauch (Ehenkes Infoleiste gerettet)
- Begrenzung von Status und Titelleiste nun mit grauer Trennlinie
- sprintf (von Iteem), wird auch nun benutzt statt manuellem Zusammenbau im kernel.
- Kleinigkeiten
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 16:28:44 28.03.2010   Titel:              Zitieren

Rev. 292:

Style-Anpassungen^^ (schonwieder) in ckernel.c, ehci.c, file.c, syscall.c, video.c usw.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 09:43:44 29.03.2010   Titel:              Zitieren

Revision 293:

- Umfangreiche Änderungen an der shell
-- Infobereich restauriert
-- Feste Eingabezeile
-- Neues Design
- Syscall zum Begrenzen des Scroll-Bereichs mangels Nutzen & Konformität mit gutem Design wieder entfernt; Größe nun durch Kernel festgelegt
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:11:16 29.03.2010   Titel:              Zitieren

Revision 294:

- Nun gehen auch mehrere Userprogs gleichzeitig
- KQs der Konsolen getrennt.

Problem: gelegentlich #PFs in Userprogrammen
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:03:21 30.03.2010   Titel:              Zitieren

Revision 295:

- PF-Ursache behoben (Shell auf anderen Stackpointer als Userprogs)
- Umsortierung in task.c
- HELLO.ELF in Version 0.52; Üblen "Hack" beseitigt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:04:46 30.03.2010   Titel:              Zitieren

Rev. 296:

file.c: Zwischenschritt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 09:35:39 31.03.2010   Titel:              Zitieren

Revision 297:

- C++-Userprogramm kompiliert wieder, c++-Sourcefile für Userlib beigelegt (für C++-spezifische Features)
- Kleinere Umbauten und Formatierungskorrekturen


PS: Ich bin dann bis Sonntag im Urlaub und von der Außenwelt abgeschnitten...
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 10:48:42 31.03.2010   Titel:              Zitieren

Revision 298:

* Bootscreen
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 11:05:58 31.03.2010   Titel:              Zitieren

Revision 299:

* Bootscreen: W spitzer
* ckernel.c: auskommentieren des Screenshot-Codes
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:22:48 31.03.2010   Titel:              Zitieren

Revision 300:

- BS wird nun vor der restlichen Ausgabe angezeigt, damit man diese vollständig sieht.
- BS in Funktion ausgelagert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:21:27 31.03.2010   Titel:              Zitieren

Rev. 301:

paging.c: 0x400000 bis 0x600000 wird nicht mehr für User frei gegeben
ehci.c: beschleunigte Ausgabe
os.h/start.asm: USER-Stack 0x1420000

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 19:16:43 31.03.2010   Titel:              Zitieren

Revision 302:

* Leichte optische Anpassungen bei einem Systemfehler, dient der besseren Übersicht


Leider verweigert mein SVN-Client grundsätzlich das Hochladen des Diskettenimages. Ich bitte diesbezüglich um Verständnis.


Zuletzt bearbeitet von Cuervo am 19:19:44 31.03.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:49:59 31.03.2010   Titel:              Zitieren

Version 0.0.0.302 läuft auf VMWare, VBox, VPC, Qemu, Bochs :)

Bitte beachten, dass alte elf-Dateien, die mit esp 0x500000 oder 0x600000 in start.asm compiliert wurden, jetzt nicht mehr laufen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:58:28 31.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:43:58 01.04.2010   Titel:              Zitieren

Rev. 303:

task.c: nun den user-esp richtig übergeben in create_task
C/C++ Code:
    if (privilege == 3)
    {
        // general information: Intel 3A Chapter 5.12
        *(--kernel_stack) = new_task->ss = 0x23;    // ss
        *(--kernel_stack) = USER_STACK; // esp
        code_segment = 0x1B; // 0x18|0x3=0x1B
    }
C/C++ Code:
if (privilege == 3)
{
// general information: Intel 3A Chapter 5.12
*(--kernel_stack) = new_task->ss = 0x23; // ss
*(--kernel_stack) = USER_STACK; // esp
code_segment = 0x1B; // 0x18|0x3=0x1B
}
C/C++ Code:
    if (privilege == 3)
    {
        // general information: Intel 3A Chapter 5.12
        *(--kernel_stack) = new_task->ss = 0x23;    // ss
        *(--kernel_stack) = USER_STACK; // esp
        code_segment = 0x1B; // 0x18|0x3=0x1B
    }


start.asm: kein setzen des esp mehr notwendig, damit mehr Freiheit im OS
Assembler Code:
_start:
    ; mov esp, 0x1420000 ; stackpointer <--- nicht mehr notwendig
    call _main   
    call _exit
Assembler Code:
_start:
; mov esp, 0x1420000 ; stackpointer <--- nicht mehr notwendig
call _main
call _exit
Assembler Code:
_start:
    ; mov esp, 0x1420000 ; stackpointer <--- nicht mehr notwendig
    call _main   
    call _exit

:live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:46:45 01.04.2010, insgesamt 2-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 10:07:28 01.04.2010   Titel:              Zitieren

Revision 304:

* Neue Startmelodie
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    // Melody
    // C Es F G F Es
    // C E F G F E C
    // http://www.flutepage.de/deutsch/goodies/frequenz.shtml (German)
    // http://www.flutepage.de/englisch/goodies/frequenz.shtml (English)

    beep(523,200); // C
    beep(622,200); // Es
    beep(689,200); // F
    beep(784,200); // G
    beep(689,200); // F
    beep(622,200); // Es
   
    beep(523,200); // C
    beep(659,200); // E
    beep(689,200); // F
    beep(784,200); // G
    beep(689,200); // F
    beep(659,200); // E
   
    beep(523,1000); // C
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Melody
// C Es F G F Es
// C E F G F E C
// http://www.flutepage.de/deutsch/goodies/frequenz.shtml (German)
// http://www.flutepage.de/englisch/goodies/frequenz.shtml (English)

beep(523,200); // C
beep(622,200); // Es
beep(689,200); // F
beep(784,200); // G
beep(689,200); // F
beep(622,200); // Es

beep(523,200); // C
beep(659,200); // E
beep(689,200); // F
beep(784,200); // G
beep(689,200); // F
beep(659,200); // E

beep(523,1000); // C
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    // Melody
    // C Es F G F Es
    // C E F G F E C
    // http://www.flutepage.de/deutsch/goodies/frequenz.shtml (German)
    // http://www.flutepage.de/englisch/goodies/frequenz.shtml (English)

    beep(523,200); // C
    beep(622,200); // Es
    beep(689,200); // F
    beep(784,200); // G
    beep(689,200); // F
    beep(622,200); // Es
   
    beep(523,200); // C
    beep(659,200); // E
    beep(689,200); // F
    beep(784,200); // G
    beep(689,200); // F
    beep(659,200); // E
   
    beep(523,1000); // C

* Makefile verändert: Es werden jetzt FloppyImage.bin und FloppyImage.img erstellt => Kompatibilität verbessert und KERNEL.BIN wird beim clean gelöscht, weil der ab und zu noch das alte verwendet hat^^
* const char* version = "0.0.0.303"; wurde zu const char* version = "0.0.0.304";



Leider läuft diese Version (bzw. die vorherigen) auf keinem meiner PCs.. einmal PF nach starten der Shell, einman GPF nach laden des Kernels (direkt GPF als erste Ausgabe)...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:41:46 01.04.2010   Titel:              Zitieren

Rev. 305:

- Korrekturen in console.c (Hinweis +gjm+) integriert
- flush.asm (Kommentar verbessert)

Ein PC stürzt noch bei der Eingabe einer gültigen Zahl in TTT ab. Das könnte aber auch am User-Programm liegen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:42:52 01.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:49:11 01.04.2010   Titel:              Zitieren

Rev. 306:

initEHCIflag auf false initialisiert (Dank an Cuervo für den Hinweis!)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 03:22:32 02.04.2010   Titel:              Zitieren

Rev. 307:

TTT: atoi aus userlib verwendet, geringe Veränderungen bei Eingabe (auf einem PC stürzt das Programm allerdings immer noch nach Eingabe einer gültigen Ziffer ab, auf einem anderen läuft es).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 04:06:30 02.04.2010   Titel:              Zitieren

Rev. 308:

TTT 0.54 (hello.c): Globale Variablen beseitigt --> Kein Absturz mehr bei Eingabe valider Daten!

Wieso können auf manchen PCs keine globalen Variablen verwendet werden im User-Programm? Wo liegt das genaue Problem?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 04:07:52 02.04.2010, insgesamt 1-mal bearbeitet
abc.w
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2008
Beiträge: 1364
Beitrag abc.w Mitglied 11:40:50 02.04.2010   Titel:              Zitieren

Erhard Henkes schrieb:
Wieso können auf manchen PCs keine globalen Variablen verwendet werden im User-Programm? Wo liegt das genaue Problem?

Die Funktionen sind nicht mehr reentrant :confused:
taljeth
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.09.2009
Beiträge: 148
Beitrag taljeth Mitglied 12:00:43 02.04.2010   Titel:              Zitieren

Probleme mit globalen Variablen haben manchmal mit einem kaputten ELF-Loader zu tun.

_________________
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.
Lowlevel - die deutschsprachige OS-Dev-Community
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:28:42 02.04.2010   Titel:              Zitieren

Zitat:
Probleme mit globalen Variablen haben manchmal mit einem kaputten ELF-Loader zu tun.
Code und Stack arbeitet gut, nun müssen wir uns im User-Bereich noch um die saubere Verarbeitung des Data-Bereiches kümmern.

Bei Interesse: elf-Loader
https://prettyos.svn.sourceforge.net/svnroot/prettyos/trunk/Source/kernel/elf.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:30:06 02.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:17:11 02.04.2010   Titel:              Zitieren

Rev. 309:

elf.c: set bss to zero http://en.wikipedia.org/wiki/.bss
TTT (hello.c): memset((void*)tictactoe, 0, 18); // tictactoe has two bytes!

Dank an XanClic, der beide Probleme auf Anhieb gefunden hat! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:18:10 02.04.2010, insgesamt 1-mal bearbeitet
taljeth
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.09.2009
Beiträge: 148
Beitrag taljeth Mitglied 13:48:30 02.04.2010   Titel:              Zitieren

Erhard Henkes schrieb:
elf.c: set bss to zero http://en.wikipedia.org/wiki/.bss

Jepp, das war mein Verdacht. :)

_________________
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.
Lowlevel - die deutschsprachige OS-Dev-Community
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 16:10:02 02.04.2010   Titel:              Zitieren

Revision 310:

* Bootscreen verbessert und verschoben nach util.c
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:12:12 02.04.2010   Titel:              Zitieren

Zitat:
Jepp, das war mein Verdacht.

Wir hatten das sogar schon mal irgendwo drinnen, ist aber wieder verschwunden. ;)

@Cuervo: Großes Lob! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:12:50 02.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:04:23 02.04.2010   Titel:              Zitieren

Rev. 311:

FPU-Sicherung Experimenteller Zwischenschritt
#NM kommt noch zu oft

Hier mal die Doku der neuen Schritte:

os.h
C/C++ Code:
struct oda
{
    //...
    uintptr_t curTask;           // Address of currentTask
    //...

}__attribute__((packed));
C/C++ Code:
struct oda
{
//...
uintptr_t curTask; // Address of currentTask
//...

}__attribute__((packed));
C/C++ Code:
struct oda
{
    //...
    uintptr_t curTask;           // Address of currentTask
    //...

}__attribute__((packed));


ckernel.c:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void setup_x87_fpu()
{
    //...
    // set TS in cr0

    uint32_t cr0;
    __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
    cr0 |= 0x8; // set the TS bit (no. 3) in CR0 to enable #NM (exception no. 7)
    __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
}

//...

    while (true) // kernel idle loop
    {
        /// FPU-TEST
        float number1 = 2.5;
        float number2 = 2.5;
        float number3 = number1 * number2;
        char str[40];
        float2string(number3,3,str);
        printf("float result: %s\n",str);
        /// TEST        
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void setup_x87_fpu()
{
//...
// set TS in cr0

uint32_t cr0;
__asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
cr0 |= 0x8; // set the TS bit (no. 3) in CR0 to enable #NM (exception no. 7)
__asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
}

//...

while (true) // kernel idle loop
{
/// FPU-TEST
float number1 = 2.5;
float number2 = 2.5;
float number3 = number1 * number2;
char str[40];
float2string(number3,3,str);
printf("float result: %s\n",str);
/// TEST
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void setup_x87_fpu()
{
    //...
    // set TS in cr0

    uint32_t cr0;
    __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
    cr0 |= 0x8; // set the TS bit (no. 3) in CR0 to enable #NM (exception no. 7)
    __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
}

//...

    while (true) // kernel idle loop
    {
        /// FPU-TEST
        float number1 = 2.5;
        float number2 = 2.5;
        float number3 = number1 * number2;
        char str[40];
        float2string(number3,3,str);
        printf("float result: %s\n",str);
        /// TEST        


irq.c:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    task_t* pCurrentTask = (task_t*)(pODA->curTask);

    if ( (r->int_no < 32) && (r->int_no == 7) ) //exception #NM (number 7)
    {
         settextcolor(12,0);
         printf("#NM: FPU is used\n");
         settextcolor(15,0);

         // current task uses FPU
         pCurrentTask->FPU_flag = true;

         // save FPU ...
         // ...

         // restore FPU ...
         // ...

         // set TS in cr0 to zero


         uint32_t cr0;
         __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
         cr0 &= ~0x8; // reset the TS bit (no. 3) in CR0 to disable #NM
         __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
    }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
task_t* pCurrentTask = (task_t*)(pODA->curTask);

if ( (r->int_no < 32) && (r->int_no == 7) ) //exception #NM (number 7)
{
settextcolor(12,0);
printf("#NM: FPU is used\n");
settextcolor(15,0);

// current task uses FPU
pCurrentTask->FPU_flag = true;

// save FPU ...
// ...

// restore FPU ...
// ...

// set TS in cr0 to zero


uint32_t cr0;
__asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
cr0 &= ~0x8; // reset the TS bit (no. 3) in CR0 to disable #NM
__asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    task_t* pCurrentTask = (task_t*)(pODA->curTask);

    if ( (r->int_no < 32) && (r->int_no == 7) ) //exception #NM (number 7)
    {
         settextcolor(12,0);
         printf("#NM: FPU is used\n");
         settextcolor(15,0);

         // current task uses FPU
         pCurrentTask->FPU_flag = true;

         // save FPU ...
         // ...

         // restore FPU ...
         // ...

         // set TS in cr0 to zero


         uint32_t cr0;
         __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
         cr0 &= ~0x8; // reset the TS bit (no. 3) in CR0 to disable #NM
         __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
    }


task.c:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void tasking_install()
{
  //...
    pODA->curTask = (uintptr_t)current_task;
    current_task->FPU_flag = false;
  //...
}

task_t* create_task(page_directory_t* directory, void* entry, uint8_t privilege, const char* programName)
{
  //...
    pODA->curTask = (uintptr_t)new_task;
    new_task->FPU_flag = false;
}

uint32_t task_switch (uint32_t esp)
{
  //...
    // write active task struct address to ODA

    pODA->curTask = (uintptr_t)current_task;

  //...
        // set TS in cr0, if the task has not used the FPU before

    if (current_task->FPU_flag == false);
    {
        uint32_t cr0;
        __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
        cr0 |= 0x8; // set the TS bit (no. 3) in CR0 to enable #NM (exception no. 7)
        __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
    }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void tasking_install()
{
//...
pODA->curTask = (uintptr_t)current_task;
current_task->FPU_flag = false;
//...
}

task_t* create_task(page_directory_t* directory, void* entry, uint8_t privilege, const char* programName)
{
//...
pODA->curTask = (uintptr_t)new_task;
new_task->FPU_flag = false;
}

uint32_t task_switch (uint32_t esp)
{
//...
// write active task struct address to ODA

pODA->curTask = (uintptr_t)current_task;

//...
// set TS in cr0, if the task has not used the FPU before

if (current_task->FPU_flag == false);
{
uint32_t cr0;
__asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
cr0 |= 0x8; // set the TS bit (no. 3) in CR0 to enable #NM (exception no. 7)
__asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void tasking_install()
{
  //...
    pODA->curTask = (uintptr_t)current_task;
    current_task->FPU_flag = false;
  //...
}

task_t* create_task(page_directory_t* directory, void* entry, uint8_t privilege, const char* programName)
{
  //...
    pODA->curTask = (uintptr_t)new_task;
    new_task->FPU_flag = false;
}

uint32_t task_switch (uint32_t esp)
{
  //...
    // write active task struct address to ODA

    pODA->curTask = (uintptr_t)current_task;

  //...
        // set TS in cr0, if the task has not used the FPU before

    if (current_task->FPU_flag == false);
    {
        uint32_t cr0;
        __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
        cr0 |= 0x8; // set the TS bit (no. 3) in CR0 to enable #NM (exception no. 7)
        __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
    }

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:14:12 02.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:21:53 02.04.2010   Titel:              Zitieren

Rev. 312:

Rahmen für FPU-Nutzung bezüglich TS-Bit und #NM stehen, jetzt fehlt noch save und restore (Dank an Tobiking für das Mitdenken!)

in task_switch:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    // set TS
    if (pODA->curTask == pODA->TaskFPU)
    {
        uint32_t cr0;
        __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
        cr0 &= ~0x8; // reset the TS bit (no. 3) in CR0 to disable #NM (exception no. 7)
        __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
    }
    else
    {
        uint32_t cr0;
        __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
        cr0 |= 0x8; // set the TS bit (no. 3) in CR0 to enable #NM (exception no. 7)
        __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
    }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// set TS
if (pODA->curTask == pODA->TaskFPU)
{
uint32_t cr0;
__asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
cr0 &= ~0x8; // reset the TS bit (no. 3) in CR0 to disable #NM (exception no. 7)
__asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
}
else
{
uint32_t cr0;
__asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
cr0 |= 0x8; // set the TS bit (no. 3) in CR0 to enable #NM (exception no. 7)
__asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    // set TS
    if (pODA->curTask == pODA->TaskFPU)
    {
        uint32_t cr0;
        __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
        cr0 &= ~0x8; // reset the TS bit (no. 3) in CR0 to disable #NM (exception no. 7)
        __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
    }
    else
    {
        uint32_t cr0;
        __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
        cr0 |= 0x8; // set the TS bit (no. 3) in CR0 to enable #NM (exception no. 7)
        __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0
    }


kernel:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
            /// FPU-TEST
            if ((CurrentSeconds%5)==0)
            {
                float number1 = 2.5;
                float number2 = 2.5;
                float number3 = number1 * number2;
                char str[40];
                float2string(number3,3,str);
                printf("float result: %s\n",str);
            }
            /// TEST
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
/// FPU-TEST
if ((CurrentSeconds%5)==0)
{
float number1 = 2.5;
float number2 = 2.5;
float number3 = number1 * number2;
char str[40];
float2string(number3,3,str);
printf("float result: %s\n",str);
}
/// TEST
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
            /// FPU-TEST
            if ((CurrentSeconds%5)==0)
            {
                float number1 = 2.5;
                float number2 = 2.5;
                float number3 = number1 * number2;
                char str[40];
                float2string(number3,3,str);
                printf("float result: %s\n",str);
            }
            /// TEST


TTT (hello.c) als Test:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
void Zug(uint16_t Player, char* str, uint16_t* tictactoe, bool ende)
{
    memset((void*)str, 0, 80);

    for (; ; gets(str))
    {
     /// FLOAT-TEST
     float number1 = 2.5;
     float number2 = 2.5;
     float number3 = number1 * number2;
     char floatStr[40];
     float2string(number3,3,floatStr);
     /// TEST
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
void Zug(uint16_t Player, char* str, uint16_t* tictactoe, bool ende)
{
memset((void*)str, 0, 80);

for (; ; gets(str))
{
/// FLOAT-TEST
float number1 = 2.5;
float number2 = 2.5;
float number3 = number1 * number2;
char floatStr[40];
float2string(number3,3,floatStr);
/// TEST
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
void Zug(uint16_t Player, char* str, uint16_t* tictactoe, bool ende)
{
    memset((void*)str, 0, 80);

    for (; ; gets(str))
    {
     /// FLOAT-TEST
     float number1 = 2.5;
     float number2 = 2.5;
     float number3 = number1 * number2;
     char floatStr[40];
     float2string(number3,3,floatStr);
     /// TEST

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:24:53 02.04.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:39:52 03.04.2010   Titel:              Zitieren

Rev. 313:

FPU: fnsave / frstor eingebaut (Danke an Tobiking und taljeth für die Unterstützung)

In den einzelnen Konsolen erkennt man jetzt sehr schön die bei den einzelnen Tasks anfallenden #NM beim Verwenden einer FPU-Operation.

Hier der Part im irq-handler für #NM:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    if ( r->int_no == 7 ) //exception #NM (number 7)
    {
         // set TS in cr0 to zero
         uint32_t cr0;
         __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
         cr0 &= ~0x8; // reset the TS bit (no. 3) in CR0 to disable #NM
         __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0

         settextcolor(12,0);
         printf("#NM: FPU is used. pCurrentTask: %X\n",pCurrentTask);
         settextcolor(15,0);

         // current task uses FPU
         pCurrentTask->FPU_flag = true;

         // save FPU data ...
         if(pODA->TaskFPU)
         {
             // fsave or fnsave to pODA->TaskFPU->FPU_ptr
             __asm__ volatile("fnsave %0" :: "m" (*(char*)(((task_t*)pODA->TaskFPU)->FPU_ptr)));
         }

         // store the last task using FPU
         pODA->TaskFPU = (uintptr_t)pCurrentTask;

         // restore FPU data ...
         if(pCurrentTask->FPU_ptr)
         {
             // frstor from pCurrentTask->FPU_ptr
             __asm__ volatile("frstor %0" :: "m" (*(char*)(pCurrentTask->FPU_ptr)));
         }
         else
         {
             // allocate memory to pCurrentTask->FPU_ptr
             pCurrentTask->FPU_ptr = (uintptr_t)malloc(108,4);
         }
    }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
if ( r->int_no == 7 ) //exception #NM (number 7)
{
// set TS in cr0 to zero
uint32_t cr0;
__asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
cr0 &= ~0x8; // reset the TS bit (no. 3) in CR0 to disable #NM
__asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0

settextcolor(12,0);
printf("#NM: FPU is used. pCurrentTask: %X\n",pCurrentTask);
settextcolor(15,0);

// current task uses FPU
pCurrentTask->FPU_flag = true;

// save FPU data ...
if(pODA->TaskFPU)
{
// fsave or fnsave to pODA->TaskFPU->FPU_ptr
__asm__ volatile("fnsave %0" :: "m" (*(char*)(((task_t*)pODA->TaskFPU)->FPU_ptr)));
}

// store the last task using FPU
pODA->TaskFPU = (uintptr_t)pCurrentTask;

// restore FPU data ...
if(pCurrentTask->FPU_ptr)
{
// frstor from pCurrentTask->FPU_ptr
__asm__ volatile("frstor %0" :: "m" (*(char*)(pCurrentTask->FPU_ptr)));
}
else
{
// allocate memory to pCurrentTask->FPU_ptr
pCurrentTask->FPU_ptr = (uintptr_t)malloc(108,4);
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    if ( r->int_no == 7 ) //exception #NM (number 7)
    {
         // set TS in cr0 to zero
         uint32_t cr0;
         __asm__ volatile("mov %%cr0, %0": "=r"(cr0)); // read cr0
         cr0 &= ~0x8; // reset the TS bit (no. 3) in CR0 to disable #NM
         __asm__ volatile("mov %0, %%cr0":: "r"(cr0)); // write cr0

         settextcolor(12,0);
         printf("#NM: FPU is used. pCurrentTask: %X\n",pCurrentTask);
         settextcolor(15,0);

         // current task uses FPU
         pCurrentTask->FPU_flag = true;

         // save FPU data ...
         if(pODA->TaskFPU)
         {
             // fsave or fnsave to pODA->TaskFPU->FPU_ptr
             __asm__ volatile("fnsave %0" :: "m" (*(char*)(((task_t*)pODA->TaskFPU)->FPU_ptr)));
         }

         // store the last task using FPU
         pODA->TaskFPU = (uintptr_t)pCurrentTask;

         // restore FPU data ...
         if(pCurrentTask->FPU_ptr)
         {
             // frstor from pCurrentTask->FPU_ptr
             __asm__ volatile("frstor %0" :: "m" (*(char*)(pCurrentTask->FPU_ptr)));
         }
         else
         {
             // allocate memory to pCurrentTask->FPU_ptr
             pCurrentTask->FPU_ptr = (uintptr_t)malloc(108,4);
         }
    }

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:15:32 03.04.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:39:26 03.04.2010   Titel:              Zitieren

Rev. 314:

CLTS implementiert:
http://www.c-plusplus.de/forum/viewtopic-var-t-is- ....... ys-is-0-and-postorder-is-asc-and-start-is-129.html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:08:39 03.04.2010   Titel:              Zitieren

Rev. 315:

- fsave anstelle fnsave (FPU context)
- FPU_flag entfernt (nicht benötigt)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:39:25 03.04.2010   Titel:              Zitieren

Rev. 316:

gdt.c: "speaking values" as parameters of gdt_set_gate(...)

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PrettyOS [Version 0.0.0.316]                             Console 0: HELLO   .ELF
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
                                                                               
                            Mr.X TicTacToe 3x3  v0.56                          
                                                                               
--------------------------------------------------------------------------------
                                                                               
*************                                                                  
| 0 | 1 | 2 |                                                                  
*************                                                                  
| 3 | 4 | 5 |                                                                  
*************                                                                  
| 6 | 7 | 8 |                                                                  
*************                                                                  
                                                                               
*************                                                                  
|   |   | X |                                                                  
*************                                                                  
| O | X | O |                                                                  
*************                                                                  
| X |   |   |                                                                  
*************                                                                  
                                                                               
Please type in a number betwen 0 and 8.                                        
                                                                               
     FPU is used. pCurrentTask: C0000180h                                      
#NM: FPU is used. pCurrentTask: C0000180h                                      
Player X wins                                                                  
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PrettyOS [Version 0.0.0.316] Console 0: HELLO .ELF
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Mr.X TicTacToe 3x3 v0.56

--------------------------------------------------------------------------------

*************
| 0 | 1 | 2 |
*************
| 3 | 4 | 5 |
*************
| 6 | 7 | 8 |
*************

*************
| | | X |
*************
| O | X | O |
*************
| X | | |
*************

Please type in a number betwen 0 and 8.

FPU is used. pCurrentTask: C0000180h
#NM: FPU is used. pCurrentTask: C0000180h
Player X wins
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PrettyOS [Version 0.0.0.316]                             Console 0: HELLO   .ELF
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
                                                                               
                            Mr.X TicTacToe 3x3  v0.56                          
                                                                               
--------------------------------------------------------------------------------
                                                                               
*************                                                                  
| 0 | 1 | 2 |                                                                  
*************                                                                  
| 3 | 4 | 5 |                                                                  
*************                                                                  
| 6 | 7 | 8 |                                                                  
*************                                                                  
                                                                               
*************                                                                  
|   |   | X |                                                                  
*************                                                                  
| O | X | O |                                                                  
*************                                                                  
| X |   |   |                                                                  
*************                                                                  
                                                                               
Please type in a number betwen 0 and 8.                                        
                                                                               
     FPU is used. pCurrentTask: C0000180h                                      
#NM: FPU is used. pCurrentTask: C0000180h                                      
Player X wins                                                                  

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:17:01 04.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:33:55 04.04.2010   Titel:              Zitieren

Rev. 317:

Funktion "screenshot" aus ckernel.c ausgelagert nach console.c:

ckernel.c:
C/C++ Code:
            if (CurrentSeconds%120==3)
            {
                char timeStr[10];
                sprintf(timeStr, "TIME%s", timeBuffer);
                screenshot(timeStr);
            }
C/C++ Code:
if (CurrentSeconds%120==3)
{
char timeStr[10];
sprintf(timeStr, "TIME%s", timeBuffer);
screenshot(timeStr);
}
C/C++ Code:
            if (CurrentSeconds%120==3)
            {
                char timeStr[10];
                sprintf(timeStr, "TIME%s", timeBuffer);
                screenshot(timeStr);
            }


console.c:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int32_t screenshot(char* name)
{
    // buffer for video screen
    uint8_t videoscreen[4000+100]; // only signs, no attributes, 50 times CR LF (0xD 0xA) at line end
    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)
        {
            // CR LF (0xD 0xA)
            videoscreen[j+1]= 0xD;
            videoscreen[j+2]= 0xA;
            NewLine++;
        }
    }
    return flpydsk_write(name, "TXT", (void*)videoscreen, 4100);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int32_t screenshot(char* name)
{
// buffer for video screen
uint8_t videoscreen[4000+100]; // only signs, no attributes, 50 times CR LF (0xD 0xA) at line end
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)
{
// CR LF (0xD 0xA)
videoscreen[j+1]= 0xD;
videoscreen[j+2]= 0xA;
NewLine++;
}
}
return flpydsk_write(name, "TXT", (void*)videoscreen, 4100);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int32_t screenshot(char* name)
{
    // buffer for video screen
    uint8_t videoscreen[4000+100]; // only signs, no attributes, 50 times CR LF (0xD 0xA) at line end
    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)
        {
            // CR LF (0xD 0xA)
            videoscreen[j+1]= 0xD;
            videoscreen[j+2]= 0xA;
            NewLine++;
        }
    }
    return flpydsk_write(name, "TXT", (void*)videoscreen, 4100);
}


Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PrettyOS [Version 0.0.0.317]                                               Shell
--------------------------------------------------------------------------------
                                          ##                                    
                                         ##                                    
                                                                               
                                                                               
                     Copyright (c) 2010 The PrettyOS Team                      
                                                                               
                                                                               
                     This bootscreen has been created by                        
                                                                               
                     Cuervo, member of the PrettyOS team                        
                                                                               
                                                                               
                                                                               
                                                                               
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:3.0        dev:100Eh vend:8086h IRQ:11                                    
                                                                               
1.44 MB FDD device 0                                                            
                                                                               
                                                                               
<RAM Disk at C0005000h DIR> dev                                                
35      info                                                                    
13108   shell                                                                  
                                                                               
#NM: FPU is used. pCurrentTask: C0000070h                                      
#NM: FPU is used. pCurrentTask: C0000000h                                      
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PrettyOS [Version 0.0.0.317] Shell
--------------------------------------------------------------------------------
##
##


Copyright (c) 2010 The PrettyOS Team


This bootscreen has been created by

Cuervo, member of the PrettyOS team




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:3.0 dev:100Eh vend:8086h IRQ:11

1.44 MB FDD device 0


<RAM Disk at C0005000h DIR> dev
35 info
13108 shell

#NM: FPU is used. pCurrentTask: C0000070h
#NM: FPU is used. pCurrentTask: C0000000h
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PrettyOS [Version 0.0.0.317]                                               Shell
--------------------------------------------------------------------------------
                                          ##                                    
                                         ##                                    
                                                                               
                                                                               
                     Copyright (c) 2010 The PrettyOS Team                      
                                                                               
                                                                               
                     This bootscreen has been created by                        
                                                                               
                     Cuervo, member of the PrettyOS team                        
                                                                               
                                                                               
                                                                               
                                                                               
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:3.0        dev:100Eh vend:8086h IRQ:11                                    
                                                                               
1.44 MB FDD device 0                                                            
                                                                               
                                                                               
<RAM Disk at C0005000h DIR> dev                                                
35      info                                                                    
13108   shell                                                                  
                                                                               
#NM: FPU is used. pCurrentTask: C0000070h                                      
#NM: FPU is used. pCurrentTask: C0000000h                                      

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:44:48 04.04.2010, insgesamt 4-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 17:14:19 04.04.2010   Titel:              Zitieren

Revision 318:

* Maus-Support (sogar mit Scrollwheel, falls von der Maus unterstützt)! IRQs werden angezeigt, mit Status!


Zuletzt bearbeitet von Erhard Henkes am 01:25:17 05.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:34:12 04.04.2010   Titel:              Zitieren

Rev. 319:

- mouse.c: mouse print auf eine Zeile
- scheduler.c (Beginn der Auslagerung des Dispatchers/Schedulers, separat von task.c)

scheduler.h/c wurde versehentlich nicht committed. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:57:44 04.04.2010, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:16:24 04.04.2010   Titel:              Zitieren

Rev. 320:

- Stylekorrekturen
- makefile und build.bat auf FloppyImage.img umgestellt
- scheduler.c/.h jetzt dabei


Zuletzt bearbeitet von Erhard Henkes am 19:19:58 04.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:21:00 05.04.2010   Titel:              Zitieren

Rev. 321:

Code review:

Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
BL1,
BL2,
ckernel:
    gdt_install();
    idt_install();       // cf. interrupts.asm
    timer_install(1000); // Sets system frequency to ... Hz
    keyboard_install();
    //...   
    syscall_install();
    fpu_install();
Code:
1
2
3
4
5
6
7
8
9
10
BL1,
BL2,
ckernel:
gdt_install();
idt_install(); // cf. interrupts.asm
timer_install(1000); // Sets system frequency to ... Hz
keyboard_install();
//...
syscall_install();
fpu_install();
Code:
1
2
3
4
5
6
7
8
9
10
BL1,
BL2,
ckernel:
    gdt_install();
    idt_install();       // cf. interrupts.asm
    timer_install(1000); // Sets system frequency to ... Hz
    keyboard_install();
    //...   
    syscall_install();
    fpu_install();


next step: paging, heap, tasking, pci-scan, mouse, ehci, ...

Thx to MrX, Cuervo, Tobiking, Iteem :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:07:40 05.04.2010, insgesamt 4-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 12:39:38 05.04.2010   Titel:              Zitieren

Revision 322:

* Mausverbesserungen: Stabilisation, experimenteller Support für 5 Tasten (muss aktiviert werden, ist im Moment instabil und deswegen deaktiviert) und mouse_uninstall(), das sogar die Maus zurücksetzt.

EDIT:

* Des weiteren wurden einige Funktionen ausgelagert, z.B. die Funktion zum Setzen der Sample-Rate!


Zuletzt bearbeitet von Cuervo am 12:41:40 05.04.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:11:47 05.04.2010   Titel:              Zitieren

Revision 323:

- makefile-Bug bezüglich Shell behoben
- rebuild.bat hinzugefügt: führt target clean vorm Build aus
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 17:25:21 05.04.2010   Titel:              Zitieren

Revision 324:

* Kleinere Optimierungen


EDIT: Fehler, nicht-Windows nimmt jetzt i586-elf- gcc und binutils.. sry..


Zuletzt bearbeitet von Cuervo am 17:27:23 05.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:02:46 05.04.2010   Titel:              Zitieren

Rev. 325:

task.c überarbeitet (Code Review)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:22:56 06.04.2010   Titel:              Zitieren

Rev. 326:

weitere Funktionen nach scheduler.c ausgelagert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:12:05 06.04.2010   Titel:              Zitieren

Rev. 327:

Multithreading - erster Versuch.

Klappt noch ncht komplett, aber Bootscreen erscheint schon als Thread. Nach Laden von TTT hängt jedoch noch was.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:35:20 06.04.2010   Titel:              Zitieren

Rev. 328:

Jetzt geht es mit dem ersten Multithreading. :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:05:58 06.04.2010   Titel:              Zitieren

Revision 329:

- build.sh auf FloppyImage.img umgestellt (In Ermangelung von Linux kann ich dennoch nicht beurteilen, ob diese Datei funktioniert)
- HELLO.ELF jetzt in version 0.5.7 (Zählweise geändert, Float-Test weg, Wartet am Ende auf Tastendruck)
- Shell: testch nicht mehr genutzt
- Float-Test im ckernel.c weg, #NM-Ausgabe in Diagnosis-Modus verlegt
- "Aufräumarbeiten"
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:25:26 07.04.2010   Titel:              Zitieren

Rev. 330:

Zwischenschritt: read/write-Sperre by Floppy Disk Transfer (noch nicht sicher)
in oda, os.h:
C/C++ Code:
bool flpy_ReadWriteFlag[4];  // 0: ready      1: busy (blocked)
C/C++ Code:
bool flpy_ReadWriteFlag[4]; // 0: ready 1: busy (blocked)
C/C++ Code:
bool flpy_ReadWriteFlag[4];  // 0: ready      1: busy (blocked)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:27:00 07.04.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:57:18 07.04.2010   Titel:              Zitieren

Revision 331:

- DIAGNOSIS-Modus repariert
- Vergabe von Konsolen nicht mehr vom Namen der Konsole abhängig, sondern vom Aufruf von create_ctask oder create_task (analog auch bei threads) -> Nun wird der String in elf_exec geprüft. (Schiebt das Problem eine Ebene höher)
- HELLO.ELF grundlegend überarbeitet: Bemängelte Probleme behoben
- makefile: Unterscheidung zwischen WINDOWS, MACOSX und anderen. (Cuervo: Bitte testen)
- Altlasten aus der Shell entfernt
- Aufräumarbeiten (Formatierungen)
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 16:14:42 07.04.2010   Titel:              Zitieren

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^^
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:07:10 07.04.2010   Titel:              Zitieren

Rev. 333:

kleine Änderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:13:46 08.04.2010   Titel:              Zitieren

Rev. 334:

task.c: address of exit at top of stack in create_thread (avoids exit in body of functions)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 09:42:37 08.04.2010   Titel:              Zitieren

Revision 335:

- "typedef-structs" in os.h eingesetzt
- start.asm von Altlasten befreit
- Screenshot nun auf Knopfdruck (Ctrl+s)
- Pointer-Typ-Änderungen (BT 2982518)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:37:35 09.04.2010   Titel:              Zitieren

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 verbessert

Simulation mit Qemu:

Code:
<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  
Code:
<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
Code:
<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:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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                  /
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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 /
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 03:32:00 09.04.2010, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 03:42:51 09.04.2010   Titel:              Zitieren

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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:47:27 09.04.2010, insgesamt 1-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 06:54:20 09.04.2010   Titel:              Zitieren

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...
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:40:19 09.04.2010   Titel:              Zitieren

Revision 337:

- Bugfix in task.c/.h: Console nur gelöscht, wenn sie dem Thread/Task gehört.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:38:02 09.04.2010   Titel:              Zitieren

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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:25:12 09.04.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:48:52 09.04.2010   Titel:              Zitieren

ich finde Cuervo's wunderbarere Bootscreen sollte für die Nachwelt fest gehalten werden (natürlich Strg + t während des Bootens):

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
PrettyOS [Version 0.0.0.339]                              Console 0: Booting ...
--------------------------------------------------------------------------------
                                                                               
                                                                               
       ######                    ##    ##               #####       ####        
      ########                  ###   ###              #######     ######      
      ########                  ###   ###             #########   #######      
      ###  ###  ## ##    ####  ##############    ##  ###   ####  ###  ##        
      ###  ### ######  ######################   ### ###     ###  ####          
     ####  ##  #####  #######################   ##  ##      ###  #####          
     ######## ####    ######## ###   ###  #### ### ###      ###   ######        
     #######  ####   ########  ###   ###  #### ### ###      ##     #####        
     ######   ###    ######    ###  ####   ######  ###     ###       ###        
     ###      ###    ###      ####  ####   ######  ####    ##   ##   ###        
    ####      ###    ######## ###########  #####   ##########  ########        
    ###      ###     ######## ##### #####  ####     ########   #######          
    ##       ##       ######   ###   ###   ###       #####      #####          
                                           ##                                  
                                          ##                                    
                                         ##                                    
                                                                               
                                                                               
                     Copyright (c) 2010 The PrettyOS Team                      
                                                                               
                                                                               
                     This bootscreen has been created by                        
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
PrettyOS [Version 0.0.0.339] Console 0: Booting ...
--------------------------------------------------------------------------------


###### ## ## ##### ####
######## ### ### ####### ######
######## ### ### ######### #######
### ### ## ## #### ############## ## ### #### ### ##
### ### ###### ###################### ### ### ### ####
#### ## ##### ####################### ## ## ### #####
######## #### ######## ### ### #### ### ### ### ######
####### #### ######## ### ### #### ### ### ## #####
###### ### ###### ### #### ###### ### ### ###
### ### ### #### #### ###### #### ## ## ###
#### ### ######## ########### ##### ########## ########
### ### ######## ##### ##### #### ######## #######
## ## ###### ### ### ### ##### #####
##
##
##


Copyright (c) 2010 The PrettyOS Team


This bootscreen has been created by
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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                 \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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 \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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:
C/C++ Code:
create_thread((task_t*)pODA->curTask, &screenshot_easy);
C/C++ Code:
create_thread((task_t*)pODA->curTask, &screenshot_easy);
C/C++ Code:
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.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:52:58 09.04.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:28:32 09.04.2010   Titel:              Zitieren

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:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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++;
        }
    }
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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++;
}
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:37:35 09.04.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 02:10:04 10.04.2010   Titel:              Zitieren

Revision 341:

Ergebnisse des CodeReviews: fpu.c, ckernel.c, paging.c, kheap.c
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:22:15 10.04.2010   Titel:              Zitieren

Die Bildschirmfotos sind plötzlich unleserlich. :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:55:25 10.04.2010   Titel:              Zitieren

Rev. 342:

now screenshot works correct again (ctrl+s: process, ctrl+t: thread)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:32:30 10.04.2010   Titel:              Zitieren

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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:07:37 10.04.2010   Titel:              Zitieren

Rev. 344:

build.bat angepasst, dass auch bei floppy_build.bat alle User-Programme auf der Floppy ankommen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:30:02 10.04.2010   Titel:              Zitieren

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": :)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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                -
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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 -
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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                -

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:30:56 10.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:21:53 10.04.2010   Titel:              Zitieren

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:
C/C++ Code:
portCheckFlag   = false;  // EHCI port change
C/C++ Code:
portCheckFlag = false; // EHCI port change
C/C++ Code:
portCheckFlag   = false;  // EHCI port change

später in der idle loop:
C/C++ Code:
            if ((portCheckFlag == true) && (CurrentSeconds >= 3) && pODA->pciEHCInumber)
            {
                portCheckFlag = false;
                create_cthread((task_t*)pODA->curTask, &portCheck, "EHCI Ports");
            }
C/C++ Code:
if ((portCheckFlag == true) && (CurrentSeconds >= 3) && pODA->pciEHCInumber)
{
portCheckFlag = false;
create_cthread((task_t*)pODA->curTask, &portCheck, "EHCI Ports");
}
C/C++ Code:
            if ((portCheckFlag == true) && (CurrentSeconds >= 3) && pODA->pciEHCInumber)
            {
                portCheckFlag = false;
                create_cthread((task_t*)pODA->curTask, &portCheck, "EHCI Ports");
            }


in ehci.c:
der EHCI-Interrupthandler:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
        }
    }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
        }
    }


C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
void portCheck()
{
    showPORTSC();
    checkPortLineStatus();
    settextcolor(13,0);
    printf("\n>>> Press key to close this console. <<<");
    settextcolor(15,0);
    while(!checkKQ_and_return_char());
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
void portCheck()
{
showPORTSC();
checkPortLineStatus();
settextcolor(13,0);
printf("\n>>> Press key to close this console. <<<");
settextcolor(15,0);
while(!checkKQ_and_return_char());
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
void portCheck()
{
    showPORTSC();
    checkPortLineStatus();
    settextcolor(13,0);
    printf("\n>>> Press key to close this console. <<<");
    settextcolor(15,0);
    while(!checkKQ_and_return_char());
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:27:55 10.04.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 01:17:43 11.04.2010   Titel:              Zitieren

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.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:46:33 11.04.2010   Titel:              Zitieren

Rev. 348:

- rtl8139.h geschaffen
- EHCI und RTL8139 Funktionen aus os.h entfernt
- kleine Verbesserungen (falscher Kommentar in rtl8139, Klammer)

Tests:

Bochs: alles ok (hat kein EHCI)
Qemu: alles ok (incl. EHCI)
VMWare: bricht im Bootscreen ab
VBox: USB devices lassen sich nicht einbinden, sonst alles ok
Auf real Hardware Probleme z.T. bei Memory-Erkennung und bei EHCI MMIO.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:35:02 11.04.2010, insgesamt 4-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:10:04 11.04.2010   Titel:              Zitieren

Revision 349:

- Flags durch Events ersetzt.
- -fno-common als gcc-schalter genutzt -> Der Kampf um "extern" ist vorbei, die pro-extern-Fraktion hat (zum Glück ;) ) gewonnen
-- Daraus resultierende Fehler behoben
- "pause" nach dem compilieren in build.bat
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:58:54 11.04.2010   Titel:              Zitieren

Rev. 350:

os.h u. ckernel.c: kleine Aufräumarbeiten

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:39:03 11.04.2010   Titel:              Zitieren

Revision 351:

- Anderes Eventsystem: Fkt-Ptr. basiert
- pciList von überflüssigem _Diagnosis_ befreit.
- list.c: Fehler in listShowElement und listDeleteAll behoben
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:38:32 11.04.2010   Titel:              Zitieren

Rev. 352:

- zwischenschritt ehci.c (#PF bei thread "EHCI")

warum ist der thread zum EHCI init nur "user"?

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PrettyOS [Version 0.0.0.352]                                     Console 0: EHCI
--------------------------------------------------------------------------------
                                                                               
Page Fault ( - user-mode) at 00041D92h - EIP: 00041D92h                        
err_code: 00000005h address(eip): 00041D92h                                    
edi: 00000000h esi: 00000000h ebp: 00000000h eax: 00000000h ebx: 00000000h ecx:
00000000h edx: 00000000h                                                        
cs: 0000001Bh ds: 00000023h es: 00000023h fs: 00000023h gs 00000023h ss 00000023
h                                                                              
int_no 14 eflags 00010202h useresp 01420000h                                    
                                                                               
                                                                               
Page Fault!                                                                    
| <Exception - System Halted> Press key for exit from the task! |
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PrettyOS [Version 0.0.0.352] Console 0: EHCI
--------------------------------------------------------------------------------

Page Fault ( - user-mode) at 00041D92h - EIP: 00041D92h
err_code: 00000005h address(eip): 00041D92h
edi: 00000000h esi: 00000000h ebp: 00000000h eax: 00000000h ebx: 00000000h ecx:
00000000h edx: 00000000h
cs: 0000001Bh ds: 00000023h es: 00000023h fs: 00000023h gs 00000023h ss 00000023
h
int_no 14 eflags 00010202h useresp 01420000h


Page Fault!
| <Exception - System Halted> Press key for exit from the task! |
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PrettyOS [Version 0.0.0.352]                                     Console 0: EHCI
--------------------------------------------------------------------------------
                                                                               
Page Fault ( - user-mode) at 00041D92h - EIP: 00041D92h                        
err_code: 00000005h address(eip): 00041D92h                                    
edi: 00000000h esi: 00000000h ebp: 00000000h eax: 00000000h ebx: 00000000h ecx:
00000000h edx: 00000000h                                                        
cs: 0000001Bh ds: 00000023h es: 00000023h fs: 00000023h gs 00000023h ss 00000023
h                                                                              
int_no 14 eflags 00010202h useresp 01420000h                                    
                                                                               
                                                                               
Page Fault!                                                                    
| <Exception - System Halted> Press key for exit from the task! |

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:26:19 11.04.2010   Titel:              Zitieren

Rev. 353:

work-around, bis das thema ring0/ring3 geklärt ist bei threads:
task.c, line 229/230:
C/C++ Code:
    // new_task->privilege = parentTask->privilege;
    new_task->privilege = 0; /// TEST
C/C++ Code:
// new_task->privilege = parentTask->privilege;
new_task->privilege = 0; /// TEST
C/C++ Code:
    // new_task->privilege = parentTask->privilege;
    new_task->privilege = 0; /// TEST

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:42:06 11.04.2010   Titel:              Zitieren

Revision 354:

- create_thread nimmt keinen parentTask mehr, ist jetzt immer current_task
- Optimierungen in userlib.c
- list.c: Überflüssige (und m.E. falsche, mglw. Memory-Leaks produzierende) Fkt. entfernt
- abs heißt nun fabs, nimmt doubles und nutzt die FPU
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:53:32 11.04.2010   Titel:              Zitieren

Revision 355:

- Projektfile für VC++. Wer will kann auch welche für andere IDEs machen.
- pODA ist nun kein Pointer mehr und heißt somit ODA.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:09:16 12.04.2010   Titel:              Zitieren

Rev. 356:

Vor USB-Transfer wird gestoppt (Tastendruck), damit sind mehrere Konsolen bereit dazu.
USB-Transfer klappt aber bisher nur einmal erfolgreich bei real Hardware)

Da EHCI/USB2 noch ziemlich unübersichtlich ist durch die Vielzahl der Ports und Möglichkeiten, hier die Konsolen meines "Entwicklungs-PCs":

Konsole M:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
PrettyOS [Version 0.0.0.355]                                               Shell
--------------------------------------------------------------------------------
1.44 MB FDD device 0                                                            
                                                                               
#0  0:0.0        dev:2774h vend:8086h IRQ:0                                    
#1  0:1.0        dev:2775h vend:8086h IRQ:5                                    
#2  0:27.0       dev:27D8h vend:8086h IRQ:3                                    
#3  0:28.0       dev:27D0h vend:8086h IRQ:5                                    
#4  0:28.4       dev:27E0h vend:8086h IRQ:5                                    
#5  0:28.5       dev:27E2h vend:8086h IRQ:11                                    
#6  0:29.0       dev:27C8h vend:8086h IRQ:11  USB UHCI 6000h I/O sz:-65504      
#7  0:29.1       dev:27C9h vend:8086h IRQ:11  USB UHCI 6400h I/O sz:-65504      
#8  0:29.2       dev:27CAh vend:8086h IRQ:11  USB UHCI 6800h I/O sz:-65504      
#9  0:29.3       dev:27CBh vend:8086h IRQ:3  USB UHCI 7000h I/O sz:-65504      
#10  0:29.7      dev:27CCh vend:8086h IRQ:11  USB EHCI CDBFF800h MMIO sz:1024  
EHCI_MMIO CDBFF800h mapped to virt addr FF000000h, offset: 0800h                
                                                                               
>>> >>> function: analyzeEHCI                                                  
EHCI bar get_phys_Addr: 0DBFF800h                                              
HCIVERSION: 0100h HCSPARAMS: 00104208h Ports: 8                                
HCCPARAMS: 00006871h                                                            
OpRegs Address: FF000820h                                                      
#11  0:30.0      dev:244Eh vend:8086h IRQ:0                                    
#12  0:31.0      dev:27B8h vend:8086h IRQ:0                                    
#13  0:31.1      dev:27DFh vend:8086h IRQ:0                                    
#14  0:31.2      dev:27C0h vend:8086h IRQ:5                                    
#15  0:31.3      dev:27DAh vend:8086h IRQ:0                                    
#16  1:3.0       dev:8023h vend:104Ch IRQ:11                                    
#17  1:4.0       dev:8211h vend:1283h IRQ:3                                    
#18  1:5.0       dev:4320h vend:11ABh IRQ:11                                    
#19  2:0.0       dev:3132h vend:1095h IRQ:11                                    
#20  3:0.0       dev:108Bh vend:8086h IRQ:5                                    
                                                                               
<RAM Disk at C0002000h DIR> dev                                                
35      info                                                                    
9562    shell                                                                  
                                                                               
                                                                               
>>> >>> function: ehci_handler: Port Change                                    
>>> >>> function: ehci_handler: Port ChangeScreenshot (Thread)                  
                                                                               
                                                                               
$>                                                                              
                                                                               
--------------------------------------------------------------------------------
    _______                _______      <>_<>                                  
   (_______) |_|_|_|_|_|_|| [] [] | .---|'"`|---.                              
  `-oo---oo-'`-oo-----oo-'`-o---o-'`o"O-OO-OO-O"o'                              
--------------------------------------------------------------------------------
Monday, April 12, 2010, 00:38:22   47 s runtime. CPU: 3753 MHz                 \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
PrettyOS [Version 0.0.0.355] Shell
--------------------------------------------------------------------------------
1.44 MB FDD device 0

#0 0:0.0 dev:2774h vend:8086h IRQ:0
#1 0:1.0 dev:2775h vend:8086h IRQ:5
#2 0:27.0 dev:27D8h vend:8086h IRQ:3
#3 0:28.0 dev:27D0h vend:8086h IRQ:5
#4 0:28.4 dev:27E0h vend:8086h IRQ:5
#5 0:28.5 dev:27E2h vend:8086h IRQ:11
#6 0:29.0 dev:27C8h vend:8086h IRQ:11 USB UHCI 6000h I/O sz:-65504
#7 0:29.1 dev:27C9h vend:8086h IRQ:11 USB UHCI 6400h I/O sz:-65504
#8 0:29.2 dev:27CAh vend:8086h IRQ:11 USB UHCI 6800h I/O sz:-65504
#9 0:29.3 dev:27CBh vend:8086h IRQ:3 USB UHCI 7000h I/O sz:-65504
#10 0:29.7 dev:27CCh vend:8086h IRQ:11 USB EHCI CDBFF800h MMIO sz:1024
EHCI_MMIO CDBFF800h mapped to virt addr FF000000h, offset: 0800h

>>> >>> function: analyzeEHCI
EHCI bar get_phys_Addr: 0DBFF800h
HCIVERSION: 0100h HCSPARAMS: 00104208h Ports: 8
HCCPARAMS: 00006871h
OpRegs Address: FF000820h
#11 0:30.0 dev:244Eh vend:8086h IRQ:0
#12 0:31.0 dev:27B8h vend:8086h IRQ:0
#13 0:31.1 dev:27DFh vend:8086h IRQ:0
#14 0:31.2 dev:27C0h vend:8086h IRQ:5
#15 0:31.3 dev:27DAh vend:8086h IRQ:0
#16 1:3.0 dev:8023h vend:104Ch IRQ:11
#17 1:4.0 dev:8211h vend:1283h IRQ:3
#18 1:5.0 dev:4320h vend:11ABh IRQ:11
#19 2:0.0 dev:3132h vend:1095h IRQ:11
#20 3:0.0 dev:108Bh vend:8086h IRQ:5

<RAM Disk at C0002000h DIR> dev
35 info
9562 shell


>>> >>> function: ehci_handler: Port Change
>>> >>> function: ehci_handler: Port ChangeScreenshot (Thread)


$>

--------------------------------------------------------------------------------
_______ _______ <>_<>
(_______) |_|_|_|_|_|_|| [] [] | .---|'"`|---.
`-oo---oo-'`-oo-----oo-'`-o---o-'`o"O-OO-OO-O"o'
--------------------------------------------------------------------------------
Monday, April 12, 2010, 00:38:22 47 s runtime. CPU: 3753 MHz \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
PrettyOS [Version 0.0.0.355]                                               Shell
--------------------------------------------------------------------------------
1.44 MB FDD device 0                                                            
                                                                               
#0  0:0.0        dev:2774h vend:8086h IRQ:0                                    
#1  0:1.0        dev:2775h vend:8086h IRQ:5                                    
#2  0:27.0       dev:27D8h vend:8086h IRQ:3                                    
#3  0:28.0       dev:27D0h vend:8086h IRQ:5                                    
#4  0:28.4       dev:27E0h vend:8086h IRQ:5                                    
#5  0:28.5       dev:27E2h vend:8086h IRQ:11                                    
#6  0:29.0       dev:27C8h vend:8086h IRQ:11  USB UHCI 6000h I/O sz:-65504      
#7  0:29.1       dev:27C9h vend:8086h IRQ:11  USB UHCI 6400h I/O sz:-65504      
#8  0:29.2       dev:27CAh vend:8086h IRQ:11  USB UHCI 6800h I/O sz:-65504      
#9  0:29.3       dev:27CBh vend:8086h IRQ:3  USB UHCI 7000h I/O sz:-65504      
#10  0:29.7      dev:27CCh vend:8086h IRQ:11  USB EHCI CDBFF800h MMIO sz:1024  
EHCI_MMIO CDBFF800h mapped to virt addr FF000000h, offset: 0800h                
                                                                               
>>> >>> function: analyzeEHCI                                                  
EHCI bar get_phys_Addr: 0DBFF800h                                              
HCIVERSION: 0100h HCSPARAMS: 00104208h Ports: 8                                
HCCPARAMS: 00006871h                                                            
OpRegs Address: FF000820h                                                      
#11  0:30.0      dev:244Eh vend:8086h IRQ:0                                    
#12  0:31.0      dev:27B8h vend:8086h IRQ:0                                    
#13  0:31.1      dev:27DFh vend:8086h IRQ:0                                    
#14  0:31.2      dev:27C0h vend:8086h IRQ:5                                    
#15  0:31.3      dev:27DAh vend:8086h IRQ:0                                    
#16  1:3.0       dev:8023h vend:104Ch IRQ:11                                    
#17  1:4.0       dev:8211h vend:1283h IRQ:3                                    
#18  1:5.0       dev:4320h vend:11ABh IRQ:11                                    
#19  2:0.0       dev:3132h vend:1095h IRQ:11                                    
#20  3:0.0       dev:108Bh vend:8086h IRQ:5                                    
                                                                               
<RAM Disk at C0002000h DIR> dev                                                
35      info                                                                    
9562    shell                                                                  
                                                                               
                                                                               
>>> >>> function: ehci_handler: Port Change                                    
>>> >>> function: ehci_handler: Port ChangeScreenshot (Thread)                  
                                                                               
                                                                               
$>                                                                              
                                                                               
--------------------------------------------------------------------------------
    _______                _______      <>_<>                                  
   (_______) |_|_|_|_|_|_|| [] [] | .---|'"`|---.                              
  `-oo---oo-'`-oo-----oo-'`-o---o-'`o"O-OO-OO-O"o'                              
--------------------------------------------------------------------------------
Monday, April 12, 2010, 00:38:22   47 s runtime. CPU: 3753 MHz                 \


Konsole 0:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
PrettyOS [Version 0.0.0.355]                                     Console 0: EHCI
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: initEHCIHostController                                        
                                                                               
>>> >>> function: startHostController (reset HC)                                
waiting for HC reset                                                            
                                                                               
>>> >>> function: DeactivateLegacySupport                                      
                                                                               
DeactivateLegacySupport: eecp = 0068h                                          
eecp = 0068h, eecp_id = 0001h                                                  
set OS-Semaphore.                                                              
BIOS-Semaphore being not set.                                                  
OS-Semaphore being set.                                                        
Check: BIOSownedSemaphore: 0 OSownedSemaphore: 1                                
                                                                               
>>> >>> function: ehci_handler: Port Change                                    
HCHalted bit set to 0 (OK), ports can be enabled now.                          
>>> >>> function: enablePorts                                                  
                                                                               
>>> >>> function: resetPort 1                                                  
>>> >>> function: resetPort 2                                                  
>>> >>> function: resetPort 3                                                  
>>> >>> function: resetPort 4                                                  
>>> >>> function: resetPort 5                                                  
>>> >>> function: resetPort 6                                                  
>>> >>> function: resetPort 7                                                  
>>> >>> function: resetPort 8                                                  
>>> Press key to close this console. <<<        
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
PrettyOS [Version 0.0.0.355] Console 0: EHCI
--------------------------------------------------------------------------------

>>> >>> function: initEHCIHostController

>>> >>> function: startHostController (reset HC)
waiting for HC reset

>>> >>> function: DeactivateLegacySupport

DeactivateLegacySupport: eecp = 0068h
eecp = 0068h, eecp_id = 0001h
set OS-Semaphore.
BIOS-Semaphore being not set.
OS-Semaphore being set.
Check: BIOSownedSemaphore: 0 OSownedSemaphore: 1

>>> >>> function: ehci_handler: Port Change
HCHalted bit set to 0 (OK), ports can be enabled now.
>>> >>> function: enablePorts

>>> >>> function: resetPort 1
>>> >>> function: resetPort 2
>>> >>> function: resetPort 3
>>> >>> function: resetPort 4
>>> >>> function: resetPort 5
>>> >>> function: resetPort 6
>>> >>> function: resetPort 7
>>> >>> function: resetPort 8
>>> Press key to close this console. <<<
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
PrettyOS [Version 0.0.0.355]                                     Console 0: EHCI
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: initEHCIHostController                                        
                                                                               
>>> >>> function: startHostController (reset HC)                                
waiting for HC reset                                                            
                                                                               
>>> >>> function: DeactivateLegacySupport                                      
                                                                               
DeactivateLegacySupport: eecp = 0068h                                          
eecp = 0068h, eecp_id = 0001h                                                  
set OS-Semaphore.                                                              
BIOS-Semaphore being not set.                                                  
OS-Semaphore being set.                                                        
Check: BIOSownedSemaphore: 0 OSownedSemaphore: 1                                
                                                                               
>>> >>> function: ehci_handler: Port Change                                    
HCHalted bit set to 0 (OK), ports can be enabled now.                          
>>> >>> function: enablePorts                                                  
                                                                               
>>> >>> function: resetPort 1                                                  
>>> >>> function: resetPort 2                                                  
>>> >>> function: resetPort 3                                                  
>>> >>> function: resetPort 4                                                  
>>> >>> function: resetPort 5                                                  
>>> >>> function: resetPort 6                                                  
>>> >>> function: resetPort 7                                                  
>>> >>> function: resetPort 8                                                  
>>> Press key to close this console. <<<        


Konsole 1:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
PrettyOS [Version 0.0.0.355]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: showPORTSC                                                    
                                                                               
>>> >>> function: checkPortLineStatus                                          
                                                                               
                                                                               
>>> Status of USB Ports <<<                                                    
port 1: 00001801h, line: 02h  J-state                                          
port 2: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                
>>> Press key to start USB-Test. <<<                                          
Code:
1
2
3
4
5
6
7
8
9
10
11
12
PrettyOS [Version 0.0.0.355] Console 1: EHCI Ports
--------------------------------------------------------------------------------

>>> >>> function: showPORTSC

>>> >>> function: checkPortLineStatus


>>> Status of USB Ports <<<
port 1: 00001801h, line: 02h J-state
port 2: 00001005h, line: 00h SE0,power on, enabled, EHCI owned
>>> Press key to start USB-Test. <<<
Code:
1
2
3
4
5
6
7
8
9
10
11
12
PrettyOS [Version 0.0.0.355]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: showPORTSC                                                    
                                                                               
>>> >>> function: checkPortLineStatus                                          
                                                                               
                                                                               
>>> Status of USB Ports <<<                                                    
port 1: 00001801h, line: 02h  J-state                                          
port 2: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                
>>> Press key to start USB-Test. <<<                                          


Konsole 2:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
PrettyOS [Version 0.0.0.355]                               Console 2: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: showPORTSC                                                    
                                                                               
>>> >>> function: resetPort 8                                                  
>>> >>> function: checkPortLineStatus                                          
                                                                               
                                                                               
>>> Status of USB Ports <<<                                                    
port 1: 00001801h, line: 02h  J-state                                          
port 2: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                
>>> Press key to start USB-Test. <<<                                  
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
PrettyOS [Version 0.0.0.355] Console 2: EHCI Ports
--------------------------------------------------------------------------------

>>> >>> function: showPORTSC

>>> >>> function: resetPort 8
>>> >>> function: checkPortLineStatus


>>> Status of USB Ports <<<
port 1: 00001801h, line: 02h J-state
port 2: 00001005h, line: 00h SE0,power on, enabled, EHCI owned
>>> Press key to start USB-Test. <<<
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
PrettyOS [Version 0.0.0.355]                               Console 2: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: showPORTSC                                                    
                                                                               
>>> >>> function: resetPort 8                                                  
>>> >>> function: checkPortLineStatus                                          
                                                                               
                                                                               
>>> Status of USB Ports <<<                                                    
port 1: 00001801h, line: 02h  J-state                                          
port 2: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                
>>> Press key to start USB-Test. <<<                                  


Taste auf Konsole 2 bringt einen korrekten USB-Transfer. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:48:52 12.04.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:24:41 12.04.2010   Titel:              Zitieren

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 getriggert
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
    if (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);
    }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
if (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);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
    if (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. :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:27:33 12.04.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:14:55 12.04.2010   Titel:              Zitieren

Rev. 358:

ehci.c / usb2.c: Debug-Ausgaben etwas verdichtet, damit das auf einen Bildschirm passt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:56:41 12.04.2010   Titel:              Zitieren

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.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:21:38 12.04.2010   Titel:              Zitieren

Rev. 360:

Damit wir mal mit float arbeiten können:

userlib:
- ftoa anstelle float2string
- atof

- hello: rechnet pq-formel

bitte testen, ob alles stimmt. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:26:41 13.04.2010   Titel:              Zitieren

Rev. 361:

waren noch einige Korrekturen notwendig

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:23:51 13.04.2010   Titel:              Zitieren

Rev. 362:

- in PQEQ.ELF umbenannt und auch in FloppyImage eingebunden, damit man das überhaupt laden kann
- header für beep aus ckernel.c entfernt

Wer die Ergebnisse des pq-equation-programms überprüfen will, dem empfehle ich folgendes C++-Programm:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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();
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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();
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#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();
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:07:06 15.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:35:13 13.04.2010   Titel:              Zitieren

Rev. 363:

Code Review elf.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:56:53 13.04.2010   Titel:              Zitieren

Rev. 364:

gdt.c: |0xF bei granularity entfernt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:29:39 14.04.2010   Titel:              Zitieren

Rev. 365:

ckernel.c: bss nullen

siehe: http://www.c-plusplus.de/forum/viewtopic-var-t-is-260731-and-start-is-140.html (aber natürlich nicht statisch, sondern mit Variablen aus dem Linker-Skript)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:45:12 14.04.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:07:44 15.04.2010   Titel:              Zitieren

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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:38:47 15.04.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:38:12 15.04.2010   Titel:              Zitieren

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.

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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               \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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 \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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               \

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 09:19:57 15.04.2010, insgesamt 1-mal bearbeitet
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 00:49:38 15.04.2010   Titel:              Zitieren

Erhard Henkes schrieb:
rev. 368:

Erhard Henkes, ich prophezeihe: PrettyOS wird dein Lebenswerk. :D

_________________
a = b << c; /* shift happens */
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:09:33 15.04.2010   Titel:              Zitieren

Zitat:
ich prophezeihe: PrettyOS wird dein Lebenswerk. :D

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. :D

Das lässt sich aber nur im Team bewältigen. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 09:28:49 15.04.2010, insgesamt 1-mal bearbeitet
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 09:38:24 15.04.2010   Titel:              Zitieren

Erhard Henkes schrieb:
Zitat:
ich prophezeihe: PrettyOS wird dein Lebenswerk. :D

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. :)

_________________
a = b << c; /* shift happens */
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:44:05 15.04.2010   Titel:              Zitieren

@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):
Code:
Port Change                                                                    
ehci_handler: USB Interrupt                                                    
ehci_handler: USB Interrupt
Code:
Port Change
ehci_handler: USB Interrupt
ehci_handler: USB Interrupt
Code:
Port Change                                                                    
ehci_handler: USB Interrupt                                                    
ehci_handler: USB Interrupt

Konsole 0:
Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
>>> >>> 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  
Code:
1
2
3
4
5
6
7
8
9
10
>>> >>> 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
Code:
1
2
3
4
5
6
7
8
9
10
>>> >>> 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:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> 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
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> 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
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> 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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:49:12 15.04.2010, insgesamt 2-mal bearbeitet
Z
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.02.2010
Beiträge: 773
Beitrag Z Mitglied 11:59:45 15.04.2010   Titel:              Zitieren

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. :live:

_________________
a = b << c; /* shift happens */
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:39:51 15.04.2010   Titel:              Zitieren

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.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:21:13 16.04.2010   Titel:              Zitieren

Revision 371:

kdebug(...) eingeführt (verbesserte Übersichtlichkeit und zentrale Wartbarkeit).
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
/// 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
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
/// 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
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
/// 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. :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:23:08 16.04.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:10:15 16.04.2010   Titel:              Zitieren

Rev. 372:

erweiterte Abfrage via USB2.0: device, config, interface, endpoints

Test mit qemu:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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                                                            
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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: endpoint

Abfrage 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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:13:37 16.04.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:16:56 17.04.2010   Titel:              Zitieren

Rev. 373:

port reset und USB-Transfer koordiniert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:11:36 17.04.2010   Titel:              Zitieren

Rev. 374:

TEST für ehci/usb2: nur zwischenschritt, um Host System Error auf real Hardware zu überwinden (noch re-init notwendig)

in ehci.c:
zeile 16-18:
C/C++ Code:
/// TEST
const uint8_t PORTRESET = 3; /// TEST: only one port is reset!!! PORTRESET+1 is the indicated port
/// TEST
C/C++ Code:
/// TEST
const uint8_t PORTRESET = 3; /// TEST: only one port is reset!!! PORTRESET+1 is the indicated port
/// TEST
C/C++ Code:
/// TEST
const uint8_t PORTRESET = 3; /// TEST: only one port is reset!!! PORTRESET+1 is the indicated port
/// TEST

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:53:26 17.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 09:34:18 17.04.2010   Titel:              Zitieren

Unser SVN bei source forge ist an diesem Wochenende down. :eek:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
taljeth
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.09.2009
Beiträge: 148
Beitrag taljeth Mitglied 10:48:55 17.04.2010   Titel:              Zitieren

Wohl dem, der ein git hat.

Dann müsst ihr jetzt wohl ein Wochenende lang an tyndur basteln und euch dort Ideen holen. ;)

_________________
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.
Lowlevel - die deutschsprachige OS-Dev-Community
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:32:22 17.04.2010   Titel:              Zitieren

Rev. 375:

TEST für ehci/usb2: nur zwischenschritt, um Host System Error bei mancher real Hardware zu überwinden (extended bei qtd eingefügt);

nur ein port, z.B. 7 (angezeigt 8), kann leicht umgestellt werden.

Zeile 16-19: ehci.c
C/C++ Code:
/// TEST
//const uint8_t PORTRESET = 7; /// TEST: only one port is reset!!! PORTRESET+1 is the indicated port

#define
PORTRESET j
/// TEST
C/C++ Code:
/// TEST
//const uint8_t PORTRESET = 7; /// TEST: only one port is reset!!! PORTRESET+1 is the indicated port

#define
PORTRESET j
/// TEST
C/C++ Code:
/// TEST
//const uint8_t PORTRESET = 7; /// TEST: only one port is reset!!! PORTRESET+1 is the indicated port

#define
PORTRESET j
/// TEST


@taljeth: danke für das nette Angebot. Wir holen uns gerne Ideen, nicht nur von týndur. Aber am liebsten basteln wir an unserem OS weiter. :)

Das kann sich aber noch ändern. Vor uns ist nichts sicher. :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:54:14 17.04.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:41:58 17.04.2010   Titel:              Zitieren

Rev. 376:

nun auch mit SET_ADDRESS

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 10:13:57 18.04.2010   Titel:              Zitieren

Revision 377:

* Maustreiber Fehlerbehebung (ACK wird jetzt erwartet)
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 11:40:25 18.04.2010   Titel:              Zitieren

Revision 378:

* Fehler bei Maus ohne Mausrad behoben


(EDIT: verdammt, kein neues Image hochgeladen..-.-)


Zuletzt bearbeitet von Erhard Henkes am 12:08:12 18.04.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:07:55 18.04.2010   Titel:              Zitieren

Rev. 379:

nun läuft das mit SET_ADDRESS zumindest in qemu EHCI
--> nur noch QTD_SETUP und QTD_IO

zu qemu: ist aber Blödsinn, wenn das bei qemu mit nicht angeschlossenem Gerät klappt, daher Umbau auf reale Verhältnisse in rev. 380

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:18:10 18.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:21:27 18.04.2010   Titel:              Zitieren

Rev. 380:

- jetzt nur bei attached device (also 0x1005), klappte bei einem ersten real PC Test noch nicht

Tests mit real PC:
anschließend noch mit device 0 getestet, ob SET_ADDRESS überhaupt geklappt hat:
brachte auch nur Nullen, das Adresse setzen könnte also auch dort geklappt haben! :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:45:14 18.04.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:28:38 18.04.2010   Titel:              Zitieren

Rev. 381:

PCI Command Register, Bit 2 (Bus Master) zusätzlich gesetzt
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    // pci bus data
    uint32_t num = ODA.pciEHCInumber;
    uint8_t bus  = pciDev_Array[num].bus;
    uint8_t dev  = pciDev_Array[num].device;
    uint8_t func = pciDev_Array[num].func;
    uint8_t irq  = pciDev_Array[num].irq;
    // prepare PCI command register // offset 0x04
    // bit 9 (0x0200): Fast Back-to-Back Enable // not necessary
    // bit 2 (0x0004): Bus Master               // cf. http://forum.osdev.org/viewtopic.php?f=1&t=20255&start=0

    uint16_t pciCommandRegister = pci_config_read(bus, dev, func, 0x0204);
    printf("\nPCI Command Register before:          %x", pciCommandRegister);
    pci_config_write_dword(bus, dev, func, 0x04, pciCommandRegister /*already set*/ | 1<<2 /* bus master */); // resets status register, sets command register
    printf("\nPCI Command Register plus bus master: %x", pci_config_read(bus, dev, func, 0x0204));

    irq_install_handler(32 + irq,   ehci_handler);
    /// irq_install_handler(32 + irq-1, ehci_handler); /// work-around for VirtualBox Bug!
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// pci bus data
uint32_t num = ODA.pciEHCInumber;
uint8_t bus = pciDev_Array[num].bus;
uint8_t dev = pciDev_Array[num].device;
uint8_t func = pciDev_Array[num].func;
uint8_t irq = pciDev_Array[num].irq;
// prepare PCI command register // offset 0x04
// bit 9 (0x0200): Fast Back-to-Back Enable // not necessary
// bit 2 (0x0004): Bus Master // cf. http://forum.osdev.org/viewtopic.php?f=1&t=20255&start=0

uint16_t pciCommandRegister = pci_config_read(bus, dev, func, 0x0204);
printf("\nPCI Command Register before: %x", pciCommandRegister);
pci_config_write_dword(bus, dev, func, 0x04, pciCommandRegister /*already set*/ | 1<<2 /* bus master */); // resets status register, sets command register
printf("\nPCI Command Register plus bus master: %x", pci_config_read(bus, dev, func, 0x0204));

irq_install_handler(32 + irq, ehci_handler);
/// irq_install_handler(32 + irq-1, ehci_handler); /// work-around for VirtualBox Bug!
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    // pci bus data
    uint32_t num = ODA.pciEHCInumber;
    uint8_t bus  = pciDev_Array[num].bus;
    uint8_t dev  = pciDev_Array[num].device;
    uint8_t func = pciDev_Array[num].func;
    uint8_t irq  = pciDev_Array[num].irq;
    // prepare PCI command register // offset 0x04
    // bit 9 (0x0200): Fast Back-to-Back Enable // not necessary
    // bit 2 (0x0004): Bus Master               // cf. http://forum.osdev.org/viewtopic.php?f=1&t=20255&start=0

    uint16_t pciCommandRegister = pci_config_read(bus, dev, func, 0x0204);
    printf("\nPCI Command Register before:          %x", pciCommandRegister);
    pci_config_write_dword(bus, dev, func, 0x04, pciCommandRegister /*already set*/ | 1<<2 /* bus master */); // resets status register, sets command register
    printf("\nPCI Command Register plus bus master: %x", pci_config_read(bus, dev, func, 0x0204));

    irq_install_handler(32 + irq,   ehci_handler);
    /// irq_install_handler(32 + irq-1, ehci_handler); /// work-around for VirtualBox Bug!


Tobiking und Cuervo haben schon vollständige Transfers (set_address, device 18 byte, config 9+9+7+7 byte) gesehen, allerdings erst beim zweiten Hochfahren. Bei mir blieb es stabil negativ auf einem Test-PC.

Ob und inweiweit die sogenannten PCI Capabilities List (angezeigt beo 0x34) eine Rolle spielen, ist mir unklar.

capabilities list: 0x50
eecp: 0x68 (das haben wir zum BIOS/OS-Umschalten verwendet)

Weiß jemand mehr über diese "pci capabilities list" bei EHCI (unterhalb eecp)?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:41:32 18.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:38:14 18.04.2010   Titel:              Zitieren

Rev. 382:

code review usb.c

TODO:
- abwarten bis Transfer wirklich beendet (USB-Status abfragen)
- array anlegen für adressen/infos von usb-devices
- neue Adresse vergeben: erste frei Adresse verwenden

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:40:41 18.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:56:19 19.04.2010   Titel:              Zitieren

Rev. 383:

Testvariante für USB_Transfer bezüglich dem ersten TODO topic (s. Rev. 382):
1) Adresse ändern
2) device abfragen
3) config abfragen (statisch aufgebaut: 1 interface mit 2 endpoints)

Technik für warten:
USBINT (wird gesetzt bei complete transfer) setzt USBINTflag, erst dann weiter (mit timeout).

Nach SET_ADDRESS wird 1 sec gewartet (war nicht sicher, ob da STS_USBINT überhaupt kommt, da kein Datentransfer)

Nun sieht man, wie lange der erfolgreiche Transfer dauert (#-zeichen * 20 ms)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:57:49 19.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:21:08 19.04.2010   Titel:              Zitieren

Rev. 384:

siehe http://www.c-plusplus.de/forum/viewtopic-var-t-is-253016-and-start-is-67html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:08:09 19.04.2010   Titel:              Zitieren

Rev. 385: (ohne FloppyImage.img, weil SVN das nicht wollte)

jetzt auch SET_ADDRESS mit abwarten auf STS_USBINT

hier der Host Sytem Error bei meinem Development PC:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
PrettyOS [Version 0.0.0.385]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: resetPort 4                                                  
                                                                               
>>> Status of USB Ports <<<                                                    
port 4: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                
>>> Press key to start USB-Test. <<<                                            
                                                                               
USB2: SET_ADDRESS                                                              
Reset STS_USBINT and enable Async Schedule                                      
.#                                                                              
SETUP:                                                                          
QTD: C0217000h Statusbyte: 00h                                                  
                                                                               
USB2: GET_DESCRIPTOR device, dev: 4 endpoint: 0                                
                                                                               
ehci_handler: Host System Error                                                
PCI status word: 2290h                                                          
Capabilities List                                                              
Fast Back-to-Back Transactions Capable                                          
Received Master-Abort                                                          
                                                                               
>>> Init EHCI after fatal error:           <<<                                  
>>> Press key for EHCI (re)initialization. <<<                          
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
PrettyOS [Version 0.0.0.385] Console 1: EHCI Ports
--------------------------------------------------------------------------------

>>> >>> function: resetPort 4

>>> Status of USB Ports <<<
port 4: 00001005h, line: 00h SE0,power on, enabled, EHCI owned
>>> Press key to start USB-Test. <<<

USB2: SET_ADDRESS
Reset STS_USBINT and enable Async Schedule
.#
SETUP:
QTD: C0217000h Statusbyte: 00h

USB2: GET_DESCRIPTOR device, dev: 4 endpoint: 0

ehci_handler: Host System Error
PCI status word: 2290h
Capabilities List
Fast Back-to-Back Transactions Capable
Received Master-Abort

>>> Init EHCI after fatal error: <<<
>>> Press key for EHCI (re)initialization. <<<
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
PrettyOS [Version 0.0.0.385]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: resetPort 4                                                  
                                                                               
>>> Status of USB Ports <<<                                                    
port 4: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                
>>> Press key to start USB-Test. <<<                                            
                                                                               
USB2: SET_ADDRESS                                                              
Reset STS_USBINT and enable Async Schedule                                      
.#                                                                              
SETUP:                                                                          
QTD: C0217000h Statusbyte: 00h                                                  
                                                                               
USB2: GET_DESCRIPTOR device, dev: 4 endpoint: 0                                
                                                                               
ehci_handler: Host System Error                                                
PCI status word: 2290h                                                          
Capabilities List                                                              
Fast Back-to-Back Transactions Capable                                          
Received Master-Abort                                                          
                                                                               
>>> Init EHCI after fatal error:           <<<                                  
>>> Press key for EHCI (re)initialization. <<<                          


Man sieht aber, dass der SET_ADDRESS sauber durchgeht:

USB2: SET_ADDRESS
Reset STS_USBINT and enable Async Schedule
.#
SETUP:
QTD: C0217000h Statusbyte: 00h

Der Punkt stammt vom interrupt, der das USBINTflag setzt, und nach 20 ms (ein #) ist der USB-Transfer erledigt.

Der nachfolgende pci master abort error bei GET_DESCRIPTOR device sollte von einem fehlerhaften Speicherzugriff herrühren. Ursache unklar. Wir sind für jeden Hinweis dankbar, da dieses Problem die Weiterentwicklung der EHCI/USB2-Treiber im Hardwarebereich behindert. Bei Qemu, VMWare und VBox kein Problem.

Wie sieht das bei Cuervo und Tobiking aus? Auch dieses 0Ah?
PCI Capabilities List: first Pointer: 0050h
PCI Capabilities List: ID: 01h, next Pointer: 58h
PCI Capabilities List: ID: 0Ah, next Pointer: 00h

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:17:42 19.04.2010, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:30:30 19.04.2010   Titel:              Zitieren

Revision 386:

- Definition von bool in userlib.h nun identisch zu types.h
- user_program_c heißt nun shell
- kdebug nun als inline-fkt. mit Farb-Funktionalität
- Aufräumarbeiten (u.a. rtl8139.c ...)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:47:44 20.04.2010   Titel:              Zitieren

Rev. 387:

page in createQTD_...:
C/C++ Code:
    void* data = malloc(PAGESIZE, PAGESIZE); // Enough for a full page
    memset(data,0,PAGESIZE);
C/C++ Code:
void* data = malloc(PAGESIZE, PAGESIZE); // Enough for a full page
memset(data,0,PAGESIZE);
C/C++ Code:
    void* data = malloc(PAGESIZE, PAGESIZE); // Enough for a full page
    memset(data,0,PAGESIZE);
vorsichtshalber, sollte aber tokenBytes reichen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:36:13 20.04.2010   Titel:              Zitieren

Rev. 388: (versehentlich 387 in ckernel.c)

auf einen QH reduziert

bleibt die async. List stehen? das ist die frage. :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:36:57 20.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:08:41 20.04.2010   Titel:              Zitieren

Rev. 389:

Asynchrone Liste wird nach USB-Transfer im USBCMD ausgeschaltet, da das H-Bit offenbar noch unzuverlässig arbeitet.
C/C++ Code:
pOpRegs->USBCMD &= ~CMD_ASYNCH_ENABLE;
C/C++ Code:
pOpRegs->USBCMD &= ~CMD_ASYNCH_ENABLE;
C/C++ Code:
pOpRegs->USBCMD &= ~CMD_ASYNCH_ENABLE;


Bitte testen.
EDIT: sieht sehr gut aus (positive Tests bei Cuervo, Tobiking, Erhard Henkes)! Ursache gefunden, wenn auch noch nicht verstanden. ;)

Wir haben festgestellt, dass die asynchrone Liste einfach das H-Bit ignoriert im QH und weiter läuft. Beim nächsten Transfer haben wir dann dem laufenden Asynchronen Scheduler die Basisadresse weg gezogen. :D

Von nun an können wir uns hoffentlich auf USB 2.0 konzentrieren. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:32:55 20.04.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:15:20 20.04.2010   Titel:              Zitieren

Rev. 390:

ehci.h/c u. usb.c: Umbenennungen und ein Ausgabefehler (Rev. 389: ein Statusbyte ausgewiesen, dass es gar nicht gibt) beseitigt

Jetzt sieht das alles gut aus.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:04:43 20.04.2010   Titel:              Zitieren

Rev. 391:

nur geringe Veränderungen in ehci/usb.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 04:42:05 22.04.2010   Titel:              Zitieren

Rev. 392:

ehci.c, usb.h/c: testweise Stringausgabe bei USB-Transfer
ckernel.c: deskriptoren zuerst (Dank an +gjm+ für diesen Hinweis)

http://www.lowlevel.eu/wiki/USB#Stringdescriptor

Beispiele für Stringausgaben:

Chico QEye (web cam)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
PrettyOS [Version 0.0.0.392]                               Console 6: EHCI Ports
--------------------------------------------------------------------------------
lang: 0409h                                                                    
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 00h                                                        
                                                                               
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 1#                
1Ch 03h 43h 00h 68h 00h 69h 00h 63h 00h 6Fh 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            28           descriptor type:   3                            
string: Chico                                                                  
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 50h                                                        
qTD Status: Halted - serious error at the device/endpoint                      
qTD Status: Babble (fatal error leads to Halted)                                
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 2#                
20h 03h 51h 00h 45h 00h 79h 00h 65h 00h 20h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            32           descriptor type:   3                            
string: QEye                                                                    
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 50h                                                        
qTD Status: Halted - serious error at the device/endpoint                      
qTD Status: Babble (fatal error leads to Halted)                                
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 3#                
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
SETUP:  qTD Status: 00h                                                        
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
PrettyOS [Version 0.0.0.392] Console 6: EHCI Ports
--------------------------------------------------------------------------------
lang: 0409h

SETUP: qTD Status: 00h

IO : qTD Status: 00h

USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 1#
1Ch 03h 43h 00h 68h 00h 69h 00h 63h 00h 6Fh 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
length: 28 descriptor type: 3
string: Chico

SETUP: qTD Status: 00h

IO : qTD Status: 50h
qTD Status: Halted - serious error at the device/endpoint
qTD Status: Babble (fatal error leads to Halted)
USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 2#
20h 03h 51h 00h 45h 00h 79h 00h 65h 00h 20h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
length: 32 descriptor type: 3
string: QEye

SETUP: qTD Status: 00h

IO : qTD Status: 50h
qTD Status: Halted - serious error at the device/endpoint
qTD Status: Babble (fatal error leads to Halted)
USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 3#
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
SETUP: qTD Status: 00h
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
PrettyOS [Version 0.0.0.392]                               Console 6: EHCI Ports
--------------------------------------------------------------------------------
lang: 0409h                                                                    
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 00h                                                        
                                                                               
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 1#                
1Ch 03h 43h 00h 68h 00h 69h 00h 63h 00h 6Fh 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            28           descriptor type:   3                            
string: Chico                                                                  
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 50h                                                        
qTD Status: Halted - serious error at the device/endpoint                      
qTD Status: Babble (fatal error leads to Halted)                                
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 2#                
20h 03h 51h 00h 45h 00h 79h 00h 65h 00h 20h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            32           descriptor type:   3                            
string: QEye                                                                    
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 50h                                                        
qTD Status: Halted - serious error at the device/endpoint                      
qTD Status: Babble (fatal error leads to Halted)                                
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 3#                
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
SETUP:  qTD Status: 00h                                                        


Memor USB2. 110 (USB Memory Stick)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
PrettyOS [Version 0.0.0.392]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
IO   :  qTD Status: 00h                                                        
                                                                               
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 1                  
0Eh 03h 6Dh 00h 65h 00h 6Dh 00h 6Fh 00h 72h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            14           descriptor type:   3                            
string: memor                                                                  
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 50h                                                        
qTD Status: Halted - serious error at the device/endpoint                      
qTD Status: Babble (fatal error leads to Halted)                                
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 2                  
0Eh 03h 55h 00h 53h 00h 42h 00h 32h 00h 2Eh 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            14           descriptor type:   3                            
string: USB2.                                                                  
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 50h                                                        
qTD Status: Halted - serious error at the device/endpoint                      
qTD Status: Babble (fatal error leads to Halted)                                
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 3                  
08h 03h 31h 00h 31h 00h 30h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            8            descriptor type:   3                            
string: 110                                                                    
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
Port: 1, device attached
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
PrettyOS [Version 0.0.0.392] Console 1: EHCI Ports
--------------------------------------------------------------------------------

IO : qTD Status: 00h

USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 1
0Eh 03h 6Dh 00h 65h 00h 6Dh 00h 6Fh 00h 72h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
length: 14 descriptor type: 3
string: memor

SETUP: qTD Status: 00h

IO : qTD Status: 50h
qTD Status: Halted - serious error at the device/endpoint
qTD Status: Babble (fatal error leads to Halted)
USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 2
0Eh 03h 55h 00h 53h 00h 42h 00h 32h 00h 2Eh 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
length: 14 descriptor type: 3
string: USB2.

SETUP: qTD Status: 00h

IO : qTD Status: 50h
qTD Status: Halted - serious error at the device/endpoint
qTD Status: Babble (fatal error leads to Halted)
USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 3
08h 03h 31h 00h 31h 00h 30h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
length: 8 descriptor type: 3
string: 110

SETUP: qTD Status: 00h

Port: 1, device attached
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
PrettyOS [Version 0.0.0.392]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
IO   :  qTD Status: 00h                                                        
                                                                               
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 1                  
0Eh 03h 6Dh 00h 65h 00h 6Dh 00h 6Fh 00h 72h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            14           descriptor type:   3                            
string: memor                                                                  
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 50h                                                        
qTD Status: Halted - serious error at the device/endpoint                      
qTD Status: Babble (fatal error leads to Halted)                                
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 2                  
0Eh 03h 55h 00h 53h 00h 42h 00h 32h 00h 2Eh 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            14           descriptor type:   3                            
string: USB2.                                                                  
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
IO   :  qTD Status: 50h                                                        
qTD Status: Halted - serious error at the device/endpoint                      
qTD Status: Babble (fatal error leads to Halted)                                
USB status: 00000000h                                                          
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 3                  
08h 03h 31h 00h 31h 00h 30h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                        
length:            8            descriptor type:   3                            
string: 110                                                                    
                                                                               
SETUP:  qTD Status: 00h                                                        
                                                                               
Port: 1, device attached


EDIT: Strings werden noch abgeschnitten!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:14:17 23.04.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:18:41 22.04.2010   Titel:              Zitieren

Rev. 393:

- #define _SOUND_ (nur dann ertönt beep)
- usbDevices als Array zum Festhalten der abgefragten Infos

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:38:07 22.04.2010   Titel:              Zitieren

Revision 394:

- shell verbessert (Intern)
- VC++-Projektfile repariert und Dateien etwas umsortiert
- Sound per Default aktiviert
- cdi-Header: Ein paar Kommentare umformatiert/übersetzt
- Ein Zeichen am Bootscreen geändert für schönere Zentrierung
- Verbesserungen im Userspace
-- C und C++ Dummieprogramme vereinheitlicht
-- neues Usermakefile: Erster Schritt analog zum Hauptmakefile
-- userlib.hpp und userlib.h "synchronisiert"
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:13:32 23.04.2010   Titel:              Zitieren

Rev. 395:

USB-Device-Strings wurden noch abgeschnitten, jetzt werden 64 Byte transferiert, damit können Strings (64-2)/2 = 31 Zeichen lang sein.

Zitat:
USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 1#
12h 03h 4Ah 00h 65h 00h 74h 00h 46h 00h 6Ch 00h 61h 00h 73h 00h 68h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h
length: 18 descriptor type: 3
string: JetFlash

SETUP: qTD Status: 00h

IO : qTD Status: 00h

USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 2#
28h 03h 4Dh 00h 61h 00h 73h 00h 73h 00h 20h 00h 53h 00h 74h 00h 6Fh 00h 72h 00h
61h 00h 67h 00h 65h 00h 20h 00h 44h 00h 65h 00h 76h 00h 69h 00h 63h 00h 65h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h
length: 40 descriptor type: 3
string: Mass Storage Device

SETUP: qTD Status: 00h

IO : qTD Status: 00h

USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

USB2: GET_DESCRIPTOR string, dev: 1 endpoint: 0 stringIndex: 3#
12h 03h 4Eh 00h 30h 00h 31h 00h 34h 00h 49h 00h 4Dh 00h 37h 00h 35h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h
length: 18 descriptor type: 3
string: N014IM75


Jetzt kommt auch kein Babbling mehr.

Zitat:
Babbling: When a device transmits more data on the USB than the host controller is expecting for this transaction, it is defined to be babbling. In general, this is called a Packet Babble. When a device sends more data than the Maximum Length number of bytes, the host controller sets the Babble Detected bit to a one and halts the endpoint if it is using a queue head

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:15:22 23.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:16:14 23.04.2010   Titel:              Zitieren

Rev. 396:

_USB_DIAGNOSIS_ eingeführt, um die Übersichtlichkeit zu erhöhren

Allerdings inzwischen wieder USB-Transfer-Probleme auf real hardware, aber keine error. Dürfte an der beschleunigten Ausführung liegen.

In VMWare ist noch alles ok:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
PrettyOS [Version 0.0.0.396]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: resetPort 1                                                  
                                                                               
>>> Status of USB Ports <<<                                                    
port 1: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                
USB specification: 2.0          USB class:         0000h                        
USB subclass:      0000h        USB protocol       0000h                        
max packet size:   64           vendor:            1516h                        
product:           8628h        release number:    2.0                          
manufacturer:      0001h        product:           0002h                        
serial number:     0003h        number of config.: 1                            
                                                                               
total length:         32        number of interfaces: 1                        
ID of config:         0001h     ID of config name     0000h                    
remote wakeup:        no        self-powered:         no                        
max power (mA):       100                                                      
interface number:     0         alternate Setting:    0                        
number of endpoints:  2         interface class:      8                        
interface subclass:   6         interface protocol:   80                        
interface:            0000h                                                    
endpoint in/out:   in           endpoint number:   1                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
endpoint in/out:   out          endpoint number:   2                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
                                                                               
language code: 0409h                                                            
                                                                               
memory                                                                          
                                                                               
USB2.0                                                                          
                                                                               
110
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
PrettyOS [Version 0.0.0.396] Console 1: EHCI Ports
--------------------------------------------------------------------------------

>>> >>> function: resetPort 1

>>> Status of USB Ports <<<
port 1: 00001005h, line: 00h SE0,power on, enabled, EHCI owned
USB specification: 2.0 USB class: 0000h
USB subclass: 0000h USB protocol 0000h
max packet size: 64 vendor: 1516h
product: 8628h release number: 2.0
manufacturer: 0001h product: 0002h
serial number: 0003h number of config.: 1

total length: 32 number of interfaces: 1
ID of config: 0001h ID of config name 0000h
remote wakeup: no self-powered: no
max power (mA): 100
interface number: 0 alternate Setting: 0
number of endpoints: 2 interface class: 8
interface subclass: 6 interface protocol: 80
interface: 0000h
endpoint in/out: in endpoint number: 1
attributes: 02h max packet size: 512
interval: 0
endpoint in/out: out endpoint number: 2
attributes: 02h max packet size: 512
interval: 0

language code: 0409h

memory

USB2.0

110
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
PrettyOS [Version 0.0.0.396]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
>>> >>> function: resetPort 1                                                  
                                                                               
>>> Status of USB Ports <<<                                                    
port 1: 00001005h, line: 00h  SE0,power on, enabled, EHCI owned                
USB specification: 2.0          USB class:         0000h                        
USB subclass:      0000h        USB protocol       0000h                        
max packet size:   64           vendor:            1516h                        
product:           8628h        release number:    2.0                          
manufacturer:      0001h        product:           0002h                        
serial number:     0003h        number of config.: 1                            
                                                                               
total length:         32        number of interfaces: 1                        
ID of config:         0001h     ID of config name     0000h                    
remote wakeup:        no        self-powered:         no                        
max power (mA):       100                                                      
interface number:     0         alternate Setting:    0                        
number of endpoints:  2         interface class:      8                        
interface subclass:   6         interface protocol:   80                        
interface:            0000h                                                    
endpoint in/out:   in           endpoint number:   1                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
endpoint in/out:   out          endpoint number:   2                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
                                                                               
language code: 0409h                                                            
                                                                               
memory                                                                          
                                                                               
USB2.0                                                                          
                                                                               
110

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:18:22 23.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:37:10 23.04.2010   Titel:              Zitieren

Rev. 397:

- Optische Darstellung von device, config, interface, endpoint besser strukturiert
- Warteschleife am Ende eines USB-Transfers eingefügt für real Hardware

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:18:20 24.04.2010   Titel:              Zitieren

Rev. 398:

- config descriptor wird nun komplett durchkämmt, teilweise sind noch unbekannte
Descriptoren enthalten

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:51:07 24.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:07:04 24.04.2010   Titel:              Zitieren

Rev. 399:

ehci_install geschaffen (aus pci.c ausgelagert nach ehci.c)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:46:11 24.04.2010   Titel:              Zitieren

Revision 400:

- shared_pages.h gelöscht (überflüssig)
- userlib.c: kleine Umsortierung
- Code von pci.c nach rtl8139.c verlegt
- weitere Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:42:37 24.04.2010   Titel:              Zitieren

Rev. 401:

modul usb_hc.h/c geschaffen, um pci.c weiter zu "verschlanken".

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:08:52 24.04.2010   Titel:              Zitieren

Rev. 402:

- Rechtschreibfehler beseitigt (thx to +gjm+)
- auskommentierten Code in pci.c gestrichen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:09:36 24.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:16:59 25.04.2010   Titel:              Zitieren

Rev. 403:

- void usbTransferSetConfiguration(uint32_t device, uint32_t configuration);
- uint8_t usbTransferGetConfiguration(uint32_t device);
- endpoint aus der Parameterliste der usb-Funktionen genommen, wenn sinnlos (z.B. wenn endpoint=0)

Test bezüglich Konfigurationen (code auszugsweise):
abfragen, auf 2 setzen, abfragen, auf 1 setzen, abfragen
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (USBtransferFlag && enabledPortFlag && (pOpRegs->PORTSC[j] & (PSTS_POWERON | PSTS_ENABLED | PSTS_CONNECTED)))
{
    uint8_t devAddr = usbTransferEnumerate(j);
    usbTransferDevice(devAddr); // device address, endpoint=0
    usbTransferConfig(devAddr); // device address, endpoint 0
    usbTransferString(devAddr); // device address, endpoint 0
                  
    for(int k=1; k<4;k++) // fetch 3 strings
    {
        usbTransferStringUnicode(devAddr,k);
    }

    printf("\nconfig: %d",usbTransferGetConfiguration(devAddr));
               
    usbTransferSetConfiguration(devAddr, 2);
             
    printf("\nconfig: %d",usbTransferGetConfiguration(devAddr));
       
    usbTransferSetConfiguration(devAddr, 1);
             
    printf("\nconfig: %d",usbTransferGetConfiguration(devAddr));
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (USBtransferFlag && enabledPortFlag && (pOpRegs->PORTSC[j] & (PSTS_POWERON | PSTS_ENABLED | PSTS_CONNECTED)))
{
uint8_t devAddr = usbTransferEnumerate(j);
usbTransferDevice(devAddr); // device address, endpoint=0
usbTransferConfig(devAddr); // device address, endpoint 0
usbTransferString(devAddr); // device address, endpoint 0

for(int k=1; k<4;k++) // fetch 3 strings
{
usbTransferStringUnicode(devAddr,k);
}

printf("\nconfig: %d",usbTransferGetConfiguration(devAddr));

usbTransferSetConfiguration(devAddr, 2);

printf("\nconfig: %d",usbTransferGetConfiguration(devAddr));

usbTransferSetConfiguration(devAddr, 1);

printf("\nconfig: %d",usbTransferGetConfiguration(devAddr));
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (USBtransferFlag && enabledPortFlag && (pOpRegs->PORTSC[j] & (PSTS_POWERON | PSTS_ENABLED | PSTS_CONNECTED)))
{
    uint8_t devAddr = usbTransferEnumerate(j);
    usbTransferDevice(devAddr); // device address, endpoint=0
    usbTransferConfig(devAddr); // device address, endpoint 0
    usbTransferString(devAddr); // device address, endpoint 0
                  
    for(int k=1; k<4;k++) // fetch 3 strings
    {
        usbTransferStringUnicode(devAddr,k);
    }

    printf("\nconfig: %d",usbTransferGetConfiguration(devAddr));
               
    usbTransferSetConfiguration(devAddr, 2);
             
    printf("\nconfig: %d",usbTransferGetConfiguration(devAddr));
       
    usbTransferSetConfiguration(devAddr, 1);
             
    printf("\nconfig: %d",usbTransferGetConfiguration(devAddr));
}


Anmerkung: Dieses printf("\n\n\n") ist leider notwendig weil die Konsole auch in den Info-Bereich schreibt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:38:44 25.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:11:12 25.04.2010   Titel:              Zitieren

Rev. 404:

- Kleine Korrektur: Konsolenbereich und Info area gegen einander geschützt (thx to MrX)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:01:38 25.04.2010   Titel:              Zitieren

Revision 405:

- Infobereich ausgebaut: Fkt. writeInfo zum beschreiben, showInfo um festzulegen, ob der Infobereich in der Konsole angezeigt werden soll
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:41:01 25.04.2010   Titel:              Zitieren

Rev. 406

Bulk-Only Mass Storage Reset eingefügt
(siehe: Universal Serial Bus Mass Storage Class Bulk-Only Transport, rev. 1.0, 1999)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PrettyOS [Version 0.0.0.406]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
numInterfaceMSD:   0                                                            
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
total length:         32        number of interfaces: 1                        
ID of config:         0001h     ID of config name     0000h                    
remote wakeup:        no        self-powered:         no                        
max power (mA):       100                                                      
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
interface number:     0         alternate Setting:    0                        
number of endpoints:  2         interface class:      8                        
interface subclass:   6         interface protocol:   80                        
interface:            0000h                                                    
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
endpoint in/out:   in           endpoint number:   1                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
                                                                               
>>> Press key to go on with data analysis from config descriptor. <<<          
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
endpoint in/out:   out          endpoint number:   2                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
                                                                               
length: 0 type: 0 unknown                                                      
                                                                               
>>> Press key to go on with data analysis from config descriptor. <<<          
                                                                               
language: German                                                                
memory                                                                          
USB2.0                                                                          
110                                                                            
                                                                               
USB2: SET_CONFIGURATION 1                                                      
USB2: GET_CONFIGURATION                                                        
config: 1                                                                      
dev: 1 MSDinterface: 0 ==> BulkOnlyMassStorageReset                            
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
USB status: 00000000h                                                          
>>> Press key to close this console. <<<                                        
--------------------------------------------------------------------------------
Port: 1, device attached                                                        
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PrettyOS [Version 0.0.0.406] Console 1: EHCI Ports
--------------------------------------------------------------------------------
numInterfaceMSD: 0

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
total length: 32 number of interfaces: 1
ID of config: 0001h ID of config name 0000h
remote wakeup: no self-powered: no
max power (mA): 100

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
interface number: 0 alternate Setting: 0
number of endpoints: 2 interface class: 8
interface subclass: 6 interface protocol: 80
interface: 0000h

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
endpoint in/out: in endpoint number: 1
attributes: 02h max packet size: 512
interval: 0

>>> Press key to go on with data analysis from config descriptor. <<<

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
endpoint in/out: out endpoint number: 2
attributes: 02h max packet size: 512
interval: 0

length: 0 type: 0 unknown

>>> Press key to go on with data analysis from config descriptor. <<<

language: German
memory
USB2.0
110

USB2: SET_CONFIGURATION 1
USB2: GET_CONFIGURATION
config: 1
dev: 1 MSDinterface: 0 ==> BulkOnlyMassStorageReset
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
USB status: 00000000h
>>> Press key to close this console. <<<
--------------------------------------------------------------------------------
Port: 1, device attached
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PrettyOS [Version 0.0.0.406]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
numInterfaceMSD:   0                                                            
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
total length:         32        number of interfaces: 1                        
ID of config:         0001h     ID of config name     0000h                    
remote wakeup:        no        self-powered:         no                        
max power (mA):       100                                                      
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
interface number:     0         alternate Setting:    0                        
number of endpoints:  2         interface class:      8                        
interface subclass:   6         interface protocol:   80                        
interface:            0000h                                                    
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
endpoint in/out:   in           endpoint number:   1                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
                                                                               
>>> Press key to go on with data analysis from config descriptor. <<<          
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
endpoint in/out:   out          endpoint number:   2                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
                                                                               
length: 0 type: 0 unknown                                                      
                                                                               
>>> Press key to go on with data analysis from config descriptor. <<<          
                                                                               
language: German                                                                
memory                                                                          
USB2.0                                                                          
110                                                                            
                                                                               
USB2: SET_CONFIGURATION 1                                                      
USB2: GET_CONFIGURATION                                                        
config: 1                                                                      
dev: 1 MSDinterface: 0 ==> BulkOnlyMassStorageReset                            
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
USB status: 00000000h                                                          
>>> Press key to close this console. <<<                                        
--------------------------------------------------------------------------------
Port: 1, device attached                                                        

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:54:29 25.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:46:08 25.04.2010   Titel:              Zitieren

Rev. 407:

- uint8_t usbTransferBulkOnlyGetMaxLUN(uint32_t device, uint8_t numInterface)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:15:45 25.04.2010   Titel:              Zitieren

Rev. 408:

Fehler korrigiert in usb2.c

3 getestete USB-Sticks haben LUN = 0, während mein card reader LUN = 3 zeigt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:10:26 26.04.2010   Titel:              Zitieren

Rev. 409:

Zwischenschritt
ehci/usb: SCSI Command: "test unit ready" (0x00) und Antwort im Statusword

realPC:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PrettyOS [Version 0.0.0.409]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
endpoint in/out:   out          endpoint number:   2                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
                                                                               
length: 0 type: 0 unknown                                                      
                                                                               
>>> Press key to go on with data analysis from config descriptor. <<<          
                                                                               
language: German                                                                
memory                                                                          
USB2.0                                                                          
110                                                                            
                                                                               
USB2: SET_CONFIGURATION 1                                                      
USB2: GET_CONFIGURATION 1                                                      
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
Max. Logical Unit Numbers: 0                                                    
USB status: 00000000h                                                          
dev: 1 MSDinterface: 0 ==> BulkOnlyMassStorageReset                            
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
USB status: 00000000h                                                          
55h 53h 42h 43h 42h 42h 42h 42h 00h 00h 00h 00h 00h 00h 06h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                    
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
IO:     qTD Status: 01h                                                        
qTD Status: Do Ping                                                            
USB status: 00002000h                                                          
Reclamation                                                                    
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
timeout - no STS_USBINT set!                                                    
55h 53h 42h 53h 00h 00h 00h 00h 00h 00h 00h 00h 00h                            
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
IO:     qTD Status: 80h                                                        
qTD Status: Active - HC transactions enabled                                    
USB status: 00002000h                                                          
Reclamation                                                                    
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
>>> Press key to close this console. <<<                                        
--------------------------------------------------------------------------------
Port: 1, device attached                                                      
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PrettyOS [Version 0.0.0.409] Console 1: EHCI Ports
--------------------------------------------------------------------------------

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
endpoint in/out: out endpoint number: 2
attributes: 02h max packet size: 512
interval: 0

length: 0 type: 0 unknown

>>> Press key to go on with data analysis from config descriptor. <<<

language: German
memory
USB2.0
110

USB2: SET_CONFIGURATION 1
USB2: GET_CONFIGURATION 1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Max. Logical Unit Numbers: 0
USB status: 00000000h
dev: 1 MSDinterface: 0 ==> BulkOnlyMassStorageReset
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
USB status: 00000000h
55h 53h 42h 43h 42h 42h 42h 42h 00h 00h 00h 00h 00h 00h 06h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IO: qTD Status: 01h
qTD Status: Do Ping
USB status: 00002000h
Reclamation
>>> Press key to go on with USB-Test. <<<

timeout - no STS_USBINT set!
55h 53h 42h 53h 00h 00h 00h 00h 00h 00h 00h 00h 00h
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IO: qTD Status: 80h
qTD Status: Active - HC transactions enabled
USB status: 00002000h
Reclamation
>>> Press key to go on with USB-Test. <<<

>>> Press key to close this console. <<<
--------------------------------------------------------------------------------
Port: 1, device attached
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PrettyOS [Version 0.0.0.409]                               Console 1: EHCI Ports
--------------------------------------------------------------------------------
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
endpoint in/out:   out          endpoint number:   2                            
attributes:        02h          max packet size:   512                          
interval:          0                                                            
                                                                               
length: 0 type: 0 unknown                                                      
                                                                               
>>> Press key to go on with data analysis from config descriptor. <<<          
                                                                               
language: German                                                                
memory                                                                          
USB2.0                                                                          
110                                                                            
                                                                               
USB2: SET_CONFIGURATION 1                                                      
USB2: GET_CONFIGURATION 1                                                      
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
Max. Logical Unit Numbers: 0                                                    
USB status: 00000000h                                                          
dev: 1 MSDinterface: 0 ==> BulkOnlyMassStorageReset                            
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
USB status: 00000000h                                                          
55h 53h 42h 43h 42h 42h 42h 42h 00h 00h 00h 00h 00h 00h 06h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h                                    
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
IO:     qTD Status: 01h                                                        
qTD Status: Do Ping                                                            
USB status: 00002000h                                                          
Reclamation                                                                    
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
timeout - no STS_USBINT set!                                                    
55h 53h 42h 53h 00h 00h 00h 00h 00h 00h 00h 00h 00h                            
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''          
IO:     qTD Status: 80h                                                        
qTD Status: Active - HC transactions enabled                                    
USB status: 00002000h                                                          
Reclamation                                                                    
>>> Press key to go on with USB-Test. <<<                                      
                                                                               
>>> Press key to close this console. <<<                                        
--------------------------------------------------------------------------------
Port: 1, device attached                                                      


Do Ping <--- TODO

Auch bei VMWare noch "timeout - no STS_USBINT set!"
Erfolg wird sichtbar, wenn das von uns im Kommando gewählte Tag "42424242h" im Statusword an gleicher Stelle wiederholt wird. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:45:25 26.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:47:05 26.04.2010   Titel:              Zitieren

Rev. 410:

... es klappt!

Zitat:

PrettyOS [Version 0.0.0.410] Console 1: EHCI Ports
--------------------------------------------------------------------------------
attributes: 02h max packet size: 512
interval: 0

>>> Press key to go on with data analysis from config descriptor. <<<

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
endpoint in/out: out endpoint number: 2
attributes: 02h max packet size: 512
interval: 0

length: 0 type: 0 unknown

>>> Press key to go on with data analysis from config descriptor. <<<

language: German
memory
USB2.0
110

USB2: SET_CONFIGURATION 1
USB2: GET_CONFIGURATION 1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Max. Logical Unit Numbers: 0
USB status: 00000000h
dev: 2 MSDinterface: 0 ==> BulkOnlyMassStorageReset
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
USB status: 00000000h
endpOUT: 2 endpIN: 1
55h 53h 42h 43h 42h 42h 42h 42h 00h 00h 00h 00h 00h 00h 06h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IO: qTD Status: 01h
qTD Status: Do Ping
USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

55h 53h 42h 53h 42h 42h 42h 42h 00h 00h 00h 00h 00h FFh FFh FFh
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IO: qTD Status: 00h

USB status: 00000000h
>>> Press key to go on with USB-Test. <<<


Tag 42424242h wird wiederholt! Command Block Status Value: 00h :live:

Zitat:
00h Command Passed ("good status")
01h Command Failed
02h Phase Error


Die passende Spezifikation ist "USB Mass Storage Class - Bulk Only Transport"

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:01:30 26.04.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:53:38 26.04.2010   Titel:              Zitieren

Rev. 411:

http://en.wikipedia.org/wiki/SCSI_Read_Commands#Read_.2810.29 (SCSI-command: read(10), Opcode 0x28)

USB-Stick read LBA 0 (512 byte)
Zitat:

PrettyOS [Version 0.0.0.411] Console 1: EHCI Ports
--------------------------------------------------------------------------------
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
USB status: 00000000h
endpOUT: 2 endpIN: 1
55h 53h 42h 43h 42h 42h 42h 42h 00h 02h 00h 00h 00h 00h 0Ah 28h 00h 00h 00h 00h
00h 00h 00h 02h 00h 00h 00h 00h 00h 00h 00h
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IO: qTD Status: 01h
qTD Status: Do Ping
USB status: 00000000h
>>> Press key to go on with USB-Test. <<<

F8h FFh FFh 7Fh FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh FFh 09h 00h 0Ah 00h
0Bh 00h 0Ch 00h 0Dh 00h 0Eh 00h 0Fh 00h 10h 00h 11h 00h 12h 00h 13h 00h 14h 00h
15h 00h 16h 00h 17h 00h 18h 00h 19h 00h 1Ah 00h 1Bh 00h 0Fh FFh 0Fh 00h 0Fh FFh
0Fh FFh 0Fh FFh 21h 00h 22h 00h 23h 00h 24h 00h 25h 00h 26h 00h 27h 00h 28h 00h
29h 00h 2Ah 00h 2Bh 00h 2Ch 00h 2Dh 00h 2Eh 00h 2Fh 00h 30h 00h 31h 00h 32h 00h
33h 00h 34h 00h 35h 00h 36h 00h 37h 00h 38h 00h 39h 00h 3Ah 00h 3Bh 00h 3Ch 00h
3Dh 00h 3Eh 00h 3Fh 00h 40h 00h 41h 00h 42h 00h 43h 00h 44h 00h 45h 00h 46h 00h
47h 00h 48h 00h 49h 00h 4Ah 00h 4Bh 00h 4Ch 00h 4Dh 00h 4Eh 00h 4Fh 00h 50h 00h
51h 00h 52h 00h 53h 00h 54h 00h 55h 00h 56h 00h 57h 00h 58h 00h 59h 00h 5Ah 00h
5Bh 00h 5Ch 00h 5Dh 00h 5Eh 00h 5Fh 00h 60h 00h 61h 00h 62h 00h 63h 00h 64h 00h
65h 00h 66h 00h 67h 00h 68h 00h 69h 00h 6Ah 00h 6Bh 00h 6Ch 00h 6Dh 00h 6Eh 00h
6Fh 00h 70h 00h 71h 00h 72h 00h 73h 00h 74h 00h 75h 00h 76h 00h 77h 00h 78h 00h
79h 00h 7Ah 00h 7Bh 00h 7Ch 00h 7Dh 00h 7Eh 00h 7Fh 00h 80h 00h 81h 00h 82h 00h
83h 00h 84h 00h 85h 00h 86h 00h 87h 00h 88h 00h 89h 00h 8Ah 00h 8Bh 00h 8Ch 00h
8Dh 00h 8Eh 00h 8Fh 00h 90h 00h 91h 00h 92h 00h 93h 00h 94h 00h 95h 00h 96h 00h
97h 00h 98h 00h 99h 00h 9Ah 00h 9Bh 00h 9Ch 00h 9Dh 00h 9Eh 00h 9Fh 00h A0h 00h
A1h 00h A2h 00h A3h 00h A4h 00h A5h 00h A6h 00h A7h 00h A8h 00h A9h 00h AAh 00h
ABh 00h ACh 00h ADh 00h AEh 00h AFh 00h B0h 00h B1h 00h B2h 00h B3h 00h B4h 00h
B5h 00h B6h 00h B7h 00h B8h 00h B9h 00h BAh 00h BBh 00h BCh 00h BDh 00h BEh 00h
BFh 00h C0h 00h C1h 00h C2h 00h C3h 00h C4h 00h C5h 00h FFh FFh 00h 00h FFh FFh
00h 00h 00h 00h FFh FFh FFh FFh CDh 00h CEh 00h CFh 00h D0h 00h D1h 00h D2h 00h
D3h 00h D4h 00h FFh FFh 00h 00h FFh FFh FFh FFh FFh FFh FFh FFh DBh 00h DCh 00h
DDh 00h DEh 00h DFh 00h E0h 00h E1h 00h E2h 00h E3h 00h E4h 00h E5h 00h E6h 00h
E7h 00h E8h 00h E9h 00h EAh 00h EBh 00h ECh 00h EDh 00h EEh 00h EFh 00h F0h 00h
F1h 00h F2h 00h F3h 00h F4h 00h F5h 00h F6h 00h F7h 00h F8h 00h F9h 00h FAh 00h
FBh 00h FCh 00h FDh 00h FEh 00h FFh 00h 00h 01h
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IO: qTD Status: 00h

USB status: 00000000h
>>> Press key to go on with USB-Test. <<<
--------------------------------------------------------------------------------
55h 53h 42h 53h 42h 42h 42h 42h 00h 00h 00h 00h 00h FFh FFh FFh
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
IO: qTD Status: 00h

USB status: 00000000h
>>> Press key to go on with USB-Test. <<<
--------------------------------------------------------------------------------


Kontrolle mit dem Hex-Editor auf dem USB_Stick:
http://www.henkessoft.de/OS_Dev/Bilder/rev290_read_LBA0_from_USB_Stick.PNG

:live: :live: :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:08:58 27.04.2010   Titel:              Zitieren

Läuft z.Z. leider lediglich auf einem PC mit einem USB-Stick. :rolleyes:

Ideen für Verbesserungen (aber leider noch nicht durchschlagend):

für read(10):
cbw->CBWFlags = 0x80; // Out: 0x00 In: 0x80 (anstelle "Out")

memset(cbw,0,sizeof(struct usb2_CommandBlockWrapper)); // zero of cbw

DPO und FUA setzen:
Zitat:
Disable Page Out (DPO) allows the initiator to warn the target that the data being read is unlikely to be requested again soon and so is not worth keeping in the target's data cache. Force Unit Access (FUA) tells the target to fetch the data from the media surface and to not use a cached copy.

Evtl. auch Handshake-Problem, IN/OUT-Problem, toggle-Problem :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:11:44 27.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:09:12 27.04.2010   Titel:              Zitieren

Rev. 412: Zwischenschritt USB MSD (SCSI)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:24:07 28.04.2010   Titel:              Zitieren

Rev. 413: Zwischenschritt USB MSD (SCSI)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:50:11 29.04.2010   Titel:              Zitieren

Rev. 414: Zwischenschritt USB MSD (SCSI)
Danke an Tobiking für die Unterstützung, allerdings noch nicht ausreichend.
Das Thema ist leider nicht leicht zu durchschauen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:45:27 30.04.2010   Titel:              Zitieren

Rev. 415:
... zunächst der bisher stabile OUT/IN SCSI-Command-Transfer mit 0x00.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
       ///////// Test Suite 1: send SCSI comamnd "test unit ready(6)"
                 
                     settextcolor(9,0); printf("\n>>> SCSI: test unit ready"); settextcolor(15,0);
                     usbTransferSCSIcommandToMSD(devAddr, usbDevices[devAddr].numEndpointOutMSD, 0x00);

                     // #ifdef _USB_DIAGNOSIS_
                     printf("\nIO:    "); showStatusbyteQTD(DataQTD); waitForKeyStroke();
                     // #endif

                     settextcolor(9,0); printf("\n>>> get status"); settextcolor(15,0);
                     usbTransferGetAnswerToCommandMSD(devAddr, usbDevices[devAddr].numEndpointInMSD);
                     
                     // #ifdef _USB_DIAGNOSIS_
                     printf("\nIO:    "); showStatusbyteQTD(DataQTD); waitForKeyStroke();
                     // #endif
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
///////// Test Suite 1: send SCSI comamnd "test unit ready(6)"

settextcolor(9,0); printf("\n>>> SCSI: test unit ready"); settextcolor(15,0);
usbTransferSCSIcommandToMSD(devAddr, usbDevices[devAddr].numEndpointOutMSD, 0x00);

// #ifdef _USB_DIAGNOSIS_
printf("\nIO: "); showStatusbyteQTD(DataQTD); waitForKeyStroke();
// #endif

settextcolor(9,0); printf("\n>>> get status"); settextcolor(15,0);
usbTransferGetAnswerToCommandMSD(devAddr, usbDevices[devAddr].numEndpointInMSD);

// #ifdef _USB_DIAGNOSIS_
printf("\nIO: "); showStatusbyteQTD(DataQTD); waitForKeyStroke();
// #endif
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
       ///////// Test Suite 1: send SCSI comamnd "test unit ready(6)"
                 
                     settextcolor(9,0); printf("\n>>> SCSI: test unit ready"); settextcolor(15,0);
                     usbTransferSCSIcommandToMSD(devAddr, usbDevices[devAddr].numEndpointOutMSD, 0x00);

                     // #ifdef _USB_DIAGNOSIS_
                     printf("\nIO:    "); showStatusbyteQTD(DataQTD); waitForKeyStroke();
                     // #endif

                     settextcolor(9,0); printf("\n>>> get status"); settextcolor(15,0);
                     usbTransferGetAnswerToCommandMSD(devAddr, usbDevices[devAddr].numEndpointInMSD);
                     
                     // #ifdef _USB_DIAGNOSIS_
                     printf("\nIO:    "); showStatusbyteQTD(DataQTD); waitForKeyStroke();
                     // #endif

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:08:30 30.04.2010   Titel:              Zitieren

rev. 416:

mit VMWare läuft diese Version

Wichtige Erkenntnisse: 1) handshakes stören 2) in SCSI: Big Endian!

Warum hardware damit noch nicht störungsfrei läuft, das liegt an qTD/QH.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:13:39 30.04.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:01:57 30.04.2010   Titel:              Zitieren

rev. 417:

Version läuft mit VMWare, VBox, real PC. Erfolgreiche Übetragungen leider noch nicht überall.

Leider noch Fehlermeldungen, deren Ursache heraus gefunden werden muss.

a) USB-Interrupt kommt nicht (USB-Übertragung nicht vollständig)
b) halted - serious error (qTD status)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:34:14 30.04.2010   Titel:              Zitieren

rev. 418:

leider spielt die wartezeit am ende von performAsyncScheduler() eine Rolle. Zu kurz oder zu lang führt zu "command failed" bei "test unit ready" bzw. zu einem nicht vollständigen USB-Transfer (kein USB-Interrupt). Ich habe jetzt mal auf 80 ms eingestellt.

Aber hier ist wohl ein Komplettumbau unseres async-Schedulers notwendig.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:40:11 01.05.2010   Titel:              Zitieren

rev. 419: zwischenschritt: Umbau auf zwei QH (für den IN and OUT endpoint) mit jeweils angehängten qTD-Ketten.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:52:15 01.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:58:51 01.05.2010   Titel:              Zitieren

Rev. 420:

läuft mit 1GB stick (FAT16) und real PC

Probleme:
a) liest nicht mit VMWare
b) man kann die CBW nur einzeln durchführen (also reset CBW3 oder reset CBW1, aber nicht reset CBW1, reset CBW2, reset CBW3 ..., da fehlt leider noch etwas)

bitte mal mit hardware testen, also real PC + real USB-MSD (sticks, card reader, usb-festplatten, ...)

Anm.: manche haben drei endpoints, also zwei IN, da wird noch evlt. der falsche endpointIN verwendet durch das parsen, da brauchen wir noch ein weiteres auswahl-kriterium, wahrscheinlich packetsize 512)

so wie es aussieht, benötigen wir doch handshakes: http://www.beyondlogic.org/usbnutshell/usb4.htm#Bulk ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:38:07 01.05.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:01:40 01.05.2010   Titel:              Zitieren

Rev. 421: Zwischensicherung usbMSD/scsi

reset und handshake eingebaut
real PC und 1GB usb stick geht

insgesamt aber noch von der Lösung entfernt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:40:49 01.05.2010   Titel:              Zitieren

Revision 422:

- vprintf und vsnprintf eingeführt, snprintf statt sprintf, strncat eingeführt
- obsolete Syscalls mit nop "eliminiert" (testch, getCurrentMilliseconds und getUserTaskNumber) und dazugehörende Funktionalität gelöscht
- kdebug repariert
- checkKQ_and_return_char heißt nun keyboard_getChar
- writeInfo hat jetzt auch dynamische Parameterliste
- Mausoutput in Infobar verlegt
- Formatierung&Aufräumarbeiten

bitte in ehci.c, ab zeile 900, folgendes verwenden (Doppelausgabe vermeiden):
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
for(uint32_t sector=0; sector < 10; sector++)
{
 settextcolor(9,0); printf("\n>>> SCSI: read(10)"); settextcolor(15,0);
 usbSendSCSIcmd(devAddr, usbDevices[devAddr].numEndpointOutMSD, usbDevices[devAddr].numEndpointInMSD,
                0x28, sector, length, false); // dev, endp, cmd, LBA, transfer length, MSDStatus
 printf("\nIO:");
 showStatusbyteQTD(DataQTD);
 waitForKeyStroke();                    
}                  
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
for(uint32_t sector=0; sector < 10; sector++)
{
settextcolor(9,0); printf("\n>>> SCSI: read(10)"); settextcolor(15,0);
usbSendSCSIcmd(devAddr, usbDevices[devAddr].numEndpointOutMSD, usbDevices[devAddr].numEndpointInMSD,
0x28, sector, length, false); // dev, endp, cmd, LBA, transfer length, MSDStatus
printf("\nIO:");
showStatusbyteQTD(DataQTD);
waitForKeyStroke();
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
for(uint32_t sector=0; sector < 10; sector++)
{
 settextcolor(9,0); printf("\n>>> SCSI: read(10)"); settextcolor(15,0);
 usbSendSCSIcmd(devAddr, usbDevices[devAddr].numEndpointOutMSD, usbDevices[devAddr].numEndpointInMSD,
                0x28, sector, length, false); // dev, endp, cmd, LBA, transfer length, MSDStatus
 printf("\nIO:");
 showStatusbyteQTD(DataQTD);
 waitForKeyStroke();                    
}                  
}


Zuletzt bearbeitet von Erhard Henkes am 20:50:11 01.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:26:45 01.05.2010   Titel:              Zitieren

Rev. 423:

USB/SCSI:
Zitat:
PrettyOS [Version 0.0.0.423] Console 1: EHCI Ports
--------------------------------------------------------------------------------
USB2: SET_CONFIGURATION 1
USB2: GET_CONFIGURATION 1
dev: 1 interface: 0 endpOUT: 2 endpIN: 1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
>>> SCSI: test unit ready
55h 53h 42h 53h 42h 42h 42h 42h 00h 00h 00h 00h 00h

Command Passed ("good status")
qTD Status: 00h OK (no bit set)
>>> Press key to go on with USB-Test. <<<

>>> SCSI: read(10)
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
... <lauter Nullen>
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h

qTD Status: 80h Active - HC transactions enabled
>>> Press key to go on with USB-Test. <<<
--------------------------------------------------------------------------------


Problem: warum läuft der Transfer mit dem read(10) nicht durch?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 03:17:21 02.05.2010   Titel:              Zitieren

Rev. 424:

Zwischenstand zur Sicherung: Austausch von sleep gegen delay in performAsyncScheduler() ergibt positive resultate mit dem 1GB stick in VMWare.

Diese Funktion muss umgebaut werden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 04:15:06 02.05.2010   Titel:              Zitieren

Rev. 425:

diese version funktionierte mit test unit ready, read capacity, read(10) (VMWare, 1GB stick)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:10:24 02.05.2010   Titel:              Zitieren

Revision 426:

- settextcolor(uint8_t, uint8_t) durch textColor(uint8_t) ersetzt. ACHTUNG: Userprogramme neukompilieren, da syscalls geändert (noch nicht mit allen Mitgelieferten gemacht)
- my_stdarg.h durch types.h ersetzt im Userbereich.
- einige Tabs beseitigt, sonstige Formatierungen & Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:18:31 02.05.2010   Titel:              Zitieren

Rev. 427:

- testMSD(deviceAddr) ausgelagert aus ehci.c
- alte usb-Funktionen nicht mehr gebraucht (auskommentiert, kommen demnächst weg)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:41:47 02.05.2010   Titel:              Zitieren

Rev. 428:

Sicherung vor "Umbau auf qTD umhängen bei stabilen QH"

Diese Version läuft mit 1GB usb-Stick auf VMWare

bitte beachten: for(uint32_t sector=1055; sector < 1060; sector++)
das ist 0x83E00 beginnend, hat bei mir in VMWare geklappt, zumindest ab 0x84000 (zweiter gelesener Sektor)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:49:44 02.05.2010   Titel:              Zitieren

oh, hab ich ausversehen sektor 1055 bis 1060 committed? Das war ja eig. nur für meinen Stick gültig, damit ich mal was sehe...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:55:40 02.05.2010   Titel:              Zitieren

Macht doch nix. :)

Erste Versuche des Einhängens von qTDs in QH endeten leider in Host System Error. :rolleyes:
http://www.henkessoft.de/OS_Dev/Downloads/PrettyOS_rev428umgebaut001.zip <--- bitte check, vielleicht können wir die Vorgehensweise doch noch nutzen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:04:52 02.05.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:27:37 02.05.2010   Titel:              Zitieren

Revision 429:

- Ring-Strukturen angelegt (für Scheduler-Umbauten voraussichtlich nötig), analog zu list
- ODA aufgelöst (in Einzelvariablen und system)
- Alle Userprogramme neu übersetzt (wegen Userlibänderung)
- Formatierungen
- Smilie-Bug gefixt.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:09:15 02.05.2010   Titel:              Zitieren

Diese Revision 429 funktioniert in VMWare mit einem 1GB stick komplett wie gewünscht: http://www.henkessoft.de/OS_Dev/Bilder/rev429.PNG

Wir suchen den Weg dies zu verallgemeinern.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:22:29 03.05.2010   Titel:              Zitieren

Rev. 430:

Auslagerungen und Streichungen zur Erhöhung der Lesbarkeit und Wartbarkeit wurden vorgenommen:

ehciQHqTD.h/c: Queue Head (QH) und Queue Element Transfer Descriptor (qTD)
usb2_msd.h/c: USB 2.0 Mass Storage Devices (MSD)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:23:02 03.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:02:31 03.05.2010   Titel:              Zitieren

Rev. 431:

Verbesserungen im Code bei ehci/usb

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:36:51 04.05.2010   Titel:              Zitieren

Rev. 432:

Zwischenstand nach Vorbild tatOS
siehe: http://www.c-plusplus.de/forum/viewtopic-var-t-is-253016-and-start-is-71.html

testMSD(): Umgebaut auf die dort verwendete Startreihenfolge.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:37:35 04.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:08:52 04.05.2010   Titel:              Zitieren

Rev. 433:

In VMWare geht 1GB und 16 GB usb-stick, Test-PC zeigt noch qTD-status 0x80 (wird nicht ausgeführt)

Fehler im Bereich SCSI-Befehle wurden korrigiert (z.B. werden bei read im SCSI cmd nicht byte sondern blocks angegeben).

Bitte mit Simulationen und PC testen. :)

Dank an den Ersteller von tatOS. Es geht nichts über praktische Vorbilder mit vielen Kommentaren direkt im Code, sollten wir uns selbst ein Beispiel daran nehmen. :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:10:30 04.05.2010   Titel:              Zitieren

Ganz nützlich wär vlt. noch ein Link zu Tatos, denn Google rückt damit nur ungern raus, da es gerne nach Tattoos suchen möchte. (mit vielen "-"-Angaben schafft man es schon, aber es ist mühsam)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:21:19 04.05.2010   Titel:              Zitieren

tatOS: http://code.google.com/p/tatos/ :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:34:37 05.05.2010   Titel:              Zitieren

Rev. 434:

bei real PC hängt es im IN-Zweig von usbSendSCSIcmd

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:32:02 05.05.2010   Titel:              Zitieren

rev. 435: Zwischenstand

einige verbesserungen, real PC problem aber noch nicht gelöst

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:29:13 05.05.2010   Titel:              Zitieren

Rev. 436: da +gjm+ auf speicherprobleme tippt, hier eine korrigierte Version mit #define _USB_DIAGNOSIS_ aktiviert.

Hier der aktuelle Ablauf auf PC mit meinem 1GB stick:
Zitat:

dev: 3 interface: 0 endpOUT: 2 endpIN: 1
USB2: usbTransferBulkOnlyMassStorageReset, dev: 3 interface: 0#
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
>>> SCSI: inquiry
OUT part#
IN part transfer>0#
virtAddrBuf0 C0252000h : 00h 80h 02h 02h 1Fh 00h 00h 00h 6Dh 65h 6Dh 6Fh 72h 79h
00h 00h 55h 53h 42h 32h 2Eh 30h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 31h 2Eh
30h 30h

virtAddrBuf0 C0251000h : 55h 53h 42h 53h 12h 42h 42h 42h 00h 00h 00h 00h 00h

Command Passed ("good status")
qTD Status: 00h OK (no bit set)<-- data
qTD Status: 00h OK (no bit set)<-- status

Command Block Status Values in "good status"

>>> Press key <<<
>>> SCSI: test unit ready
OUT part#
IN part transfer==0###################
timeout - no STS_USBINT set!
virtAddrBuf0 C0257000h : 55h 53h 42h 53h AAh AAh AAh AAh AAh AAh AAh AAh AAh

qTD Status: 00h OK (no bit set)<-- data
qTD Status: 80h Active - HC transactions enabled<-- status
>>> Press key <<<
>>> SCSI: request sense
OUT part#
IN part transfer>0###################
timeout - no STS_USBINT set!
virtAddrBuf0 C025D000h : 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h

virtAddrBuf0 C025C000h : 55h 53h 42h 53h AAh AAh AAh AAh AAh AAh AAh AAh AAh

qTD Status: 80h Active - HC transactions enabled<-- data
qTD Status: 80h Active - HC transactions enabled<-- status

>>> Press key <<<


Wie man sieht, steigt der Ablauf beim ersten "test unit ready" (der zweite SCSI command nach dem ersten "inquiry") Beim IN-Endpoint mit seinem QH/qTD Essemble aus.

So sieht dort der Code aus:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
    printf("\nIN part");

    pOpRegs->ASYNCLISTADDR = paging_get_phys_addr(kernel_pd, QH_In);
   
    // IN qTDs
    void* QTD_In;
    void* next = createQTD_Handshake(OUT); // Handshake
    if (TransferLength > 0)
    {
        printf(" transfer>0");
        next = StatusQTD = createQTD_MSDStatus((uintptr_t)next, 1); // next, toggle // IN 13 byte
        QTD_In = DataQTD = createQTD_IO((uintptr_t)next, IN,  0, TransferLength); // IN/OUT DATA0, ... byte
    }
    else
    {
        printf(" transfer==0");
        QTD_In = StatusQTD = createQTD_MSDStatus((uintptr_t)next, 0); // next, toggle // IN 13 byte
    }
   
    // IN QH
    createQH(QH_In, paging_get_phys_addr(kernel_pd, QH_In), QTD_In, 1, device, endpointIn, 512); // endpoint IN/OUT for MSD

    performAsyncScheduler();

    if (TransferLength) // byte
    {
        printf("\n");
        showPacket(DataQTDpage0,TransferLength);
        if ((TransferLength==512) && (TransferLength==36)) // data block, inquiry feedback
        {
            showPacketAlphaNumeric(DataQTDpage0,TransferLength);
        }
    }

    printf("\n");
    showPacket(MSDStatusQTDpage0,13);

    if( ( (*(((uint32_t*)MSDStatusQTDpage0)+3)) & 0x000000FF ) == 0x0 )
    {
        printf("\nCommand Passed (\"good status\") ");
    }
    if( ( (*(((uint32_t*)MSDStatusQTDpage0)+3)) & 0x000000FF ) == 0x1 )
    {
        printf("\nCommand failed");
    }
    if( ( (*(((uint32_t*)MSDStatusQTDpage0)+3)) & 0x000000FF ) == 0x2 )
    {
        printf("\nPhase Error");
    }

    // transfer diagnosis
    showStatusbyteQTD(DataQTD);   printf("<-- data");   // In/Out Data
    showStatusbyteQTD(StatusQTD); printf("<-- status"); // In CSW
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
printf("\nIN part");

pOpRegs->ASYNCLISTADDR = paging_get_phys_addr(kernel_pd, QH_In);

// IN qTDs
void* QTD_In;
void* next = createQTD_Handshake(OUT); // Handshake
if (TransferLength > 0)
{
printf(" transfer>0");
next = StatusQTD = createQTD_MSDStatus((uintptr_t)next, 1); // next, toggle // IN 13 byte
QTD_In = DataQTD = createQTD_IO((uintptr_t)next, IN, 0, TransferLength); // IN/OUT DATA0, ... byte
}
else
{
printf(" transfer==0");
QTD_In = StatusQTD = createQTD_MSDStatus((uintptr_t)next, 0); // next, toggle // IN 13 byte
}

// IN QH
createQH(QH_In, paging_get_phys_addr(kernel_pd, QH_In), QTD_In, 1, device, endpointIn, 512); // endpoint IN/OUT for MSD

performAsyncScheduler();

if (TransferLength) // byte
{
printf("\n");
showPacket(DataQTDpage0,TransferLength);
if ((TransferLength==512) && (TransferLength==36)) // data block, inquiry feedback
{
showPacketAlphaNumeric(DataQTDpage0,TransferLength);
}
}

printf("\n");
showPacket(MSDStatusQTDpage0,13);

if( ( (*(((uint32_t*)MSDStatusQTDpage0)+3)) & 0x000000FF ) == 0x0 )
{
printf("\nCommand Passed (\"good status\") ");
}
if( ( (*(((uint32_t*)MSDStatusQTDpage0)+3)) & 0x000000FF ) == 0x1 )
{
printf("\nCommand failed");
}
if( ( (*(((uint32_t*)MSDStatusQTDpage0)+3)) & 0x000000FF ) == 0x2 )
{
printf("\nPhase Error");
}

// transfer diagnosis
showStatusbyteQTD(DataQTD); printf("<-- data"); // In/Out Data
showStatusbyteQTD(StatusQTD); printf("<-- status"); // In CSW
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
    printf("\nIN part");

    pOpRegs->ASYNCLISTADDR = paging_get_phys_addr(kernel_pd, QH_In);
   
    // IN qTDs
    void* QTD_In;
    void* next = createQTD_Handshake(OUT); // Handshake
    if (TransferLength > 0)
    {
        printf(" transfer>0");
        next = StatusQTD = createQTD_MSDStatus((uintptr_t)next, 1); // next, toggle // IN 13 byte
        QTD_In = DataQTD = createQTD_IO((uintptr_t)next, IN,  0, TransferLength); // IN/OUT DATA0, ... byte
    }
    else
    {
        printf(" transfer==0");
        QTD_In = StatusQTD = createQTD_MSDStatus((uintptr_t)next, 0); // next, toggle // IN 13 byte
    }
   
    // IN QH
    createQH(QH_In, paging_get_phys_addr(kernel_pd, QH_In), QTD_In, 1, device, endpointIn, 512); // endpoint IN/OUT for MSD

    performAsyncScheduler();

    if (TransferLength) // byte
    {
        printf("\n");
        showPacket(DataQTDpage0,TransferLength);
        if ((TransferLength==512) && (TransferLength==36)) // data block, inquiry feedback
        {
            showPacketAlphaNumeric(DataQTDpage0,TransferLength);
        }
    }

    printf("\n");
    showPacket(MSDStatusQTDpage0,13);

    if( ( (*(((uint32_t*)MSDStatusQTDpage0)+3)) & 0x000000FF ) == 0x0 )
    {
        printf("\nCommand Passed (\"good status\") ");
    }
    if( ( (*(((uint32_t*)MSDStatusQTDpage0)+3)) & 0x000000FF ) == 0x1 )
    {
        printf("\nCommand failed");
    }
    if( ( (*(((uint32_t*)MSDStatusQTDpage0)+3)) & 0x000000FF ) == 0x2 )
    {
        printf("\nPhase Error");
    }

    // transfer diagnosis
    showStatusbyteQTD(DataQTD);   printf("<-- data");   // In/Out Data
    showStatusbyteQTD(StatusQTD); printf("<-- status"); // In CSW

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:43:33 05.05.2010, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:41:01 05.05.2010   Titel:              Zitieren

Muss man extra committen, nur um _USB_DIAGNOSIS_ zu aktivieren?
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:44:49 05.05.2010   Titel:              Zitieren

Das lief leider nicht fehlerfrei. Ich wollte +gjm+ nicht zumuten, die entsprechende Version zumindest lauffähig zu bekommen.

Den Ausgabe-Bug habe ich noch übersehen, bitte mit ODER-Verknüpfung anstelle UND:
C/C++ Code:
if ((TransferLength==512) || (TransferLength==36)) // data block, inquiry feedback
{
    showPacketAlphaNumeric(DataQTDpage0,TransferLength);
}
C/C++ Code:
if ((TransferLength==512) || (TransferLength==36)) // data block, inquiry feedback
{
showPacketAlphaNumeric(DataQTDpage0,TransferLength);
}
C/C++ Code:
if ((TransferLength==512) || (TransferLength==36)) // data block, inquiry feedback
{
    showPacketAlphaNumeric(DataQTDpage0,TransferLength);
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:54:54 05.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:06:46 07.05.2010   Titel:              Zitieren

Rev. 437:

ehci/usb:

- void performAsyncScheduler(bool stop) <--- für control transfers mit stop (sonst laufen die nicht), in usbSendSCSIcmd ohne stop (mit stop wird noch der cmd auf OUT ausgeführt, aber nicht der IN zweig)

- QHs und qTD werden analysiert

- zwei QHs (für OUT und IN) im asyncScheduler, die aufeinander zeigen

Ergebnis:
a) in VMWare perfekt
b) real PC:
Zitat:

...
1648000h <-- QH_Out
IN part
asyncList: 01649000h <-- QH_In transfer>0#
00h 80h 02h 02h 1Fh 00h 00h 00h 6Dh 65h 6Dh 6Fh 72h 79h 00h 00h 55h 53h 42h 32h
2Eh 30h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 31h 2Eh 30h 30h
memoryUSB2.01.00

55h 53h 42h 53h 12h 42h 42h 42h 00h 00h 00h 00h 00h

Command Passed ("good status")
qTD Status: 01h Do Ping<-- command
qTD Status: 00h OK (no bit set)<-- data
qTD Status: 00h OK (no bit set)<-- status

Command Block Status Values in "good status"


>>> Analyze Async List <<<
asyncList: 01649000h
USB status: 00008000h
Asynchronous Schedule Status
>>> Press key <<<
>>> SCSI: test unit ready
OUT part
asyncList: 01649000h <-- QH_Out
IN part
asyncList: 0164F000h <-- QH_In transfer==0###################
timeout - no STS_USBINT set!
55h 53h 42h 53h AAh AAh AAh AAh AAh AAh AAh AAh AAh

qTD Status: 80h Active - HC transactions enabled<-- command
qTD Status: 80h Active - HC transactions enabled<-- status

>>> Analyze Async List <<<
asyncList: 01649000h
USB status: 00008000h
Asynchronous Schedule Status
>>> Press key <<<

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:29:11 08.05.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:10:50 08.05.2010   Titel:              Zitieren

Rev. 438:
mit Analyse des Fortgangs des Async. Schedulers

Den Fortgang im Async. Scheduler sieht man an aS und nextQH.

Den Fortgang über eine qTD-Kette sieht man hier sehr gut:
next qTD <--- auszuführender qTD
curr qTD <--- zuletzt ausgeführter qTD

hier ist alles ok:
Zitat:

>>> SCSI: inquiry
OUT part
asyncList: 01663000h <-- QH_Out
IN part transfer>0
before aS:
aS: 01663000h
nextQH: 01664000h
curr qTD: 00000000h next qTD: 01665000h
>>> Press key <<<#
after aS:
aS: 01664000h
nextQH: 01663000h
curr qTD: 01667000h next qTD: 00000000h
>>> Press key <<<
00h 80h 02h 02h 1Fh 00h 00h 00h 41h 36h 30h 43h 30h 37h 30h 34h 46h 6Ch 61h 73h
68h 20h 44h 69h 73h 6Bh 20h 20h 20h 20h 20h 20h 38h 2Eh 30h 37h
A60C0704Flash Disk 8.07

55h 53h 42h 53h 12h 42h 42h 42h 00h 00h 00h 00h 00h

Command Passed ("good status")
qTD Status: 00h OK (no bit set)<-- command
qTD Status: 00h OK (no bit set)<-- data
qTD Status: 00h OK (no bit set)<-- status

Command Block Status Values in "good status"


>>> Analyze Async List <<<
asyncList (phys): 01664000h DataQTD (phys): 01669000h
USB status: 00000000h


hier bleibt er zwischen QH_Out und QH_In stecken:
Zitat:

>>> SCSI: read capacity
OUT part
asyncList: 01687000h <-- QH_Out
IN part transfer>0
before aS:
aS: 01687000h
nextQH: 01688000h
curr qTD: 00000000h next qTD: 01689000h
>>> Press key <<<#
after aS:
aS: 01687000h
nextQH: 01688000h
curr qTD: 01689000h next qTD: 00000000h
>>> Press key <<<
00h 00h 00h 00h 00h 00h 00h 00h

55h 53h 42h 53h AAh AAh AAh AAh AAh AAh AAh AAh AAh

qTD Status: 00h OK (no bit set)<-- command
qTD Status: 80h Active - HC transactions enabled<-- data
qTD Status: 80h Active - HC transactions enabled<-- status
Capacity: 0 MB, Last LBA: 0, block size 0


>>> Analyze Async List <<<
asyncList (phys): 01687000h DataQTD (phys): 0168D000h
USB status: 00002000h
Reclamation


Aktuelle Fragestellung:
Was hemmt auf real PC den Übergang von QH_Out nach QH_In? Konstruktive Ideen zur Klärung dieser Frage werden gerne entgegen genommen. ;)

Hintergrund:
Der EHCI speichert in seinem OpRegister ASYNCLISTADDR (Current Asynchronous List Address Register) die physische Adresse des QH, der als letztes verwendet wurde bzw. als nächstes ausgeführt wird (round robin). Steuergrößen beim Ablauf sind das H-Bit im QH und das Reclamation Bit im USB Status-Register.
Innerhalb des QH zeigt next qTD auf den qTD, der als nächstes ausgeführt wird. Der zuletzt ausgeführte qTD wird in current qTD gespeichert.

ehci spec 1.0, 4.10.5:
Zitat:
4.10.5 Follow Queue Head Horizontal Pointer
The host controller must use the horizontal pointer in the queue head to the next schedule data structure
when any of the following conditions exist:
• If the Active bit is a one on exit from the Execute Transaction state, or
• When the host controller exits the Write Back qTD state, or
• If the Advance Queue state fails to advance the queue because the target qTD is not active, or
• If the Halted bit is a one on exit from the Fetch QH state.
There is no functional requirement that the host controller wait until the current transaction is complete
before using the horizontal pointer to read the next linked data structure. However, it must wait until the
current transaction is complete before executing the next data structure.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:28:38 08.05.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:07:21 08.05.2010   Titel:              Zitieren

Rev. 439:

Wenn der Übergang von QH1 zu QH2 ein Problem ist, dann trennen wir die beiden eben wieder und lassen sie auf sich selbst zeigen. Diese Version konzentriert sich auf den Ablauf bei den qTD-Ketten und zeigt daher die entsprechenden physischen Speicher der qTD an, damit man mit curr qTD und next qTD beobachten kann, wie weit es läuft.

In VMWare sehe ich einen perfekten Ablauf, d.h. der Code ist von der Ablauflogik her ok.

Auf real PC werden die qTD im IN-Zweig entweder vollständig oder teilweise nicht ausgeführt. Trotz der optimalen Beobachtungsmöglichkeit bleibt der Grund noch im Dunkeln. Daher wurde bisher noch kein "Hot Fix" gefunden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:26:43 08.05.2010   Titel:              Zitieren

Rev. 440:

sorry, hatte vergessen das H-Bit zu setzen am IN-endpoint (nach dem Trennen der beiden QH), hilft aber auch nichts, aber ohne ist es nicht OK in der async List, was VMWare allerdings egal ist, so wie es aussieht. :D

Der erste SCSI command läuft sauber durch:
Zitat:

PrettyOS [Version 0.0.0.440] Console 7: EHCI Ports
--------------------------------------------------------------------------------
language: German
JetFlash
Mass Storage Device
N014IM75

USB2: SET_CONFIGURATION 1
USB2: GET_CONFIGURATION 1
dev: 1 interface: 0 endpOUT: 1 endpIN: 2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
>>> SCSI: inquiry
OUT part
asyncList: 0166D000h <-- QH_Out
before aS:
aS: 0166D000h nextQH: 0166D000h
curr qTD: 00000000h next qTD: 0166F000h
after aS:
aS: 0166D000h nextQH: 0166D000h
curr qTD: 0166F000h next qTD: 00000000h
IN part
asyncList: 0166E000h <-- QH_In transfer>0
handshakeQTD: 01671000h StatusQTD: 01673000h DataQTD: 01675000h
before aS:
aS: 0166E000h nextQH: 0166E000h
curr qTD: 00000000h next qTD: 01675000h
after aS:
aS: 0166E000h nextQH: 0166E000h
curr qTD: 01671000h next qTD: 00000000h
00h 80h 02h 02h 1Fh 00h 00h 00h 4Ah 65h 74h 46h 6Ch 61h 73h 68h 54h 72h 61h 6Eh
73h 63h 65h 6Eh 64h 20h 31h 36h 47h 42h 20h 20h 38h 2Eh 30h 37h
JetFlashTranscend 16GB 8.07

55h 53h 42h 53h 12h 42h 42h 42h 00h 00h 00h 00h 00h

Command Passed ("good status")
qTD Status: 00h OK (no bit set)<-- command
qTD Status: 00h OK (no bit set)<-- data
qTD Status: 00h OK (no bit set)<-- status

Command Block Status Values in "good status"

USB status: 00000000h
>>> Press key <<<


Am IN queue head sieht man die Kette:
DataQTD: 01675000h
StatusQTD: 01673000h
handshakeQTD: 01671000h

Vor Start des async Schedulers:
curr qTD: 00000000h
next qTD: 01675000h

Nach Ende des async Schedulers:
curr qTD: 01671000h
next qTD: 00000000h

Der async Scheduler läuft also die qTD-Kette sauber von 01675000h bis 01671000h durch.

Auch ein zweites "inquiry" mit vorgestelltem Reset klappt!
Das führt zu der nächsten Version:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:30:30 09.05.2010, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 08:22:52 09.05.2010   Titel:              Zitieren

Rev. 441:

Diese Version läuft endlich mit real PC und einem 16 GB usb-Stick ohne Probleme durch. Geschafft! :)

Auch ein 512 MB Stick läuft.

Ein 1 GB stick "bockt" allerdings, aber das ist jetzt die USB MSD Baustelle. Die EHCI QH/qTD Seite steht. ;) Unsere Analyse zeigt den Grund für das Nicht-Ausführen eines qTD leider noch nicht an.

Es ist erstaunlich, dass wir den usbTransferBulkOnlyMassStorageReset benötigen, denn das CSW war ja ok.


Ansonsten: Die "device (not) attached" Anzeige in showPORTSC() im Modul ehci.c wurde zeitlich vor diese Aktionen gelegt, wo es hingehört.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:36:23 09.05.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:22:15 09.05.2010   Titel:              Zitieren

Rev. 442:

strncpy repariert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:47:59 09.05.2010   Titel:              Zitieren

Rev. 443:

strncpy ersetzt

Dank an MrX! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:48:12 09.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:58:35 09.05.2010   Titel:              Zitieren

Rev. 444:

nun mit NAK/NYET counter (QH overlay DWORD 5, bit 4:1), funktioniert nur, wenn mit RL ungleich null nachgeladen wird. Wir stellen daher RL auf 15 ein.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:44:41 09.05.2010   Titel:              Zitieren

Rev. 445:

- delay (läuft im thread nicht gut) durch sleepMilliseconds ersetzt.
- Ablauf im asyncScheduler verbessert
- Durchlauf beschleunigt, dafür an den richtigen Stellen gewartet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:15:13 10.05.2010   Titel:              Zitieren

Rev. 446:

Nun können auch usb-Sticks mit 3 endpoints (2 bulk, 1 interrupt) eingesetzt werden. Die Unterscheidung erfolgt über attributes (0x2 bulk, 0x3 interrupt).

siehe: http://www.beyondlogic.org/usbnutshell/usb5.htm#EndpointDescriptors

Zitat:
Bits 0..1 Transfer Type

00 = Control
01 = Isochronous
10 = Bulk
11 = Interrupt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:34:35 11.05.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:04:59 10.05.2010   Titel:              Zitieren

Rev. 447:

Zwischenstand: GetStatus, ClearFeature(Halt) und MSD_ResetRecovery eingebaut

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:33:42 11.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:00:57 11.05.2010   Titel:              Zitieren

Rev. 448:

Ergebnisanalyse bei "request sense" ergänzt, damit wir das Ergebnis von test unit ready sehen.

http://en.wikipedia.org/wiki/SCSI_Request_Sense_Command

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:15:25 11.05.2010   Titel:              Zitieren

Rev. 449:

Tipp von +gjm* eingearbeitet.

C/C++ Code:
textColor(0x09); printf("\n>>> SCSI: inquiry"); textColor(0x0F);
usbTransferSetConfiguration(devAddr,config);  // <--- !!!    
usbSendSCSIcmd(devAddr, usbDevices[devAddr].numInterfaceMSD, usbDevices[devAddr].numEndpointOutMSD, usbDevices[devAddr].numEndpointInMSD, 0x12, 0, 36); // dev, endp, cmd, LBA, transfer length
statusByte = BYTE1(*(((uint32_t*)MSDStatusQTDpage0)+3));
C/C++ Code:
textColor(0x09); printf("\n>>> SCSI: inquiry"); textColor(0x0F);
usbTransferSetConfiguration(devAddr,config); // <--- !!!
usbSendSCSIcmd(devAddr, usbDevices[devAddr].numInterfaceMSD, usbDevices[devAddr].numEndpointOutMSD, usbDevices[devAddr].numEndpointInMSD, 0x12, 0, 36); // dev, endp, cmd, LBA, transfer length
statusByte = BYTE1(*(((uint32_t*)MSDStatusQTDpage0)+3));
C/C++ Code:
textColor(0x09); printf("\n>>> SCSI: inquiry"); textColor(0x0F);
usbTransferSetConfiguration(devAddr,config);  // <--- !!!    
usbSendSCSIcmd(devAddr, usbDevices[devAddr].numInterfaceMSD, usbDevices[devAddr].numEndpointOutMSD, usbDevices[devAddr].numEndpointInMSD, 0x12, 0, 36); // dev, endp, cmd, LBA, transfer length
statusByte = BYTE1(*(((uint32_t*)MSDStatusQTDpage0)+3));


Hoffentlich die erwünschte Stabilisierung.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:33:54 12.05.2010   Titel:              Zitieren

Rev. 450:

Erster Durchbruch bei USB2/SCSI: alle Sticks gehen, auch Tobikings Laptop, und bei +gjm+ geht es hoffentlich auch noch mit dieser Version. Ihm gebührt unser größter Dank für das Finden des fehlenden Puzzleteils.

Bitte breit testen!

Der nun ausgelassene handshake ist übrigens nicht die Komplettlösung. Tauscht man usbTransferSetConfiguration(devAddr,config) gegen den Reset des Interface (ohne geht es dann nicht!) aus, so fallen wieder einzelne qTD aus (status 0x80).

Ein ganz vermintes Gelände! :D

usbTransferSetConfiguration(devAddr,config) hat also eine wesentliche "Nebenwirkung", die wir bisher nicht gefunden haben. Die gilt es zu verstehen. Also schauen wir in die usb 2.0 spec:
Zitat:

9.1.1.5 Configured
Before a USB device’s function may be used, the device must be configured. From the device’s perspective, configuration involves correctly processing a SetConfiguration() request with a non-zero configuration value. Configuring a device or changing an alternate setting causes all of the status and configuration values associated with endpoints in the affected interfaces to be set to their default values. This includes setting the data toggle of any endpoint using data toggles to the value DATA0.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:35:37 12.05.2010, insgesamt 5-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:41:50 12.05.2010   Titel:              Zitieren

Revision 451:

- console.c/video.c: Videomemory wird auf 0 statt komischer, unverständlicher Werte gesetzt
- Scheduler: Erste Umformungen Richtung neuer Scheduler (Umbenennungen)
- list.c: Fehlerkorrekturen in Ring-Funktionen
- Korrekturen, um _DIAGNOSIS_ wieder funktionsfähig zu machen
- Funktion memmove eingebaut (Dank an den Autor)
- Bootscreen leicht verändert (vertikal zentriert und Code vereinfacht). Ist auch wieder aktiviert
- Diverse Kleinigkeiten, Entfernung überflüssigen Codes und Stilkorrekturen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:03:56 13.05.2010   Titel:              Zitieren

Rev. 452:

- Der Handshake-qTD zerstörte bei manchen Mass Storage Devices die Konfiguration
- Dennoch lief es nach Entfernen des schädlichen Handshake am IN endpoint nicht richtig
- set_config setzt nämlich das toggle an den endpoints auf 0, so dass die Vorgehensweise mit 0 zu beginnen klappte
- nun wird das toggle endpoint-spezifisch in der Device Struktur gespeichert und ständig pro endpoint geswitcht

Fazit: kein handshake-qTD, abwechselndes togglen pro endpoint OUT und IN

usb spec:
Zitat:
The host always initializes the first transaction of a bus transfer to the DATA0 PID with a configuration event. The second transaction uses a DATA1 PID, and successive data transfers alternate for the remainder of the bulk transfer. The data packet transmitter toggles upon receipt of ACK, and the receiver toggles upon receipt and acceptance of a valid data packet.
Fig. 8-30 zeigt ein ACK, ob das vom EHCI kommt?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:32:41 13.05.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:32:23 13.05.2010   Titel:              Zitieren

Rev. 453:

Die USB-Diagnose-Ausgaben (vor allem OK und QH/qTD) wurden weitgehend aus dem Standard genommen (kann per define in os.h aktiviert werden), damit man die SCSI CBW und CSW Abfolge klarer erkennt. :)

Hier ein typischer Ablauf auf real PC mit 16 GB USB stick mit drei endpoints (die für MSD notwendigen bulk IN und bulk OUT, zusätzlich einer für interrupt):
Zitat:

>>> >>> function: startHostController (reset HC)
DeactivateLegacySupport: eecp = 0070h
eecp = 0070h, eecp_id = 0001h

BIOS did not own the EHCI. No action needed.

>>> >>> function: enablePorts
>>> >>> function: resetPort 1
>>> >>> function: resetPort 2
>>> >>> function: resetPort 3
>>> >>> function: resetPort 4
>>> >>> function: resetPort 5
>>> >>> function: resetPort 6
>>> Press key to close this console. <<<

Zitat:

PrettyOS [Version 0.0.0.453] Console 1: EHCI Ports
--------------------------------------------------------------------------------

>>> >>> function: resetPort 2
port 2: 00001005h, line: 00h SE0,power on, enabled, EHCI owned
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
USB specification: 2.0 USB class: 0000h
USB subclass: 0000h USB protocol 0000h
max packet size: 64
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
total length: 39 number of interfaces: 1

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
interface number: 0 number of endpoints: 3
interface class: 8
interface subclass: 6
interface protocol: 80

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
endpoint in/out: out endpoint number: 1
attributes: 02h
attributes: bulk - no sync - data endpoint
max packet size: 512

>>> Press key to go on with data analysis from config descriptor. <<<

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
endpoint in/out: in endpoint number: 2
attributes: 02h
attributes: bulk - no sync - data endpoint
max packet size: 512

>>> Press key to go on with data analysis from config descriptor. <<<

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
endpoint in/out: in endpoint number: 3
attributes: 03h max packet size: 64

>>> Press key to go on with data analysis from config descriptor. <<<

language: German
USBest Technology
USB Mass Storage Device
0000000000040F

dev: 2 interface: 0 endpOUT: 1 endpIN: 2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

>>> SCSI: inquiry
00h 80h 02h 02h 1Fh 00h 00h 00h 55h 44h 49h 53h 4Bh 20h 20h 20h 50h 44h 55h 30h
31h 2Dh 31h 36h 47h 20h 38h 38h 48h 32h 2Eh 30h 30h 2Eh 30h 30h
UDISK PDU01-16G 88H2.00.00

55h 53h 42h 53h 12h 42h 42h 42h 00h 00h 00h 00h 00h
Do Ping<-- command
- - - - - - - - - - - press key - - - - - - - - - - -

>>> SCSI: test unit ready
55h 53h 42h 53h 00h 42h 42h 42h 00h 00h 00h 00h 00h
Do Ping<-- command
- - - - - - - - - - - press key - - - - - - - - - - -

>>> SCSI: request sense
70h 00h 00h 00h 00h 00h 00h 0Ah 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h

55h 53h 42h 53h 03h 42h 42h 42h 00h 00h 00h 00h 00h
Do Ping<-- command

Results of "request sense":
Valid: Sense data are not SCSI compliant
Response Code: Current errors, fixed format
Sense Key: No Sense
- - - - - - - - - - - press key - - - - - - - - - - -

>>> SCSI: read capacity
01h E1h FFh FFh 00h 00h 02h 00h

55h 53h 42h 53h 25h 42h 42h 42h 00h 00h 00h 00h 00h
Do Ping<-- command
Capacity: 15872 MB, Last LBA: 31588351, block size 512

- - - - - - - - - - - press key - - - - - - - - - - -

>>> SCSI: read sector: 0
EBh 58h 90h 4Dh 53h 44h 4Fh 53h 35h 2Eh 30h 00h 02h 10h 26h 00h 02h 00h 00h 00h
00h F8h 00h 00h 3Fh 00h FFh 00h 00h 00h 00h 00h 00h 00h E2h 01h 31h 3Ch 00h 00h
00h 00h 00h 00h 02h 00h 00h 00h 01h 00h 06h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 29h FEh F5h 5Eh 84h 4Eh 4Fh 20h 4Eh 41h 4Dh 45h 20h 20h
20h 20h 46h 41h 54h 33h 32h 20h 20h 20h 33h C9h 8Eh D1h BCh F4h 7Bh 8Eh C1h 8Eh
D9h BDh 00h 7Ch 88h 4Eh 02h 8Ah 56h 40h B4h 08h CDh 13h 73h 05h B9h FFh FFh 8Ah
F1h 66h 0Fh B6h C6h 40h 66h 0Fh B6h D1h 80h E2h 3Fh F7h E2h 86h CDh C0h EDh 06h
41h 66h 0Fh B7h C9h 66h F7h E1h 66h 89h 46h F8h 83h 7Eh 16h 00h 75h 38h 83h 7Eh
2Ah 00h 77h 32h 66h 8Bh 46h 1Ch 66h 83h C0h 0Ch BBh 00h 80h B9h 01h 00h E8h 2Bh
00h E9h 48h 03h A0h FAh 7Dh B4h 7Dh 8Bh F0h ACh 84h C0h 74h 17h 3Ch FFh 74h 09h
B4h 0Eh BBh 07h 00h CDh 10h EBh EEh A0h FBh 7Dh EBh E5h A0h F9h 7Dh EBh E0h 98h
CDh 16h CDh 19h 66h 60h 66h 3Bh 46h F8h 0Fh 82h 4Ah 00h 66h 6Ah 00h 66h 50h 06h
53h 66h 68h 10h 00h 01h 00h 80h 7Eh 02h 00h 0Fh 85h 20h 00h B4h 41h BBh AAh 55h
8Ah 56h 40h CDh 13h 0Fh 82h 1Ch 00h 81h FBh 55h AAh 0Fh 85h 14h 00h F6h C1h 01h
0Fh 84h 0Dh 00h FEh 46h 02h B4h 42h 8Ah 56h 40h 8Bh F4h CDh 13h B0h F9h 66h 58h
66h 58h 66h 58h 66h 58h EBh 2Ah 66h 33h D2h 66h 0Fh B7h 4Eh 18h 66h F7h F1h FEh
C2h 8Ah CAh 66h 8Bh D0h 66h C1h EAh 10h F7h 76h 1Ah 86h D6h 8Ah 56h 40h 8Ah E8h
C0h E4h 06h 0Ah CCh B8h 01h 02h CDh 13h 66h 61h 0Fh 82h 54h FFh 81h C3h 00h 02h
66h 40h 49h 0Fh 85h 71h FFh C3h 4Eh 54h 4Ch 44h 52h 20h 20h 20h 20h 20h 20h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 0Dh 0Ah 52h 65h 6Dh 6Fh 76h 65h 20h 64h 69h 73h
6Bh 73h 20h 6Fh 72h 20h 6Fh 74h 68h 65h 72h 20h 6Dh 65h 64h 69h 61h 2Eh FFh 0Dh
0Ah 44h 69h 73h 6Bh 20h 65h 72h 72h 6Fh 72h FFh 0Dh 0Ah 50h 72h 65h 73h 73h 20h
61h 6Eh 79h 20h 6Bh 65h 79h 20h 74h 6Fh 20h 72h 65h 73h 74h 61h 72h 74h 0Dh 0Ah
00h 00h 00h 00h 00h ACh CBh D8h 00h 00h 55h AAh
XMSDOS5.0&?1<)^NO NAME FAT32 3{|NV@sf@f?AfffF~u8~*w2fFf+H}}t<t}}f`f;FJfjfPS
fh~ AUV@UFBV@fXfXfXfX*f3fNfffvV@faTf@IqNTLDR Remove disks or other media.Di
sk errorPress any key to restart
U

55h 53h 42h 53h 28h 42h 42h 42h 00h 00h 00h 00h 00h
Do Ping<-- command
- - - - - - - - - - - press key - - - - - - - - - - -
--------------------------------------------------------------------------------
Port: 2, device attached

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:01:37 13.05.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:35:56 13.05.2010   Titel:              Zitieren

Rev. 454:

Non-MSD werden nun nicht mehr dem MSD-Test unterzogen. Dieses lästige Procedere wird nun abgekürzt, sobald die Interface Class nicht gleich 0x08 ist.

Zitat:
PrettyOS [Version 0.0.0.454] Console 1: EHCI Ports
--------------------------------------------------------------------------------

>>> >>> function: resetPort 1
port 1: 00001005h, line: 00h SE0,power on, enabled, EHCI owned
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
USB specification: 2.0 USB class: 00EFh
USB subclass: 0002h USB protocol 0001h
max packet size: 64
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
total length: 783 number of interfaces: 4

length: 8 type: 11 unknown

>>> Press key to go on with data analysis from config descriptor. <<<

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
interface number: 0 number of endpoints: 1
interface class: 14
interface subclass: 1
interface protocol: 0

...
...

language: German
Chicony Corp.
QEye 2.0M pixel

dev: 1 interface: 1 endpOUT: 0 endpIN: 0
This is no Mass Storage Device! MSD test cannot be carried out.


C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void testMSD(uint8_t devAddr, uint8_t config)
{
    if (usbDevices[devAddr].InterfaceClass != 0x08)
    {
        textColor(0x0C);
        printf("\nThis is no Mass Storage Device! MSD test cannot be carried out.");
        textColor(0x0F);
        waitForKeyStroke();
    }
    else
    {
        // maxLUN (0 for USB-sticks)
        usbDevices[devAddr].maxLUN = 0;

        // start with correct endpoint toggles
        usbDevices[devAddr].ToggleEndpointInMSD  = 0;
        usbDevices[devAddr].ToggleEndpointOutMSD = 0;
//...
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void testMSD(uint8_t devAddr, uint8_t config)
{
if (usbDevices[devAddr].InterfaceClass != 0x08)
{
textColor(0x0C);
printf("\nThis is no Mass Storage Device! MSD test cannot be carried out.");
textColor(0x0F);
waitForKeyStroke();
}
else
{
// maxLUN (0 for USB-sticks)
usbDevices[devAddr].maxLUN = 0;

// start with correct endpoint toggles
usbDevices[devAddr].ToggleEndpointInMSD = 0;
usbDevices[devAddr].ToggleEndpointOutMSD = 0;
//...
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void testMSD(uint8_t devAddr, uint8_t config)
{
    if (usbDevices[devAddr].InterfaceClass != 0x08)
    {
        textColor(0x0C);
        printf("\nThis is no Mass Storage Device! MSD test cannot be carried out.");
        textColor(0x0F);
        waitForKeyStroke();
    }
    else
    {
        // maxLUN (0 for USB-sticks)
        usbDevices[devAddr].maxLUN = 0;

        // start with correct endpoint toggles
        usbDevices[devAddr].ToggleEndpointInMSD  = 0;
        usbDevices[devAddr].ToggleEndpointOutMSD = 0;
//...

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:37:01 13.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:56:15 13.05.2010   Titel:              Zitieren

Rev. 455:

Sector 0 (bootsector) wird ausgelesen und analysiert.

1GB Stick mit FAT16:
Code:
OEM name:           MSDOS5.0    byte per sector:        512                    
sectors per cluster:    32      number of FAT copies:   2                      
max root dir entries:   512     total sectors (<65536): 0                      
media Descriptor:       F8h     sectors per FAT:        251                    
sectors per track:      1       heads/pages:            1                      
hidden sectors:         0       total sectors (>65535): 2050560                
FAT 12/16:              FAT16                                    
Code:
OEM name: MSDOS5.0 byte per sector: 512
sectors per cluster: 32 number of FAT copies: 2
max root dir entries: 512 total sectors (<65536): 0
media Descriptor: F8h sectors per FAT: 251
sectors per track: 1 heads/pages: 1
hidden sectors: 0 total sectors (>65535): 2050560
FAT 12/16: FAT16
Code:
OEM name:           MSDOS5.0    byte per sector:        512                    
sectors per cluster:    32      number of FAT copies:   2                      
max root dir entries:   512     total sectors (<65536): 0                      
media Descriptor:       F8h     sectors per FAT:        251                    
sectors per track:      1       heads/pages:            1                      
hidden sectors:         0       total sectors (>65535): 2050560                
FAT 12/16:              FAT16                                    


512 MB Stick mit FAT16:
Code:
OEM name:           MSDOS5.0    byte per sector:        512                    
sectors per cluster:    16      number of FAT copies:   2                      
max root dir entries:   512     total sectors (<65536): 0                      
media Descriptor:       F8h     sectors per FAT:        246                    
sectors per track:      63      heads/pages:            255                    
hidden sectors:         0       total sectors (>65535): 1007614                
FAT 12/16:              FAT16                                        
Code:
OEM name: MSDOS5.0 byte per sector: 512
sectors per cluster: 16 number of FAT copies: 2
max root dir entries: 512 total sectors (<65536): 0
media Descriptor: F8h sectors per FAT: 246
sectors per track: 63 heads/pages: 255
hidden sectors: 0 total sectors (>65535): 1007614
FAT 12/16: FAT16
Code:
OEM name:           MSDOS5.0    byte per sector:        512                    
sectors per cluster:    16      number of FAT copies:   2                      
max root dir entries:   512     total sectors (<65536): 0                      
media Descriptor:       F8h     sectors per FAT:        246                    
sectors per track:      63      heads/pages:            255                    
hidden sectors:         0       total sectors (>65535): 1007614                
FAT 12/16:              FAT16                                        


http://de.wikipedia.org/wiki/File_Allocation_Table

Der Mediadeskriptor 0xF8 bedeutet "Festplatte".

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:04:19 14.05.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:06:23 14.05.2010   Titel:              Zitieren

Rev. 456:

die beiden QH im bulk transfer zeigen wieder aufeinander, spart ein Ein-/Ausschalten und Durchlaufen des Async. Schedulers.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:12:45 14.05.2010   Titel:              Zitieren

Rev. 457:

_DIAGNOSIS_ funktioniert nun wieder vollständig, sollte vielleicht noch in Speicher und Tasking Management getrennt werden.

Hier auch noch ein "Foto" und die Analyse des Bootsectors meines 512 MB Sticks, der auf FAT32 umformatiert wurde:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PrettyOS [Version 0.0.0.457]                                                    
--------------------------------------------------------------------------------
>>> SCSI: read   sector: 0                                                      
EBh 58h 90h 4Dh 53h 44h 4Fh 53h 35h 2Eh 30h 00h 02h 08h 22h 00h 02h 00h 00h 00h
00h F8h 00h 00h 3Fh 00h FFh 00h 00h 00h 00h 00h FEh 5Fh 0Fh 00h D7h 03h 00h 00h
00h 00h 00h 00h 02h 00h 00h 00h 01h 00h 06h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 29h D5h F9h 76h 0Ch 4Eh 4Fh 20h 4Eh 41h 4Dh 45h 20h 20h
20h 20h 46h 41h 54h 33h 32h 20h 20h 20h 33h C9h 8Eh D1h BCh F4h 7Bh 8Eh C1h 8Eh
D9h BDh 00h 7Ch 88h 4Eh 02h 8Ah 56h 40h B4h 08h CDh 13h 73h 05h B9h FFh FFh 8Ah
F1h 66h 0Fh B6h C6h 40h 66h 0Fh B6h D1h 80h E2h 3Fh F7h E2h 86h CDh C0h EDh 06h
41h 66h 0Fh B7h C9h 66h F7h E1h 66h 89h 46h F8h 83h 7Eh 16h 00h 75h 38h 83h 7Eh
2Ah 00h 77h 32h 66h 8Bh 46h 1Ch 66h 83h C0h 0Ch BBh 00h 80h B9h 01h 00h E8h 2Bh
00h E9h 48h 03h A0h FAh 7Dh B4h 7Dh 8Bh F0h ACh 84h C0h 74h 17h 3Ch FFh 74h 09h
B4h 0Eh BBh 07h 00h CDh 10h EBh EEh A0h FBh 7Dh EBh E5h A0h F9h 7Dh EBh E0h 98h
CDh 16h CDh 19h 66h 60h 66h 3Bh 46h F8h 0Fh 82h 4Ah 00h 66h 6Ah 00h 66h 50h 06h
53h 66h 68h 10h 00h 01h 00h 80h 7Eh 02h 00h 0Fh 85h 20h 00h B4h 41h BBh AAh 55h
8Ah 56h 40h CDh 13h 0Fh 82h 1Ch 00h 81h FBh 55h AAh 0Fh 85h 14h 00h F6h C1h 01h
0Fh 84h 0Dh 00h FEh 46h 02h B4h 42h 8Ah 56h 40h 8Bh F4h CDh 13h B0h F9h 66h 58h
66h 58h 66h 58h 66h 58h EBh 2Ah 66h 33h D2h 66h 0Fh B7h 4Eh 18h 66h F7h F1h FEh
C2h 8Ah CAh 66h 8Bh D0h 66h C1h EAh 10h F7h 76h 1Ah 86h D6h 8Ah 56h 40h 8Ah E8h
C0h E4h 06h 0Ah CCh B8h 01h 02h CDh 13h 66h 61h 0Fh 82h 54h FFh 81h C3h 00h 02h
66h 40h 49h 0Fh 85h 71h FFh C3h 4Eh 54h 4Ch 44h 52h 20h 20h 20h 20h 20h 20h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 0Dh 0Ah 44h 61h 74h 65h 6Eh 74h 72h 84h 67h 65h
72h 20h 65h 6Eh 74h 66h 65h 72h 6Eh 65h 6Eh FFh 0Dh 0Ah 4Dh 65h 64h 69h 65h 6Eh
66h 65h 68h 6Ch 65h 72h FFh 0Dh 0Ah 4Eh 65h 75h 73h 74h 61h 72h 74h 3Ah 20h 54h
61h 73h 74h 65h 20h 64h 72h 81h 63h 6Bh 65h 6Eh 0Dh 0Ah 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h ACh C4h D3h 00h 00h 55h AAh                                
XMSDOS5.0"?_)vNO NAME    FAT32   3{|NV@sf@f?AfffF~u8~*w2fFf+H}}t<t}}f`f;FJfjfPSf
h~ AUV@UFBV@fXfXfXfX*f3fNfffvV@faTf@IqNTLDR      Datentrger entfernenMedienfehle
rNeustart: Taste drckenU                                                        
                                                                               
55h 53h 42h 53h 28h 42h 42h 42h 00h 00h 00h 00h 00h                            
                                                                               
             - - - - - - - - - - - press key - - - - - - - - - - -              
OEM name:           MSDOS5.0    byte per sector:        512                    
sectors per cluster:    8       number of FAT copies:   2                      
max root dir entries:   0       total sectors (<65536): 0                      
media Descriptor:       F8h     sectors per FAT:        0                      
sectors per track:      63      heads/pages:            255                    
hidden sectors:         0       total sectors (>65535): 1007614                
FAT 12/16:                                                                      
             - - - - - - - - - - - press key - - - - - - - - - - -              
--------------------------------------------------------------------------------
Port: 3, device attached                                                        
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PrettyOS [Version 0.0.0.457]
--------------------------------------------------------------------------------
>>> SCSI: read sector: 0
EBh 58h 90h 4Dh 53h 44h 4Fh 53h 35h 2Eh 30h 00h 02h 08h 22h 00h 02h 00h 00h 00h
00h F8h 00h 00h 3Fh 00h FFh 00h 00h 00h 00h 00h FEh 5Fh 0Fh 00h D7h 03h 00h 00h
00h 00h 00h 00h 02h 00h 00h 00h 01h 00h 06h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 29h D5h F9h 76h 0Ch 4Eh 4Fh 20h 4Eh 41h 4Dh 45h 20h 20h
20h 20h 46h 41h 54h 33h 32h 20h 20h 20h 33h C9h 8Eh D1h BCh F4h 7Bh 8Eh C1h 8Eh
D9h BDh 00h 7Ch 88h 4Eh 02h 8Ah 56h 40h B4h 08h CDh 13h 73h 05h B9h FFh FFh 8Ah
F1h 66h 0Fh B6h C6h 40h 66h 0Fh B6h D1h 80h E2h 3Fh F7h E2h 86h CDh C0h EDh 06h
41h 66h 0Fh B7h C9h 66h F7h E1h 66h 89h 46h F8h 83h 7Eh 16h 00h 75h 38h 83h 7Eh
2Ah 00h 77h 32h 66h 8Bh 46h 1Ch 66h 83h C0h 0Ch BBh 00h 80h B9h 01h 00h E8h 2Bh
00h E9h 48h 03h A0h FAh 7Dh B4h 7Dh 8Bh F0h ACh 84h C0h 74h 17h 3Ch FFh 74h 09h
B4h 0Eh BBh 07h 00h CDh 10h EBh EEh A0h FBh 7Dh EBh E5h A0h F9h 7Dh EBh E0h 98h
CDh 16h CDh 19h 66h 60h 66h 3Bh 46h F8h 0Fh 82h 4Ah 00h 66h 6Ah 00h 66h 50h 06h
53h 66h 68h 10h 00h 01h 00h 80h 7Eh 02h 00h 0Fh 85h 20h 00h B4h 41h BBh AAh 55h
8Ah 56h 40h CDh 13h 0Fh 82h 1Ch 00h 81h FBh 55h AAh 0Fh 85h 14h 00h F6h C1h 01h
0Fh 84h 0Dh 00h FEh 46h 02h B4h 42h 8Ah 56h 40h 8Bh F4h CDh 13h B0h F9h 66h 58h
66h 58h 66h 58h 66h 58h EBh 2Ah 66h 33h D2h 66h 0Fh B7h 4Eh 18h 66h F7h F1h FEh
C2h 8Ah CAh 66h 8Bh D0h 66h C1h EAh 10h F7h 76h 1Ah 86h D6h 8Ah 56h 40h 8Ah E8h
C0h E4h 06h 0Ah CCh B8h 01h 02h CDh 13h 66h 61h 0Fh 82h 54h FFh 81h C3h 00h 02h
66h 40h 49h 0Fh 85h 71h FFh C3h 4Eh 54h 4Ch 44h 52h 20h 20h 20h 20h 20h 20h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 0Dh 0Ah 44h 61h 74h 65h 6Eh 74h 72h 84h 67h 65h
72h 20h 65h 6Eh 74h 66h 65h 72h 6Eh 65h 6Eh FFh 0Dh 0Ah 4Dh 65h 64h 69h 65h 6Eh
66h 65h 68h 6Ch 65h 72h FFh 0Dh 0Ah 4Eh 65h 75h 73h 74h 61h 72h 74h 3Ah 20h 54h
61h 73h 74h 65h 20h 64h 72h 81h 63h 6Bh 65h 6Eh 0Dh 0Ah 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h ACh C4h D3h 00h 00h 55h AAh
XMSDOS5.0"?_)vNO NAME FAT32 3{|NV@sf@f?AfffF~u8~*w2fFf+H}}t<t}}f`f;FJfjfPSf
h~ AUV@UFBV@fXfXfXfX*f3fNfffvV@faTf@IqNTLDR Datentrger entfernenMedienfehle
rNeustart: Taste drckenU

55h 53h 42h 53h 28h 42h 42h 42h 00h 00h 00h 00h 00h

- - - - - - - - - - - press key - - - - - - - - - - -
OEM name: MSDOS5.0 byte per sector: 512
sectors per cluster: 8 number of FAT copies: 2
max root dir entries: 0 total sectors (<65536): 0
media Descriptor: F8h sectors per FAT: 0
sectors per track: 63 heads/pages: 255
hidden sectors: 0 total sectors (>65535): 1007614
FAT 12/16:
- - - - - - - - - - - press key - - - - - - - - - - -
--------------------------------------------------------------------------------
Port: 3, device attached
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
PrettyOS [Version 0.0.0.457]                                                    
--------------------------------------------------------------------------------
>>> SCSI: read   sector: 0                                                      
EBh 58h 90h 4Dh 53h 44h 4Fh 53h 35h 2Eh 30h 00h 02h 08h 22h 00h 02h 00h 00h 00h
00h F8h 00h 00h 3Fh 00h FFh 00h 00h 00h 00h 00h FEh 5Fh 0Fh 00h D7h 03h 00h 00h
00h 00h 00h 00h 02h 00h 00h 00h 01h 00h 06h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 29h D5h F9h 76h 0Ch 4Eh 4Fh 20h 4Eh 41h 4Dh 45h 20h 20h
20h 20h 46h 41h 54h 33h 32h 20h 20h 20h 33h C9h 8Eh D1h BCh F4h 7Bh 8Eh C1h 8Eh
D9h BDh 00h 7Ch 88h 4Eh 02h 8Ah 56h 40h B4h 08h CDh 13h 73h 05h B9h FFh FFh 8Ah
F1h 66h 0Fh B6h C6h 40h 66h 0Fh B6h D1h 80h E2h 3Fh F7h E2h 86h CDh C0h EDh 06h
41h 66h 0Fh B7h C9h 66h F7h E1h 66h 89h 46h F8h 83h 7Eh 16h 00h 75h 38h 83h 7Eh
2Ah 00h 77h 32h 66h 8Bh 46h 1Ch 66h 83h C0h 0Ch BBh 00h 80h B9h 01h 00h E8h 2Bh
00h E9h 48h 03h A0h FAh 7Dh B4h 7Dh 8Bh F0h ACh 84h C0h 74h 17h 3Ch FFh 74h 09h
B4h 0Eh BBh 07h 00h CDh 10h EBh EEh A0h FBh 7Dh EBh E5h A0h F9h 7Dh EBh E0h 98h
CDh 16h CDh 19h 66h 60h 66h 3Bh 46h F8h 0Fh 82h 4Ah 00h 66h 6Ah 00h 66h 50h 06h
53h 66h 68h 10h 00h 01h 00h 80h 7Eh 02h 00h 0Fh 85h 20h 00h B4h 41h BBh AAh 55h
8Ah 56h 40h CDh 13h 0Fh 82h 1Ch 00h 81h FBh 55h AAh 0Fh 85h 14h 00h F6h C1h 01h
0Fh 84h 0Dh 00h FEh 46h 02h B4h 42h 8Ah 56h 40h 8Bh F4h CDh 13h B0h F9h 66h 58h
66h 58h 66h 58h 66h 58h EBh 2Ah 66h 33h D2h 66h 0Fh B7h 4Eh 18h 66h F7h F1h FEh
C2h 8Ah CAh 66h 8Bh D0h 66h C1h EAh 10h F7h 76h 1Ah 86h D6h 8Ah 56h 40h 8Ah E8h
C0h E4h 06h 0Ah CCh B8h 01h 02h CDh 13h 66h 61h 0Fh 82h 54h FFh 81h C3h 00h 02h
66h 40h 49h 0Fh 85h 71h FFh C3h 4Eh 54h 4Ch 44h 52h 20h 20h 20h 20h 20h 20h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h 00h 00h 00h 0Dh 0Ah 44h 61h 74h 65h 6Eh 74h 72h 84h 67h 65h
72h 20h 65h 6Eh 74h 66h 65h 72h 6Eh 65h 6Eh FFh 0Dh 0Ah 4Dh 65h 64h 69h 65h 6Eh
66h 65h 68h 6Ch 65h 72h FFh 0Dh 0Ah 4Eh 65h 75h 73h 74h 61h 72h 74h 3Ah 20h 54h
61h 73h 74h 65h 20h 64h 72h 81h 63h 6Bh 65h 6Eh 0Dh 0Ah 00h 00h 00h 00h 00h 00h
00h 00h 00h 00h 00h ACh C4h D3h 00h 00h 55h AAh                                
XMSDOS5.0"?_)vNO NAME    FAT32   3{|NV@sf@f?AfffF~u8~*w2fFf+H}}t<t}}f`f;FJfjfPSf
h~ AUV@UFBV@fXfXfXfX*f3fNfffvV@faTf@IqNTLDR      Datentrger entfernenMedienfehle
rNeustart: Taste drckenU                                                        
                                                                               
55h 53h 42h 53h 28h 42h 42h 42h 00h 00h 00h 00h 00h                            
                                                                               
             - - - - - - - - - - - press key - - - - - - - - - - -              
OEM name:           MSDOS5.0    byte per sector:        512                    
sectors per cluster:    8       number of FAT copies:   2                      
max root dir entries:   0       total sectors (<65536): 0                      
media Descriptor:       F8h     sectors per FAT:        0                      
sectors per track:      63      heads/pages:            255                    
hidden sectors:         0       total sectors (>65535): 1007614                
FAT 12/16:                                                                      
             - - - - - - - - - - - press key - - - - - - - - - - -              
--------------------------------------------------------------------------------
Port: 3, device attached                                                        

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:59:29 14.05.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:48:24 15.05.2010   Titel:              Zitieren

Rev. 458:

usb und usb-MSD:
Ausgaben gestrafft, Auswertedetails hinzugefügt und besser geordnet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:22:38 17.05.2010   Titel:              Zitieren

Rev. 459:

Das Command Status Word (CSW) wird nun komplett (vorher nur letztes Byte) auf Korrektheit analysiert, um entsprechend reagieren zu können.

Zitat:

F0h 00h 00h 00h 00h 00h 00h 0Ah 00h 00h 00h 00h 00h 00h 00h 00h 00h 00h

55h 53h 42h 53h 03h 42h 42h 42h 00h 00h 00h 00h 00h

CSW signature OK
CSW tag 03h OK
CSW data residue OK
CSW status OK


Results of "request sense":
Valid: Sense data are SCSI compliant
Response Code: Current errors, fixed format
Sense Key: No Sense

>>> SCSI: read capacity
00h 00h 00h 00h 00h 00h 00h 00h

01h 01h 01h 01h AAh AAh AAh AAh AAh AAh AAh AAh AAh

CSW signature wrong (not processed)
Error: CSW tag wrong
CSW data residue: -1431655766
CSW status byte: undefined value (error)

01h 01h 01h 01h AAh AAh AAh AAh AAh AAh AAh AAh AAh ist der Wert, den ich im CSW beim Erstellen vorgebe. Bei einem erfolgreichen Transfer wird die CSW Signature "USBS" (55h 53h 42h 53h) in den data-Bereich geschrieben, das CBW tag als CSW tag wiederholt (damit können wir den SCSI opcode checken), die Differenz zwischen zu übertragender und wirklich übertragener Länge dargestellt sowie das Status Byte 0x00 gesetzt.

TODO: wenn ein Transfer nicht ausgeführt wurde, stehen am Device nach dem ResetRecovery noch Informationen (Daten, CSW) zur Verfügung, die dann bei Leseoperationen nachkommen. Die nicht erhaltenen Daten, CSW sollten dann noch abgeholt und interpretiert werden, damit Host und Device im Takt bleiben.

Zum Glück habe ich einen 4 GB usb-Stick, der auf real PC nach dem "test unit ready" netter Weise richtig auf stur schaltet. An diesem bockigen MSD Device kann man das noch zu errichtende Procedere gut testen. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:47:37 17.05.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:28:05 17.05.2010   Titel:              Zitieren

Rev. 460:

Zwischenschritt: Transfer-Struktur eingefügt, um den Ablauf des bulk-Transfers analysieren zu können
ehciQHqTD.h:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
struct usbBulkTransfer
{
    uint8_t  SCSIopcode;
    bool     successfulCommand;
    bool     successfulDataOUT;
    bool     successfulDataIN;
    bool     successfulCSW;
    uint32_t DataBytesToTransferOUT;
    uint32_t DataBytesToTransferIN;
}__attribute__((packed));
typedef struct usbBulkTransfer usbBulkTransfer_t;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
struct usbBulkTransfer
{
uint8_t SCSIopcode;
bool successfulCommand;
bool successfulDataOUT;
bool successfulDataIN;
bool successfulCSW;
uint32_t DataBytesToTransferOUT;
uint32_t DataBytesToTransferIN;
}__attribute__((packed));
typedef struct usbBulkTransfer usbBulkTransfer_t;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
struct usbBulkTransfer
{
    uint8_t  SCSIopcode;
    bool     successfulCommand;
    bool     successfulDataOUT;
    bool     successfulDataIN;
    bool     successfulCSW;
    uint32_t DataBytesToTransferOUT;
    uint32_t DataBytesToTransferIN;
}__attribute__((packed));
typedef struct usbBulkTransfer usbBulkTransfer_t;


ehciQHqTD.c:
C/C++ Code:
void logBulkTransfer(usbBulkTransfer_t* bT)
C/C++ Code:
void logBulkTransfer(usbBulkTransfer_t* bT)
C/C++ Code:
void logBulkTransfer(usbBulkTransfer_t* bT)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:31:23 17.05.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:31:30 18.05.2010   Titel:              Zitieren

Rev. 461:

Analyse des MBR und Lesen des ersten Sectors der Partition
http://de.wikipedia.org/wiki/Partitionstabelle

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:33:27 19.05.2010   Titel:              Zitieren

Rev. 462:

- Auswertung von SCSI command "Inquiry"
- Verbesserte Master Boot Record Erkennung und Auswertung

Fehlerbehandlung bei USB-bulk-Transfer noch nicht ausreichend

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:34:10 19.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:59:34 19.05.2010   Titel:              Zitieren

Rev. 463:

zur Verbesserung der Lesbarkeit beim Auswerten von Bit-Feldern:
(Dank an: kwolf == taljeth für die Mithilfe bei der Formulierung)

util.h/c:
C/C++ Code:
// fetch data field bitwise in byte "byte" from bit "shift" with "len" bits  
uint8_t getField(void* addr, uint8_t byte, uint8_t shift, uint8_t len)
{
    return  ( (((uint8_t*)addr)[byte] >> shift) & ((1 << len) -1));
}
C/C++ Code:
// fetch data field bitwise in byte "byte" from bit "shift" with "len" bits
uint8_t getField(void* addr, uint8_t byte, uint8_t shift, uint8_t len)
{
return ( (((uint8_t*)addr)[byte] >> shift) & ((1 << len) -1));
}
C/C++ Code:
// fetch data field bitwise in byte "byte" from bit "shift" with "len" bits  
uint8_t getField(void* addr, uint8_t byte, uint8_t shift, uint8_t len)
{
    return  ( (((uint8_t*)addr)[byte] >> shift) & ((1 << len) -1));
}

Beispiel:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
void* addr = (void*)DataQTDpage0;  
//...
uint8_t RMB                  = getField(addr, 1, 7, 1); // byte, shift, len
//...

uint8_t SftRe                = getField(addr, 7, 0, 1);
uint8_t CmdQue               = getField(addr, 7, 1, 1);
uint8_t Reserved4            = getField(addr, 7, 2, 1);
uint8_t Linked               = getField(addr, 7, 3, 1);
uint8_t Sync                 = getField(addr, 7, 4, 1);
uint8_t WBus16               = getField(addr, 7, 5, 1);
uint8_t WBus32               = getField(addr, 7, 6, 1);
uint8_t RelAddr              = getField(addr, 7, 7, 1);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
void* addr = (void*)DataQTDpage0;
//...
uint8_t RMB = getField(addr, 1, 7, 1); // byte, shift, len
//...

uint8_t SftRe = getField(addr, 7, 0, 1);
uint8_t CmdQue = getField(addr, 7, 1, 1);
uint8_t Reserved4 = getField(addr, 7, 2, 1);
uint8_t Linked = getField(addr, 7, 3, 1);
uint8_t Sync = getField(addr, 7, 4, 1);
uint8_t WBus16 = getField(addr, 7, 5, 1);
uint8_t WBus32 = getField(addr, 7, 6, 1);
uint8_t RelAddr = getField(addr, 7, 7, 1);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
void* addr = (void*)DataQTDpage0;  
//...
uint8_t RMB                  = getField(addr, 1, 7, 1); // byte, shift, len
//...

uint8_t SftRe                = getField(addr, 7, 0, 1);
uint8_t CmdQue               = getField(addr, 7, 1, 1);
uint8_t Reserved4            = getField(addr, 7, 2, 1);
uint8_t Linked               = getField(addr, 7, 3, 1);
uint8_t Sync                 = getField(addr, 7, 4, 1);
uint8_t WBus16               = getField(addr, 7, 5, 1);
uint8_t WBus32               = getField(addr, 7, 6, 1);
uint8_t RelAddr              = getField(addr, 7, 7, 1);

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:42:25 20.05.2010   Titel:              Zitieren

Rev. 464:

Überarbeitung der Auswertung des SCSI command "inquiry" entsprechend dem Buch von Jan Axelson, "USB Mass Storage":

Beispiele:

16 GB usb-stick:
Zitat:

Vendor ID: JetFlash
Product ID: Transcend 16GB
Revision: 8.07
Version: 2 (4: SPC-2, 5: SPC-3)
Response Data Format OK
Removable device type: yes
Supports hierarch. addr. support: no
Supports normal ACA bit support: no
Supports linked commands: no
Supports tagged command queuing: no
direct-access device (e.g., magnetic disk)
opcode: 12h cmd: OK data in: OK CSW: OK


4 GB usb-stick:
Zitat:

Do Ping<-- command
Vendor ID: Verbatim
Product ID: STORE N GO
Revision: PMAP
Version: 0 (4: SPC-2, 5: SPC-3)
Response Data Format is not OK: 1 (should be 2)
Removable device type: yes
Supports hierarch. addr. support: no
Supports normal ACA bit support: no
Supports linked commands: no
Supports tagged command queuing: no
direct-access device (e.g., magnetic disk)
opcode: 12h cmd: OK data in: OK CSW: OK


1 GB usb-stick:
Zitat:

Do Ping<-- command
Vendor ID: memory
Product ID: USB2.0
Revision: 1.00
Version: 2 (4: SPC-2, 5: SPC-3)
Response Data Format OK
Removable device type: yes
Supports hierarch. addr. support: no
Supports normal ACA bit support: no
Supports linked commands: no
Supports tagged command queuing: no
direct-access device (e.g., magnetic disk)
opcode: 12h cmd: OK data in: OK CSW: OK


512 MB usb-stick:
Zitat:

Vendor ID: A60C0704
Product ID: Flash Disk
Revision: 8.07
Version: 2 (4: SPC-2, 5: SPC-3)
Response Data Format OK
Removable device type: yes
Supports hierarch. addr. support: no
Supports normal ACA bit support: no
Supports linked commands: no
Supports tagged command queuing: no
direct-access device (e.g., magnetic disk)
opcode: 12h cmd: OK data in: OK CSW: OK


Response Data Format OK bedeutet, das der Wert gleich 2 ist.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:33:20 20.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:44:53 23.05.2010   Titel:              Zitieren

Rev. 465: Zwischenschritt

FAT Filesystem hinzugefügt, so dass man nun mittels filename von usb msd laden kann:

fat.c, zeile 1191: hier bitte den Namen eingeben:
C/C++ Code:
strncpy(foCompareTo->name,"CLEAN   BAT",11); // <--------------- this file will be searched
C/C++ Code:
strncpy(foCompareTo->name,"CLEAN BAT",11); // <--------------- this file will be searched
C/C++ Code:
strncpy(foCompareTo->name,"CLEAN   BAT",11); // <--------------- this file will be searched


Also unser clean.bat auf stick oder usb HDD laden und danach suchen lassen.

Beispiel:
evtl. Schritt 0: MBR wird ausgelesen und Beginn der Partition (Sektor 8192) nachgeladen.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
This seems to be a Master Boot Record:                                          
                                                                               
Disc Signature: 00000000h       Null (check): 0000h                            
                                                                               
no partition table 0                                                            
partition table 1:  not bootable                                                
type:               0Bh                                                        
first sector (CHS): 130 3 0                                                    
last  sector (CHS): 6 229 161                                                  
start sector:       8192                                                        
number of sectors:  31367168                                                    
                                                                               
no partition table 2                                                            
no partition table 3                                  
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
This seems to be a Master Boot Record:

Disc Signature: 00000000h Null (check): 0000h

no partition table 0
partition table 1: not bootable
type: 0Bh
first sector (CHS): 130 3 0
last sector (CHS): 6 229 161
start sector: 8192
number of sectors: 31367168

no partition table 2
no partition table 3
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
This seems to be a Master Boot Record:                                          
                                                                               
Disc Signature: 00000000h       Null (check): 0000h                            
                                                                               
no partition table 0                                                            
partition table 1:  not bootable                                                
type:               0Bh                                                        
first sector (CHS): 130 3 0                                                    
last  sector (CHS): 6 229 161                                                  
start sector:       8192                                                        
number of sectors:  31367168                                                    
                                                                               
no partition table 2                                                            
no partition table 3                                  


Schritt 1: Die Partition wird als FAT 32 erkannt, wir speichern die Daten in unsere Struktur DISK usbstick:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
OEM name:           MSDOS5.0    byte per sector:        512                    
sectors per cluster:    16      reserved sectors:       64                      
number of FAT copies:   2       max root dir entries:   0                      
total sectors (<65536): 0       media Descriptor:       F8h                    
sectors per FAT:        0       sectors per track:      63                      
heads/pages:            255     hidden sectors:         8192                    
total sectors (>65535): 31367168        FAT 12/16:                              
This is a volume formated with FAT32.                                          
The root dir starts at cluster(!) 2.                                            
Sectors per FAT: 15344.                                                        
             - - - - - - - - - - - press key - - - - - - - - - - -              
buffer:     C0290000h                                                          
type:       3                                                                  
SecPerClus: 16                                                                  
maxroot:    512                                                                
fatsize:    15344                                                              
fatcopy:    2                                                                  
firsts:     8192                                                                
fat:        8256                                                                
root:       38944                                                              
data:       38960                                                              
maxcls:     1959931                                                            
mount:      1                                                  
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
OEM name: MSDOS5.0 byte per sector: 512
sectors per cluster: 16 reserved sectors: 64
number of FAT copies: 2 max root dir entries: 0
total sectors (<65536): 0 media Descriptor: F8h
sectors per FAT: 0 sectors per track: 63
heads/pages: 255 hidden sectors: 8192
total sectors (>65535): 31367168 FAT 12/16:
This is a volume formated with FAT32.
The root dir starts at cluster(!) 2.
Sectors per FAT: 15344.
- - - - - - - - - - - press key - - - - - - - - - - -
buffer: C0290000h
type: 3
SecPerClus: 16
maxroot: 512
fatsize: 15344
fatcopy: 2
firsts: 8192
fat: 8256
root: 38944
data: 38960
maxcls: 1959931
mount: 1
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
OEM name:           MSDOS5.0    byte per sector:        512                    
sectors per cluster:    16      reserved sectors:       64                      
number of FAT copies:   2       max root dir entries:   0                      
total sectors (<65536): 0       media Descriptor:       F8h                    
sectors per FAT:        0       sectors per track:      63                      
heads/pages:            255     hidden sectors:         8192                    
total sectors (>65535): 31367168        FAT 12/16:                              
This is a volume formated with FAT32.                                          
The root dir starts at cluster(!) 2.                                            
Sectors per FAT: 15344.                                                        
             - - - - - - - - - - - press key - - - - - - - - - - -              
buffer:     C0290000h                                                          
type:       3                                                                  
SecPerClus: 16                                                                  
maxroot:    512                                                                
fatsize:    15344                                                              
fatcopy:    2                                                                  
firsts:     8192                                                                
fat:        8256                                                                
root:       38944                                                              
data:       38960                                                              
maxcls:     1959931                                                            
mount:      1                                                  


Schritt 2: die Root Dir (sector 38944 = 8192 (hidden sectors) + 64 (Reserved Sectors) + 15344 (FAT1) + 15344 (FAT2)) mit den File Entries wird gefunden:
Code:
>>> SCSI: read sector: 38944
55h 53h 42h ...... 0Ch 00h 00h                                
USB-STICK  Py<Test1.binEST1   BIN q.<.<x`.<s.ppt6tEffe6ctivenesfor_A6GQM_AssePre
se6ntation_RESEN~1PPT \Py<<Py<GCC     PDF /<<<5&,KERNEL C   Kp<<o<HCI    C   X{<
<ar<SB2    C   X{<<$v<+SB2    C   Gq<<y< CS      H   Tq<<cH<HCI    H   Tq<<l<#SB
2    H   Tq<<}<                                                                
Code:
>>> SCSI: read sector: 38944
55h 53h 42h ...... 0Ch 00h 00h
USB-STICK Py<Test1.binEST1 BIN q.<.<x`.<s.ppt6tEffe6ctivenesfor_A6GQM_AssePre
se6ntation_RESEN~1PPT \Py<<Py<GCC PDF /<<<5&,KERNEL C Kp<<o<HCI C X{<
<ar<SB2 C X{<<$v<+SB2 C Gq<<y< CS H Tq<<cH<HCI H Tq<<l<#SB
2 H Tq<<}<
Code:
>>> SCSI: read sector: 38944
55h 53h 42h ...... 0Ch 00h 00h                                
USB-STICK  Py<Test1.binEST1   BIN q.<.<x`.<s.ppt6tEffe6ctivenesfor_A6GQM_AssePre
se6ntation_RESEN~1PPT \Py<<Py<GCC     PDF /<<<5&,KERNEL C   Kp<<o<HCI    C   X{<
<ar<SB2    C   X{<<$v<+SB2    C   Gq<<y< CS      H   Tq<<cH<HCI    H   Tq<<l<#SB
2    H   Tq<<}<                                                                


Schritt 3:
Der Name "clean bat" wird als Entry Nr. 85 gefunden:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
*curEntry: 85                            
...                                                                            
An entry is found. Attributes OK for search                                    
index: 0 character: C test: C                                                  
index: 1 character: L test: L                                                  
index: 2 character: E test: E                                                  
index: 3 character: A test: A                                                  
index: 4 character: N test: N                                                  
index: 5 character:   test:                                                    
index: 6 character:   test:                                                    
index: 7 character:   test:                                                    
index: 8 character: B test: B                                                  
index: 9 character: A test: A                                                  
index:10 character: T test: T    
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
*curEntry: 85
...
An entry is found. Attributes OK for search
index: 0 character: C test: C
index: 1 character: L test: L
index: 2 character: E test: E
index: 3 character: A test: A
index: 4 character: N test: N
index: 5 character: test:
index: 6 character: test:
index: 7 character: test:
index: 8 character: B test: B
index: 9 character: A test: A
index:10 character: T test: T
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
*curEntry: 85                            
...                                                                            
An entry is found. Attributes OK for search                                    
index: 0 character: C test: C                                                  
index: 1 character: L test: L                                                  
index: 2 character: E test: E                                                  
index: 3 character: A test: A                                                  
index: 4 character: N test: N                                                  
index: 5 character:   test:                                                    
index: 6 character:   test:                                                    
index: 7 character:   test:                                                    
index: 8 character: B test: B                                                  
index: 9 character: A test: A                                                  
index:10 character: T test: T    


Schritt 4:
Dann erfolgt der entsprechende Ladevorgang mit Hilfe von First Cluster und Filesize (in Entry) und der FAT32 chain, hier der Fund und Ladevorgang mit "size" Byte aus dem Sektor 38960:
Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
>>>>> fread <<<<<!                                                              
>>>>> cluster2sector<<<<<    cluster: 3  sector 38960                          
>>>>> sectorRead <<<<<!                                                        
                                                                               
>>> SCSI: read   sector: 38960                                                  
......
tools\mingw32-make clean OS=WINDOWS                                            
                                                                               
74h 6Fh 6Fh 6Ch 73h 5Ch 6Dh 69h 6Eh 67h 77h 33h 32h 2Dh 6Dh 61h 6Bh 65h 20h 63h
6Ch 65h 61h 6Eh 20h 4Fh 53h 3Dh 57h 49h 4Eh 44h 4Fh 57h 53h                    
>>>>> fclose <<<<<!                                                    
Code:
1
2
3
4
5
6
7
8
9
10
11
>>>>> fread <<<<<!
>>>>> cluster2sector<<<<< cluster: 3 sector 38960
>>>>> sectorRead <<<<<!

>>> SCSI: read sector: 38960
......
tools\mingw32-make clean OS=WINDOWS

74h 6Fh 6Fh 6Ch 73h 5Ch 6Dh 69h 6Eh 67h 77h 33h 32h 2Dh 6Dh 61h 6Bh 65h 20h 63h
6Ch 65h 61h 6Eh 20h 4Fh 53h 3Dh 57h 49h 4Eh 44h 4Fh 57h 53h
>>>>> fclose <<<<<!
Code:
1
2
3
4
5
6
7
8
9
10
11
>>>>> fread <<<<<!                                                              
>>>>> cluster2sector<<<<<    cluster: 3  sector 38960                          
>>>>> sectorRead <<<<<!                                                        
                                                                               
>>> SCSI: read   sector: 38960                                                  
......
tools\mingw32-make clean OS=WINDOWS                                            
                                                                               
74h 6Fh 6Fh 6Ch 73h 5Ch 6Dh 69h 6Eh 67h 77h 33h 32h 2Dh 6Dh 61h 6Bh 65h 20h 63h
6Ch 65h 61h 6Eh 20h 4Fh 53h 3Dh 57h 49h 4Eh 44h 4Fh 57h 53h                    
>>>>> fclose <<<<<!                                                    


Entsprechend läuft dies auch mit Sticks ohne MBR und/oder mit FAT16 Volume.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:02:39 23.05.2010, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:53:04 24.05.2010   Titel:              Zitieren

Rev. 466:

Serials von usb msd und von der FAT16 oder FAT32 Partition werden angezeigt und gespeichert. Damit können wir eine Partition sicher erkennen.

Code:
usb-stick    usb device ser. #    FAT ser. #     FAT..  
------------------------------------------------------
512 MB                8B6A0861    F6 1C E9 20    16    
  1 GB                     110    ED 50 07 58    16
  4 GB            0D09297675C0    62 F9 2A 94    32
 16 GB                N014IM75    79 A2 6C 5C    32
Code:
usb-stick usb device ser. # FAT ser. # FAT..
------------------------------------------------------
512 MB 8B6A0861 F6 1C E9 20 16
1 GB 110 ED 50 07 58 16
4 GB 0D09297675C0 62 F9 2A 94 32
16 GB N014IM75 79 A2 6C 5C 32
Code:
usb-stick    usb device ser. #    FAT ser. #     FAT..  
------------------------------------------------------
512 MB                8B6A0861    F6 1C E9 20    16    
  1 GB                     110    ED 50 07 58    16
  4 GB            0D09297675C0    62 F9 2A 94    32
 16 GB                N014IM75    79 A2 6C 5C    32


Hierbei verwende ich bei den usb device ser. # nur die letzten 12 Stellen, weil nur diese unterschiedlich sein müssen.

Die serial vom 1GB stick erscheint verflixt kurz.
Die serial vom 4GB stick ist sogar 16 Stellen lang, die vorderen 4 habe ich beim Speichern verworfen. Wir können aber auch erhöhen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:27:33 24.05.2010   Titel:              Zitieren

Revision 467:

- Weiterbau an CDI
- ...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:24:42 25.05.2010   Titel:              Zitieren

Herzlichen Dank an MrX für das Engagement bezüglich CDI! :live:

Rev. 468:

Zwischenschritt: Hidden Sectors durch Startsector der Partition ausgetauscht (dürfte momentan bei einer Partition - also bei sticks - zuverlässig funktionieren)

Für Tests:
1) Datei auf stick kopieren oder entsprechend auswählen/benennen
2) Filename[8] incl. Extension[3] ohne Punkt(!), aber mit Spaces (Summe 11 character) hier eingeben:
usb2_msd.c, zeile 660 ff.
C/C++ Code:
// testFAT("clean   bat"); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
testFAT("makefile.xxx"); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
// testFAT("makefile   "); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
// test more!
C/C++ Code:
// testFAT("clean bat"); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
testFAT("makefile.xxx"); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
// testFAT("makefile "); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
// test more!
C/C++ Code:
// testFAT("clean   bat"); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
testFAT("makefile.xxx"); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
// testFAT("makefile   "); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
// test more!


EDIT: testFAT("makefile.xxx"); ist leider verkehrt gewesen, sorry, richtig: "makefilexxx"

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:04:23 25.05.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:03:20 25.05.2010   Titel:              Zitieren

Rev. 469:

Korrekturen und Umbenennungen (z.B. von DISK nach PARTITION)

usb2_msd.c, zeile 660:
C/C++ Code:
testFAT("clean   bat"); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
C/C++ Code:
testFAT("clean bat"); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!
C/C++ Code:
testFAT("clean   bat"); // TEST FAT filesystem filename: "prettyOSbat" without dot and with spaces in name!!!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:32:01 25.05.2010   Titel:              Zitieren

Revision 470:

- cdi_list: Bugfixes
- list_GetElement gibt nun element_t* statt void* zurück.
- video.c: Titelzeilen-Bug gefixt
- fat.c: Code optimiert und (verlustfrei) gekürzt.
- Sound wieder aktiviert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:35:49 26.05.2010   Titel:              Zitieren

Rev. 471:

FAT32 Filestruktur wurde angepasst mit Cluster > 2^16

Test bei MrX: mit vollem Stick bezüglich FAT32 OK. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:42:55 27.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:30:39 27.05.2010   Titel:              Zitieren

Rev. 472:

Zwischenschritt: Umbauten in ehci und usb_msd, damit auch bereits eingesteckte/angeschlossene usb msd getestet werden. Als Suchfile wird makefile.xxx verwendet (ohne xxx taucht ein seltsames 'B' auf, das nicht aus dem Entry auf dem msd, sondern offensichtlich aus dem code stammt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:13:50 28.05.2010   Titel:              Zitieren

Rev. 473:

- user heap verlegt
- uint16 gegen uint32 ausgetauscht in fat.h/c (wegen Zahlen > 2^16)
- volume formatiert mit NTFS wird gemeldet

Suchfile: makefile.xxx (im FAT-Filetest)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:16:23 28.05.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:25:30 28.05.2010   Titel:              Zitieren

Revision 474:

Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
- Userlib:
    - Neue Funktionen: vprintf, snprintf, vsnprintf, strncat
    - Änderungen: strncpy aus util.c übernommen
    - Bug in gets gefixt (Neue Zeile wurde eingefügt, wenn \b an Pos 0|0 (Relativ vom Start) gedrückt wurde)
    - Kleinigkeiten (Typen, etc.)
- Kernel:
    - cprintf basiert nun auf vprintf
    - Bug mit %v in printfs behoben (nun in allen kernel-printfs unterstützt)
    - ehci, usb, etc.: Umformatierungen, etc.
    - Kommentare gefixt
    - Sound reaktiviert
Code:
1
2
3
4
5
6
7
8
9
10
11
- Userlib:
- Neue Funktionen: vprintf, snprintf, vsnprintf, strncat
- Änderungen: strncpy aus util.c übernommen
- Bug in gets gefixt (Neue Zeile wurde eingefügt, wenn \b an Pos 0|0 (Relativ vom Start) gedrückt wurde)
- Kleinigkeiten (Typen, etc.)
- Kernel:
- cprintf basiert nun auf vprintf
- Bug mit %v in printfs behoben (nun in allen kernel-printfs unterstützt)
- ehci, usb, etc.: Umformatierungen, etc.
- Kommentare gefixt
- Sound reaktiviert
Code:
1
2
3
4
5
6
7
8
9
10
11
- Userlib:
    - Neue Funktionen: vprintf, snprintf, vsnprintf, strncat
    - Änderungen: strncpy aus util.c übernommen
    - Bug in gets gefixt (Neue Zeile wurde eingefügt, wenn \b an Pos 0|0 (Relativ vom Start) gedrückt wurde)
    - Kleinigkeiten (Typen, etc.)
- Kernel:
    - cprintf basiert nun auf vprintf
    - Bug mit %v in printfs behoben (nun in allen kernel-printfs unterstützt)
    - ehci, usb, etc.: Umformatierungen, etc.
    - Kommentare gefixt
    - Sound reaktiviert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:11:06 29.05.2010   Titel:              Zitieren

Rev. 475:
fat, data packages bei ehci: Ausgaben korrigiert, verringert zur besseren Übersicht. Kleine Fehler bei Filename-Handling korrigiert.

Inzwischen existieren in os.h folgende Schalter:

C/C++ Code:
/// #define _DIAGNOSIS_     // Diagnosis-Output - activates prints to the screen about some details and memory use
/// #define _USB_DIAGNOSIS_ // only as transition state during implementation of USB 2.0 transfers
/// #define _FAT_DIAGNOSIS_ // only as transition state during implementation of FAT 16/32

#define
_SOUND_         // Sound-Messages  - deactivation makes sense during development, because of better boot-time
C/C++ Code:
/// #define _DIAGNOSIS_ // Diagnosis-Output - activates prints to the screen about some details and memory use
/// #define _USB_DIAGNOSIS_ // only as transition state during implementation of USB 2.0 transfers
/// #define _FAT_DIAGNOSIS_ // only as transition state during implementation of FAT 16/32

#define
_SOUND_ // Sound-Messages - deactivation makes sense during development, because of better boot-time
C/C++ Code:
/// #define _DIAGNOSIS_     // Diagnosis-Output - activates prints to the screen about some details and memory use
/// #define _USB_DIAGNOSIS_ // only as transition state during implementation of USB 2.0 transfers
/// #define _FAT_DIAGNOSIS_ // only as transition state during implementation of FAT 16/32

#define
_SOUND_         // Sound-Messages  - deactivation makes sense during development, because of better boot-time

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:14:19 29.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:09:02 29.05.2010   Titel:              Zitieren

Rev. 476:

ttt.elf (tic tac toe) wird von usb-stick geladen und ausgeführt! :)

Bei 3 aus 4 usb-sticks wurde ttt.elf sauber geladen/ausgeführt, beim 4GB stick (billiges "unsauberes" Device) knallen momentan vorne nur so die scsi-transfer-errors, ttt wird aber nach mehreren versuchen dennoch irgendwie geladen, allerdigs defekt ausgeführt, man sieht nur 0 und X beim setzen. Das liegt also an den usb-transfers.

Meilenstein: Ausführen eines Programms von usb-stick! :live: :)

MrX hat ebenfalls bestätigt, einzige Kritik: "Die Kreuzchen sind Gelb" :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:01:37 29.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:51:34 30.05.2010   Titel:              Zitieren

Rev. 477:

%i wurde weitgehend gegen %u ausgetauscht beim Ausdruck.

utoa in util.c eingefügt und in ...printf bei %u verwendet.

Dies führt zum Beispiel zu verbesserten Ergebnissen bezüglich der Darstellung bei der Analyse der Partitionstabelle im MBR.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:53:55 30.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:08:34 30.05.2010   Titel:              Zitieren

Rev. 478:

- testFAT(...) ausgelagert aus fat.c (soll möglichst allgemein bleiben)
- scsi-abfolge test unit ready - test unit ready - request sense - (test unit ready - request sense)
- utoa (von MrX überarbeitet) :live:
- FAT testablauf etwas optimiert
- die beiden QH (out/in) bei bulk-Transfer wieder getrennt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:10:53 30.05.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:27:52 30.05.2010   Titel:              Zitieren

Rev. 479: Zwischenschritt

Bei Ausfall eines In-Transfers wird dieser einfach wiederholt.

Bitte pqeq.elf und ttt.elf auf das usb msd (usb-Stick, usb-HDD) kopieren und testen.

Zuerst wird pqeq.elf ausgeführt, anschließend springt das OS zurück zur Konsole Alt+M. Es geht aber weiter z.B. bei Alt+1, also dort, wo der letzte Aufruf statt fand. Dort kann man anschließend ttt.elf ausführen.

usb2_msd.c, zeile 645 ff. (zum Experimentieren):
C/C++ Code:
testFAT("pqeq    elf");
testFAT("ttt     elf");
C/C++ Code:
testFAT("pqeq elf");
testFAT("ttt elf");
C/C++ Code:
testFAT("pqeq    elf");
testFAT("ttt     elf");


Bei meinem störrischen 4GB stick klappt das Laden, aber die Programme sind irgendwie nicht ok (kA was da los ist), ansonsten geht alles.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:33:54 31.05.2010   Titel:              Zitieren

Rev. 480:

fat.c: fatRead und fatReadQueued wurden von FAT16 auf FAT32 erweitert.

Nun sollten die Ladevorgänge auch bei FAT32 funktionieren. Eigentlich ist es verblüffend, dass das in einzelnen Fällen bisher schon gelang. ;)

TODO: (fileFind)
Fehler: root dir wird nur im ersten cluster durchsucht! Bei z.B. 8 sectors per cluster sind das nur die ersten 8 * 512/32 = 128 Einträge! Da sieht man deutlich wie wichtig Tests auch mit großen Mengen sind (Durchführung: 512 MB stick wurde auf FAT32 formatiert, Fonts von Windows aufgespielt, dann die zu suchenden Files, damit diese möglichst weit hinten sind).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:40:13 31.05.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:46:53 31.05.2010   Titel:              Zitieren

Rev. 481:

Zwischenschritt: fileFind und CacheFileEntry umgebaut auf FAT16 u. 32
funktioniert mit einem fileentry im ersten Cluster (cluster 2), also nicht über entry Nr. 128 (bei 8 sectors per cluster).

Wie findet man die weiteren Cluster des rootdir?

http://users.iafrica.com/c/cq/cquirke/fat.htm
Zitat:

The root directory is fixed in length and always located at the start of the volume (after the FAT) in FAT12 and FAT16 volumes, but FAT32 treats the root directory as just another cluster chain in the data area. However, even in FAT32 volumes, the root directory will typically follow imediately after the two FATs.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:02:30 01.06.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:54:54 02.06.2010   Titel:              Zitieren

Revision 482:

- Task-Verkettung im Scheduler (mit ring_t) statt in Task-Struktur. (Nächster Schritt zum neuen Scheduler). scheduler_getNextTask tut nun auch, was sie verspricht.
- Ring-Funktionen neugeschrieben.
- Doppelter Code in task.c eliminiert. Threads und Tasks haben gemeinsame Basis. -> Besser wartbar, weniger Fehleranfällig, weniger Code
- userlib/console.c/video.c/util.c: utoa-Vereinheitlichungen
- Sound aktiviert
- Diverse Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:30:43 03.06.2010   Titel:              Zitieren

Rev. 483:

Zwischenschritt beim Aufbau des FAT-Moduls (FAT12,16,32).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:58:22 03.06.2010   Titel:              Zitieren

Rev. 484:

Zwischenschritt für Experimente (man sieht hier auch schön, wenn der Code aus dem Datenbereich lesend in die FAT verzweigt. Dieses "Springen" bezüglich der Sektor-Nummer hatten wir bisher nicht verstanden ;) ):
Das richtige Entry wird bei FAT32 und Einträgen, die nicht im ersten Cluster der root dir sind, nun also auch in späteren Clustern (Finden via File Allocation Table) gefunden. Leider wird das Programm noch nicht geladen.

Als Suche ist nach wie vor folgendes eingestellt:
usb2_msd.c, zeile 645:
C/C++ Code:
testFAT("pqeq    elf");
testFAT("ttt     elf");
C/C++ Code:
testFAT("pqeq elf");
testFAT("ttt elf");
C/C++ Code:
testFAT("pqeq    elf");
testFAT("ttt     elf");

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:52:07 04.06.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:26:56 04.06.2010   Titel:              Zitieren

Rev. 485:

Files lesen von FAT16 und FAT32 funktioniert. :)

Suchstrings noch wie oben.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:28:31 04.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:52:16 04.06.2010   Titel:              Zitieren

Rev. 486:

- Erkennung MBR verbessert: nur noch 55 AA bei 510/511 und 00 00 bei 444/445 (bei Cuervo klappts jetzt auch)
- showDirectoryEntry(DIRENTRY dir) korrigiert
- performAsyncScheduler: sleepMilliSeconds(150 + velocity * 150); (vorher: 200 + velocity * 200)
- waitForKeyStroke in fat.c eliminiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:06:37 05.06.2010   Titel:              Zitieren

Rev. 487:

- USB2-Kontrollausgaben vereinfacht
- Partitionstabelle mit Größe 0x80808080 unterdrückt
- fat.h/c überarbeitet, etwas komprimiert

Das beschleunigt die Abläufe und Ladezeiten signifikant.

Aktuelle Kernelgröße: 99.984 Bytes

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:14:18 05.06.2010, insgesamt 2-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 08:35:12 05.06.2010   Titel:              Zitieren

Rev. 488:

* Makefile- und Toolanpassungen, nun müssen Mac OS X Benutzer nicht die Tools selbst erstellen. Ausserdem wurde die Übersichtlichkeit verbessert.

Ich bitte um Tests von Linux- und Windowsusern.


TiA
Cuervo
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:14:52 05.06.2010   Titel:              Zitieren

:arrow: Test unter Win XP: full ACK :live:

Zitat:
nun müssen Mac OS X Benutzer nicht die Tools selbst erstellen

Vielen Dank!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:16:09 05.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:40:32 05.06.2010   Titel:              Zitieren

Rev. 489:

devicemanager.h/c (neu)

Zwischenschritt Implementierung des Device Managers

Hier ein Ausdruck bei VBox mit zwei eingestellten Floppy Disk Drives (FloppyImage und Laufwerk A: ):

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
PrettyOS [Version 0.0.0.489]                                                    
--------------------------------------------------------------------------------
Memory size: 192 MiB / 201 MB  (201326592 Bytes)                                
                                                                               
Mass Storage Device Manager installed.                                          
1.44 MB FDD device 0 found                                                      
                                                                               
1.44 MB FDD device 1 found                                                      
                                                                               
#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:7111h vend:8086h IRQ:0                                    
#3  0:2.0        dev:BEEFh vend:80EEh IRQ:11                                    
#4  0:3.0        dev:2000h vend:1022h IRQ:10                                    
#5  0:4.0        dev:CAFEh vend:80EEh IRQ:9                                    
#6  0:5.0        dev:2415h vend:8086h IRQ:5                                    
#7  0:6.0        dev:003Fh vend:106Bh IRQ:11  USB OHCI F0804000h MMIO sz:4096  
#8  0:7.0        dev:7113h vend:8086h IRQ:9                                    
#9  0:11.0       dev:265Ch vend:8086h IRQ:10  USB EHCI F0805000h MMIO sz:4096  
                                                                               
                                                                               
List of attached Mass Storage Devices:                                          
FDD:      Drive: 1: partition: 0 serial: floppy1 (no usb msd)                  
FDD:      Drive: 2: partition: 0 serial: floppy2 (no usb msd)                  
RAM Disk: Drive: 3: partition: 0 serial: ramdisk (no usb msd)                  
--------------------------------------------------------------------------------
                                                                               
                                                                               
<RAM Disk at C0007000h DIR> dev                                                
35      info                                                                    
10961   shell                                            
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
PrettyOS [Version 0.0.0.489]
--------------------------------------------------------------------------------
Memory size: 192 MiB / 201 MB (201326592 Bytes)

Mass Storage Device Manager installed.
1.44 MB FDD device 0 found

1.44 MB FDD device 1 found

#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:7111h vend:8086h IRQ:0
#3 0:2.0 dev:BEEFh vend:80EEh IRQ:11
#4 0:3.0 dev:2000h vend:1022h IRQ:10
#5 0:4.0 dev:CAFEh vend:80EEh IRQ:9
#6 0:5.0 dev:2415h vend:8086h IRQ:5
#7 0:6.0 dev:003Fh vend:106Bh IRQ:11 USB OHCI F0804000h MMIO sz:4096
#8 0:7.0 dev:7113h vend:8086h IRQ:9
#9 0:11.0 dev:265Ch vend:8086h IRQ:10 USB EHCI F0805000h MMIO sz:4096


List of attached Mass Storage Devices:
FDD: Drive: 1: partition: 0 serial: floppy1 (no usb msd)
FDD: Drive: 2: partition: 0 serial: floppy2 (no usb msd)
RAM Disk: Drive: 3: partition: 0 serial: ramdisk (no usb msd)
--------------------------------------------------------------------------------


<RAM Disk at C0007000h DIR> dev
35 info
10961 shell
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
PrettyOS [Version 0.0.0.489]                                                    
--------------------------------------------------------------------------------
Memory size: 192 MiB / 201 MB  (201326592 Bytes)                                
                                                                               
Mass Storage Device Manager installed.                                          
1.44 MB FDD device 0 found                                                      
                                                                               
1.44 MB FDD device 1 found                                                      
                                                                               
#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:7111h vend:8086h IRQ:0                                    
#3  0:2.0        dev:BEEFh vend:80EEh IRQ:11                                    
#4  0:3.0        dev:2000h vend:1022h IRQ:10                                    
#5  0:4.0        dev:CAFEh vend:80EEh IRQ:9                                    
#6  0:5.0        dev:2415h vend:8086h IRQ:5                                    
#7  0:6.0        dev:003Fh vend:106Bh IRQ:11  USB OHCI F0804000h MMIO sz:4096  
#8  0:7.0        dev:7113h vend:8086h IRQ:9                                    
#9  0:11.0       dev:265Ch vend:8086h IRQ:10  USB EHCI F0805000h MMIO sz:4096  
                                                                               
                                                                               
List of attached Mass Storage Devices:                                          
FDD:      Drive: 1: partition: 0 serial: floppy1 (no usb msd)                  
FDD:      Drive: 2: partition: 0 serial: floppy2 (no usb msd)                  
RAM Disk: Drive: 3: partition: 0 serial: ramdisk (no usb msd)                  
--------------------------------------------------------------------------------
                                                                               
                                                                               
<RAM Disk at C0007000h DIR> dev                                                
35      info                                                                    
10961   shell                                            


Nächster Schritt: Einbindung der USB MSD

Anmerkung: Drive 0 ist reserviert für das aktive Mass Storage Device mit PrettyOS.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:44:18 05.06.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:09:38 06.06.2010   Titel:              Zitieren

Rev. 490:

Zwischenschritt device manager:
usb msd devices werden versuchsweise eingebunden bzw. gelöscht

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:34:10 06.06.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 09:11:22 06.06.2010   Titel:              Zitieren

Sieht sehr schön aus!

Nur zwei Anmerkungen:
Das "no usb msd" kann man ruhig weglassen. Namen wie "floppy1" sagen bereits alles darüber aus. Die Spalte für den Typ ganz vorne ist ja zudem auch eindeutig. Lieber sagen, was es ist, anstatt was es nicht ist :)

Und es wäre gut, wenn die Tabelle wie eine Tabelle wirkt, d.h. eine Zeile mit Überschrift, dann, mit Tabulator eingerückt, die Werte. Das erspart einem bei vielen Daten pro Zeile (und es könnten ja evtl. mehr werden) mglw einen Zeilenumbruch.


Zuletzt bearbeitet von Mr X am 09:12:00 06.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 09:57:52 06.06.2010   Titel:              Zitieren

Zwischenstand (ohne Code):

Ja, gute Idee. Nachfolgende Darstellung ok?

VBox:
Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
Attached Mass Storage Devices:                                                  
                                                                               
Type    Drive   Part.   Serial          Port                                    
----------------------------------------------------------------------          
FDD     1       0       floppy1                                                
FDD     2       0       floppy2                                                
RAMdisk 3       0       ramdisk                                                
USB MSD 4       0       00000000729A    1                                      
----------------------------------------------------------------------          
Code:
1
2
3
4
5
6
7
8
9
Attached Mass Storage Devices:

Type Drive Part. Serial Port
----------------------------------------------------------------------
FDD 1 0 floppy1
FDD 2 0 floppy2
RAMdisk 3 0 ramdisk
USB MSD 4 0 00000000729A 1
----------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
Attached Mass Storage Devices:                                                  
                                                                               
Type    Drive   Part.   Serial          Port                                    
----------------------------------------------------------------------          
FDD     1       0       floppy1                                                
FDD     2       0       floppy2                                                
RAMdisk 3       0       ramdisk                                                
USB MSD 4       0       00000000729A    1                                      
----------------------------------------------------------------------          


Real PC:
Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
Attached Mass Storage Devices:                                                  
                                                                               
Type    Drive   Part.   Serial          Port                                    
----------------------------------------------------------------------          
FDD     1       0       floppy1                                                
RAMdisk 2       0       ramdisk                                                
USB MSD 3       0       8B6A0861        4                                      
USB MSD 4       0       N014IM75        3                                      
USB MSD 5       0       0D09297675C0    2                                      
----------------------------------------------------------------------          
Code:
1
2
3
4
5
6
7
8
9
10
Attached Mass Storage Devices:

Type Drive Part. Serial Port
----------------------------------------------------------------------
FDD 1 0 floppy1
RAMdisk 2 0 ramdisk
USB MSD 3 0 8B6A0861 4
USB MSD 4 0 N014IM75 3
USB MSD 5 0 0D09297675C0 2
----------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
10
Attached Mass Storage Devices:                                                  
                                                                               
Type    Drive   Part.   Serial          Port                                    
----------------------------------------------------------------------          
FDD     1       0       floppy1                                                
RAMdisk 2       0       ramdisk                                                
USB MSD 3       0       8B6A0861        4                                      
USB MSD 4       0       N014IM75        3                                      
USB MSD 5       0       0D09297675C0    2                                      
----------------------------------------------------------------------          


Ein-/Ausstecken führt aber noch zu Fehlern, nicht ganz einfach. Auf der USB-Transfer-Seite kommt es hierbei auch noch zu Total-Blockaden. Die Floppy verschwindet nach einigen Wechseln ebenfalls. :D

Über die Verwaltung der Drive-# sollten wir noch etwas diskutieren.
Zur Zeit vergebe ich diese Drive-# (zu Testzwecken) jeweils fortlaufend.
Die durch "deleteFromDeviceManager" entstandenen Lücken (msd == NULL) recycle ich bisher nicht.

Sobald das Device Managementsystem stabil steht, werden wir es an den Load-Prozess seitens der Shell bzw. andere User-Programme anbinden.

Die Einbindung von CDI sollte ebenfalls gelingen.

Infos wie "ehci_handler: Interrupt on Async Advance" wurden nun hinter _USB_DIAGNOSIS_ gesetzt, das stört den normalen Ablauf.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:27:14 06.06.2010, insgesamt 8-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:39:08 06.06.2010   Titel:              Zitieren

Ja, viel schöner :)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:44:05 06.06.2010   Titel:              Zitieren

Revision 491:

- Zahlreiche Style-Anpassungen (TAB)
- Vereinfachungen/Änderungen am devicemanager
- Projektfile geupdated
- Memory-Ausgabe optimiert (Shiften)
- ...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:19:44 06.06.2010   Titel:              Zitieren

Rev. 492:

devicemanager.c: Tabellarische Darstellung verbessert, zur Kontrolle "deleted" eingefügt bei Nichtnutzung einer Volume-Nr.

Das Serial bezieht sich momentan noch auf das Device, nicht auf die Partition (=Volume)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:03:16 06.06.2010   Titel:              Zitieren

Revision 493:

- devicemanager weitergebaut
- PARTITION heißt jetzt partition_t
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:34:14 06.06.2010   Titel:              Zitieren

Kommentar zu Rev. 493:
kernel.bin: 100.272 Bytes Wir haben die 100000 Byte Marke geknackt :live:

Test mit real PC:
Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
Attached Disks:                                                                
                                                                               
Type    Number  Serial  Part.   Serial                                          
----------------------------------------------------------------------          
FDD     0       0       0       floppy1                                        
RAMdisk 1       0       0       ramdisk                                        
USB MSD 2       0       0       8B6A0861                                        
USB MSD 3       0       0       110                                            
USB MSD 4       0       0       00000000729A                                    
USB MSD 5       0       0       0D09297675C0                                    
----------------------------------------------------------------------  
Code:
1
2
3
4
5
6
7
8
9
10
11
Attached Disks:

Type Number Serial Part. Serial
----------------------------------------------------------------------
FDD 0 0 0 floppy1
RAMdisk 1 0 0 ramdisk
USB MSD 2 0 0 8B6A0861
USB MSD 3 0 0 110
USB MSD 4 0 0 00000000729A
USB MSD 5 0 0 0D09297675C0
----------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
10
11
Attached Disks:                                                                
                                                                               
Type    Number  Serial  Part.   Serial                                          
----------------------------------------------------------------------          
FDD     0       0       0       floppy1                                        
RAMdisk 1       0       0       ramdisk                                        
USB MSD 2       0       0       8B6A0861                                        
USB MSD 3       0       0       110                                            
USB MSD 4       0       0       00000000729A                                    
USB MSD 5       0       0       0D09297675C0                                    
----------------------------------------------------------------------  


TODO:

Die Serials stehen momentan noch stellvertretend. Bei usb msd gehören die oben gezeigten Serials zum "Device", also zum usb-Stick. Zur Ermittlung des Partitions-Serial muss noch auf die FAT description zugegriffen werden. In der Regel haben Sticks aber nur eine Partition.

Bei der Floppy müssen die Serials sowohl für Disk (=Diskette) als auch für die Partition (identisch) von der FAT12-Partition gezogen werden (Volume ID).

Bei der RAMDisk verwenden wir momentan ein eigenes Filesystem. Alles ist feststehend, es gibt keine bewegliche "Disk" (wie bei Diskette oder usb-stick) und momentan(!) nur eine "Partition", die das eigene FS umfasst. Prinzipiell könnte man die RAMDisk auf FAT16 (max. 2GB) umstellen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:42:58 06.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:06:27 06.06.2010   Titel:              Zitieren

Rev. 494:

Kleine Korrekturen devicemanager.h/c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:41:36 07.06.2010   Titel:              Zitieren

Rev. 495:

ports ebenfalls implementiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:55:46 07.06.2010   Titel:              Zitieren

Revision 496:

- ports nun "korrekt" aufgezählt
- Bugfix: Disk 0 wird freigehalten für SystemPartition
- Pfad-Parser
- atoi auch im Kernel verfügbar
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:12:42 07.06.2010   Titel:              Zitieren

Kommentar zu Rev. 496:

Zunächst mal ein herzliches Dankeschön an MrX für das hervorragende Teamwork bei der Umsetzung des Devicemanagers und für den Path-Parser. :live:

Test auf VBox:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
PrettyOS [Version 0.0.0.496]                               Console 2: EHCI Ports
--------------------------------------------------------------------------------
---------------------------------------------------------------------          
Number of interfaces: 1                                                        
---------------------------------------------------------------------          
                                                                               
Interface 0 has 2 endpoints and belongs to class:                              
Mass Storage, SCSI transparent command set, Bulk-Only Transport protocol.      
---------------------------------------------------------------------          
endpoint 1: OUT,  bulk data, mps: 512 byte                                      
---------------------------------------------------------------------          
endpoint 2: IN ,  bulk data, mps: 512 byte                                      
                                                                               
languages: English                                                              
Generic Mass Storage    8B6A0861         serial: 8B6A0861                      
                                                                               
Available Ports:                                                                
                                                                               
Type            number  Media                                                  
----------------------------------------------------------------------          
FDD             A       No floppy disk inserted                                
FDD             B       No floppy disk inserted                                
USB Port        C       MSD attached                                            
USB Port        D       No MSD attached                                        
USB Port        E       No MSD attached                                        
USB Port        F       No MSD attached                                        
USB Port        G       No MSD attached                                        
USB Port        H       No MSD attached                                        
USB Port        I       No MSD attached                                        
USB Port        J       No MSD attached                                        
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached Disks:                                                                
                                                                               
Type    Number  Serial  Part.   Serial                                          
----------------------------------------------------------------------          
Floppy  1       0       0       floppy1                                        
Floppy  2       0       0       floppy2                                        
RAMdisk 3       0       0       ramdisk                                        
USB MSD 4       0       0       8B6A0861                                        
----------------------------------------------------------------------          
                                                                               
             - - - - - - - - - - - press key - - - - - - - - - - -              
--------------------------------------------------------------------------------
Port: 1, device attached                                                        
                                                                               
                                                                               
--------------------------------------------------------------------------------
Monday, June 07, 2010, 12:47:27   16 s runtime. CPU: 3731 MHz                  \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
PrettyOS [Version 0.0.0.496] Console 2: EHCI Ports
--------------------------------------------------------------------------------
---------------------------------------------------------------------
Number of interfaces: 1
---------------------------------------------------------------------

Interface 0 has 2 endpoints and belongs to class:
Mass Storage, SCSI transparent command set, Bulk-Only Transport protocol.
---------------------------------------------------------------------
endpoint 1: OUT, bulk data, mps: 512 byte
---------------------------------------------------------------------
endpoint 2: IN , bulk data, mps: 512 byte

languages: English
Generic Mass Storage 8B6A0861 serial: 8B6A0861

Available Ports:

Type number Media
----------------------------------------------------------------------
FDD A No floppy disk inserted
FDD B No floppy disk inserted
USB Port C MSD attached
USB Port D No MSD attached
USB Port E No MSD attached
USB Port F No MSD attached
USB Port G No MSD attached
USB Port H No MSD attached
USB Port I No MSD attached
USB Port J No MSD attached
----------------------------------------------------------------------


Attached Disks:

Type Number Serial Part. Serial
----------------------------------------------------------------------
Floppy 1 0 0 floppy1
Floppy 2 0 0 floppy2
RAMdisk 3 0 0 ramdisk
USB MSD 4 0 0 8B6A0861
----------------------------------------------------------------------

- - - - - - - - - - - press key - - - - - - - - - - -
--------------------------------------------------------------------------------
Port: 1, device attached


--------------------------------------------------------------------------------
Monday, June 07, 2010, 12:47:27 16 s runtime. CPU: 3731 MHz \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
PrettyOS [Version 0.0.0.496]                               Console 2: EHCI Ports
--------------------------------------------------------------------------------
---------------------------------------------------------------------          
Number of interfaces: 1                                                        
---------------------------------------------------------------------          
                                                                               
Interface 0 has 2 endpoints and belongs to class:                              
Mass Storage, SCSI transparent command set, Bulk-Only Transport protocol.      
---------------------------------------------------------------------          
endpoint 1: OUT,  bulk data, mps: 512 byte                                      
---------------------------------------------------------------------          
endpoint 2: IN ,  bulk data, mps: 512 byte                                      
                                                                               
languages: English                                                              
Generic Mass Storage    8B6A0861         serial: 8B6A0861                      
                                                                               
Available Ports:                                                                
                                                                               
Type            number  Media                                                  
----------------------------------------------------------------------          
FDD             A       No floppy disk inserted                                
FDD             B       No floppy disk inserted                                
USB Port        C       MSD attached                                            
USB Port        D       No MSD attached                                        
USB Port        E       No MSD attached                                        
USB Port        F       No MSD attached                                        
USB Port        G       No MSD attached                                        
USB Port        H       No MSD attached                                        
USB Port        I       No MSD attached                                        
USB Port        J       No MSD attached                                        
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached Disks:                                                                
                                                                               
Type    Number  Serial  Part.   Serial                                          
----------------------------------------------------------------------          
Floppy  1       0       0       floppy1                                        
Floppy  2       0       0       floppy2                                        
RAMdisk 3       0       0       ramdisk                                        
USB MSD 4       0       0       8B6A0861                                        
----------------------------------------------------------------------          
                                                                               
             - - - - - - - - - - - press key - - - - - - - - - - -              
--------------------------------------------------------------------------------
Port: 1, device attached                                                        
                                                                               
                                                                               
--------------------------------------------------------------------------------
Monday, June 07, 2010, 12:47:27   16 s runtime. CPU: 3731 MHz                  \


Test auf real PC:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Available Ports:                                                                
                                                                               
Type            number  Media                                                  
----------------------------------------------------------------------          
FDD             A       No floppy disk inserted                                
USB Port        B       MSD attached                                            
USB Port        C       No MSD attached                                        
USB Port        D       No MSD attached                                        
USB Port        E       MSD attached                                            
USB Port        F       No MSD attached                                        
USB Port        G       No MSD attached                                        
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached Disks:                                                                
                                                                               
Type    Number  Serial  Part.   Serial                                          
----------------------------------------------------------------------          
Floppy  1       0       0       floppy1                                        
RAMdisk 2       0       0       ramdisk                                        
USB MSD 3       0       0       0D09297675C0                                    
USB MSD 4       0       0       00000000729A                                    
----------------------------------------------------------------------          
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Available Ports:

Type number Media
----------------------------------------------------------------------
FDD A No floppy disk inserted
USB Port B MSD attached
USB Port C No MSD attached
USB Port D No MSD attached
USB Port E MSD attached
USB Port F No MSD attached
USB Port G No MSD attached
----------------------------------------------------------------------


Attached Disks:

Type Number Serial Part. Serial
----------------------------------------------------------------------
Floppy 1 0 0 floppy1
RAMdisk 2 0 0 ramdisk
USB MSD 3 0 0 0D09297675C0
USB MSD 4 0 0 00000000729A
----------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Available Ports:                                                                
                                                                               
Type            number  Media                                                  
----------------------------------------------------------------------          
FDD             A       No floppy disk inserted                                
USB Port        B       MSD attached                                            
USB Port        C       No MSD attached                                        
USB Port        D       No MSD attached                                        
USB Port        E       MSD attached                                            
USB Port        F       No MSD attached                                        
USB Port        G       No MSD attached                                        
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached Disks:                                                                
                                                                               
Type    Number  Serial  Part.   Serial                                          
----------------------------------------------------------------------          
Floppy  1       0       0       floppy1                                        
RAMdisk 2       0       0       ramdisk                                        
USB MSD 3       0       0       0D09297675C0                                    
USB MSD 4       0       0       00000000729A                                    
----------------------------------------------------------------------          

:arrow: Next Steps:
- "ports[...]->insertedDisk" Status bei dem FDD prüfen! (z.Z. in floppy_install mangels Informationen über eingelegte / nicht eingelegte Diskette auf NULL gesetzt)
- "MSD attached" bei usb-Ports sollte ersetzt werden durch eine sprechende usb-MSD ID (z.B. Vendor/Produkt/Revision)
- Serial bei der Disk-Liste gegen echte Partitions-Serial (aus FAT descriptor) ersetzen, die gezeigten usb-Serials passen zum Device, also zum Stick, nicht zur Partition, obwohl dies beim Stick das Gleiche bedeutet (nur eine Partition).

Inzwischen ist es bei Tobiking gelungen, von einem mit FAT12 (durch Aufspielen von FloppyImage) "formatierten" usb-Stick pqeq.elf und ttt.elf zu laden. Der Lesevorgang im jeweiligen FAT12-Teil des neuen FAT12/16/32-Moduls funktioniert also auch bestens. Somit sollten wir das provisorische fat12.h/c bald durch ein in sich geschlossenes Modul fat.h/c ablösen können. :)

:arrow: kernel.bin 104.492 Bytes
Hier kommen wir bald an die kritische Größe, bei der es mit Bootloader2 erneut Probleme geben sollte. Der Aufschlag erfolgt in ... Tagen. :rolleyes:
Diesbezüglich müssen wir wohl eine SOKO "Own Bootloader vs GRUB" gründen. :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:48:25 07.06.2010, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:36:33 07.06.2010   Titel:              Zitieren

Rev. 497:

zwischenschritt: check der Floppy disk im device manager und bei floppy_install

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:21:06 07.06.2010   Titel:              Zitieren

Revision 498:

- maximale Floppy-Laufwerkszahl auf 2 vereinheitlicht
- disk_t: Neuer Member name. Speichert den Trivialnamen der Disk/Partition. Bitte in Benutzung nehmen.
- ehci: pciDev_t* statt Index
- Kleinigkeiten


Zuletzt bearbeitet von Mr X am 20:22:03 07.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:30:41 08.06.2010   Titel:              Zitieren

Rev. 499:

Portliste und Diskliste weiter verfeinert und implementiert.
RAMDisk wird als "Disk" im "Port" RAM angesehen und erhält ebenfalls einen Buchstaben (Port) und eine Zahl (Partition == Volume).

Test auf real PC mit einem Floppy Disk Device und vier usb-Sticks:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Available Ports:                                                                
                                                                               
Type    Number  Name            Media (attached)                                
----------------------------------------------------------------------          
FDD     A       Floppy Dev 1    PRETTYOS                                        
RAM     B       RAM             RAMDisk                                        
usbPort C       EHCI-Port 1     0D09297675C0                                    
usbPort D       EHCI-Port 2     8B6A0861                                        
usbPort E       EHCI-Port 3     00000000729A                                    
usbPort F       EHCI-Port 4     110                                            
usbPort G       EHCI-Port 5     No MSD attached                                
usbPort H       EHCI-Port 6     No MSD attached                                
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached Disks:                                                                
                                                                               
Type    Number  Name            Part.   Serial                                  
----------------------------------------------------------------------          
Floppy  1       PRETTYOS        0       PRETTYOS                                
RAMdisk 2       RAMDisk         0       786434                                  
USB MSD 3       0D09297675C0    0       0D09297675C0                            
USB MSD 4       8B6A0861        0       8B6A0861                                
USB MSD 5       110             0       110                                    
USB MSD 6       00000000729A    0       00000000729A                            
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Available Ports:

Type Number Name Media (attached)
----------------------------------------------------------------------
FDD A Floppy Dev 1 PRETTYOS
RAM B RAM RAMDisk
usbPort C EHCI-Port 1 0D09297675C0
usbPort D EHCI-Port 2 8B6A0861
usbPort E EHCI-Port 3 00000000729A
usbPort F EHCI-Port 4 110
usbPort G EHCI-Port 5 No MSD attached
usbPort H EHCI-Port 6 No MSD attached
----------------------------------------------------------------------


Attached Disks:

Type Number Name Part. Serial
----------------------------------------------------------------------
Floppy 1 PRETTYOS 0 PRETTYOS
RAMdisk 2 RAMDisk 0 786434
USB MSD 3 0D09297675C0 0 0D09297675C0
USB MSD 4 8B6A0861 0 8B6A0861
USB MSD 5 110 0 110
USB MSD 6 00000000729A 0 00000000729A
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Available Ports:                                                                
                                                                               
Type    Number  Name            Media (attached)                                
----------------------------------------------------------------------          
FDD     A       Floppy Dev 1    PRETTYOS                                        
RAM     B       RAM             RAMDisk                                        
usbPort C       EHCI-Port 1     0D09297675C0                                    
usbPort D       EHCI-Port 2     8B6A0861                                        
usbPort E       EHCI-Port 3     00000000729A                                    
usbPort F       EHCI-Port 4     110                                            
usbPort G       EHCI-Port 5     No MSD attached                                
usbPort H       EHCI-Port 6     No MSD attached                                
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached Disks:                                                                
                                                                               
Type    Number  Name            Part.   Serial                                  
----------------------------------------------------------------------          
Floppy  1       PRETTYOS        0       PRETTYOS                                
RAMdisk 2       RAMDisk         0       786434                                  
USB MSD 3       0D09297675C0    0       0D09297675C0                            
USB MSD 4       8B6A0861        0       8B6A0861                                
USB MSD 5       110             0       110                                    
USB MSD 6       00000000729A    0       00000000729A                            


Die Portreihenfolge ist Floppys, RAMDisk, EHCI-Ports (1,2,...).
Die Diskreihenfolge entspricht der Reihenfolge der Installation (Floppys, RAMDisk, usb-sticks entsprechend dem Einsteckzeitpunkt). Frei werdende Disk-Nummern werden wiederverwendet.

Der "Serial" 786434 der RAMDisk ist die (dezimal dargestellte) Speicheradresse (0xC0002000) geteilt durch PAGESIZE (4096 bytes). ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:35:00 08.06.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:52:31 08.06.2010   Titel:              Zitieren

Revision 500:

- settaskflag gelöscht. War gefährlich für User (Anhalten des gesamten OS) und nutzlos im Kernel.
- EHCI/Floppy/RamDisk-Flags direkt initialisiert
- Codevereinfachungen in devicemanager.c, Todos zur Vereinheitlichung der Disk/Port-Handhabung
- Kleinigkeiten, u.a. kleine Schönheitskorrektur in Shell
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:37:52 08.06.2010   Titel:              Zitieren

Rev. 501:

Name und Serial bei usb MSD

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:55:58 08.06.2010   Titel:              Zitieren

Rev. 502:

Zwischenschritt auf dem Weg zum Laden eines Files mittels device manager:

loadFile (vorher: testFAT) und analyzeBootsector nach devicemanager.c verlegt und mit entsprechenden Parametern versorgt.

In testMSD (letzter Schritt zur Erfassung von usb msd daten, siehe: http://www.c-plusplus.de/forum/viewtopic-var-t-is-253016-and-start-is-81.html) werden z.Z. beide Funktionen testweise angewendet. Dies muss entkoppelt werden. Die Funktion testMSD mit analyzeBootsector sollte nur der Feststellung aller notwendigen Daten (Partitionen, FAT-Typ) für den device manager dienen.

Der Ladevorgang sollte dann mittels loadFile separat erfolgen.

TODO:
in testMSD: usbMSDVolume allgemein verwendet

zeile 32: partition_t usbMSDVolume;
zeile 633: usbRead(sector, usbMSDVolume.buffer);
zeile 637: int32_t retVal = analyzeBootSector((void*)DataQTDpage0, &usbMSDVolume);
zeile 651: loadFile("pqeq elf",&usbMSDVolume);
zeile 652: loadFile("ttt elf",&usbMSDVolume);

Dieses allgemeine usbMSDVolume sollte durch das speziell angesprochene Volume gekoppelt an eine "Disk" (usb-Stick), wiederum gekoppelt an einen "Port" (EHCI-Port), ersetzt werden.

void testMSD(uint8_t devAddr, uint8_t config)
Die devAddr ist die angezeigte EHCI-Portnumber.

testMSD(devAddr,config); wird in ehci.c, zeile 722, verwendet.

partition_t usbDevVolume[portNumber+1] in ehci.c und partition_t usbMSDVolume in usb2_msd.c sind somit zusammengehörig. Das muss noch "hingebogen" werden, dass die Daten von testMSD dort landen. Vielleicht muss man testMSD dies als Parameter mitgeben und usbMSDVolume (s.o.) entsprechend ersetzen.

Siehe ehci.c, zeile 694-710.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:20:40 09.06.2010, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:12:00 09.06.2010   Titel:              Zitieren

Rev. 503 (version wird falsch angezeigt):

testMSD umgebaut: void testMSD(uint8_t devAddr, partition_t* part)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:01:23 10.06.2010   Titel:              Zitieren

Revision 504:

- Bugfix in Pfadparser
- execute-Funktion
- Syscall zum Dateienladen
- Shell kann keine Floppy-Dateien mehr laden, nur noch (derzeit fehlerhaft) durch den devicemanager. Floppy-Support wird natürlich bald wieder eingebaut...


Hinweis: Erst testMSD durchlaufen lassen, dann USB-Zugriff versuchen. Zugriff via "X:/TTT ELF" (X ist Laufwerkszahl). Derzeit gibts ein Freeze, wenn man das versucht.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:20:45 10.06.2010   Titel:              Zitieren

Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
$> 3:\TTT     ELF <--                                                          
                                                                               
Page Fault (page not present) at 01420000h - EIP: 0004192Fh                    
err_code: 00000000h address(eip): 0004192Fh                                    
edi: 0141FF89h esi: 00059FFCh ebp: C020DF38h eax: 00059F01h ebx: 01420000h ecx:
FFFFFFF2h edx: 00000000h                                                        
cs: 00000008h ds: 00000010h es: 00000010h fs: 00000010h gs 00000010h ss 00000066
h                                                                              
int_no 14 eflags 00010017h useresp 0141FCC3h
Code:
1
2
3
4
5
6
7
8
9
$> 3:\TTT ELF <--

Page Fault (page not present) at 01420000h - EIP: 0004192Fh
err_code: 00000000h address(eip): 0004192Fh
edi: 0141FF89h esi: 00059FFCh ebp: C020DF38h eax: 00059F01h ebx: 01420000h ecx:
FFFFFFF2h edx: 00000000h
cs: 00000008h ds: 00000010h es: 00000010h fs: 00000010h gs 00000010h ss 00000066
h
int_no 14 eflags 00010017h useresp 0141FCC3h
Code:
1
2
3
4
5
6
7
8
9
$> 3:\TTT     ELF <--                                                          
                                                                               
Page Fault (page not present) at 01420000h - EIP: 0004192Fh                    
err_code: 00000000h address(eip): 0004192Fh                                    
edi: 0141FF89h esi: 00059FFCh ebp: C020DF38h eax: 00059F01h ebx: 01420000h ecx:
FFFFFFF2h edx: 00000000h                                                        
cs: 00000008h ds: 00000010h es: 00000010h fs: 00000010h gs 00000010h ss 00000066
h                                                                              
int_no 14 eflags 00010017h useresp 0141FCC3h


1420000h <---
C/C++ Code:
// User Heap management
#define
USER_HEAP_START   ((uint8_t*)0x1420000)  

// User Stack
#define
USER_STACK 0x1420000
C/C++ Code:
// User Heap management
#define
USER_HEAP_START ((uint8_t*)0x1420000)

// User Stack
#define
USER_STACK 0x1420000
C/C++ Code:
// User Heap management
#define
USER_HEAP_START   ((uint8_t*)0x1420000)  

// User Stack
#define
USER_STACK 0x1420000


Problem dürfte der user-stack (hat doch bisher geklappt?) oder user-heap sein.

siehe auch: http://www.c-plusplus.de/forum/viewtopic-var-t-is-265757-and-highlight-is-userstack.html

und task.c, zeile 88:
C/C++ Code:
paging_alloc(new_task->page_directory, (void*)(USER_STACK-10*PAGESIZE), 10*PAGESIZE, MEM_USER|MEM_WRITE);
C/C++ Code:
paging_alloc(new_task->page_directory, (void*)(USER_STACK-10*PAGESIZE), 10*PAGESIZE, MEM_USER|MEM_WRITE);
C/C++ Code:
paging_alloc(new_task->page_directory, (void*)(USER_STACK-10*PAGESIZE), 10*PAGESIZE, MEM_USER|MEM_WRITE);

zeile 293:
C/C++ Code:
paging_alloc(currentTask->page_directory, old_heap_top, increase, MEM_USER | MEM_WRITE)
C/C++ Code:
paging_alloc(currentTask->page_directory, old_heap_top, increase, MEM_USER | MEM_WRITE)
C/C++ Code:
paging_alloc(currentTask->page_directory, old_heap_top, increase, MEM_USER | MEM_WRITE)


Erste Reparaturversuche scheiterten bisher. :rolleyes:
Untersuchungen deuten auf den user-stack hin, da man den #PF Adresswert durch Veränderung von USER_STACK bzw. zeile 88, task.c, eindeutig beeinflussen kann.

Die Wirkung der Funktion paging_alloc kann man leicht kontrollieren:
Folgende Zeile ergänzen im Anfang von paging_alloc, paging.c, zeile 229:
C/C++ Code:
printf("\npaging-alloc, virt addr: %X size: %X", virt_addr, size ); // TEST
C/C++ Code:
printf("\npaging-alloc, virt addr: %X size: %X", virt_addr, size ); // TEST
C/C++ Code:
printf("\npaging-alloc, virt addr: %X size: %X", virt_addr, size ); // TEST


@all: bitte um Hilfe bei der Fehlersuche
@MrX: bitte Procedere im user-Programm untersuchen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:10:02 10.06.2010, insgesamt 8-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:16:33 10.06.2010   Titel:              Zitieren

Was genau soll ich bei der "User-Progamm-Prozedur" ansehen? Bzw., was ist für dich diese Prozedur? Das Programm selbst? Wie es geladen wird?
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:44:00 10.06.2010   Titel:              Zitieren

Der Fehler erfolgt auf der user-Seite, so wie es aussieht. Allerdings gibt es noch Ungereimtheiten:
1) Du hast davon berichtet, dass der richtge Sektor geladen würde mit anschließendem "freeze".
2) Schaltet man in os.h die "Diagnose-Schalter" zu, so taucht ein #PF > 0xF0000000 auf.
3) Der #PF bei USER_STACK ist der dritte Fall, der wohl am meisten eintritt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Lüttmoor
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.07.2009
Beiträge: 26
Beitrag Lüttmoor Mitglied 19:29:51 10.06.2010   Titel:              Zitieren

Hi,

ich denke der Fehler tritt im Kernel auf. Das sollte übrigens jeder an dem Wert in CS erkennen können. EIP gibt den Hinweis auf die Funktion, wo der Fehler auftritt, nämlich "execute".

Bei der weiteren Analyse sind mir mehrere Fehler aufgefallen:

Code:
void execute(const char* path)
{
    ...
    while(*path != '/' && *path != '|' && *path != '\'')
Code:
void execute(const char* path)
{
...
while(*path != '/' && *path != '|' && *path != '\'')
Code:
void execute(const char* path)
{
    ...
    while(*path != '/' && *path != '|' && *path != '\'')


Die while-Schleife läuft über das Ende des Strings hinaus, wenn path weder \ noch | noch ' enthält. Es fehlt also ein Test auf den Nullterminator. Außerdem sieht man hier sofort, dass Pfade nicht mit "3:\" anfangen dürfen, wie in Erhards Beispiel. Diese beiden Sachverhalte kombiniert mit der Tatsache, dass der Wert von path knapp unter 01420000h sind die Ursache für den Fehler.

Lässt man übrigens 3:/TTT ELF ausführen, dann scheint das (zumindest bei mir) nicht zu klappen, weil das Laufwerk 3 oder was auch immer das ist nicht existiert. Das gibt wieder einen Page Fault (bei mir) an Adresse 0xf000ff7f, und bei dieser Adresse liegt sofort der Verdacht nahe, dass ein NULL-Pointer dereferenziert wurde. Ich denke mal es liegt an der Funktion getPartition, in denen weder die Variablen PortID, PartitionID und DiskID vollständig überprüft werden, noch die Werte der Zeiger auf NULL getestet werden, vor allem da in devicemanager.h dokumentiert ist, dass diese NULL sein können.

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    if(PortID != -1)
    {
        return(ports[PortID]->insertedDisk->partition[PartitionID]);
    }
    else
    {
        if(DiskID == 0)
        {
            return(systemPartition);
        }
        else
        {
            return(disks[DiskID-1]->partition[PartitionID]);
        }
    }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(PortID != -1)
{
return(ports[PortID]->insertedDisk->partition[PartitionID]);
}
else
{
if(DiskID == 0)
{
return(systemPartition);
}
else
{
return(disks[DiskID-1]->partition[PartitionID]);
}
}
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    if(PortID != -1)
    {
        return(ports[PortID]->insertedDisk->partition[PartitionID]);
    }
    else
    {
        if(DiskID == 0)
        {
            return(systemPartition);
        }
        else
        {
            return(disks[DiskID-1]->partition[PartitionID]);
        }
    }


Zuletzt bearbeitet von Lüttmoor am 19:31:21 10.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:43:54 10.06.2010   Titel:              Zitieren

Zitat:
der Fehler tritt im Kernel auf. Das sollte übrigens jeder an dem Wert in CS erkennen können.
Ja stimmt, wird klar angezeigt. Der Wert des user-stacks hat mich irritiert. Danke für die Analyse, hilft uns weiter.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:48:27 10.06.2010   Titel:              Zitieren

Ja, diese Prüfung auf 0 fehlt, das stimmt. Und, was noch schlimmer ist, auch die bei den Strings... Danke für den Hinweis.

Aber auch bei eigentlich existierenden Laufwerken klappts aber nicht, auch nicht nach Behebung der Fehler.

EDIT: Derzeit muss man auch noch "3:/TTT ELF" als Laufwerk angeben. Sonst klappt es derzeit erst recht nicht.
EDIT2: #PF-Grund gefunden: '\'' ist nich \, sondern ', daher gingen alle Pfade mit \ nicht.


Zuletzt bearbeitet von Mr X am 20:58:45 10.06.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:34:51 10.06.2010   Titel:              Zitieren

Ehenkes und ich haben grade zusammen den Durchbruch erzielt. Danke Lüttmoor für die Hilfe dabei. Die von dir genannten Probleme sollten jetzt behoben sein. Das mit dem Pfadseparator hast Du ja auch angsprochen, Lüttmoor, aber ich habs in deinem Text garnicht realisiert/zu flüchtig überlesen.

Revision 505:

- Bugfix: Pfade mit \ gehen nun
- Bugfix: waitForKeyStroke sorgt nicht mehr für Freeze. STI eingefügt
- Bugfix: Nullpointer-Abfragen bei Strings und Partition in devicemanager.c ergänzt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:47:36 10.06.2010   Titel:              Zitieren

Dank an Lüttmoor für den Schubs in die richtige Richtung. Auf jeden Fall klappt es nun. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:47:08 11.06.2010   Titel:              Zitieren

Rev. 506:

Nicht-MSD (also nicht class 8) werden nicht in den msd device manager eingefügt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:36:23 11.06.2010   Titel:              Zitieren

Revision 507:

- Eingabe von normalen Dateinamen nun erlaubt, 8.3-Notation ("TTT ELF") nicht mehr nötig
- Shortcut für Disk/Port-Ausgabe: Strg+d
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:55:23 12.06.2010   Titel:              Zitieren

Revision 508:

- Floppytreiber objektorientierter gemacht, basiert auf floppy_t
- flpydsk_refreshVolumeNames statt flpydsk_get_volumeName
- diskType_t mit Funktionspointern für Sector-Read/-Write für Abstraktion
- Vereinfachungen im Code
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:04:28 12.06.2010   Titel:              Zitieren

Revision 509:
Revision 510:

Fehlerkorrekturen
1) pointer cast
2) partitionszeiger floppy

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:03:08 12.06.2010   Titel:              Zitieren

Revision 511:

- Laden von Floppy mit Devicemanager möglich
- floppy_load ausgebaut (file.c), syscall freigegeben
- Kleinigkeiten, Bugfixes


Der fat12-Treiber in fat.c ist schneller als der in fat12.c -> doppelt erfolgreich ;)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:02:57 12.06.2010   Titel:              Zitieren

Rev. 512:

Formale Kleinigkeiten:
- Abschließende '\0' hinter Floppy Dev 1 bzw. Floppy Dev 2 eingefügt
- Eine Zeile Abstand hinter "This is a volume formated with FAT12."

PrettyOS "denkt" mit:
- Gibt man ttt.elf ein, so will man vielleicht wie bisher (.elf sollte sein) vereinfacht auf die Floppy zugreifen. Wir bauen bei Vorhandensein eines FDD1 den Pfad "1:/" probeweise davor und rufen rekursiv erneut execute(newPath) auf. ;)

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$> ttt.elf <--                                                                  
file is being searched...                                                      
                                                                               
No valid path for partition found!                                              
                                                                               
Floppy found! PrettyOS now tries 1:/ttt.elf                                    
                                                                               
buffer:     C0002000h                                                          
type:       1                                                                  
SecPerClus: 1                                                                  
maxroot:    224                                                                
fatsize:    9                                                                  
fatcopy:    2                                                                  
firsts:     0                                                                  
fat:        1                                                                  
root:       19                                                                  
data:       33                                                                  
maxcls:     4294967263                                                          
mount:      1                                                                  
serial #:   50h 52h 45h 54h                                                    
             - - - - - - - - - - - press key - - - - - - - - - - -
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$> ttt.elf <--
file is being searched...

No valid path for partition found!

Floppy found! PrettyOS now tries 1:/ttt.elf

buffer: C0002000h
type: 1
SecPerClus: 1
maxroot: 224
fatsize: 9
fatcopy: 2
firsts: 0
fat: 1
root: 19
data: 33
maxcls: 4294967263
mount: 1
serial #: 50h 52h 45h 54h
- - - - - - - - - - - press key - - - - - - - - - - -
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$> ttt.elf <--                                                                  
file is being searched...                                                      
                                                                               
No valid path for partition found!                                              
                                                                               
Floppy found! PrettyOS now tries 1:/ttt.elf                                    
                                                                               
buffer:     C0002000h                                                          
type:       1                                                                  
SecPerClus: 1                                                                  
maxroot:    224                                                                
fatsize:    9                                                                  
fatcopy:    2                                                                  
firsts:     0                                                                  
fat:        1                                                                  
root:       19                                                                  
data:       33                                                                  
maxcls:     4294967263                                                          
mount:      1                                                                  
serial #:   50h 52h 45h 54h                                                    
             - - - - - - - - - - - press key - - - - - - - - - - -


C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void execute(const char* path)
{
    partition_t* part = getPartition(path);
    if(part == NULL)
    {
        textColor(0x0C);
        printf("\nNo valid path for partition found!\n");
        textColor(0x0F);
       
        if ((cmos_read(0x10)>>4) == 4 ) // first FDD implemented
        {
            if (path[0] == '1' && path[1]==':')
            {
                // do nothing
            }
            else
            {
                char newPath[40];
                strcpy(newPath,"1:/");
                strcat(newPath,path);
                textColor(0x0E);
                printf("\nFloppy found! PrettyOS now tries %s\n",newPath);
                textColor(0x0F);        
                execute(newPath);
            }
        }
        return;
    }
    while(*path != '/' && *path != '|' && *path != '\\')
    {
        path++;
        if(*path == 0)
        {
            return;
        }
    }
    path++;
    loadFile(path, part);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void execute(const char* path)
{
partition_t* part = getPartition(path);
if(part == NULL)
{
textColor(0x0C);
printf("\nNo valid path for partition found!\n");
textColor(0x0F);

if ((cmos_read(0x10)>>4) == 4 ) // first FDD implemented
{
if (path[0] == '1' && path[1]==':')
{
// do nothing
}
else
{
char newPath[40];
strcpy(newPath,"1:/");
strcat(newPath,path);
textColor(0x0E);
printf("\nFloppy found! PrettyOS now tries %s\n",newPath);
textColor(0x0F);
execute(newPath);
}
}
return;
}
while(*path != '/' && *path != '|' && *path != '\\')
{
path++;
if(*path == 0)
{
return;
}
}
path++;
loadFile(path, part);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void execute(const char* path)
{
    partition_t* part = getPartition(path);
    if(part == NULL)
    {
        textColor(0x0C);
        printf("\nNo valid path for partition found!\n");
        textColor(0x0F);
       
        if ((cmos_read(0x10)>>4) == 4 ) // first FDD implemented
        {
            if (path[0] == '1' && path[1]==':')
            {
                // do nothing
            }
            else
            {
                char newPath[40];
                strcpy(newPath,"1:/");
                strcat(newPath,path);
                textColor(0x0E);
                printf("\nFloppy found! PrettyOS now tries %s\n",newPath);
                textColor(0x0F);        
                execute(newPath);
            }
        }
        return;
    }
    while(*path != '/' && *path != '|' && *path != '\\')
    {
        path++;
        if(*path == 0)
        {
            return;
        }
    }
    path++;
    loadFile(path, part);
}


maxcls: 4294967263 <--- etwas hoch ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:06:05 12.06.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:10:40 12.06.2010   Titel:              Zitieren

Rev. 513:

Zwei nicht mehr benötigte Funktionen zum Laden von Floppy in file.h/c entfernt :)

So stellt sich das momentan in VBox mit zwei Floppy Disk Devices dar:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Available ports:                                                                
                                                                               
Type    Number  Name            Inserted disk                                  
----------------------------------------------------------------------          
FDD     A       Floppy Dev 1    PRETTYOS                                        
FDD     B       Floppy Dev 2                                                    
RAM     C       RAM             RAMDisk                                        
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached disks:                                                                
                                                                               
Type    Number  Name            Part.   Serial                                  
----------------------------------------------------------------------          
Floppy  1       PRETTYOS        0       PRETTYOS                                
RAMdisk 3       RAMDisk         0       786436                                  
----------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Available ports:

Type Number Name Inserted disk
----------------------------------------------------------------------
FDD A Floppy Dev 1 PRETTYOS
FDD B Floppy Dev 2
RAM C RAM RAMDisk
----------------------------------------------------------------------


Attached disks:

Type Number Name Part. Serial
----------------------------------------------------------------------
Floppy 1 PRETTYOS 0 PRETTYOS
RAMdisk 3 RAMDisk 0 786436
----------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Available ports:                                                                
                                                                               
Type    Number  Name            Inserted disk                                  
----------------------------------------------------------------------          
FDD     A       Floppy Dev 1    PRETTYOS                                        
FDD     B       Floppy Dev 2                                                    
RAM     C       RAM             RAMDisk                                        
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached disks:                                                                
                                                                               
Type    Number  Name            Part.   Serial                                  
----------------------------------------------------------------------          
Floppy  1       PRETTYOS        0       PRETTYOS                                
RAMdisk 3       RAMDisk         0       786436                                  
----------------------------------------------------------------------

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:14:38 12.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:39:46 13.06.2010   Titel:              Zitieren

Rev. 514:

Verbesserung der Darstellung der FAT-Descriptor-Daten in loadFile

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:34:09 13.06.2010   Titel:              Zitieren

Revision 515:

- Fehlerbehandlung von execute jetzt in shell.c
- execute und loadFile geben nun FS_ERROR zurück
- Disk zählt noch zu lesende Sektoren -> Möglichst seltenes an/aus des Motors bei "beweglichen" Medien wie Floppys, HDDs und CDs
- Syscall-Definition von execute repariert
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:38:34 13.06.2010   Titel:              Zitieren

Revision 516:

- (jetzt hoffentlich funktionierende) Floppy-Motor-Steuerung
- Zahlreiche Funktionen aus fat12.c entfernt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:17:47 14.06.2010   Titel:              Zitieren

Rev. 517:

Es gibt nach Umbauarbeiten (dank an MrX) überraschende Probleme auf real PC mit der Floppy:

Bei mir hört es in der ports-liste nach FDD auf, nur noch read error
daher cross-check, bitte testen. ;)

Mit den nachgereichten Versionen für die Motorsteuerung geht es ebenfalls nicht!
http://codepad.org/oZCtQChr
http://codepad.org/kaH3aG1q
http://codepad.org/MJDdABeh ("mal eine ältere Version")

Zitat:
sag mir, ob es a) geht und wenn nicht b) zuletzt "off" angezeigt wird

a) es geht nicht (zwei PC mit echter Floppy, zwei Disketten)
b) "on" steht vorne nach Finden der FDD; "off" kommt nicht, nur der read error mit Lampe aus (bei beiden PCs and der exakt gleichen Stelle).

MrX: bitte checke mal die Rev. 517, ob die wirklich so auf real PC bei dir läuft. Vielleicht hast du lokal eine andere Version.

VMWare läuft mit rev. 517 korrekt, aber lädt viel zu lahm.
Gibt man nur "ttt.elf" ein, so wird "Trying now on 1:/." angezeigt, aber korrekt geladen.

VBox klappt gut mit zwei Floppys, lädt schnell.
Qemu läuft analog VBox.

Nachdem ich auch noch auf meinem Entwicklungs-PC das gleiche negative Ergebnis erhielt:

Bei manchen PCs muss man zwei mal laden, bis es klappt (DMA-Init-Problematik, muss noch im geänderten Code untersucht werden), also erstes mal read error, dann beim zweiten mal Erfolg. Wenn wir aber Sektoren zählen und entsprechend bei null abschalten, könnte dies genau vor dem erfolgreichen Lesen erfolgen.
Nur so eine Idee. Spricht nur dagegen, dass das "off" bei dem einen Test nicht kam. Also könnte es auch sein, dass dieser Lesevorgang zur Detektion des Partitionsnamens in einer Fehlerschleife hängen bleibt. :rolleyes:

Ein Test auf einem vierten PC: ebenfalls nicht ok. Nach ENTER drücken gings weiter, aber ständig read error und Festhängen an diesem Punkt. ttt.elf wurde nicht geladen, als es endlich gelang dies einzutippen.

Irgendetwas ist in Rev. 517 gegenüber früheren Versionen massiv gestört im Lesevorgang. :rolleyes:
Bitte gegen den Ablauf im alten Code checken.

Cuervo: bitte ebenfalls prüfen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 07:58:36 14.06.2010, insgesamt 9-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:49:43 14.06.2010   Titel:              Zitieren

Danke für die Umfangreichen Tests, Erhard.

Zitat:
(dank an MrX)

Danke, das ichs zerschossen hab? ;)

Naja, ab und zu muss man mal was kaputt kriegen, ums wieder zusammensetzen zu "dürfen" :D
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:25:48 14.06.2010   Titel:              Zitieren

Rev. 518: Vorbereitungen FAT-Modul: Schreiben (Ablösung file.c und weitgehend fat12.c)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:39:17 14.06.2010   Titel:              Zitieren

Revision 519:

- Floppyproblem behoben. Ich hatte nicht bedacht, das flpydsk_enable_controller den Motor abschaltet. Daher wichen CurrentDisk->motor und Realität vonnander ab
- Shell gibt nun Dateinamen statt "1:/" bei retry an.
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:46:29 15.06.2010   Titel:              Zitieren

Rev. 520:

Vorbereitung fat-modul für Schreiben

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:24:13 15.06.2010   Titel:              Zitieren

Revision 521:

- flpydsk_writeSector gebaut und in devicemanager.c genutzt
- Fat-Treiber verbessert (Kürzungen, Scope von Variablen, seltsame return-Konstruktionen; 100 Zeilen gespart bei mehr Funktionen (singleSectorWrite))
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:52:01 16.06.2010   Titel:              Zitieren

Revision 522:

boot2.asm: wurde erneut gehotfixt, indem der stack von 1FFFFh nach 3FFFFh geschoben wurde
Nun hat Kernel.bin im RM Platz zwischen 3000h und ca. 40000h (Stack), also knapp 250000 bytes. :live:

makefile: der kernel wird bewusst mit -O3 gebildet, um erstens einen größeren Kernel mit ca. 130K zu erhalten und zweitens Fehlermöglichkeiten mit O3 zu testen. :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:19:45 16.06.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:42:18 17.06.2010   Titel:              Zitieren

Rev. 523:

Vorbereitung für verbessertes file read/write in fat.h/c (fopen ausgetauscht, fopenFileName und Helper-Fkt. ergänzt)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:54:01 17.06.2010   Titel:              Zitieren

Rev. 524:

strchr war bereits vorhanden in der userlib, nun auch in util.h/.c (kernel)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:47:42 17.06.2010   Titel:              Zitieren

Revision 525:

- Screenshot wird (fehlerhaft) mit fat.c erzeugt
- fopenFileName erkennt nun Partition
- boot2.map wieder entfernt
- Zahlreiche Formatierungen und kleinere Änderungen/Optimierungen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:55:26 18.06.2010   Titel:              Zitieren

rev. 526 (noch fehlerhaft in fat.c):

Am Ende von fopenFileName ist ein Fehler versteckt, der zu einem #PF führt.
Bitte um Hilfe bei der Fehlersuche. Die eingebauten printf helfen mir nicht weiter, weil es bei realPC und verschiedenen Sims ganz anders reagiert. Bei qemu kommt reboot. VMWare und VBox zeigen den Fileptr im Heap.

Nach dem #PF kann man mittels Strg+s bei manchen Simulationen weiter machen. Einmal existiert screen.txt offenbar bereits und einmal nicht.

Man kann auf real PC auch ENTER eingeben und z.B. ttt.elf laden. Die shell ist nicht sofort kaputt. Erst wenn man zurück kommt von ttt.elf geht nichts mehr.

:confused:

Man startet einen Thread aus dem Keyboard-Treiber, also Interrupt, dann Fehler, schon wieder "Interrupt", dann erneut Strg+s ... :rolleyes:

:schland:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:35:31 18.06.2010, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:09:36 18.06.2010   Titel:              Zitieren

Rev. 527:

kleine verbesserung durch globales fileTemp in fat.c für fopenFileName

Wenn man bei realPC vorher die Floppy quick-formatiert, damit das screen.txt wirklich neu ins Verzeichnis geschrieben wird, dann läuft es fehlerfrei durch. Die Datei hat aber trotz Anzeige des Sektor-Schreibens noch keinen Inhalt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:06:12 18.06.2010   Titel:              Zitieren

Rev. 528:

- FILEPTR durch FILE* ersetzt
- fileTemp auf heap
- FAT-Debugging verbessert

Problem: bei Strg+s wird der root dir Eintrag und die Daten geschrieben, leider noch nicht die FAT-Cluster-Kette

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:25:58 18.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:03:08 18.06.2010   Titel:              Zitieren

Rev. 529:

- NULL Pointer abgefangen bei fopenFileName Rückgabewert (fwrite und fclose unterbinden)
- DEBUG verbessert

Problem: FAT1 u. FAT2 werden noch nicht geschrieben

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:41:56 19.06.2010   Titel:              Zitieren

Rev. 530: Zwischenschritt

fclose angepasst, so dass FAT1 u. FAT2 geschrieben werden, wenn notwendig.

Allerdings ist jetzt noch ein merkwürdiger Fehler enthalten.
FAT wird noch nach root dir geschrieben. :rolleyes:

Vielleicht findet jemand den Fehler durch Vergleich 529/530 (AFK)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:45:07 19.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:16:57 19.06.2010   Titel:              Zitieren

Rev. 531: Zwsichenstand (Arbeitsversion)
Zweites write nach root dir "zerschießt"

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:54:28 19.06.2010   Titel:              Zitieren

Revision 532:

- Floppy-Motor-Bug behoben.
- Optimierungen und Kürzungen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:04:15 19.06.2010   Titel:              Zitieren

Rev. 533:

Freeze nach dem Laden eliminiert! Liegt an free(fileptr) in fclose (fat.c) :warning:

Kleinigkeiten im Code von fat.c angepasst
FAT-debugging auf Lesen/Schreiben reduziert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:05:06 19.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:17:39 20.06.2010   Titel:              Zitieren

Rev. 534: Noch Versuchsversion zur Klärung :warning:

Durch einen völlig unverständlichen Hotfix geht es nun! :eek:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
        // fatWrite (fileptr->volume, 0, 0, true); // TEST: das klappt nicht überschreibt auch die root dir
        uint32_t i, sectorFAT;
        for (i=0, sectorFAT=globalLastFATSectorRead; i<1/*fileptr->volume->fatcopy*/; i++, sectorFAT+=fileptr->volume->fatsize)
        {
            printf("\ni: %u sectorFAT: %u", i,sectorFAT);
            if (singleSectorWrite(sectorFAT, globalBufferFATSector, fileptr->volume) != CE_GOOD)
            {
                return CLUSTER_FAIL_FAT16;
            }
        }
        globalFATWriteNecessary = false;
        waitForKeyStroke();
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
// fatWrite (fileptr->volume, 0, 0, true); // TEST: das klappt nicht überschreibt auch die root dir
uint32_t i, sectorFAT;
for (i=0, sectorFAT=globalLastFATSectorRead; i<1/*fileptr->volume->fatcopy*/; i++, sectorFAT+=fileptr->volume->fatsize)
{
printf("\ni: %u sectorFAT: %u", i,sectorFAT);
if (singleSectorWrite(sectorFAT, globalBufferFATSector, fileptr->volume) != CE_GOOD)
{
return CLUSTER_FAIL_FAT16;
}
}
globalFATWriteNecessary = false;
waitForKeyStroke();
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
        // fatWrite (fileptr->volume, 0, 0, true); // TEST: das klappt nicht überschreibt auch die root dir
        uint32_t i, sectorFAT;
        for (i=0, sectorFAT=globalLastFATSectorRead; i<1/*fileptr->volume->fatcopy*/; i++, sectorFAT+=fileptr->volume->fatsize)
        {
            printf("\ni: %u sectorFAT: %u", i,sectorFAT);
            if (singleSectorWrite(sectorFAT, globalBufferFATSector, fileptr->volume) != CE_GOOD)
            {
                return CLUSTER_FAIL_FAT16;
            }
        }
        globalFATWriteNecessary = false;
        waitForKeyStroke();


Vielleicht sind das Spiegelungen beim Schreiben auf die Floppy. Am ANfang hatten wir da auch Probleme. Müsste so etwas sein. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:46:06 20.06.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:20:35 20.06.2010   Titel:              Zitieren

Revision 535:

- Projektfile von VC++ 2008 auf 2010 umgestellt
- file.c/.h gelöscht, fat12.c weiter aufgeräumt
- Kleinere Änderungen/Optimierungen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:53:41 20.06.2010   Titel:              Zitieren

Rev. 536:
- HOTFIX von fclose nach fatWrite (nur für FAT12) übertragen, damit dies allgemein funktioniert
- initializeDMA wieder von außen zugänglich gemacht und für flpydsk_read_directory ("fdir") reaktiviert (kein Erfolg)
- DEBUG-Ausgaben in fat.c zurück gesetzt, feste printf gelöscht

Strg+s (Screenshot) gelangt nun endgültig via device manager und fat.h/c auf die Floppy Disk. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:57:05 20.06.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:50:09 20.06.2010   Titel:              Zitieren

Dass das mit dem DMA nichts zu tun hat, habe ich ja bereits gesagt...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:14:41 20.06.2010   Titel:              Zitieren

Rev. 537:

fat.c: flushdata ersetzt

So wie es aussieht, läuft noch alles :)

MrX: bitte Motorsteuerung checken (flushdata hatte vorher singleSectorWrite auch in fwrite!)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:32:58 20.06.2010   Titel:              Zitieren

Revision 538:

- Floppy-Motor-Bug behoben: Global-Access wurde nicht initialisiert. (Danke für die Hilfe bei der Bugsuche, ehenkes)
- devicemanager/fat/floppy/usb: Schnittstelle geändert, Gerät wird mit übergeben als void* (nicht disk_t*, sondern disk_t::data)
- Returnwerte von SectorRead/Write auf FS_ERROR umgestellt
- Optimierungen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:55:20 20.06.2010   Titel:              Zitieren

Rev. 539:
fat.c:
- Screenshot (Strg+s) funktioniert nun auch wiederholt (Rückgabewerte korrigiert in fat.c)
- Optimierungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:21:47 21.06.2010   Titel:              Zitieren

Rev. 540:

- Screenshots werden nun zusammen gehängt in screen.txt :)
- fopenFileName wurde zu fopen und fopen zu fdopen umbenannt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:09:39 22.06.2010   Titel:              Zitieren

Rev. 541:

fat.c:
- globaler error abgeschaltet mittels precompiler, wird bisher nirgends verwendet
- kleinere formelle optimierungen im code

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:10:45 22.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:54:31 22.06.2010   Titel:              Zitieren

Rev. 542:

flpydsk.c:
Schreiben eines einzelnen Sektors auf Floppy gelöst: kein FDC_CMD_EXT_MULTITRACK !

Habe den HOTFIX in fatWrite entfernt. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:55:06 22.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:40:19 22.06.2010   Titel:              Zitieren

Rev. 543:

fat.c: globaler error komplett eliminiert (code signifikant besser wartbar/lesbar)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:41:04 22.06.2010   Titel:              Zitieren

Revision 544:

- Codevereinfachungen in fat.c und time.c, diverse andere Kleinigkeiten


Zuletzt bearbeitet von Erhard Henkes am 18:15:17 25.06.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:03:51 25.06.2010   Titel:              Zitieren

Revision 545:

- fat.c: Optimierungen, kleine Korrekturen
-- Switches ggf. durch if/else ersetzt
-- fseek gibt nun FS_ERROR zurück
- devicemanager.c
-- getFilename analog zu getPartition
-- execute heißt nun executeFile
-- analyzeBootSector gibt nun FS_ERROR zurück
- Syscall/util.c: systemControl(SYSTEM_CONTROL todo) weist das OS an, zu rebooten/runterzufahren (nicht implementiert); reboot entfernt
- shell: Neues Kommando "reboot" - ruft systemControl auf


Zuletzt bearbeitet von Erhard Henkes am 18:15:43 25.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:03:53 25.06.2010   Titel:              Zitieren

Rev. 546:

flipflop reset in init DMA entfernt, weil offenbar nicht notwendig beim slave (controller 1)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:53:17 26.06.2010   Titel:              Zitieren

Rev. 547: Experimentelle Variante (zum gemeinsamen Fehlersuchen)

Schreibvorgang auf usb-Stick mit FAT12 (analog Diskette) funktioniert! :)

usbWrite(...) funktioniert demnach.

Mit FAT16 und FAT32 formatierten sticks geht es noch nicht (Grund liegt somit im Write-Bereich für FAT16/32 des fat-Moduls)! Also nicht probieren. :warning:
(bei FAT32 bleibt er hängen beim Lesen, passiert also nichts. Bei FAT16 schreibt er screen.txt in die root dir. datei ist aber "beschädigt" (Windows) ).

Wie stellt man einen FAT12 usb-Stick her?
:arrow: http://www.c-plusplus.de/forum/viewtopic-var-t-is-268632.html

Wo wird für Strg+s das Laufwerk festgelegt?
video.c, Zeile 249 ff.
C/C++ Code:
// FILE* file = fopen("1:/screen.txt", "a+"); // TEST to write to Floppy
   FILE* file = fopen("3:/screen.txt", "a+"); // TEST to write to usb-stick
C/C++ Code:
// FILE* file = fopen("1:/screen.txt", "a+"); // TEST to write to Floppy
FILE* file = fopen("3:/screen.txt", "a+"); // TEST to write to usb-stick
C/C++ Code:
// FILE* file = fopen("1:/screen.txt", "a+"); // TEST to write to Floppy
   FILE* file = fopen("3:/screen.txt", "a+"); // TEST to write to usb-stick

Evtl. LW-Nummer anpassen, falls stick z.B. auf 4 liegt. ;)
Auf Floppy schreiben wurde momentan lahm gelegt und umgebogen, wie man sieht.

EDIT: mit frisch formatierten FAT32 usb-sticks klappt es bereits! (liegt also daran, dass unsere FAT-Routine noch nicht in die nachfolgenden Cluster der root dir gelangt)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:17:36 26.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:37:47 26.06.2010   Titel:              Zitieren

Rev. 548:

ckernel.c: floppymotor aus, nur, wenn die erste floppy da ist (cmos-abfrage)
fat.c: bei FAT32 fileptr->volume->FatRootDirCluster eingebaut anstelle "0" (wie bei FAT12 u. FAT16)

Offene Probleme:
FAT16-stick: rootdir entry ok, filesize ok, datei "beschädigt"
FAT32-stick: bei hoher Nummer des entry in der root dir: leere Datei, filesize == 0

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:11:33 26.06.2010   Titel:              Zitieren

Rev. 549:

FAT16 Problem wurde gelöst, wurde versehentlich 0x0FF8 (FAT12-Konstante) eingetragen anstelle LAST_CLUSTER_FAT16 in fileCreateHeadCluster

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:32:07 26.06.2010   Titel:              Zitieren

Rev. 550:

fat.c: bug (bhandle in FindEmptyEntries war 16 bit) entfernt und kleine Optimierungen
Leider immer noch das Problem bei FAT32 mit dem screenshot, wenn bereits viele Einträge vorhanden sind: File bleibt bei size 0.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:26:09 27.06.2010   Titel:              Zitieren

Rev. 551:

Code-Optimierung usb2_msd.c (statische Check-Funktion ausgelagert und doppelt genutzt)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:46:10 27.06.2010   Titel:              Zitieren

Revision 552:

- pciDev_Array auf Heap gelegt
- pciDev_Array nur noch in pci.c genutzt
- Motorsteuerung jetzt "fertig"
- Projektmappe etwas umsortiert
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:27:49 27.06.2010   Titel:              Zitieren

Rev. 553: FAT32 bug gefunden, Schreiben funktioniert nun auch bei "vollen" Verzeichnissen :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:47:54 27.06.2010   Titel:              Zitieren

Mehr oder weniger spontan haben wir uns grade entschieden (Naja, geplant war es ja schon etwas länger), die Versionsnummer von PrettyOS auf 0.0.1.0 zu erhöhen, weil folgendes vorhanden ist:

  • Grundstrukturen des Kernels funktionieren (Das führe ich jetzt nicht einzelnd auf ;) )
  • Unterstützung für Floppy und USB. (Schreibend und lesend)
  • Unterstützung für FAT12, 16 und 32. (Schreibend und lesend)


Die letzte Stelle (a.b.c.d) wird mit jeder Revision inkrementiert, aber bei Veränderungen der höheren Versionszahlen zurückgesetzt, also fangen wir dort jetzt wieder von 0 an.

Version 0.0.1.0 (Rev. 554):
  • Strg+u schreibt jetzt auf USB-Stick (den ersten im disk-Array)
  • Strg+s schreibt aufs erste Floppy-Laufwerk
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:32:37 27.06.2010   Titel:              Zitieren

Rev. 555: 0.0.1.1

Korrekturen in usb2_msd.c (Transfer Check)

Test auf meinem Developer-PC:
Beim port-check des EHCI wird inzwischen alles ausgefiltert, was nicht als USB Mass Strorage Device in unserem Sinne taugt (web cam, hub, card reader).
Der card reader wurde als 3:\ (hinter Floppy und RAMDisk) eingetragen. Ein neu angesteckter Stick als 4:\
Ich war nun gespannt auf strg+u, aber alles hat bestens geklappt. Da der card reader (wegen fehlender card) kein FAT aufzuweisen hatte, wurde brav der stick mit FAT32 auf 4:\ gewählt.

Zum Glück hat MrX auf mich gehört und den FAT-Test implementiert. :live:

video.c, zeile 253:
C/C++ Code:
if(disks[i] && disks[i]->type == ScreenDest && (disks[i]->partition[0]->type == FAT12 || disks[i]->partition[0]->type == FAT16 || disks[i]->partition[0]->type == FAT32))
C/C++ Code:
if(disks[i] && disks[i]->type == ScreenDest && (disks[i]->partition[0]->type == FAT12 || disks[i]->partition[0]->type == FAT16 || disks[i]->partition[0]->type == FAT32))
C/C++ Code:
if(disks[i] && disks[i]->type == ScreenDest && (disks[i]->partition[0]->type == FAT12 || disks[i]->partition[0]->type == FAT16 || disks[i]->partition[0]->type == FAT32))

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:46:51 28.06.2010, insgesamt 1-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 08:17:45 28.06.2010   Titel:              Zitieren

Rev. 556:

* Aktualisiertes Makefile löscht bei 'make clean' wirklich alle temporären Dateien
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:58:52 28.06.2010   Titel:              Zitieren

Rev. 557: 0.0.1.2

- Kernel von 0x40000 nach 0x100000 verschoben (BL2, kernel.ld)
- Umbenennungen und Optimierungen in fat.h/c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:57:32 28.06.2010   Titel:              Zitieren

Rev. 558: 0.0.1.3

keyboard.c und userlib.c: bool keyPressed(VK key); [VK = Virtual Key analog winuser.h]

Rev. 559: 0.0.1.3
Korrektur: man muss shiftascii[...] nehmen wegen der Großbuchstaben.
Dann gibt das aber Probleme mit den Zahlen. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:30:11 29.06.2010, insgesamt 2-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 10:27:50 29.06.2010   Titel:              Zitieren

Rev. 560:

* Xcode Projektfile hinzugefügt (BUILD funktioniert darin nicht, ist aber deutlich praktischer beim Bearbeiten des Sourcecodes als jede Datei einzeln zu öffnen)
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 11:01:16 29.06.2010   Titel:              Zitieren

Rev. 561:

* Xcode Projektfile wieder entfernt, da svn wieder mal Probleme damit hatte


d.h. Rev. 561 entspricht Rev. 559


Zuletzt bearbeitet von Cuervo am 11:02:00 29.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:10:14 29.06.2010   Titel:              Zitieren

Rev. 562: 0.0.1.4

Korrektur bezüglich keyPressed(...)

ckernel.c in "idle loop":
C/C++ Code:
/// TEST
if (keyPressed('A') && keyPressed(VK_LSHIFT)) {printf("\nshiftleft+A"); }
if (keyPressed('D') && keyPressed(VK_RSHIFT)) {printf("\nshiftright+D");}
if (keyPressed('1')) {printf("\n1");}
/// TEST
C/C++ Code:
/// TEST
if (keyPressed('A') && keyPressed(VK_LSHIFT)) {printf("\nshiftleft+A"); }
if (keyPressed('D') && keyPressed(VK_RSHIFT)) {printf("\nshiftright+D");}
if (keyPressed('1')) {printf("\n1");}
/// TEST
C/C++ Code:
/// TEST
if (keyPressed('A') && keyPressed(VK_LSHIFT)) {printf("\nshiftleft+A"); }
if (keyPressed('D') && keyPressed(VK_RSHIFT)) {printf("\nshiftright+D");}
if (keyPressed('1')) {printf("\n1");}
/// TEST

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:10:37 29.06.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:13:13 29.06.2010   Titel:              Zitieren

Rev. 563: Korrektur in syscall.c (&keyPressed vergessen, stand noch auf &nop) :D

nun auch ESC getestet:
C/C++ Code:
if (keyPressed('1') && keyPressed(VK_ESCAPE)) {printf("\nESC+1");}
C/C++ Code:
if (keyPressed('1') && keyPressed(VK_ESCAPE)) {printf("\nESC+1");}
C/C++ Code:
if (keyPressed('1') && keyPressed(VK_ESCAPE)) {printf("\nESC+1");}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:14:32 29.06.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:37:45 29.06.2010   Titel:              Zitieren

Version 0.0.1.5 (Rev. 564):

- Basisstrukturen für FS-Manager angelegt (weder endgültig noch in Benutzung)
- Namenskonflikten im FAT-Treiber vorgebeugt
- SectorRead, sectorWrite, singleSectorRead und singleSectorWrite jetzt in devicemanager.c
- in fat12.h aufgeräumt
- Bugfix: Keine zufälligen Zeichen mehr an Dateinamen angehängt (0-Terminierungsproblem)
- Bugfix: free akzeptiert nun 0-Pointer
- Diverse (Kleinigkeiten)


Soweit ich das sehe, funktioniert alles noch.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:05:03 30.06.2010   Titel:              Zitieren

Version 0.0.1.6:

- FAT_partition_t auf fsmanager umgestellt (Nutzt partition_t)
- Automatische Endungsergänzung funktioniert wieder (jetzt aber in Shell)
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:33:14 30.06.2010   Titel:              Zitieren

rev. 566:

userlib.h/c hat nun srand und rand:
hello.elf:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PrettyOS [Version 0.0.1.6]                                Console 0: HELLO   ELF
--------------------------------------------------------------------------------
                                                                               
================================================================================
                                                                               
                                C - Testprogramm!                              
                                                                               
--------------------------------------------------------------------------------
                                                                               
                                 ! Hello World !                                
                                                                               
94      26602   30017   18297   20363   13015   28509   15290   29003   24399  
3339    28849   17055   19424   4588    15756   6098    11834   1351    21383  
18431   155     14763   14082   4564    25482   30678   20183   15765   18376  
20694   32234   8292    29828   23406   31490   25791   15822   24763   23255  
15434   32590   15383   108     24271   12086   29246   26526   31363   7541    
17328   32253   31115   13102   15958   32220   16574   18024   4711    32676  
19373   22023   11917   13678   18912   16891   26436   1232    8547    21431  
11651   29430   31362   10980   6303    5877    14544   25175   18284   1629    
1390    321     23717   28685   20105   3238    6798    22860   24613   19729  
25047   12565   31257   7301    6084    11697   1883    20662   14219   10380  
                                                                               
____      <>_<>                                       _______                ___
[] | .---|'"`|---.                                  (_______) |_|_|_|_|_|_|| []
-o-'`o"O-OO-OO-O"o'                                `-oo---oo-'`-oo-----oo-'`-o--
--------------------------------------------------------------------------------
Wednesday, June 30, 2010, 23:32:12   34 s runtime. CPU: 3816 MHz               /
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PrettyOS [Version 0.0.1.6] Console 0: HELLO ELF
--------------------------------------------------------------------------------

================================================================================

C - Testprogramm!

--------------------------------------------------------------------------------

! Hello World !

94 26602 30017 18297 20363 13015 28509 15290 29003 24399
3339 28849 17055 19424 4588 15756 6098 11834 1351 21383
18431 155 14763 14082 4564 25482 30678 20183 15765 18376
20694 32234 8292 29828 23406 31490 25791 15822 24763 23255
15434 32590 15383 108 24271 12086 29246 26526 31363 7541
17328 32253 31115 13102 15958 32220 16574 18024 4711 32676
19373 22023 11917 13678 18912 16891 26436 1232 8547 21431
11651 29430 31362 10980 6303 5877 14544 25175 18284 1629
1390 321 23717 28685 20105 3238 6798 22860 24613 19729
25047 12565 31257 7301 6084 11697 1883 20662 14219 10380

____ <>_<> _______ ___
[] | .---|'"`|---. (_______) |_|_|_|_|_|_|| []
-o-'`o"O-OO-OO-O"o' `-oo---oo-'`-oo-----oo-'`-o--
--------------------------------------------------------------------------------
Wednesday, June 30, 2010, 23:32:12 34 s runtime. CPU: 3816 MHz /
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PrettyOS [Version 0.0.1.6]                                Console 0: HELLO   ELF
--------------------------------------------------------------------------------
                                                                               
================================================================================
                                                                               
                                C - Testprogramm!                              
                                                                               
--------------------------------------------------------------------------------
                                                                               
                                 ! Hello World !                                
                                                                               
94      26602   30017   18297   20363   13015   28509   15290   29003   24399  
3339    28849   17055   19424   4588    15756   6098    11834   1351    21383  
18431   155     14763   14082   4564    25482   30678   20183   15765   18376  
20694   32234   8292    29828   23406   31490   25791   15822   24763   23255  
15434   32590   15383   108     24271   12086   29246   26526   31363   7541    
17328   32253   31115   13102   15958   32220   16574   18024   4711    32676  
19373   22023   11917   13678   18912   16891   26436   1232    8547    21431  
11651   29430   31362   10980   6303    5877    14544   25175   18284   1629    
1390    321     23717   28685   20105   3238    6798    22860   24613   19729  
25047   12565   31257   7301    6084    11697   1883    20662   14219   10380  
                                                                               
____      <>_<>                                       _______                ___
[] | .---|'"`|---.                                  (_______) |_|_|_|_|_|_|| []
-o-'`o"O-OO-OO-O"o'                                `-oo---oo-'`-oo-----oo-'`-o--
--------------------------------------------------------------------------------
Wednesday, June 30, 2010, 23:32:12   34 s runtime. CPU: 3816 MHz               /

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:34:52 30.06.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:24:58 02.07.2010   Titel:              Zitieren

Version 0.0.1.8:

- Farbwechsel-Fehler vielleicht behoben (Beim Interrupt geschah es vermutlich)
- fopen in Betrieb genommen (leichter Fehler noch: Append geht noch nicht, wird morgen korrigiert)
- Synchronisation userlib-Header
- malloc-Alignment in einigen Fällen von PAGESIZE auf 0 geändert
- ...
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:13:30 02.07.2010   Titel:              Zitieren

Version 0.0.1.9:

- fseek und fclose in Betrieb genommen
- 'a'-Bug behoben
- FAT_file_t fast komplett aufgeräumt
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:11:44 03.07.2010   Titel:              Zitieren

Rev. 569 (0.0.1.9)

Neu: arrow.c und ARROW.ELF (User-Programm erstellt von ehenkes, um die Möglichkeiten von keyPressed unf srand/rand zu demonstrieren und anderen Lust zu machen ebenfalls tolle Spielideen umzusetzen) :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:12:39 03.07.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:30:40 03.07.2010   Titel:              Zitieren

Version 0.0.1.10:

- makefile fügt ARROW.ELF automatisch dem Image hinzu
- HELLO.ELF wiederhergestellt
- ehenkes Arrow-Spiel verbessert
-- ESC beendet Programm
-- getch statt sleep am Ende
-- Bugfixes&Optimierungen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:40:28 03.07.2010   Titel:              Zitieren

Rev. 571 (0.0.1.10):

arrow.c/elf verbessert zum Abschluss (Abfrage von Taste Q für quit)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:15:54 05.07.2010   Titel:              Zitieren

Rev. 572 (0.0.1.11):

neu in fat.h/c:
FS_ERROR FAT_remove (const char* fileName, FAT_partition_t* part)

@MrX: bitte einbinden, falls nicht schon erfolgt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:16:31 05.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:38:49 05.07.2010   Titel:              Zitieren

Rev. 573 (0.0.1.12):

- FAT_remove korrigiert
- FS_ERROR FAT_rewind(FAT_file_t* fileptr)

Anmerkungen:

1) FAT_remove: strcpy(fileptr->name, fileName); // must be 8+3 formatted first (muss das im FS manager passieren?) // strcpy muss evtl. noch angepasst werden auf strncpy mit 11 zeichen

2) FAT_rewind: // fileptr->seek = 0; // has to happen in FS manager

3) FAT_rename: noch nicht implementiert, muss erst noch diskutiert werden, ob dabei ein copy und delete erfolgen darf

@MrX: das endgültige Einbinden / Testen sollten wir zusammen durchführen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:47:45 05.07.2010, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:20:26 06.07.2010   Titel:              Zitieren

Version 0.0.1.13:

- FAT_rewind gelöscht und durch rewind im fsmanager ersetzt, da rewind(file) äquivalent zu fseek(file, 0, SEEK_SET) ist und das im fsmanager erledigt werden kann und soll.
- FAT-remove nimmt nun einen partition_t* statt FAT_partition_t*
- FAT_remove in fsmanager "integriert"
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:45:25 06.07.2010   Titel:              Zitieren

Bei FAT_rewind bin ich mir nicht ganz sicher, es existiert immerhin ein
FS_ERROR FAT_fseek(file_t* file, int32_t offset, SEEK_ORIGIN whence).

remove geht nicht, weil kein 8+3 Filename "screen__txt" übergeben wurde, sondern "screen.txt". Das wird jetzt im Filemanager erledigt, da die Funktion FormatFileName(...) seit neuestem dort ist.

Jetzt gehts (ausprobiert mit screen.txt auf Floppy). Habe den "remove" Test in video.c belassen für eigene Versuche (auskommentiert ab Zeile 273):

Rev. 575 (0.0.1.14)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:23:19 06.07.2010, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:47:33 06.07.2010   Titel:              Zitieren

Erhard Henkes schrieb:
Bei FAT_rewind bin ich mir nicht ganz sicher, es existiert immerhin ein
FS_ERROR FAT_fseek(file_t* file, int32_t offset, SEEK_ORIGIN whence).


Ich bin mir völlig sicher.

Denn, wie ich schon sagte, rewind(file) ist äquivalent zu fseek(file, 0, SEEK_SET), also kann man rewind so implementieren, das es den o.g. fseek-Aufruf durchführt, welcher dann u.a. FAT_fseek aufruft. Genau so hab ich es gemacht.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:25:52 06.07.2010   Titel:              Zitieren

@MrX: Ja, du hast völlig Recht. Siehe: http://openbook.galileocomputing.de/c_von_a_bis_z/ ....... ktionen_014.htm#mjff798e62f1469fc3901b349f005d6547
Gut gemacht. :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:26:39 06.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:04:42 07.07.2010   Titel:              Zitieren

Rev. 576 (0.0.1.15):
FS_ERROR FAT_rename(const char* fileNameOld, const char* fileNameNew, partition_t* part)
FS_ERROR FAT_fileRename (FAT_file_t* fileptr, const char* fileName)

Getestet mit Floppy, funktioniert. :)

Testcode siehe video.c, Zeile 273 ff.
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
    //rename test
    waitForKeyStroke();
    uint32_t error = rename(Pfad,"1:/scrnew.txt");
    printf("\nrename test: error: %u", error);

    // remove test
    waitForKeyStroke();
    error = remove(Pfad);
    printf("\nremove test: error: %u", error);
    waitForKeyStroke();  
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
//rename test
waitForKeyStroke();
uint32_t error = rename(Pfad,"1:/scrnew.txt");
printf("\nrename test: error: %u", error);

// remove test
waitForKeyStroke();
error = remove(Pfad);
printf("\nremove test: error: %u", error);
waitForKeyStroke();
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
    //rename test
    waitForKeyStroke();
    uint32_t error = rename(Pfad,"1:/scrnew.txt");
    printf("\nrename test: error: %u", error);

    // remove test
    waitForKeyStroke();
    error = remove(Pfad);
    printf("\nremove test: error: %u", error);
    waitForKeyStroke();  

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:25:06 07.07.2010   Titel:              Zitieren

Rev. 577 (0.0.1.16):

rename funktioniert nun auch mit rename(Pfad,"scrnew.txt") und mit Floppy und USB MSD.

Test in video.c ab Zeile 273 (auskommentiert)

getFilename angepasst, damit keine Pfadangabe vor dem Filenamen notwendig ist.
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
const char* getFilename(const char* path)
{
    if (strchr((char*)path,'/')==NULL && strchr((char*)path,'|')==NULL && strchr((char*)path,'\\')==NULL)
    {
        return path;
    }
    else
    {
        // ...
    }
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
const char* getFilename(const char* path)
{
if (strchr((char*)path,'/')==NULL && strchr((char*)path,'|')==NULL && strchr((char*)path,'\\')==NULL)
{
return path;
}
else
{
// ...
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
const char* getFilename(const char* path)
{
    if (strchr((char*)path,'/')==NULL && strchr((char*)path,'|')==NULL && strchr((char*)path,'\\')==NULL)
    {
        return path;
    }
    else
    {
        // ...
    }
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:39:36 07.07.2010   Titel:              Zitieren

Version 0.0.1.17:

- FormatFileName wieder in fat.c (War doch besser dort aufgehoben)
- initrd etwas umgebaut
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:48:40 08.07.2010   Titel:              Zitieren

Version 0.0.1.18

- fsmanager auf fgetc/fputc umgestellt
-- Bedingt durch fehlendes caching im FAT-Treiber ists sehr langsam
- FAT_fread/FAT_fwrite nur noch intern im FAT-Treiber genutzt
- getch im Kernel eingebaut -> CPU-Sparen mit hlt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:33:59 09.07.2010   Titel:              Zitieren

Erste Tests:

strg+s (screenshot auf floppy) und strg+u (screenshot auf usb-stick) gehen noch gleich schnell, Schreibvorgänge sind im FAT-Modul bereits gecacht. :live:

ttt.elf laden:

a1) Floppy real: wird jedes byte einzeln per sector lesen geladen (lese-cache notwendig), real abgebrochen zum Schutz des FDD

a2) Floppy Qemu: geht (etwas langsamer ^^)

b1) USB-Stick real: #PF (schreiben in read-only area ??), entweder bug eingebaut oder technik geht so nicht (MrX: bitte prüfen und kommentieren)

b2) USB-Stick VMWare-Player: wird jedes byte einzeln per sector lesen geladen (lese-cache notwendig), interessanter Dauertest für OS und Stick (auch nett: Stick ziehen, dauer-rot auf screen ^^)

Ein interessanter Trümmerhaufen, aus dem Phoenix aus der Asche wieder erstehen soll. ;)

Die Grundfrage ist die, ob nach erfolgreichem Read-Cache-Einbau die Performance nicht doch leidet durch die vielen zusätzlichen Abläufe zwischen dem Lesen der Bytes mit fgetc. :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:52:31 09.07.2010, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:59:59 09.07.2010   Titel:              Zitieren

0.0.1.19 (SVN Rev. 580)

Read Cache für readSector funktioniert wie gewünscht. :)

Leider existiert ein Problem beim Laden von usb-stick (Ursache noch nicht untersucht)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:47:37 10.07.2010   Titel:              Zitieren

0.0.1.20 (Rev. 581)

:arrow: Problem: malloc spinnt! (seit 0.0.1.18) keiner weiß warum ^^

Es passiert, wenn ein programm einmal geladen wird (muss nicht ausgeführt werden)

file->name von pointer auf array umgestellt, wegen Analogie zu FAT_file->name (dort exakt 8+3), hilft aber nicht beim aktuellen Problem, sollte aber ansonsten fehlersicherer sein, da man dabei nicht vergessen kann malloc(...) auszuführen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:11:55 10.07.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 09:22:14 10.07.2010   Titel:              Zitieren

malloc/free beginnend vom Start verfolgt:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void* malloc(uint32_t size, uint32_t alignment)
{
    //...

    // debug

    textColor(0x0E);    
    printf("\nmalloc: %X",address);
    textColor(0x0F);
    waitForKeyStroke();

    return address;
}


void free(void* address)
{
    // debug
    textColor(0x0E);
    printf("\nfree: %X",address);
    textColor(0x0F);
    waitForKeyStroke();
   
    //...
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void* malloc(uint32_t size, uint32_t alignment)
{
//...

// debug

textColor(0x0E);
printf("\nmalloc: %X",address);
textColor(0x0F);
waitForKeyStroke();

return address;
}


void free(void* address)
{
// debug
textColor(0x0E);
printf("\nfree: %X",address);
textColor(0x0F);
waitForKeyStroke();

//...
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void* malloc(uint32_t size, uint32_t alignment)
{
    //...

    // debug

    textColor(0x0E);    
    printf("\nmalloc: %X",address);
    textColor(0x0F);
    waitForKeyStroke();

    return address;
}


void free(void* address)
{
    // debug
    textColor(0x0E);
    printf("\nfree: %X",address);
    textColor(0x0F);
    waitForKeyStroke();
   
    //...
}


Fazit: Da passt nix zusammen! :rolleyes:

Beweis-Foto: http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_20_malloc_free_problem.PNG

Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
malloc    free
--------------------------------------
C0000000  
          C0000048
          00000000
C0004CC0  
          C0204CC0          
          C0000568
          C0000690
          C0000038
Code:
1
2
3
4
5
6
7
8
9
10
malloc free
--------------------------------------
C0000000
C0000048
00000000
C0004CC0
C0204CC0
C0000568
C0000690
C0000038
Code:
1
2
3
4
5
6
7
8
9
10
malloc    free
--------------------------------------
C0000000  
          C0000048
          00000000
C0004CC0  
          C0204CC0          
          C0000568
          C0000690
          C0000038

usw.

Absoluter Nonsens zur Zeit.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 09:39:47 10.07.2010, insgesamt 4-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:37:27 10.07.2010   Titel:              Zitieren

Version 0.0.1.21

- malloc auf Placement umgestellt (HACK), free auskommentiert (HACK)
-> PrettyOS funktioniert wieder, Fehler in malloc
- Memory-Leak in executeFile behoben (durch HACK von oben wirkungslos) und unsinnigen Code dort weggemacht
- Ehenkes Umbau von file_t::name auf statisches Array zurückgebaut
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:36:49 10.07.2010   Titel:              Zitieren

Zitat:
PrettyOS funktioniert wieder
stimmt leider nicht! :rolleyes:

Ich werde versuchen, die Ursachen zu finden und zu korrigieren. Bitte keine Änderungen vornehmen, bis ich das Committen wieder frei gebe. Hinweise auf den konkreten Haupt-Fehler sind natürlich gerne gesehen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:48:59 10.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:00:32 10.07.2010   Titel:              Zitieren

Rev. 583: 0.0.1.22

zwischenstand: log in malloc zum aufspüren von fehlern
heap expansion evtl. nicht ok

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:42:35 10.07.2010   Titel:              Zitieren

Rev. 584 (0.0.1.24)

Zwischenstand zur Fehlersuche beim Expandieren des Heaps

Committen wieder frei gegeben

Fragen:
1) Wo liegt der Fehler im MM (Heap)?
2) Warum löst 1:\... das aus?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:44:11 10.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:52:54 10.07.2010   Titel:              Zitieren

Rev. 585 (0.0.1.25)

Zwischenstand Heap-Erweiterungs-Problematik:
Heap-Logger zur Analyse zeigt die Arbeitsweise des Heaps.

http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_25_heap_problem.PNG <--- OK ?
http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_25_heap_problem_PF.PNG <--- not OK

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:57:05 10.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:16:15 10.07.2010   Titel:              Zitieren

Rev. 586 (0.0.1.26):

HEAP_MIN_GROWTH = 0x40000;

#define PLACEMENT_BEGIN ((uint8_t*)0x1200000) // 18 MiB (vorher 16 MiB)

(Tobiking meint, das die Veränderung der Liste von außen erfolgen könnte, daher Tests mit 16/17/18/19 MiB als Placement-Untergrenze. Hatte hohen Einfluss.)

bei mir unter qemu bei 1:\... oder 1:|... Division by zero mit eip 0x104504 (kernel.map: 0x00105499 _FAT_fread)


Die Fehlersuche ist bisher über das Eingrenzen der Symptome nicht hinaus gewachsen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:28:31 10.07.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:27:35 10.07.2010   Titel:              Zitieren

Rev. 587 (0.0.1.27)

Heap-Problem erstmal gelöst: Regions Liste für Heap von 0xA00000 bis 0xE00000 gelegt. Da "unten" scheint es sicherer zu sein als zwischen 16 MiB und 20 MiB.
Tobiking hat da auch schon negative Erfahrungen bei VBox gemacht, er sprach von tasking_install.

jetzt geht real und auf qemu auch wieder 3:/ttt usw.

#define _MALLOC_FREE_ sorgt für infos über malloc/free und zeigt den neuen Heap-Logger, der die "Regions", die Bausteine des Heaps, aufführt.

Wer das MM-Problem weiter bearbeiten will:
kheap.c:
C/C++ Code:
static const uint32_t HEAP_MIN_GROWTH = 0x40000;
C/C++ Code:
static const uint32_t HEAP_MIN_GROWTH = 0x40000;
C/C++ Code:
static const uint32_t HEAP_MIN_GROWTH = 0x40000;

kheap.h:
C/C++ Code:
// Placement allocation
#define
PLACEMENT_BEGIN   ((uint8_t*) 0xA00000)     // 10 MiB // TEST vorher 16 MiB
#define
PLACEMENT_END     ((uint8_t*) 0xE00000)     // 14 MiB // TEST vorher 20 MiB
C/C++ Code:
// Placement allocation
#define
PLACEMENT_BEGIN ((uint8_t*) 0xA00000) // 10 MiB // TEST vorher 16 MiB
#define
PLACEMENT_END ((uint8_t*) 0xE00000) // 14 MiB // TEST vorher 20 MiB
C/C++ Code:
// Placement allocation
#define
PLACEMENT_BEGIN   ((uint8_t*) 0xA00000)     // 10 MiB // TEST vorher 16 MiB
#define
PLACEMENT_END     ((uint8_t*) 0xE00000)     // 14 MiB // TEST vorher 20 MiB


Vorschlag aus IRC #lost von bluecode: magic einbauen und bei jedem malloc/free überprüfen, dann würden wir heap corruption zeitnah feststellen.


placement: A00000h
regions: B2A000h

Da liegt Folgendes vor dem Heap:
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
kernel_pd = malloc(sizeof(page_directory_t), PAGESIZE);

kernel_pd->tables[i] = malloc(sizeof(page_table_t), PAGESIZE);

// Setup the page tables for the kernel heap (3GB-4GB), unmapped
page_table_t* heap_pts = malloc(256*sizeof(page_table_t), PAGESIZE);

bittable = malloc(128*1024, 0);
C/C++ Code:
1
2
3
4
5
6
7
8
kernel_pd = malloc(sizeof(page_directory_t), PAGESIZE);

kernel_pd->tables[i] = malloc(sizeof(page_table_t), PAGESIZE);

// Setup the page tables for the kernel heap (3GB-4GB), unmapped
page_table_t* heap_pts = malloc(256*sizeof(page_table_t), PAGESIZE);

bittable = malloc(128*1024, 0);
C/C++ Code:
1
2
3
4
5
6
7
8
kernel_pd = malloc(sizeof(page_directory_t), PAGESIZE);

kernel_pd->tables[i] = malloc(sizeof(page_table_t), PAGESIZE);

// Setup the page tables for the kernel heap (3GB-4GB), unmapped
page_table_t* heap_pts = malloc(256*sizeof(page_table_t), PAGESIZE);

bittable = malloc(128*1024, 0);


In paging.c wurde auch folgendes geändert in phys_init():
C/C++ Code:
    // Check that 10 MiB-20 MiB is free for use
    if (!memorymap_availability(entries, 10*1024*1024, 20*1024*1024))
    {
        textColor(0x0C);
        printf("The memory between 10 MiB and 20 MiB is not free for use. OS halted!\n");
        for (;;);
    }
C/C++ Code:
// Check that 10 MiB-20 MiB is free for use
if (!memorymap_availability(entries, 10*1024*1024, 20*1024*1024))
{
textColor(0x0C);
printf("The memory between 10 MiB and 20 MiB is not free for use. OS halted!\n");
for (;;);
}
C/C++ Code:
    // Check that 10 MiB-20 MiB is free for use
    if (!memorymap_availability(entries, 10*1024*1024, 20*1024*1024))
    {
        textColor(0x0C);
        printf("The memory between 10 MiB and 20 MiB is not free for use. OS halted!\n");
        for (;;);
    }



Also bleiben für die regions-Verwaltung des Heap momentan:
E00000h - B2A000h = 2D6000h = 2973696 Byte

C/C++ Code:
typedef struct
{
    uint32_t size;
    bool     reserved;    
} region_t;
C/C++ Code:
typedef struct
{
uint32_t size;
bool reserved;
} region_t;
C/C++ Code:
typedef struct
{
    uint32_t size;
    bool     reserved;    
} region_t;

Größe: 4+1 Byte = 5 Byte

Anzahl regions: 2973696 Byte / 5 Byte = 594739

Heap-Area FF000000h - C0000000h = 1056964608 Byte

1056964608 Byte / 594739 regions = 1777 Byte/region (passt, wackelt und hat Luft :live: )

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:55:25 11.07.2010, insgesamt 10-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 20:09:32 10.07.2010   Titel:              Zitieren

Rev. 588:

* Keysound.elf als Userprogramm hinzugefügt, macht immer Beep wenn man eine Taste drückt (A-Z)


Zuletzt bearbeitet von Cuervo am 20:28:19 10.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:41:00 11.07.2010   Titel:              Zitieren

0.0.1.28 - Rev: 589

- stack im BL 2 nach 0x99999 (korrekt: 0x9FFFF, s.u.), da kernel jetzt bei 0x100000
- kheap, paging (alles auf 10 MiB bis 20 MiB umgebaut)

VBox und VMWare beklagen sich bei eingeschaltetem _MALLOC_FREE_, laufen aber ohne gut.
Real PC und qemu laufen mit und ohne.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:17:19 11.07.2010, insgesamt 3-mal bearbeitet
taljeth
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.09.2009
Beiträge: 148
Beitrag taljeth Mitglied 11:37:27 11.07.2010   Titel:              Zitieren

Erhard Henkes schrieb:
Rev. 589: (0.0.1.28)

- stack im BL 2 nach 0x99999, da kernel jetzt bei 0x100000

Euch ist schon klar, dass Zahlen, die mit 0x anfangen, Hexzahlen sind und 0x99999 und 0x100000 damit keine direkt aufeinanderfolgenden Zahlen sind? ;)

Immerhin habt ihr damit versehentlich was richtig gemacht, denn damit kommt ihr schonmal dem BIOS nicht in die Quere, das in dem Bereich dazwischen liegt. 0x99999 ist trotzdem eine seltsame Adresse für den Stack (und eine schlechte noch dazu, wegen Alignment).

_________________
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.
Lowlevel - die deutschsprachige OS-Dev-Community
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:53:56 11.07.2010   Titel:              Zitieren

sorry, war 0x9FFFF :D

Wäre das korrekter? Läuft aber auch anders.
Assembler Code:
    mov ax,0xA000
    mov ss,ax      ; stack
    xor sp,sp      ; stackpointer: A0000h
Assembler Code:
mov ax,0xA000
mov ss,ax ; stack
xor sp,sp ; stackpointer: A0000h
Assembler Code:
    mov ax,0xA000
    mov ss,ax      ; stack
    xor sp,sp      ; stackpointer: A0000h


So sieht BL2 am Anfang zur Zeit aus:

Assembler Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
;boot2.asm
[map symbols boot2.map]
[Bits 16]
org 0x500
jmp entry_point                  ; go to entry point

;*******************************************************
;    Includes and Defines
;*******************************************************
%include "gdt.inc'               ; GDT definition
%include "A20.inc'               ; A20 gate enabling
%include "Fat12.inc'             ; FAT12 driver
%include "GetMemoryMap.inc'      ; INT 0x15, eax = 0xE820

%define IMAGE_PMODE_BASE 0x100000 ; where the kernel is to be loaded to in protected mode
%define IMAGE_RMODE_BASE 0x3000  ; where the kernel is to be loaded to in real mode

ImageName     db "KERNEL  BIN'
ImageSize     dd 0

;*******************************************************
;    Data Section
;*******************************************************
msgLoading db 0x0D, 0x0A, "Jumping to OS Kernel...', 0
msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN', 0x0D, 0x0A, 0x0A, 0

entry_point:
    cli                
    xor ax, ax           ; null segments
    mov ds, ax
    mov es, ax
 
 ;=====================================================HOTFIX===ehenkes====
    mov ax,0x9000
    mov ss,ax            ; stack
    xor sp,sp
    dec sp               ; stackpointer: 9FFFFh
 ;=====================================================HOTFIX===ehenkes====
    sti                  

A20:
    call EnableA20
Assembler Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
;boot2.asm
[map symbols boot2.map]
[Bits 16]
org 0x500
jmp entry_point ; go to entry point

;*******************************************************
; Includes and Defines
;*******************************************************
%include "gdt.inc' ; GDT definition
%include "A20.inc' ; A20 gate enabling
%include "Fat12.inc' ; FAT12 driver
%include "GetMemoryMap.inc' ; INT 0x15, eax = 0xE820

%define IMAGE_PMODE_BASE 0x100000 ; where the kernel is to be loaded to in protected mode
%define IMAGE_RMODE_BASE 0x3000 ; where the kernel is to be loaded to in real mode

ImageName db "KERNEL BIN'
ImageSize dd 0

;*******************************************************
; Data Section
;*******************************************************
msgLoading db 0x0D, 0x0A, "Jumping to OS Kernel...', 0
msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN', 0x0D, 0x0A, 0x0A, 0

entry_point:
cli
xor ax, ax ; null segments
mov ds, ax
mov es, ax

;=====================================================HOTFIX===ehenkes====
mov ax,0x9000
mov ss,ax ; stack
xor sp,sp
dec sp ; stackpointer: 9FFFFh
;=====================================================HOTFIX===ehenkes====
sti

A20:
call EnableA20
Assembler Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
;boot2.asm
[map symbols boot2.map]
[Bits 16]
org 0x500
jmp entry_point                  ; go to entry point

;*******************************************************
;    Includes and Defines
;*******************************************************
%include "gdt.inc'               ; GDT definition
%include "A20.inc'               ; A20 gate enabling
%include "Fat12.inc'             ; FAT12 driver
%include "GetMemoryMap.inc'      ; INT 0x15, eax = 0xE820

%define IMAGE_PMODE_BASE 0x100000 ; where the kernel is to be loaded to in protected mode
%define IMAGE_RMODE_BASE 0x3000  ; where the kernel is to be loaded to in real mode

ImageName     db "KERNEL  BIN'
ImageSize     dd 0

;*******************************************************
;    Data Section
;*******************************************************
msgLoading db 0x0D, 0x0A, "Jumping to OS Kernel...', 0
msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN', 0x0D, 0x0A, 0x0A, 0

entry_point:
    cli                
    xor ax, ax           ; null segments
    mov ds, ax
    mov es, ax
 
 ;=====================================================HOTFIX===ehenkes====
    mov ax,0x9000
    mov ss,ax            ; stack
    xor sp,sp
    dec sp               ; stackpointer: 9FFFFh
 ;=====================================================HOTFIX===ehenkes====
    sti                  

A20:
    call EnableA20

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:58:00 11.07.2010, insgesamt 1-mal bearbeitet
taljeth
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.09.2009
Beiträge: 148
Beitrag taljeth Mitglied 12:11:33 11.07.2010   Titel:              Zitieren

Erhard Henkes schrieb:
sorry, war 0x9FFFF :D

Okay. Ich hätte eher 0x9fc00 genommen, sonst macht ihr euch womöglich die EBDA kaputt. Solange ihr die nicht braucht, ist es aber eigentlich auch egal.

Zitat:
Wäre das korrekter? Läuft aber auch anders.
Assembler Code:
    mov ax,0xA000
    mov ss,ax      ; stack
    xor sp,sp      ; stackpointer: A0000h
Assembler Code:
mov ax,0xA000
mov ss,ax ; stack
xor sp,sp ; stackpointer: A0000h
Assembler Code:
    mov ax,0xA000
    mov ss,ax      ; stack
    xor sp,sp      ; stackpointer: A0000h

Ist besser, weil das Alignment dann stimmt. Für die Korrektheit sollte das keine Rolle spielen, aber für Performance könnte es einen Unterschied machen. Nicht, dass das in einem Bootloader entscheidend wäre, aber solche Fehler macht man ja ganz gern konsequent überall...

Edit: Nein, in Wirklichkeit ist es vollkomener Blödsinn. Als allererstes kriegt ihr einen Overflow in sp und schreibt dann den Videospeicher voll. ;)

_________________
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.
Lowlevel - die deutschsprachige OS-Dev-Community


Zuletzt bearbeitet von taljeth am 12:13:12 11.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:28:47 11.07.2010   Titel:              Zitieren

Zitat:
Ich hätte eher 0x9fc00 genommen

Assembler Code:
    mov ax,0x9000
    mov ss,ax     ; stack
    mov sp,0xfc00 ; stackpointer: 9FC00h
Assembler Code:
mov ax,0x9000
mov ss,ax ; stack
mov sp,0xfc00 ; stackpointer: 9FC00h
Assembler Code:
    mov ax,0x9000
    mov ss,ax     ; stack
    mov sp,0xfc00 ; stackpointer: 9FC00h

So besser? Läuft auch. :D
Hauptsache der Kernel überfährt beim Laden ab 0x3000 im RM den Stack nicht.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:29:13 11.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:33:50 11.07.2010   Titel:              Zitieren

Für Interessierte:
http://wiki.osdev.org/Memory_Map_%28x86%29#Extended_BIOS_Data_Area_.28EBDA.29
http://web.archive.org/web/20060508100419/http://heim.ifi.uio.no/~stanisls/helppc/ebda.html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:24:08 11.07.2010   Titel:              Zitieren

0.0.1.29 - Rev: 590

- printf mit task_switching eingerahmt, um VBox und VMWare mit malloc/free/heap-Diagnose laufen zu lassen
- Stack im BL2 noch etwas angepasst

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:50:38 11.07.2010   Titel:              Zitieren

Version 0.0.1.30 - Rev: 591:

- Revision wird jetzt angegeben.
- synchronisation.c/.h hinzugefügt, enthält Code für semaphores (noch fehlerhaft)
-> zum testen: console.c z. 211 und 267 reinnehmen
- getCurrentMilliseconds im Userspace ergänzt, entsprechende Funktionen im Kernel ergänzt und umbenannt
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:22:37 12.07.2010   Titel:              Zitieren

Version 0.0.1.31 - Rev: 592:

Lauffähige Version für weitere Versuche:

1) semaphore reicht noch nicht zum Schutz bei printf in malloc/free-Diagnose, daher zunächst noch task_switching false/true; lock/unlock in console.c auskommentiert

2) free konnten in usb2.c nicht angewendet werden ohne Absturz (daher auskommentiert für weitere Einzelversuche)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:32:15 12.07.2010   Titel:              Zitieren

Version 0.0.1.32 - Rev: 593:

- Alignment bei malloc etwas sparsamer gehalten
- kleine formale Anpassungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:13:28 13.07.2010   Titel:              Zitieren

Version 0.0.1.33 - Rev: 594:

Einführung von:
void* malloc(uint32_t size, uint32_t alignment, char* comment)

Tastenkombination ESC+H führt zu:
void logHeapRegions()

Test mit qemu:
http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_33_heap_Logger.PNG

Damit kann man die Verwendung der Regions auf dem Heap leicht kontrollieren. Fehlentwicklungen wie Memory Leaks und sonstige Ungereimtheiten, aber auch das korrekte Wirken auf dem Heap können somit einfach entdeckt werden.

Damit bleiben wir unserem didaktischem Konzept treu. Welches OS lässt schon den Einblick in den Kernel Heap zu? ;)

Vorsicht bei USB sticks:
Während strg+u (screenshot auf stick) nicht ESC+H verwenden! Zerstört den FS-Aufbau. Hier muss ein Lock eingesetzt werden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:30:00 13.07.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:22:15 13.07.2010   Titel:              Zitieren

Version 0.0.1.34 - Rev: 595:

- usb-Transfer "befreit" nun den Heap auch wieder vollständig
- malloc und free Diagnose nun auch sprechend
- Heap-Regions-Ausgabe nur noch auf Esc+H (also nicht automatisch bei Heap-Erweiterung) und nur noch reservierte Regions (spalte res. könnte entfallen)

Beispiel nach dem Start: http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_34_heap_Logger.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:07:09 13.07.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:56:45 13.07.2010   Titel:              Zitieren

Version 0.0.1.35 - Rev. 596:

vm86.h/c eingebaut, damit es mal los geht ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:28:00 14.07.2010   Titel:              Zitieren

Version 0.0.1.36 - Rev. 597:
(Experimentalzustand bezüglich VM86)


vm86 modul verankert in paging.c, task.c, irq.c und testweise umgesetzt in ckernel.c mit einem Programm vidswtch.com, das via incbin (data.asm) eingeschleust und im Speicher bei 0x100 zur Ausführung im VM86 positioniert wird.

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_36_vm86.PNG

Startet man vidswtch.com unter Win XP: http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_36_vm86_windows.PNG

vidswtch.asm:
Assembler Code:
[bits 16]
[section .text]

mov ax, 0013h
int 10h
int 3
Assembler Code:
[bits 16]
[section .text]

mov ax, 0013h
int 10h
int 3
Assembler Code:
[bits 16]
[section .text]

mov ax, 0013h
int 10h
int 3


INT 10h mit AH = 00h u. AL = 13h: Grafikmodus, 320 x 200 Pixel, 256 Farben (ab MCGA)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:57:01 14.07.2010, insgesamt 6-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:49:11 14.07.2010   Titel:              Zitieren

Version 0.0.1.37 - Rev. 598

- Bugfixes&Ergänzungen bei semaphores
- VM86-Dateien nach user/vm86 verlegt
- makefile baut die o.g. Dateien
- Projektfile aktualisiert


Zuletzt bearbeitet von Mr X am 17:49:40 14.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:24:41 14.07.2010   Titel:              Zitieren

0.0.1.38 - Rev. 599:

r->... und ctx-> zurück gemappt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:16:11 14.07.2010   Titel:              Zitieren

rev. 600:

neuer versuch mit kleinem asm-prog

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:13:57 14.07.2010   Titel:              Zitieren

rev. 601:

asm-prog ausgetauscht für tests problem: popf ??

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:25:32 15.07.2010   Titel:              Zitieren

rev. 602:

vm86.h in ordnung gebracht und fehlende opcodes (in/out) in vm86.c ergänzt, fehlen noch die Umsetzungen von echtem in/out.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        case 0xEF: // outw
            printf("outportw(edx, eax) does not yet work\n");
            // outportw(edx, eax);
            ctx->eip = (uint16_t) (ctx->eip + 1);
            return true;

        case 0xEE: // outb
            printf("outportb(edx, eax) does not yet work\n");
            // outportb(edx,eax);
            ctx->eip = (uint16_t) (ctx->eip + 1);
            return true;

        case 0xED: // inw
            printf("inportb(edx) does not yet work\n");
            // eax = inportb(edx);
            ctx->eip = (uint16_t) (ctx->eip + 1);
            return true;

        case 0xEC: // inb
            printf("inportw(edx) does not yet work\n");
            // eax = (eax & 0xFF00) + inportb(edx);
            ctx->eip = (uint16_t) (ctx->eip + 1);
            return true;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
case 0xEF: // outw
printf("outportw(edx, eax) does not yet work\n");
// outportw(edx, eax);
ctx->eip = (uint16_t) (ctx->eip + 1);
return true;

case 0xEE: // outb
printf("outportb(edx, eax) does not yet work\n");
// outportb(edx,eax);
ctx->eip = (uint16_t) (ctx->eip + 1);
return true;

case 0xED: // inw
printf("inportb(edx) does not yet work\n");
// eax = inportb(edx);
ctx->eip = (uint16_t) (ctx->eip + 1);
return true;

case 0xEC: // inb
printf("inportw(edx) does not yet work\n");
// eax = (eax & 0xFF00) + inportb(edx);
ctx->eip = (uint16_t) (ctx->eip + 1);
return true;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        case 0xEF: // outw
            printf("outportw(edx, eax) does not yet work\n");
            // outportw(edx, eax);
            ctx->eip = (uint16_t) (ctx->eip + 1);
            return true;

        case 0xEE: // outb
            printf("outportb(edx, eax) does not yet work\n");
            // outportb(edx,eax);
            ctx->eip = (uint16_t) (ctx->eip + 1);
            return true;

        case 0xED: // inw
            printf("inportb(edx) does not yet work\n");
            // eax = inportb(edx);
            ctx->eip = (uint16_t) (ctx->eip + 1);
            return true;

        case 0xEC: // inb
            printf("inportw(edx) does not yet work\n");
            // eax = (eax & 0xFF00) + inportb(edx);
            ctx->eip = (uint16_t) (ctx->eip + 1);
            return true;


... muss context_v86_t erweitert werden. In registers_t ist das alles drinnen, evtl. gleich ganz ersetzen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:39:29 15.07.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:03:10 15.07.2010   Titel:              Zitieren

0.0.1.39 - Rev. 603:

irq.c und vm86.c: Korrekturen und in/out ergänzt
task.c: create_vm86_ctask eingefügt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:24:03 15.07.2010   Titel:              Zitieren

0.0.1.40 - Rev. 604:

Korrekturen im vm86 Modul (bezüglich useresp)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:21:19 16.07.2010   Titel:              Zitieren

0.0.1.41 - Rev. 605: :live:

Korrekturen in vm86.c: ... noch weitere stack[0] und stack[2] vertauscht

Folgendes machen, wer den neuen Video Mode (320*200, 16 Farben, ab 0xA0000) sehen will:
irq.c, zeile 164: // waitForKeyStroke(); auskommentieren

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:31:28 16.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:04:44 16.07.2010   Titel:              Zitieren

0.0.1.42 - Rev: 606

vm86.h/c modul weiter bereinigt/optimiert
irq.c verbessert
neues vidswtch.asm (Beispiel) schaltet 320*200 Modus ein und dann zurck auf 80*50

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:30:19 16.07.2010   Titel:              Zitieren

0.0.1.43 - Rev: 607:

vbe.h integriert

Screenshot (PrettyOS in 320*200 Auflösung): http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_43_vm86_grafik.PNG ;)

Problem: real PC funktioniert nicht

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:44:35 16.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:58:26 16.07.2010   Titel:              Zitieren

0.0.1.44 - Rev: 608:

HLT noch eingebaut in vm86.c (dort exit() aus task.c)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:49:35 16.07.2010   Titel:              Zitieren

Rev. 611:

wurde versehentlich einzeln geschickt :rolleyes:
neu: vbe.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:44:54 17.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:16:20 17.07.2010   Titel:              Zitieren

0.0.1.46 - Rev: 612

vbe.h/c weiter ergänzt. SetPixel getestet, funktioniert noch nicht, wie es soll.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:17:16 17.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:34:46 17.07.2010   Titel:              Zitieren

0.0.1.47 - Rev: 613

SetPixel funktioniert!

Problem war die y-Auflösung, die qemu hier bietet.
Da stehen keine 200 zur Verfügung.

Daher nun 13 gewählt für y. setPixel Klappt!

Problem ist im noch vm86-handler-modul. Die BIOS-Fkt. werden noch nicht wie im RM (z.B. test im bootloader) ausgeführt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:47:02 17.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:42:19 17.07.2010   Titel:              Zitieren

0.0.1.48 - Rev: 614

vm86-handler noch korrigiert, ändert aber nichts am video-verhalten

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:14:51 17.07.2010   Titel:              Zitieren

0.0.1.49 - Rev: 615:

Noch einige Korrekturen bei vm86.c (helfen aber leider nicht)

Bei rev. 607 wurde "PrettyOS" korrekt dargestellt, was die y-Auflösung angeht. Bitte Unterschied suchen helfen!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:24:37 17.07.2010   Titel:              Zitieren

0.0.1.50 - Rev: 616:

vm86.c: ip++ bei ctx->eip++ ergänzt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:59:39 17.07.2010   Titel:              Zitieren

0.0.1.51 - Rev: 617:

weitere Korrekturen in vm86.c (cs:eip und ip)

Löst aber immer noch nicht das Grafikdarstellungsproblem :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:56:46 17.07.2010   Titel:              Zitieren

0.0.1.52 - Rev: 618:

vm86.c: weitere versuche der verbesserung, hilft alles nichts

EDIT: ohne #define _VM_DIAGNOSIS_ reboot ganz vorne

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:57:30 17.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:04:57 17.07.2010   Titel:              Zitieren

0.0.1.53 - Rev: 619

roll-back bei vm86.c, irq.c, vm86.h auf vers. 607

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:22:00 17.07.2010   Titel:              Zitieren

0.0.1.54 - Rev: 620

vm86.c: HLT nach exit() wieder eingebaut

Jetzt funktioniert es endlich so wie gewollt :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:14:12 17.07.2010   Titel:              Zitieren

0.0.1.55 - Rev: 621

irq.c, vm86.c Restaurationsarbeiten laufen schrittweise an:
entscheidender Fehler: printf während vm86 (nun alles hinter Gitter)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:39:33 17.07.2010   Titel:              Zitieren

0.0.1.56 - Rev: 622:

wegen #PF auf VMWare bei 1045h und bei real PC bei 9FC3Fh zunächst alles frei gegeben für user von 0 - FFFFFh

Tests: Qemu, Bochs, Vbox gehen wie gewünscht.

VMWare und real PC zeigen die Grafik nicht.

Vermutung: Hardware-Frequenzen müssen noch in der SW eingestellt werden

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:48:36 17.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:12:52 18.07.2010   Titel:              Zitieren

0.0.1.57 - Rev: 623:

vm86.c: weiter korrigiert

Real PC zum ersten Mal ok! Rückschalten auf Textmodus 80*50 bei real PC noch nicht sauber funktionsfähig. Die Zeichen fehlen.

Bochs: http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_57_vm86_grafik.PNG (so sieht es inzwischen auch auf real PC aus)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:02:38 18.07.2010, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:43:36 18.07.2010   Titel:              Zitieren

Version 0.0.1.58:

- Dokumentationsdatei hinzugefügt
- Vorbereitung für Scheduler-Sleep
- Optimierung beim task-switch
- Kleine Korrekturen/Optimierungen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:04:57 18.07.2010   Titel:              Zitieren

Version 0.0.1.58 - Rev: 625

Rücksprung auf text mode gelöst, zuerst muss ein Mode mit AH=00 gewählt werden ;)

Assembler Code:
text_mode:
    mov ax, 0x0002
    int 0x10   
    mov ax, 0x1112
    xor bl, bl
    int 0x10
Assembler Code:
text_mode:
mov ax, 0x0002
int 0x10
mov ax, 0x1112
xor bl, bl
int 0x10
Assembler Code:
text_mode:
    mov ax, 0x0002
    int 0x10   
    mov ax, 0x1112
    xor bl, bl
    int 0x10

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:06:19 18.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:50:10 18.07.2010   Titel:              Zitieren

Version 0.0.1.58 - Rev: 626 (kernel stabil)

- Aktuelle Palette dargestellt anstelle grüne Linie
- BL2 (formal)
- vidswtch.asm (Marke gesetzt bei Schriftzug PrettyOS)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:02:20 19.07.2010   Titel:              Zitieren

Version 0.0.1.59 - Rev: 628

- PageDirectory aus den vm86 Funktionen entfernt
- Linien in hellblau (9)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:05:26 19.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:29:39 19.07.2010   Titel:              Zitieren

Version 0.0.1.61 - Rev: 630

- vidswtch.asm: Schriftzug PrettyOS entfernt
- vbe.h/c: drawCircle
- util.h/c: sqrt

Leider noch Reboot

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:15:51 19.07.2010   Titel:              Zitieren

Version 0.0.1.62 - Rev: 631

FPU-Problem mit fabs und sqrt bezüglich vm86 zurückschalten in TextMode

daher line und drawCircle auskommentiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:15:30 19.07.2010   Titel:              Zitieren

Version 0.0.1.63

- Scheduler unterstützt jetzt das schlafen. Kein Busy-Sleep mehr
- timer: umgebaut auf scheduler-sleep, Funktionen umbenannt, aufgeräumt
- Bugfixes in synchronisation, list, ...; Umsortierung der Includes dort
- Funktionen von ckernel.c nach vbe.c ausgelagert
- Sound wieder aktiviert
- ...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:25:13 19.07.2010   Titel:              Zitieren

Version 0.0.1.64 Rev: 633

getVBEInfo eingebaut in vidswtch.asm, Daten ab 0x1000 (ES:DI)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:22:29 19.07.2010   Titel:              Zitieren

0.0.1.65 - Rev: 634

somone hat Info-Strukutren für Grafikeigenschaften eingefügt und übergibt diese bei 0x1000 aus dem vm86 task mit vidswtch.asm.

So ändern:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
void vgaDebug()
{
    printf("\nsizeof VgaInfoBlock_t: %X\n",sizeof (VgaInfoBlock_t));
    printf("signature:    %s\n", pVga->VESASignature);
    printf("version:      %u\n", pVga->VESAVersion);
    printf("OEMString:    %s\n", pVga->OEMStringPtr);
    printf("Capabilities: %X\n", pVga->Capabilities);
    printf("VideoModePtr: %X\n", pVga->VideoModePtr);
    printf("TotalMem:     %u\n", pVga->TotalMemory);
    printf("reserved:     %u\n", pVga->reserved[236]);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
void vgaDebug()
{
printf("\nsizeof VgaInfoBlock_t: %X\n",sizeof (VgaInfoBlock_t));
printf("signature: %s\n", pVga->VESASignature);
printf("version: %u\n", pVga->VESAVersion);
printf("OEMString: %s\n", pVga->OEMStringPtr);
printf("Capabilities: %X\n", pVga->Capabilities);
printf("VideoModePtr: %X\n", pVga->VideoModePtr);
printf("TotalMem: %u\n", pVga->TotalMemory);
printf("reserved: %u\n", pVga->reserved[236]);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
void vgaDebug()
{
    printf("\nsizeof VgaInfoBlock_t: %X\n",sizeof (VgaInfoBlock_t));
    printf("signature:    %s\n", pVga->VESASignature);
    printf("version:      %u\n", pVga->VESAVersion);
    printf("OEMString:    %s\n", pVga->OEMStringPtr);
    printf("Capabilities: %X\n", pVga->Capabilities);
    printf("VideoModePtr: %X\n", pVga->VideoModePtr);
    printf("TotalMem:     %u\n", pVga->TotalMemory);
    printf("reserved:     %u\n", pVga->reserved[236]);
}


http://www.karig.net/os/001a.html <--- interessanter Link

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:49:56 19.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:53:28 19.07.2010   Titel:              Zitieren

0.0.1.66 - Rev. 635

somone hat vbe.h/c weiter ausgebaut und die Daten mittels vm86 task gezogen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:02:28 20.07.2010   Titel:              Zitieren

0.0.1.67 - Rev: 636

- bitmap via incbin includiert (font.bin, font.bmp)
- Bitmap Header auslesen, anzeigen test
- tool font2bin hinzugefügt (tools/src/font2bin.c, tools/font2bin.exe)
- data.asm erweitert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:12:57 20.07.2010   Titel:              Zitieren

vbe.h, zeile 9:
C/C++ Code:
#define VM86_SWITCH_TO_TEXT  ((void*)0x137)
C/C++ Code:
#define VM86_SWITCH_TO_TEXT ((void*)0x137)
C/C++ Code:
#define VM86_SWITCH_TO_TEXT  ((void*)0x137)


somone: Was genau macht diese Version? wozu dient font2bin.exe?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:25:37 20.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:40:42 20.07.2010   Titel:              Zitieren

0.0.1.68 - Rev: 637:

- vbe.h, zeile 9 korrigiert
- ckernel.c: grünes Rechteck 2 Pixel angehoben
- Ausgabe von VgaInfoBlock optimiert
- Erste 16 Videomodes werden ausgegeben (Video Modes Ptr)
- kleine Fehlerkorrekturen (auch konseqent %i gegen %u getauscht)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:44:14 20.07.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:55:04 20.07.2010   Titel:              Zitieren

0.0.1.69 - Rev: 638:

- Erste 16 Videomodes (0xFFFF zeigt Ende an) werden ausgegeben (Fehler behoben)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 15:43:50 21.07.2010   Titel:              Zitieren

version 0.0.1.70 - Rev: 639

vidswtch.asm
- superVGA modline 0101h (640x480x8) getestet, wieder einkommentiert
- Versuch Videomemory bei Adresse: 0xE0000000 anzusprechen (paging.c)

vbe.c/vbe.h
- versuch Bitmap zu blitten


Zuletzt bearbeitet von Erhard Henkes am 23:41:46 21.07.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 23:47:09 21.07.2010   Titel:              Zitieren

version 0.0.1.71 - Rev: 640

flpydsk.c
- void flpydsk_wait_irq() um sti() erweitert

kheap.c
- #define VIDEO_DATA_START ((uint8_t*)0xE0000000)

vbe.c
- Speicheradressen getestet

vidswtch.asm
- Speicheradressen getestet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:14:09 22.07.2010   Titel:              Zitieren

Version 0.0.1.72:

- current_console heißt nun currentConsole
- Codevereinfachungen in console.c
- Codeformatierungen
- [EDIT] Zahlreiche waitForKeyStroke() weggemacht


Zuletzt bearbeitet von Mr X am 00:18:02 22.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:43:31 22.07.2010   Titel:              Zitieren

0.0.1.73 - Rev: 642

läuft, aber unklar, was genau gehen soll ... :rolleyes:

@somone: bitte aufräumen und klar stellen, was passieren soll, was nicht geht, usw.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:07:04 22.07.2010   Titel:              Zitieren

0.0.1.74 - Rev: 643

VideoRam allokiert:

vbe.h:
C/C++ Code:
#define VIDEO_MEMORY 0xE0000000 // Beispiel VBox; für Qemu 0xF2000000 einsetzen
C/C++ Code:
#define VIDEO_MEMORY 0xE0000000 // Beispiel VBox; für Qemu 0xF2000000 einsetzen
C/C++ Code:
#define VIDEO_MEMORY 0xE0000000 // Beispiel VBox; für Qemu 0xF2000000 einsetzen


vbe.c:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
void setVideoMemory()
{
    // size_of_video_ram

    SCREEN = (uint8_t*) paging_acquire_pcimem(VIDEO_MEMORY);
    printf("\nSCREEN (virt): %X\n",SCREEN);
    for (uint32_t i=VIDEO_MEMORY; i<(VIDEO_MEMORY+0x1000000);i=i+0x1000) // 4 MiB video ram
    {
        printf("\t: %X",paging_acquire_pcimem(i));
    }
    waitForKeyStroke();
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
void setVideoMemory()
{
// size_of_video_ram

SCREEN = (uint8_t*) paging_acquire_pcimem(VIDEO_MEMORY);
printf("\nSCREEN (virt): %X\n",SCREEN);
for (uint32_t i=VIDEO_MEMORY; i<(VIDEO_MEMORY+0x1000000);i=i+0x1000) // 4 MiB video ram
{
printf("\t: %X",paging_acquire_pcimem(i));
}
waitForKeyStroke();
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
void setVideoMemory()
{
    // size_of_video_ram

    SCREEN = (uint8_t*) paging_acquire_pcimem(VIDEO_MEMORY);
    printf("\nSCREEN (virt): %X\n",SCREEN);
    for (uint32_t i=VIDEO_MEMORY; i<(VIDEO_MEMORY+0x1000000);i=i+0x1000) // 4 MiB video ram
    {
        printf("\t: %X",paging_acquire_pcimem(i));
    }
    waitForKeyStroke();
}


In mib:
C/C++ Code:
uint32_t PhysBasePtr; // 32-bit physical memory address
C/C++ Code:
uint32_t PhysBasePtr; // 32-bit physical memory address
C/C++ Code:
uint32_t PhysBasePtr; // 32-bit physical memory address


... kommt aber noch nicht an. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:23:24 22.07.2010   Titel:              Zitieren

0.0.1.75 - Rev: 644

qemu: 0xF2000000

mib korrigiert: in asm und vbe: 0x1200 (dennoch kommen keine daten in qemu)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:36:13 22.07.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 18:58:53 22.07.2010   Titel:              Zitieren

0.0.1.76 - Rev: 645

vidswtch.asm
- erweitert

vbe.c/vbe.h
- erweitert

font.bin
- erneuert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:29:01 23.07.2010   Titel:              Zitieren

Zwischenstand Grafik:

0.0.1.77 - Rev: 646

zur korrekten abfrage des mib gehört die übergabe des video mode in cx:
Assembler Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
ModeInfoBlock:
    xor ax, ax
    mov es, ax
    mov ax, 0x1200
    mov di, ax
    mov ax, 0x4F01
    mov cx, 0x0101
    int 10h
Assembler Code:
1
2
3
4
5
6
7
8
ModeInfoBlock:
xor ax, ax
mov es, ax
mov ax, 0x1200
mov di, ax
mov ax, 0x4F01
mov cx, 0x0101
int 10h
Assembler Code:
1
2
3
4
5
6
7
8
ModeInfoBlock:
    xor ax, ax
    mov es, ax
    mov ax, 0x1200
    mov di, ax
    mov ax, 0x4F01
    mov cx, 0x0101
    int 10h


Die notwendige VideoRam-Größe findet man hier:
http://www.pcmag.com/encyclopedia_term/0,2542,t=VESA+modes&i=53780,00.asp

vidswtch.asm etwas ausgeräumt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:31:11 23.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:47:40 23.07.2010   Titel:              Zitieren

0.0.1.78 - Rev: 647

bei #define _FLOPPY_DIAGNOSIS_ noch motor on/off signalisiert. Vielleicht findet jemand den Grund, warum die Floppy-lampe (bochs) nach dem Laden eines Programms eingeschaltet bleibt.

Bei bochs übrigens: 0xE0000000 als video ram für video mode 0x0101

http://codepad.org/SeKnKNtX

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:51:42 23.07.2010, insgesamt 2-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:10:47 23.07.2010   Titel:              Zitieren

0.0.1.79 - Rev: 648

Grafik initalisierungsreihenfolge geändert so dass, mib->PhysBasePtr in SetVideoMemory() benutzt werden kann.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:55:45 23.07.2010   Titel:              Zitieren

0.0.1.80 - Rev: 649

Zwischneschritt:

- vidswtch.asm umgebaut
- automatisches Holen von TotalMemory und PhysBasePtr

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:39:20 23.07.2010   Titel:              Zitieren

0.0.1.81 - Rev: 650

Zwischenstand: VideoRam wird in Qemu korrekt geladen

Das ist aber auch das letzte :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:40:16 23.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:51:56 23.07.2010   Titel:              Zitieren

0.0.1.82 - Rev. 651

etwas besser, aber noch ziemlich kaputt :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:27:18 23.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:58:45 23.07.2010   Titel:              Zitieren

0.0.1.83 - Rev: 652

zunächst mal "repariert".

Problem: ckernel.c, zeile 132 ff.
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
    setVideoMemory();  
    initGraphics(640, 480, 8);

    printf("\nSTOP vor switchToVideoMode");
    waitForKeyStroke();

    switchToVideomode();

    printf("\nSTOP nach switchToVideoMode");
    waitForKeyStroke();
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
setVideoMemory();
initGraphics(640, 480, 8);

printf("\nSTOP vor switchToVideoMode");
waitForKeyStroke();

switchToVideomode();

printf("\nSTOP nach switchToVideoMode");
waitForKeyStroke();
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
    setVideoMemory();  
    initGraphics(640, 480, 8);

    printf("\nSTOP vor switchToVideoMode");
    waitForKeyStroke();

    switchToVideomode();

    printf("\nSTOP nach switchToVideoMode");
    waitForKeyStroke();

schaltet nicht in den gewünschten video mode

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:15:06 23.07.2010   Titel:              Zitieren

0.0.1.84 - Rev: 653

... geht wieder!

Umbau in vidswtch.asm hat geholfen

Bochs (E0000000), Qemu (F2000000), VMWare (D0000000)

VBox: klappt nicht mit Grafik (zeigt seltsamen phys base ptr)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:22:46 23.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:03:11 24.07.2010   Titel:              Zitieren

0.0.1.85 - Rev: 654

0x100 in ckernel. c und comments bei waitFor...

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:08:36 24.07.2010   Titel:              Zitieren

Version 0.0.1.86:

- Doku nach documentation gelegt, Syscalls.odt ergänzt, enthält die geplanten Syscalls
- abs und sgn wie in vbe.c gewünscht nach util.c gelegt
- strg+t-Problem behoben
- Aufräumarbeiten (Codestyle)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:43:59 24.07.2010   Titel:              Zitieren

0.0.1.87 - Rev: 656

scheduler/task-log überarbeitet

Übersicht über Tasten-Kommandos:

strg + t : Task-Übersicht
strg + s : Screenshot auf Floppy
strg + u : Screenshot auf USB-MSD
ESC + h : Heap-Aufbau (Verwendung der Regions)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:09:08 24.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 09:34:42 24.07.2010   Titel:              Zitieren

0.0.1.88 - Rev. 657

bitmap-darstellung etwas verbessert (Versuch)
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void bitmap()
{
    uintptr_t bitmap_start = 0x2400 + sizeof(BitmapHeader_t);
    uintptr_t bitmap_end   = bitmap_start + 256*128;

    uint32_t i = bitmap_end;
    for(uint32_t y=0;y<256;y++)
    {
        for(uint32_t x=0;x<128;x++)
        {
            SCREEN[ x + y * mib->XResolution * mib->BitsPerPixel/8 ] = *(uint8_t*)(i * mib->BitsPerPixel/8 + bitmap_start);
            i--;
        }
    }    
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void bitmap()
{
uintptr_t bitmap_start = 0x2400 + sizeof(BitmapHeader_t);
uintptr_t bitmap_end = bitmap_start + 256*128;

uint32_t i = bitmap_end;
for(uint32_t y=0;y<256;y++)
{
for(uint32_t x=0;x<128;x++)
{
SCREEN[ x + y * mib->XResolution * mib->BitsPerPixel/8 ] = *(uint8_t*)(i * mib->BitsPerPixel/8 + bitmap_start);
i--;
}
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void bitmap()
{
    uintptr_t bitmap_start = 0x2400 + sizeof(BitmapHeader_t);
    uintptr_t bitmap_end   = bitmap_start + 256*128;

    uint32_t i = bitmap_end;
    for(uint32_t y=0;y<256;y++)
    {
        for(uint32_t x=0;x<128;x++)
        {
            SCREEN[ x + y * mib->XResolution * mib->BitsPerPixel/8 ] = *(uint8_t*)(i * mib->BitsPerPixel/8 + bitmap_start);
            i--;
        }
    }    
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:00:11 24.07.2010   Titel:              Zitieren

0.0.1.89 - Rev: 658

ein anfang :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:15:23 24.07.2010   Titel:              Zitieren

0.0.1.90 - Rev: 659

- bitmap schon besser sichtbar
- bitmap() mit variablen

Unser erstes "Bitmap" (320*200, 256 Farben) mit PrettyOS soll hier mal festgehalten werden:
http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_90_bitmap.PNG :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:49:22 24.07.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:29:51 24.07.2010   Titel:              Zitieren

Wenn auch weniger sichtbar, auch der Scheduler hat zuletzt große Fortschritte gemacht ;)

Version 0.0.1.91:

- waitForTask eingebaut
- waitForKeyStrokes durch waitForTasks ersetzt -> wesentlich weniger Keystrokes nötig
- Syscalls.odt aktualisiert
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:24:18 24.07.2010   Titel:              Zitieren

Version 0.0.1.92 - Rev. 661

VgaInfoBlock_t überarbeitet
http://www.delorie.com/djgpp/doc/ug/graphics/vesa.html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:04:28 24.07.2010   Titel:              Zitieren

Version 0.0.1.93 - Rev. 662

Zwischen schritt:
Beim ersten Durchlauf zum Holen der vga- und mib-Daten Einstieg ohne switchToVideo.

läuft damit wieder auf VBox, Bochs, Qemu

Man sieht den mapping Vorgang.

Problem: Bild noch versetzt, Palette falsch.

RealPC:
<Cuervo> hab 3 getestet, einer kommt bis zur Shell, einer startet direkt neu und einer macht in einer Endlosschleife invalid opcode

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:44:25 24.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:08:06 24.07.2010   Titel:              Zitieren

Version 0.0.1.94 - Rev. 663

ablauf in vidswtch.asm:
1) vga, mib
(video ram mappen)
2) switch

Nun wird das Bild auch auf realPC angezeigt (phys. base ptr: B000000 wird mit 256 MB nach virtuell E0000000-F0000000 gemappt)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:21:44 24.07.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:30:38 24.07.2010   Titel:              Zitieren

Version 0.0.1.95:

- Syscalls umsortiert. Sämtliche Syscalls haben neue Nummern. Das erfordert, das alle Userprogramme neukompiliert werden. Das wurde in dieser Revision für alle Beiliegenden getan.
- Syscall.h/.c aufgeräumt, DEFN_SYSCALL und DECL_SYSCALL haben sich als überflüssig herausgestellt -> Entfernt, da unnützer Wartungsaufwand. (Relikt aus dem Tutorial von JM, der den Header aus dem kernel wohl auch im userspace includieren wollte.)
- Syscalls für Dateizugriff angelegt, sollte funktionieren. Die file_t-Struktur ist allerdings noch nicht (vollständig) implementiert, deren Member können aus dem Userspace nicht genutzt werden
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 21:28:35 24.07.2010   Titel:              Zitieren

version 0.0.1.96 - Rev: 665

- SCREEN mit der vermutlich fehlenden Farbpalette (im moment 256 Farben) gerade gerückt.
- Bitmap funktion um positionierung erweitert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:05:49 24.07.2010   Titel:              Zitieren

version 0.0.1.97

Zwischenstand zum Experimentieren mit den Paletten in SCREEN und BMP

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:20:32 25.07.2010   Titel:              Zitieren

0.0.1.98 - Rev: 667

Bitmap wird wieder angezeigt.

Folgender Code in bitmap(...) ist extrem kritisch und wurde daher nach einigen erfolglosen Versuchen auskommentiert:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
    if(mib->BitsPerPixel == 8)
    {        
       
        BMPInfo_t* bmpinfo = (void*)0x2400;
       
        for(uint8_t j=0; j<256; j++)
        {
           ScreenPal[j].red    = (bmpinfo->bmicolors[j].red)   >> 6;
           ScreenPal[j].green  = (bmpinfo->bmicolors[j].green) >> 6;
           ScreenPal[j].blue   = (bmpinfo->bmicolors[j].blue)  >> 6;
        }
        waitForTask(create_vm86_task(VM86_SETPALETTE));  // OK  
    }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
if(mib->BitsPerPixel == 8)
{

BMPInfo_t* bmpinfo = (void*)0x2400;

for(uint8_t j=0; j<256; j++)
{
ScreenPal[j].red = (bmpinfo->bmicolors[j].red) >> 6;
ScreenPal[j].green = (bmpinfo->bmicolors[j].green) >> 6;
ScreenPal[j].blue = (bmpinfo->bmicolors[j].blue) >> 6;
}
waitForTask(create_vm86_task(VM86_SETPALETTE)); // OK
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
    if(mib->BitsPerPixel == 8)
    {        
       
        BMPInfo_t* bmpinfo = (void*)0x2400;
       
        for(uint8_t j=0; j<256; j++)
        {
           ScreenPal[j].red    = (bmpinfo->bmicolors[j].red)   >> 6;
           ScreenPal[j].green  = (bmpinfo->bmicolors[j].green) >> 6;
           ScreenPal[j].blue   = (bmpinfo->bmicolors[j].blue)  >> 6;
        }
        waitForTask(create_vm86_task(VM86_SETPALETTE));  // OK  
    }


waitForTask(create_vm86_task(VM86_SETPALETTE)); <--- unkritisch

Vielen Dank übrigens an MrX für die Schaffung der Funktion waitForTask! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:46:17 25.07.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:44:28 25.07.2010   Titel:              Zitieren

0.0.1.99 - Rev: 668

Unglaublich, aber mit 255 anstelle 256 geht es.
Keine Ahnung, was da genau passiert.

Die Palette verändert sich übrigens nicht durch die durchgeführte Aktion. :rolleyes:

Falls jemand weiß wie man die beiden Paletten abgleicht, bitte um Nachhilfe oder Link. Ansonsten empfiehlt es sich wohl, auf höhere Farbenauflösungen umzusteigen und die 256-Farben-Welt zu verlassen. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:48:30 25.07.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:30:52 25.07.2010   Titel:              Zitieren

Rev. 0.0.1.100:

- setPalette an Funktion 4F08h angepasst (Seite 53 vbe3 spec)
- Komprimierung auf 6:6:6 eingestellt
C/C++ Code:
typedef struct
{
    uint8_t blue        : 6;
    uint8_t green       : 6;
    uint8_t red         : 6;
    uint8_t reserve     : 6;
} __attribute__((packed)) RGBQuadPacked_t;
C/C++ Code:
typedef struct
{
uint8_t blue : 6;
uint8_t green : 6;
uint8_t red : 6;
uint8_t reserve : 6;
} __attribute__((packed)) RGBQuadPacked_t;
C/C++ Code:
typedef struct
{
    uint8_t blue        : 6;
    uint8_t green       : 6;
    uint8_t red         : 6;
    uint8_t reserve     : 6;
} __attribute__((packed)) RGBQuadPacked_t;


klappt aber noch nicht

auch nach Korrektur
mov bx, 6

in vidstwch.asm, zeile 89 gehts auch nicht

mein Fazit: weg mit diesem Paletten Blödsinn, hin zu 24 bit colors! :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:41:26 25.07.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 14:21:21 25.07.2010   Titel:              Zitieren

version 0.0.1.101 - Rev: 670

- get/set VgaInfoBlock/ModeInfoBlock abgeändert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:51:52 25.07.2010   Titel:              Zitieren

version 0.0.1.102 - Rev: 671:

Assembler Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SetDacPalette:
    mov ax, 0x4F08
    mov bl, 0
    mov bx, 6                                           
    int 10h
     jmp exitvm86

GetDacPalette:
    mov ax, 0x4F08
    mov bl, 1
    int 10h
     jmp exitvm86

SetPalette:
    mov ax, 0x4F09      ;        Set/Get DAC Palette Format
    mov bl, 0            ;=00h    Set palette data
    mov bx, 6            ; ??                               
    mov cx, 0xFF
    xor dx, dx
    xor ax, ax
    mov es, ax
    mov di, 0x1500
    int 10h
    jmp exitvm86
Assembler Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SetDacPalette:
mov ax, 0x4F08
mov bl, 0
mov bx, 6
int 10h
jmp exitvm86

GetDacPalette:
mov ax, 0x4F08
mov bl, 1
int 10h
jmp exitvm86

SetPalette:
mov ax, 0x4F09 ; Set/Get DAC Palette Format
mov bl, 0 ;=00h Set palette data
mov bx, 6 ; ??
mov cx, 0xFF
xor dx, dx
xor ax, ax
mov es, ax
mov di, 0x1500
int 10h
jmp exitvm86
Assembler Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SetDacPalette:
    mov ax, 0x4F08
    mov bl, 0
    mov bx, 6                                           
    int 10h
     jmp exitvm86

GetDacPalette:
    mov ax, 0x4F08
    mov bl, 1
    int 10h
     jmp exitvm86

SetPalette:
    mov ax, 0x4F09      ;        Set/Get DAC Palette Format
    mov bl, 0            ;=00h    Set palette data
    mov bx, 6            ; ??                               
    mov cx, 0xFF
    xor dx, dx
    xor ax, ax
    mov es, ax
    mov di, 0x1500
    int 10h
    jmp exitvm86

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:41:47 25.07.2010   Titel:              Zitieren

version 0.0.1.103 - Rev: 672

- set/getDACPalette funktionen definiert.
- setPalette(RGBQuadPacked_t* RGB); Funktion.
- getPalette() in ckernel.c eingefügt, liefert noch 0 werte.
- setPalette(ScreenPal); in bitmap(); erstmal wieder auskommentiert.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:22:44 25.07.2010   Titel:              Zitieren

0.0.1.104 - Rev: 673

- Reihenfolge der Paletteneinträge in BMP gezeigt Aufbau: umgekehrt und BGR0
(leider hat unser Bild nicht die Standardpalette mit den ersten 16 Farben)
- SetPalette führt noch zu einem seltsamen "Textbild" mit niedriger Auflösung, daher auskommentiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:23:10 25.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:00:59 25.07.2010   Titel:              Zitieren

0.0.1.105 - Rev: 674

- Aufbau in ScreenPal (jetzt bei 0x1600) wird gezeigt und stimmt
- setPalette kann man nun endlich ausführen

Wirkung noch nicht wie gewünscht

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:01:29 25.07.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 20:26:27 25.07.2010   Titel:              Zitieren

version 0.0.1.106 - Rev: 675

- Neue SetDAC(...); Funktion (32bit protected mode)

- bitmap(...) Funktion um "if(mib->DirectColorModeInfo == 1)..." erweitert

mit der SetDAC(...); Funktion wird jetzt die palette gesetzt, aber noch nicht mit dem gewünschten ergebnis...
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 21:59:33 25.07.2010   Titel:              Zitieren

version 0.0.1.107 - Rev: 676

- DAC Funktionen zum testen hinzugefügt
void Write_DAC_C_Palette(...);
void Set_DAC_C(...);
void Read_DAC_C_Palette(...);
void Get_DAC_C(...);

- Zum anzeigen der Palette im VideoMode
printPalette(...);
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:29:35 25.07.2010   Titel:              Zitieren

Buch: http://books.google.de/books?id=gZ5SDTpMR-MC&printsec=frontcover#v=onepage&q&f=false

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:27:40 26.07.2010   Titel:              Zitieren

Version 0.0.1.108 - Rev: 677

set_DAC_C verwendet die Ports:
http://wiki.osdev.org/VGA_Hardware#VGA_Registers

Frage: warum wird die BMP-Palette nicht richtig ausgelesen/übertragen?

Alle structs und Konstanten überprüfen, notfalls roll-back.
Hauptvorteil ist ja nun das richtige Setzen der palette mittels set_DAC_C.
Nun muss die bmp-palette wieder richtig hingeschoben werden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:19:06 26.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:49:41 26.07.2010   Titel:              Zitieren

0.0.1.109 - Rev: 678

Paletten-Thema gelöst! :live:

In die BMPInfo_t war ein Fehler (ein kleines Sternchen!) rein geraten, so ist es richtg:
C/C++ Code:
typedef struct
{
    BitmapHeader_t bmiheader;
    RGBQuad_t bmicolors[256];
} __attribute__((packed)) BMPInfo_t;
C/C++ Code:
typedef struct
{
BitmapHeader_t bmiheader;
RGBQuad_t bmicolors[256];
} __attribute__((packed)) BMPInfo_t;
C/C++ Code:
typedef struct
{
    BitmapHeader_t bmiheader;
    RGBQuad_t bmicolors[256];
} __attribute__((packed)) BMPInfo_t;


... und die Reihenfolge ist bei beiden Paletten "umgekehrt".
Leider findet man so etwas nicht richtig beschrieben (selbst in der vbe3 spec nicht).

Nun muss man nur noch die eigentlichen Bitmap-"Daten" korrekt platzieren. ;)

Läuft auf qemu-EHCI.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:54:45 26.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:59:38 26.07.2010   Titel:              Zitieren

0.0.1.110 - Rev: 679

... auch im else-zweig beide umgekehrt. Dort hilft es aber leider noch nicht zur richtigen Palette. Nun hat man aber ein gutes Vorbild im if-Zweig und kann dort mal nachschauen, was da anders läuft. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 13:31:26 26.07.2010   Titel:              Zitieren

version 0.0.1.111 - Rev: 680

ModeInfoBlock_t erweitert (vbe 2.0):
uint32_t OffScreenMemOffset; // pointer to start of off screen memory
uint16_t OffScreenMemSize; // amount of off screen memory in 1k units

dementsprechend vgaDebug(...); angepasst und die Anzeige der Videomodes korrigiert.

printPalette(...); Funktioniert jetzt, leider noch mit der SET_DAC_C funktion.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:50:46 26.07.2010   Titel:              Zitieren

0.0.1.112: korrekte Geometrie! korrekte Farben! :)

- bitmap(...) verbessert: mehrere bitmaps gleichzeitig, vereinfacht (ohne if/else)
- bitmaps werden direkt geladen (nicht mehr über 0x2400)

kernel.bin (mit zwei bmp-files): 219.296 Bytes (den kernel habe ich versuchsweise schon über 300K aufgepustet, wurde brav geladen vom BL2)

ok: qemu, VBox, VMWare, Bochs
nicht ok: Test-PC (offenbar BL2-Ladeproblem)

Hier noch eine Alternative: http://img837.imageshack.us/i/previewu.png/ (einfach in 256-farben-bmp umwandeln)
Aber ein png-Loader wäre echt gut

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:29:36 26.07.2010, insgesamt 7-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:43:27 26.07.2010   Titel:              Zitieren

Version 0.0.1.113:

- Ein paar Syscalls implementiert
- Userfunktionen eingebaut
- Aufräumarbeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:11:09 27.07.2010   Titel:              Zitieren

Großer Umbau der Verzeichnisstruktur. Bitte momentan nicht comitten, da mergen nahezu unmöglich ist. Ich plane, diesen Morgen fertig zu werden.


Zuletzt bearbeitet von Mr X am 00:11:25 27.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:11:55 27.07.2010   Titel:              Zitieren

Momentan: Commit-Sperre wegen Umbauarbeiten (MrX)

MrX wird das Repo wieder frei geben

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:47:37 27.07.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:46:54 27.07.2010   Titel:              Zitieren

Version 0.0.1.113 - Revision 683:

- Großer Verzeichnisstrukturumbau: Treibertypen nun in Ordnern zusammengefasst/gruppiert. /include-Ordner weggemacht


Committen wieder freigegeben, bin fertig :)


Zuletzt bearbeitet von Mr X am 00:47:23 27.07.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:47:50 27.07.2010   Titel:              Zitieren

Erhard, bist Du mein Echo?
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:03:21 27.07.2010   Titel:              Zitieren

0.0.1.114 - Rev: 684

Bit-Array RGBQuadPacked_t umgebaut, damit diese GCC 4.4 Meldung verschwindet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:35:50 27.07.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 22:58:26 27.07.2010   Titel:              Zitieren

version 0.0.1.115 - Rev: 685

- font.bmp 1D gestalltet, alte font in font_layout.bmp umbenannt

- draw_char(...); Funktion

- vbe.c/.h aufgeräumt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:00:31 28.07.2010   Titel:              Zitieren

Links: http://atschool.eduweb.co.uk/camdean/pupils/amac/vga.htm#20

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:35:29 28.07.2010   Titel:              Zitieren

Meine aktuelle Variante von void draw_char(char font_char, void* bitmapMemStart)

http://codepad.org/YFcjKoMQ

Läuft allerdings auch nocht nicht korrekt. Vielleicht hilft es aber weiter.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 23:37:16 28.07.2010   Titel:              Zitieren

version 0.0.1.116 - Rev: 686

-vbe.c/h
draw_char(...), gibt jetzt zeichen aus, allerdings noch spiegelverkehrt.

-kernel/video/font.h
hinzugefügt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:21:16 29.07.2010   Titel:              Zitieren

0.0.1.117 - Rev: 687

- Buchstaben jetzt richtig herum
- Parameter bei draw_char und draw_string ergänzt
- draw_string "laufend" gemacht und beispielhaft eingesetzt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 16:40:06 29.07.2010   Titel:              Zitieren

version 0.0.1.118 - Rev: 688

- data.asm
font.bmp kernel include via incbin gelöscht. (kernel größe verkleinern)

- ckernel.c
Bitmap Palette Entries, Debug meldung erstmal wieder auskommientiert

- Source/tools/font2bin.exe
gelöscht
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:10:47 29.07.2010   Titel:              Zitieren

Hier mal ein Screenshot zur Dokumentation:
http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_118_drawstring_bitmap.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 22:57:03 29.07.2010   Titel:              Zitieren

version 0.0.1.118 - Rev: 689

vbe.c/.h
- aufgeräumt
- starte umsetzung von getDisplayStart()
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:03:45 30.07.2010   Titel:              Zitieren

version 0.0.1.119 - Rev: 690

- getDisplayStart() funktionierend gemacht (Werteübergabe an 0x1300 u. 0x1302)
- netzwerk etwas überarbeitet

Funktioniert auf meinem Test-PC. :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:11:30 30.07.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:35:33 30.07.2010   Titel:              Zitieren

Version 0.0.1.120:

- irq.c vereinfacht (switch statt stark verschachtelter ifs) und aufgeräumt
- PrettyOS fragt nun, ob VBE-Test durchgeführt werden soll, mit 's' kann dieser übersprungen werden
- Dokumentation aktualisiert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:22:27 31.07.2010   Titel:              Zitieren

0.0.1.121 - Rev: 692

aktueller stand netzwerk

Ziel: Echo Reply für Ping eines anderen Rechners im Netz:
http://en.wikipedia.org/wiki/Ping#Echo_reply

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:25:05 31.07.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:33:38 01.08.2010   Titel:              Zitieren

0.0.1.122 - Rev: 693

aktueller stand netzwerk

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:02:49 01.08.2010   Titel:              Zitieren

Version 0.0.1.123

- irq-System nochmals überarbeitet
-- GPF, PF, NM und invalidOpcode werden nun auch über einen Handler angesprochen (ISR)
-- Handler-Array auf 256 vergrößert (für ISR), Offset von 32 wird automatisch addiert bei IRQs (Und Bugfix gleich dazu: IRQs > 255-32 funktionieren nun)
- VBox-Workaround in ehci.c entfernt. Offenbar nicht mehr nötig
- Bug mit Cursor in console.c behoben
- draw_char und draw_string in drawChar und drawString umbenannt (Styleguide-Konformität)
- Aufräumarbeiten


Zuletzt bearbeitet von Mr X am 21:03:41 01.08.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:28:59 01.08.2010   Titel:              Zitieren

0.0.1.124 - Rev: 695 (leider nicht upgedatet in ckernel.c)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:32:33 02.08.2010   Titel:              Zitieren

0.0.1.125 - Rev: 696

nun wird
C/C++ Code:
network_bufferPointer = *((uint16_t*)(BaseAddressRTL8139_MMIO + 0x3A));
C/C++ Code:
network_bufferPointer = *((uint16_t*)(BaseAddressRTL8139_MMIO + 0x3A));
C/C++ Code:
network_bufferPointer = *((uint16_t*)(BaseAddressRTL8139_MMIO + 0x3A));

genutzt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:30:10 02.08.2010   Titel:              Zitieren

0.0.1.126 - Rev: 697

C/C++ Code:
#define NETWORK_BUFFER_SIZE   8192

network_bufferPointer = *((uint16_t*)(BaseAddressRTL8139_MMIO + 0x3A)) % NETWORK_BUFFER_SIZE;
C/C++ Code:
#define NETWORK_BUFFER_SIZE 8192

network_bufferPointer = *((uint16_t*)(BaseAddressRTL8139_MMIO + 0x3A)) % NETWORK_BUFFER_SIZE;
C/C++ Code:
#define NETWORK_BUFFER_SIZE   8192

network_bufferPointer = *((uint16_t*)(BaseAddressRTL8139_MMIO + 0x3A)) % NETWORK_BUFFER_SIZE;

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 19:50:22 02.08.2010   Titel:              Zitieren

version 0.0.1.127 - Rev: 698

vbe.c/h
- drawChar(...), Set_DAC_C herausgenommen um nicht für jeden zu zeichenden Buchstaben die Palette neu zu setzen (Performance schub)
- setDisplayStart(...) Hinzugefügt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:49:47 02.08.2010   Titel:              Zitieren

Version 0.0.1.128 - Rev: 699

- rtl8139.h/c mit definierten Symbolen zur besseren Lesbarkeit versehen
- PCI bus mastering eingeschaltet (analog EHCI)

Literatur-Link von somone: http://www-vs.informatik.uni-ulm.de/teach/ss02/sp/Kap12.pdf

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:54:51 02.08.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:20:26 02.08.2010   Titel:              Zitieren

Version 0.0.1.129 - Rev: 700

Korrekte Lese-Zeiger-Positionierung in rtl8139.c :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:05:06 03.08.2010   Titel:              Zitieren

Version 0.0.1.130 - Rev: 701

- Ausdruck verbessert
- 1 sec halt nach packet (ideal für PC)

:arrow: Letzte Version, die momentan sauber läuft

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 09:37:09 08.08.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:31:32 03.08.2010   Titel:              Zitieren

Version 0.0.1.131:

- Kernel startet (nach Tastendruck, damit man die Fehlermeldung lesen kann) neu, wenn der kerneltask beendet wird (#PF o.ä.)
- Aufgeräumt (insbesondere task.c/h, dort cli/sti geändert)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:04:37 03.08.2010   Titel:              Zitieren

Version 0.0.1.132 - Rev. 703

- ipTcpStack.h/c umgebaut, damit ARP-Requests/Replies ausgewertet werden
- struct ip in ipTcpStack.h überarbeitet

screenshot: http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_132_arp-request.PNG :live:

Bereits in der Vorgänger-Version (commit von MrX) ist (auf qemu und VMWare festgestellt) ein neuer mieser Bug drinnen, der zu #GPF und Reboot führen kann.
Das stört die Netzwerkbemühungen leider. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:28:56 03.08.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:26:13 04.08.2010   Titel:              Zitieren

Version 0.0.1.133 - Rev. 704

Problem: GPF stoppt mit quitTask die shell ohne restart :arrow: action

folgender HOTFIX in irq.c bewahrt vor dem Absturz:
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
static void quitTask()
{
    printf("| <Severe Failure - Task Halted> Press key for exit! |");
    sti();
    // while(!keyboard_getChar());
    exit();
    for (;;);
}
C/C++ Code:
1
2
3
4
5
6
7
8
static void quitTask()
{
printf("| <Severe Failure - Task Halted> Press key for exit! |");
sti();
// while(!keyboard_getChar());
exit();
for (;;);
}
C/C++ Code:
1
2
3
4
5
6
7
8
static void quitTask()
{
    printf("| <Severe Failure - Task Halted> Press key for exit! |");
    sti();
    // while(!keyboard_getChar());
    exit();
    for (;;);
}

Damit wird das exit() ausgeführt ohne Abhängigkeit vom Keyboard, das evtl. nicht mehr durchdringt.

Der Auslöser ist übrigens das quitTask() in irq.c, zeile 206, also in diesem Zweig:
C/C++ Code:
if (r->int_no < 32 && r->int_no != 7 && !(r->eflags & 0x20000)) // no VM bit
C/C++ Code:
if (r->int_no < 32 && r->int_no != 7 && !(r->eflags & 0x20000)) // no VM bit
C/C++ Code:
if (r->int_no < 32 && r->int_no != 7 && !(r->eflags & 0x20000)) // no VM bit


Tests dieses HOTFIX:
- VBox dreht völlig am Rad (#PF loop)
- VMWare schmiert beim Laden eines User-Programms ab
- Bochs läuft :live:
- qemu läuft, shell kann aber auch zerstört werden
- echter PC läuft, Laden/Ausführen eines User-Programms klappt, anschließend beim Rücksprung erfolgt Fehler mit exit(), anschließend ist die shell kaputt (Neustart fehlt! :warning: )

Problem seit Version 0.0.1.131: shell / Beenden User-Programm (Rücksprung zur shell).

Auf jeden Fall haben wir jetzt eine Version, an der man die vbe-Aktivitäten und das Networking weiter untersuchen/ausbauen kann. ;)
Falls der Fehler nicht aufgeklärt wird :arrow: Roll-back zu 0.0.1.130

Solche Situationen werden immer wieder auftauchen, weil unsere Test-Mechanismen nicht ausreichen, solche Commits wie 0.0.1.131 von MrX zu verhindern. :warning:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:56:06 04.08.2010, insgesamt 6-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:44:01 04.08.2010   Titel:              Zitieren

version 0.0.1.134 - Rev: 705

http://www.rfc-editor.org/rfc/rfc793.txt <--- TRANSMISSION CONTROL PROTOCOL
http://www.rfc-editor.org/rfc/rfc768.txt <--- USER DATAGRAM PROTOCOL

- udp.c/h Dateien angelegt

- Kommentare in rtl8139.c / ipTcpStack.c eingefügt

Mir ist aufgefallen das der Kernel noch über keine Powermanagment Funktionen, wie APM oder ACPI verfügt!
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:18:16 04.08.2010   Titel:              Zitieren

Version 0.0.1.135 - Rev: 706

- userlib.h/c korrigiert (file-funktionen hatten falsche syscall-Nummern)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:31:27 04.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:40:51 05.08.2010   Titel:              Zitieren

Version 0.0.1.136 - Rev: 707

- senden mittels rtl8139 Netzwerkkarte vorbereitet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 21:01:17 05.08.2010   Titel:              Zitieren

version 0.0.1.137 - Rev: 708

rtl8139_eeprom.c/.h Dateien Hinzugefügt

- Lesen u. Schreiben von EPROMS/EEPROMS mit 28/32 Pin belegung.
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 21:43:25 05.08.2010   Titel:              Zitieren

version 0.0.1.137 - Rev: 708

vbe.c/.h
- getPixel() Funktion hinzugefügt
- scaleBitmap() Funktion angefangen umzusetzen
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 21:57:35 05.08.2010   Titel:              Zitieren

version 0.0.1.137 - Rev: 710

scaleBitmap(...), in ckernel.c eingefügt
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 16:08:40 06.08.2010   Titel:              Zitieren

version 0.0.1.138 - Rev: 711

scaleBitmap(...), Funktioniert schon mal und Skaliert das Bild auf die Doppelte Größe, wird noch ausgearbeitet.
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 18:15:42 06.08.2010   Titel:              Zitieren

version 0.0.1.139 - Rev: 712

- bootscr.bmp ausgetauscht nach ehenkes vorschlag.

- scaleBitmap(...), aufgeräumt und weiter getestet.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:33:26 06.08.2010   Titel:              Zitieren

Danke an internet == somone für diese Funktionalität!

screenshot: http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_139_bootscr_scaled.PNG :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:56:11 06.08.2010   Titel:              Zitieren

version 0.0.1.140 - Rev: 713

erste Sendeversuche zum experimentieren :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:50:19 06.08.2010   Titel:              Zitieren

Version 0.0.1.141 - Rev: 714

Korrektur bei MAC-Adresse bei Tx

Klappt aber noch nicht

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:50:35 06.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:35:48 06.08.2010   Titel:              Zitieren

Version 0.0.1.142 - Rev: 715

Korrektur bei Tx: Interrupt TOK klappt jetzt :)

qemu batch:
Code:
qemu.exe  -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -net user -localtime -usb -usbdevice disk:format=raw:dummy.bin
Code:
qemu.exe -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -net user -localtime -usb -usbdevice disk:format=raw:dummy.bin
Code:
qemu.exe  -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -net user -localtime -usb -usbdevice disk:format=raw:dummy.bin


TAP2 mit IP 192.168.10.50 konfiguriert.

Mit qemu kommt es auch an (Kontrolle mit wireshark):

Code:
arp-request: "5","2.110467","52:55:0a:00:02:02","Broadcast","ARP","Who has 192.168.10.50?  Tell 10.0.2.2"

arp-reply: "6","2.110475","Plus_12:12:12","52:55:0a:00:02:02","ARP","192.168.10.50 is at 00:12:12:12:12:12"
Code:
arp-request: "5","2.110467","52:55:0a:00:02:02","Broadcast","ARP","Who has 192.168.10.50? Tell 10.0.2.2"

arp-reply: "6","2.110475","Plus_12:12:12","52:55:0a:00:02:02","ARP","192.168.10.50 is at 00:12:12:12:12:12"
Code:
arp-request: "5","2.110467","52:55:0a:00:02:02","Broadcast","ARP","Who has 192.168.10.50?  Tell 10.0.2.2"

arp-reply: "6","2.110475","Plus_12:12:12","52:55:0a:00:02:02","ARP","192.168.10.50 is at 00:12:12:12:12:12"

Zitat:

Ethernet II, Src: Plus_12:12:12 (00:12:12:12:12:12), Dst: 52:55:0a:00:02:02 (52:55:0a:00:02:02)
Type: ARP (0x0806)
Address Resolution Protocol (reply)
Hardware type: Ethernet (0x0001)
Protocol type: IP (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: reply (0x0002)
Is gratuitous: False
Sender MAC address: Plus_12:12:12 (00:12:12:12:12:12)
Sender IP address: 192.168.10.50 (192.168.10.50)
Target MAC address: 52:55:0a:00:02:02 (52:55:0a:00:02:02)
Target IP address: 10.0.2.2 (10.0.2.2)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:15:49 07.08.2010, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:34:09 07.08.2010   Titel:              Zitieren

Version 0.0.1.143 - Rev: 716

HOTFIX: in task.c , zeile 305: den reboot verhindert

C/C++ Code:
if(currentTask == kernelTask) // TODO: Handle termination of shellTask
{
   // systemControl(REBOOT);
}
C/C++ Code:
if(currentTask == kernelTask) // TODO: Handle termination of shellTask
{
// systemControl(REBOOT);
}
C/C++ Code:
if(currentTask == kernelTask) // TODO: Handle termination of shellTask
{
   // systemControl(REBOOT);
}




Wenn ich das richtig sehe, sind die plötzlichen "reboots" weg, allerdings tauchen dennoch #GPF auf.

Da kann zwar der pid 0 (also kernel task) "verschwinden" (siehe strg+t), aber dennoch läuft es stabiler. Seit Version 0.0.1.131 (MrX) spielen da einige Sachen leider "verrückt".

Fazit: hat nicht geholfen, es müssen die cli/sti sein, die MrX "aufgeräumt" hat.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:07:42 08.08.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:04:44 08.08.2010   Titel:              Zitieren

0.0.1.144 - Rev: 717

in task.c cli()/sti() wieder eingefügt, um den reboot zu überwinden!

EDIT: #GPF (kernel) und #PF (user) tauchen immer noch auf. Richtig übel! Ich schlage einen Roll-back bei task.h/c (und damit zusammenhängende) vor.

Ich schlage vor, dass wir ein abgestimmtes Test-Szenario entwicklen und für jeden developer vorgeben, das ein Commit im Regelfall durchlaufen muss, um solche Folgen wie bei 0.0.1.131 zu verhindern.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:16:37 08.08.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:29:27 08.08.2010   Titel:              Zitieren

0.0.1.145 - Rev: 718

cli/sti noch etwas nachgebessert in task.c :rolleyes:

erneuter #GPF: error code: 0 (!), anschließend reboot

es tauchen aber auch andere #GPF auf: GPF err code: 64912 eip: 113D50h
(intel (june 2010) 3A, 6-13: EXT=0 IDT=1 segment selelctor index: 00100010 = 0x22 = 34)


sieht immer noch nicht gut aus! :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:59:47 08.08.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:46:10 08.08.2010   Titel:              Zitieren

Nun reicht es wirklich! ;)

:arrow: Roll-back bezüglich task.h/c (Version von 0.0.1.130 - Rev. 701 eingebaut, weitere Anpassungen waren glücklicherweise nicht notwendig)

0.0.1.146 - Rev: 719

qemu läuft. :live:
VBox und VMware machen Probleme mit vbe (also 's'), VBox auch beim Überspringen von vbe noch GPF. Das konnten wir schon besser!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:55:36 08.08.2010, insgesamt 4-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 15:32:55 08.08.2010   Titel:              Zitieren

version 0.0.1.147 - Rev: 720

vbe.c/.h

C/C++ Code:
typedef struct {
    uint16_t x, y;
} CursorPosition_t;
C/C++ Code:
typedef struct {
uint16_t x, y;
} CursorPosition_t;
C/C++ Code:
typedef struct {
    uint16_t x, y;
} CursorPosition_t;


Hinzugefügt und mit DrawChar(...) newline experimentiert.

erstmal bewusst nicht aus video.h genommen um erstmal eine strikte trennen zwischen Textmodus und VESA zu halten.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:13:06 08.08.2010   Titel:              Zitieren

Version 0.0.1.148:

- Schäden behoben, cli/sti-Änderungen aus task.c wieder ausgebaut, andere Änderungen eingebaut. Funktioniert wohl nun wieder alles.
- Patch für VM86.c von Ideenlos
- Codeformatierungen
Ideenlos
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.08.2010
Beiträge: 7
Beitrag Ideenlos Mitglied 16:26:59 08.08.2010   Titel:              Zitieren

Revision 722

Bootloader-stage2

- So verändert (arbeitet jetzt im UnrealMode), dass der Kernel theoretisch beliebig groß werden kann.


Zuletzt bearbeitet von Ideenlos am 16:53:48 08.08.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:11:27 08.08.2010   Titel:              Zitieren

version 0.0.1.150 - Rev: 723

Ordner Struktur in Kernel um network und netprotocol erweitert, entsprechende Dateien dorthin verschoben.
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:48:32 08.08.2010   Titel:              Zitieren

version 0.0.1.150 - Rev: 724

udp.c/.h

- UDP Header Hinzugefügt.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:58:21 08.08.2010   Titel:              Zitieren

Version 0.0.1.151 - Rev. 726

Senden verbessert (length)

Testen: wireshark

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:22:21 08.08.2010   Titel:              Zitieren

Version 0.0.1.152 - Rev. 727

Senden verbessert (korrekte mac-adresse verwendet)

Testen: anpingen und mit arp -a im arp-cache des senders nachschauen
Verfolgen: wireshark

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:49:09 08.08.2010   Titel:              Zitieren

Version 0.0.1.153 - Rev. 730 (einige rev. bewusst übersprungen wegen commit-fehler)

Nun klappt die antwort auf arp-requests spezifisch und korrekt!

Bitte stellt eure spezifische IP-Adresse statisch in dem neuen Header myOwnData.h ein, bei mir z.B:
C/C++ Code:
#ifndef MYOWNDATA_H
#define
MYOWNDATA_H

#define
My_IP 0xC0A80A61    // 192.168.10.97

#endif
C/C++ Code:
#ifndef MYOWNDATA_H
#define
MYOWNDATA_H

#define
My_IP 0xC0A80A61 // 192.168.10.97

#endif
C/C++ Code:
#ifndef MYOWNDATA_H
#define
MYOWNDATA_H

#define
My_IP 0xC0A80A61    // 192.168.10.97

#endif

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:54:53 08.08.2010, insgesamt 2-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 22:18:34 08.08.2010   Titel:              Zitieren

version 0.0.1.154 - Rev: 731

dhcp.c/.h
- Grundlegende Idee hinzugefügt.

upd.c/.h
- erweitert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:31:37 08.08.2010   Titel:              Zitieren

checksum für ipv4, also auch ping:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Compute Internet Checksum for "count" bytes beginning at location "addr".
uint32_t checksumIPv4(uint32_t count, uintptr_t addr)
{
    register uint32_t sum = 0;

    while( count > 1 ) // This is the inner loop  
    {        
        sum += *(uint16_t)addr++;
        count -= 2;
    }
       
    if (count > 0) // Add left-over byte, if any
    {
        sum += *(uint8_t*)addr;
    }
   
    while (sum>>16) // Fold 32-bit sum to 16 bits
    {
        sum = (sum & 0xFFFF) + (sum >> 16);
    }
    return (~sum);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Compute Internet Checksum for "count" bytes beginning at location "addr".
uint32_t checksumIPv4(uint32_t count, uintptr_t addr)
{
register uint32_t sum = 0;

while( count > 1 ) // This is the inner loop
{
sum += *(uint16_t)addr++;
count -= 2;
}

if (count > 0) // Add left-over byte, if any
{
sum += *(uint8_t*)addr;
}

while (sum>>16) // Fold 32-bit sum to 16 bits
{
sum = (sum & 0xFFFF) + (sum >> 16);
}
return (~sum);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Compute Internet Checksum for "count" bytes beginning at location "addr".
uint32_t checksumIPv4(uint32_t count, uintptr_t addr)
{
    register uint32_t sum = 0;

    while( count > 1 ) // This is the inner loop  
    {        
        sum += *(uint16_t)addr++;
        count -= 2;
    }
       
    if (count > 0) // Add left-over byte, if any
    {
        sum += *(uint8_t*)addr;
    }
   
    while (sum>>16) // Fold 32-bit sum to 16 bits
    {
        sum = (sum & 0xFFFF) + (sum >> 16);
    }
    return (~sum);
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:41:14 08.08.2010, insgesamt 4-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 23:44:10 08.08.2010   Titel:              Zitieren

version 0.0.1.155 - Rev: 732

icmp.c/.h
- hinzugefügt

Informationen zum ICMP-Protokoll
http://tools.ietf.org/html/rfc1071 <--- internet checksum
http://de.wikipedia.org/wiki/Internet_Control_Message_Protocol <--- icmp Protocol
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:15:06 09.08.2010   Titel:              Zitieren

Version 0.0.1.156:

- task.c: cli/sti-Änderungen gesichtet, Fehler behoben und wieder reingenommen
- Aufgeräumt
- Projektfile aktualisiert
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:30:04 09.08.2010   Titel:              Zitieren

version 0.0.1.157 - Rev: 734

icmp.c/.h

- ICMPAnswerPing(...), mit Statischen werten hinzugefügt und experimentiert, bisher ohne Erfolg.
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 18:25:46 09.08.2010   Titel:              Zitieren

version 0.0.1.157 - Rev: 735

icmp.c/.h

- ICMPAnswerPing(...), erweitert und getestet. Noch kein Erfolg.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:19:52 09.08.2010   Titel:              Zitieren

Version 0.0.1.158:

- Umstellung der IRQ/ISR-Nummern auf enum begonnen
- Scheduler unterstützt nun waitForIRQ - Wait-Funktionen damit vorerst komplett
- getch auf waitForIRQ umgestellt - Genauso Ressourcensparend, aber performanter (kein hlt das andere tasks ausbremst)
- switch_context führt abhängig von der Anzahl der laufenden tasks hlt aus
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:33:16 09.08.2010   Titel:              Zitieren

Version 0.0.1.158 ist fehlerhaft (memory leak), und icmp.c/.h noch ziemlich unbrauchbar. :eek:

http://codepad.org/0YDxC2n1 <-- Workaround von MrX

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:35:26 09.08.2010, insgesamt 2-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 01:02:29 10.08.2010   Titel:              Zitieren

version 0.0.1.159 - Rev: 737

keyboard.c/.h
- Workaround von MrX implementiert (getch)

ipTcpStack.c/.h
- switch konstrukt für die Protokolle in IPheader hinzugefügt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:17:30 10.08.2010   Titel:              Zitieren

1) arp reply ohne adresse! (das war schon besser)
2) icmp reply funktioniert nicht! (kommt in wireshark nicht an)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Ideenlos
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.08.2010
Beiträge: 7
Beitrag Ideenlos Mitglied 16:57:11 10.08.2010   Titel:              Zitieren

version 0.0.1.160 – Revision 738

IP/ICMP

- Header korrigiert
- Checksummenfunktion korrigiert
- ICMP-Ping-Reply-Funktion korrigiert
=> Wireshark zeigt korrekte Antwort an

PS: Dass ping bei mir keine Antwort anzeigt, mag an meiner Netzwerkkonfiguration liegen (da bei Wireshark von MAC über IP bis hin zu Checksumme alles zu stimmen scheint).
Ideenlos
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.08.2010
Beiträge: 7
Beitrag Ideenlos Mitglied 19:54:46 10.08.2010   Titel:              Zitieren

Version 0.0.1.161 – Revision 739

ICMP: Datenteil

- ICMP-Pings enthalten einen Datenteil, den man zurückschicken sollte – was ab jetzt auch getan wird.


Zuletzt bearbeitet von Ideenlos am 19:55:08 10.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:58:14 10.08.2010   Titel:              Zitieren

http://img192.imageshack.us/img192/3690/pinght.png <--- erfolgsmeldung von Ideenlos. Gratulation! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:28:10 10.08.2010   Titel:              Zitieren

"Ideenlos" war schneller als ich, der es nur mit hrPing und 56 byte Daten schaffte:
Code:
hrping 192.168.10.97 -S -t -l 56
Code:
hrping 192.168.10.97 -S -t -l 56
Code:
hrping 192.168.10.97 -S -t -l 56


http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_161_PingReply.PNG

Zitat:
Statistics for 192.168.10.97:
Packets: sent=227, rcvd=153, error=0, lost=74 (32% loss) in 106.126180 sec
RTTs of replies in ms: min/avg/max/dev: 67.929 / 12788.809 / 33029.268 / 8959.212


Zitat:
<Tobiking>Das hrPing schickt Latein?
:D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:53:20 10.08.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:33:49 10.08.2010   Titel:              Zitieren

Version 0.0.1.162 – Rev: 740

etwas aufgeräumt im Netzwerk-Bereich

Leider ist RXBUFTAIL ab und zu verschoben!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Ideenlos
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.08.2010
Beiträge: 7
Beitrag Ideenlos Mitglied 23:20:45 10.08.2010   Titel:              Zitieren

Version 0.0.1.163 – Revision 741

rtl8139

- wenn man die Empfangsdaten aus dem entsprechenden Puffer
herauskopiert, werden anscheinend mehr Pakete korrekt empfangen.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:55:03 10.08.2010   Titel:              Zitieren

Das war entscheidend! (findet sich auch im programming guide)

Nun läuft request und reply in wireshark sauber abwechselnd:
http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_163_PingRequestReply.PNG

Beim PING-Absender-Programm kommt trotz dieses Ablaufes dennoch nur noch "timeout" an.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:17:48 11.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:50:05 11.08.2010   Titel:              Zitieren

Folgendes ist mir noch aufgefallen: http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_163_PingRequestReply_badChecksum.PNG

Bad checksum im IP-header und im ICMP! :rolleyes:

bitte damit vergleichen:
http://www.c-plusplus.de/forum/viewtopic-var-t-is- ....... ys-is-0-and-postorder-is-asc-and-start-is-777.html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:55:37 11.08.2010, insgesamt 2-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 02:52:17 11.08.2010   Titel:              Zitieren

version 0.0.1.163 - Rev: 741

TCP header hinzugefügt tcp.c/h

icmpDebug, tcpDebug für eine besser veranschaulischung der jeweiligen Packete.
Ideenlos
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.08.2010
Beiträge: 7
Beitrag Ideenlos Mitglied 15:11:01 11.08.2010   Titel:              Zitieren

Version 0.0.1.165 – Revision 743

IP/ICMP-Checksumme

- Man sollte es mit dem Aufräumen nicht übertreiben (rev 740): das Checksummenfeld muss tatsächlich vor der Berechnung der Checksumme auf 0 gesetzt werden.

PS: Das hier ist wirklich die 0.0.1.165 und die Rev 743, ich hatte beim letzten Mal nur vergessen, die Version in ckernel.c zu aktualisieren, deshalb hat internet eigentlich die 0.0.1.164 bzw. 742 committet.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:34:29 11.08.2010   Titel:              Zitieren

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
C:\hrPING>hrping 192.168.10.97 -n20 -l32 -S -s100
This is hrPING v2.44 by cFos Software GmbH -- http://www.cfos.de

Using source IP address 192.168.10.99 to send packets
Pinging 192.168.10.97
with 32 bytes data (60 bytes IP):

Reply from 192.168.10.97: seq=0000 time=14.150ms TTL=128 ID=0000 - sent=1
Reply from 192.168.10.97: seq=0001 time=5.801ms TTL=128 ID=0000 - sent=2
Reply from 192.168.10.97: seq=0002 time=5.790ms TTL=128 ID=0000 - sent=3
Reply from 192.168.10.97: seq=0003 time=5.813ms TTL=128 ID=0000 - sent=4
Reply from 192.168.10.97: seq=0004 time=5.799ms TTL=128 ID=0000 - sent=5
Reply from 192.168.10.97: seq=0005 time=5.808ms TTL=128 ID=0000 - sent=6
Reply from 192.168.10.97: seq=0006 time=5.804ms TTL=128 ID=0000 - sent=7
Reply from 192.168.10.97: seq=0007 time=5.828ms TTL=128 ID=0000 - sent=8
Reply from 192.168.10.97: seq=0008 time=5.834ms TTL=128 ID=0000 - sent=9
Reply from 192.168.10.97: seq=0009 time=5.805ms TTL=128 ID=0000 - sent=10
Reply from 192.168.10.97: seq=000a time=5.805ms TTL=128 ID=0000 - sent=11
Reply from 192.168.10.97: seq=000b time=5.800ms TTL=128 ID=0000 - sent=12
Reply from 192.168.10.97: seq=000c time=5.804ms TTL=128 ID=0000 - sent=13
Reply from 192.168.10.97: seq=000d time=5.805ms TTL=128 ID=0000 - sent=14
Reply from 192.168.10.97: seq=000e time=5.830ms TTL=128 ID=0000 - sent=15
Reply from 192.168.10.97: seq=000f time=5.834ms TTL=128 ID=0000 - sent=16
Reply from 192.168.10.97: seq=0010 time=9.280ms TTL=128 ID=0000 - sent=17
Reply from 192.168.10.97: seq=0011 time=5.844ms TTL=128 ID=0000 - sent=18
Reply from 192.168.10.97: seq=0012 time=5.816ms TTL=128 ID=0000 - sent=19
Reply from 192.168.10.97: seq=0013 time=5.820ms TTL=128 ID=0000 - sent=20

Statistics for 192.168.10.97:
    Packets: sent=20, rcvd=20, error=0, lost=0 (0% loss) in 1.905816 sec
    RTTs of replies in ms: min/avg/max/dev: 5.790 / 6.403 / 14.150 / 1.980
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
C:\hrPING>hrping 192.168.10.97 -n20 -l32 -S -s100
This is hrPING v2.44 by cFos Software GmbH -- http://www.cfos.de

Using source IP address 192.168.10.99 to send packets
Pinging 192.168.10.97
with 32 bytes data (60 bytes IP):

Reply from 192.168.10.97: seq=0000 time=14.150ms TTL=128 ID=0000 - sent=1
Reply from 192.168.10.97: seq=0001 time=5.801ms TTL=128 ID=0000 - sent=2
Reply from 192.168.10.97: seq=0002 time=5.790ms TTL=128 ID=0000 - sent=3
Reply from 192.168.10.97: seq=0003 time=5.813ms TTL=128 ID=0000 - sent=4
Reply from 192.168.10.97: seq=0004 time=5.799ms TTL=128 ID=0000 - sent=5
Reply from 192.168.10.97: seq=0005 time=5.808ms TTL=128 ID=0000 - sent=6
Reply from 192.168.10.97: seq=0006 time=5.804ms TTL=128 ID=0000 - sent=7
Reply from 192.168.10.97: seq=0007 time=5.828ms TTL=128 ID=0000 - sent=8
Reply from 192.168.10.97: seq=0008 time=5.834ms TTL=128 ID=0000 - sent=9
Reply from 192.168.10.97: seq=0009 time=5.805ms TTL=128 ID=0000 - sent=10
Reply from 192.168.10.97: seq=000a time=5.805ms TTL=128 ID=0000 - sent=11
Reply from 192.168.10.97: seq=000b time=5.800ms TTL=128 ID=0000 - sent=12
Reply from 192.168.10.97: seq=000c time=5.804ms TTL=128 ID=0000 - sent=13
Reply from 192.168.10.97: seq=000d time=5.805ms TTL=128 ID=0000 - sent=14
Reply from 192.168.10.97: seq=000e time=5.830ms TTL=128 ID=0000 - sent=15
Reply from 192.168.10.97: seq=000f time=5.834ms TTL=128 ID=0000 - sent=16
Reply from 192.168.10.97: seq=0010 time=9.280ms TTL=128 ID=0000 - sent=17
Reply from 192.168.10.97: seq=0011 time=5.844ms TTL=128 ID=0000 - sent=18
Reply from 192.168.10.97: seq=0012 time=5.816ms TTL=128 ID=0000 - sent=19
Reply from 192.168.10.97: seq=0013 time=5.820ms TTL=128 ID=0000 - sent=20

Statistics for 192.168.10.97:
Packets: sent=20, rcvd=20, error=0, lost=0 (0% loss) in 1.905816 sec
RTTs of replies in ms: min/avg/max/dev: 5.790 / 6.403 / 14.150 / 1.980
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
C:\hrPING>hrping 192.168.10.97 -n20 -l32 -S -s100
This is hrPING v2.44 by cFos Software GmbH -- http://www.cfos.de

Using source IP address 192.168.10.99 to send packets
Pinging 192.168.10.97
with 32 bytes data (60 bytes IP):

Reply from 192.168.10.97: seq=0000 time=14.150ms TTL=128 ID=0000 - sent=1
Reply from 192.168.10.97: seq=0001 time=5.801ms TTL=128 ID=0000 - sent=2
Reply from 192.168.10.97: seq=0002 time=5.790ms TTL=128 ID=0000 - sent=3
Reply from 192.168.10.97: seq=0003 time=5.813ms TTL=128 ID=0000 - sent=4
Reply from 192.168.10.97: seq=0004 time=5.799ms TTL=128 ID=0000 - sent=5
Reply from 192.168.10.97: seq=0005 time=5.808ms TTL=128 ID=0000 - sent=6
Reply from 192.168.10.97: seq=0006 time=5.804ms TTL=128 ID=0000 - sent=7
Reply from 192.168.10.97: seq=0007 time=5.828ms TTL=128 ID=0000 - sent=8
Reply from 192.168.10.97: seq=0008 time=5.834ms TTL=128 ID=0000 - sent=9
Reply from 192.168.10.97: seq=0009 time=5.805ms TTL=128 ID=0000 - sent=10
Reply from 192.168.10.97: seq=000a time=5.805ms TTL=128 ID=0000 - sent=11
Reply from 192.168.10.97: seq=000b time=5.800ms TTL=128 ID=0000 - sent=12
Reply from 192.168.10.97: seq=000c time=5.804ms TTL=128 ID=0000 - sent=13
Reply from 192.168.10.97: seq=000d time=5.805ms TTL=128 ID=0000 - sent=14
Reply from 192.168.10.97: seq=000e time=5.830ms TTL=128 ID=0000 - sent=15
Reply from 192.168.10.97: seq=000f time=5.834ms TTL=128 ID=0000 - sent=16
Reply from 192.168.10.97: seq=0010 time=9.280ms TTL=128 ID=0000 - sent=17
Reply from 192.168.10.97: seq=0011 time=5.844ms TTL=128 ID=0000 - sent=18
Reply from 192.168.10.97: seq=0012 time=5.816ms TTL=128 ID=0000 - sent=19
Reply from 192.168.10.97: seq=0013 time=5.820ms TTL=128 ID=0000 - sent=20

Statistics for 192.168.10.97:
    Packets: sent=20, rcvd=20, error=0, lost=0 (0% loss) in 1.905816 sec
    RTTs of replies in ms: min/avg/max/dev: 5.790 / 6.403 / 14.150 / 1.980


0% loss :live:

PrettyOS hat die IP 192.168.10.97

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:38:27 11.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:09:12 12.08.2010   Titel:              Zitieren

Noch zur checksum:

Zitat:
ICMP Header Checksum. 16 bits.
Checksum that covers the ICMP message. This is the 16-bit one's complement
of the one's complement sum of the ICMP message starting with the Type field.

The checksum field should be cleared to zero before generating the checksum.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:10:36 12.08.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:34:16 12.08.2010   Titel:              Zitieren

Version 0.0.1.166:

- Floppytreiber nutzt nun hlt während er auf ein IRQ wartet. (waitForIRQ geht nicht, weil wir dort ein timeout haben)
- getch nutzt wieder waitForIRQ, Fehler behoben, keine task-Mutation mehr, Speicherleck weg.
- Neues Feature zur Memory-Leak-Erkennung. (Aktivierung in os.h, Funktioniert derzeit nicht stabil)
- Projektdatei aktualisiert
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:02:16 12.08.2010   Titel:              Zitieren

PrettyOS 0.0.1.166 - Rev: 744

Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
Testumgebung         SCREEN (phys)     vbe  RTL8139  EHCI      Probleme
-----------------------------------------------------------------------------
qemu-ehci            F2000000h         ok   ja       4 ports   nein
VBox 3.2.6           E0000000h         ok   nein     8 ports   nein
VMWare Player 3.0.1  (mit vbe)                                 invalid opcode bei 1A70h
VMWare Player 3.0.1  (ohne vbe)        -    nein     6 ports   keine
bochs 2.4.2          E0000000h         ok   nein     nein      keine
VPC 6.0.192.0        00000000h                                 #PF (err 0, addr 107BC4h)
VPC 6.0.192.0        (ohne vbe)        -    nein     nein      keine
PC 1,4 GHz GeForce4  F4000000h         ok   ja       nein      keine                
Code:
1
2
3
4
5
6
7
8
9
10
Testumgebung SCREEN (phys) vbe RTL8139 EHCI Probleme
-----------------------------------------------------------------------------
qemu-ehci F2000000h ok ja 4 ports nein
VBox 3.2.6 E0000000h ok nein 8 ports nein
VMWare Player 3.0.1 (mit vbe) invalid opcode bei 1A70h
VMWare Player 3.0.1 (ohne vbe) - nein 6 ports keine
bochs 2.4.2 E0000000h ok nein nein keine
VPC 6.0.192.0 00000000h #PF (err 0, addr 107BC4h)
VPC 6.0.192.0 (ohne vbe) - nein nein keine
PC 1,4 GHz GeForce4 F4000000h ok ja nein keine
Code:
1
2
3
4
5
6
7
8
9
10
Testumgebung         SCREEN (phys)     vbe  RTL8139  EHCI      Probleme
-----------------------------------------------------------------------------
qemu-ehci            F2000000h         ok   ja       4 ports   nein
VBox 3.2.6           E0000000h         ok   nein     8 ports   nein
VMWare Player 3.0.1  (mit vbe)                                 invalid opcode bei 1A70h
VMWare Player 3.0.1  (ohne vbe)        -    nein     6 ports   keine
bochs 2.4.2          E0000000h         ok   nein     nein      keine
VPC 6.0.192.0        00000000h                                 #PF (err 0, addr 107BC4h)
VPC 6.0.192.0        (ohne vbe)        -    nein     nein      keine
PC 1,4 GHz GeForce4  F4000000h         ok   ja       nein      keine                

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:09:31 12.08.2010   Titel:              Zitieren

0.0.1.167 - Rev. 745:

- Gratuitous ARP Request abgefragt und dargestellt

http://wiki.wireshark.org/Gratuitous_ARP
Zitat:
A gratuitous ARP request is an AddressResolutionProtocol request packet where the source and destination IP are both set to the IP of the machine issuing the packet and the destination MAC is the broadcast address ff:ff:ff:ff:ff:ff.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:20:31 12.08.2010, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:21:07 12.08.2010   Titel:              Zitieren

Version 0.0.1.168:

- Ausgabe bei Strg+t und co nun in kernelkonsole
- test-results.txt beigelegt
- Kleinigkeiten
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 16:10:00 13.08.2010   Titel:              Zitieren

version 0.0.1.168 - Rev: 747

- Aufgeräumt
- Die #defines in icmp.h um ICMP_ erweitert.

Keyboard.c
- Die getch() Funktion sieht im moment so aus.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
char getch()
{
    char retVal = keyboard_getChar();
    while(retVal == 0)
    {
        waitForIRQ(1); // not working on realPC ---> Broken Free
        // sti();hlt();

        retVal = keyboard_getChar();
    }
    return(retVal);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
char getch()
{
char retVal = keyboard_getChar();
while(retVal == 0)
{
waitForIRQ(1); // not working on realPC ---> Broken Free
// sti();hlt();

retVal = keyboard_getChar();
}
return(retVal);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
char getch()
{
    char retVal = keyboard_getChar();
    while(retVal == 0)
    {
        waitForIRQ(1); // not working on realPC ---> Broken Free
        // sti();hlt();

        retVal = keyboard_getChar();
    }
    return(retVal);
}


Link zur Darstellung des OSI-7-Modells
http://upload.wikimedia.org/wikipedia/de/1/14/OSI7Layer_model_3.1.svg
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:32:18 13.08.2010   Titel:              Zitieren

0.0.1.169 - Rev: 748

Readcache (rev. 580) in devicemanager.c auskommentiert und auf die alte Version (rev. 579) umgestellt.

Reale Lesevorgänge können nun übergangsweise quälend langsam vonstatten gehen, da wir dank fgetc jedes Zeichen einzeln ziehen und dabei jeweils den ganzen Sektor lesen. :rolleyes:

Der Schreibcache ist bereits im FAT-Modul eingebaut.

Dafür klappt nun wieder der für Dokumentationen wichtige Screenshot (floppy: strg+s, usb: strg+u). :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:08:07 13.08.2010   Titel:              Zitieren

0.0.1.170 - Rev: 749

readcache teilweise (wieder) in betrieb genommen, aber noch nicht genutzt wegen fehler beim schreiben

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:59:00 13.08.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:50:41 13.08.2010   Titel:              Zitieren

0.0.1.171:

- Optimierungen und Änderungen, die ehenkes und ich ausgebrütet haben (hauptsächlich task.c)
- Readcache aufgeräumt, aber Ergebnis unverändert.
- Weitere Testergebnisse ergänzt


Zuletzt bearbeitet von Mr X am 21:51:24 13.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:27:54 13.08.2010   Titel:              Zitieren

0.0.1.172 - Rev: 751

Lesecache aktiviert, für screenshot ausgeschaltet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:42:38 14.08.2010   Titel:              Zitieren

0.0.1.173 - Rev: 752

readcache weiter optimiert, auch bei mehrfacher Abfrage des Puffers werden die 512 Byte zur Sicherheit kopiert (Korrektheit wichtiger als Performance). Beim Anlegen des Cache eines Sektors werden alle validen Dubletten eliminiert (Korrektheit).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:44:42 14.08.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 14:19:40 14.08.2010   Titel:              Zitieren

version 0.0.1.174 - Rev: 753


VBE erweitert, man kann jetzt zwischen 3 Auflösungen wählen

1. 640x480x256 (Bild verschoben)
2. 800x600x256 (Bild verschoben)
3. 1024x768x256 (wird fast korrekt angezeigt)
default: 1024x768x256

ckernel.c
- Switch Konstrukt für den gewählten VideoMode hinzugefügt.

vbe.c/.h
- switchToVideomode(...) um einen übergabe parameter erweitert, für den zu setzenden VideoMode.

vidswitch.asm
- video_mode und ModeInfoBlock, für die 3 jeweiligen oben genannten Bildschirm Auflösungen hinzugefügt.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:23:26 14.08.2010   Titel:              Zitieren

strg+s und fdir geht wieder ganz brauchbar:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
PrettyOS [Version 0.0.1.174 - Rev: 753]                                        
--------------------------------------------------------------------------------
RTL8139 Interrupt Status: 01h, Receive OK  RXBUFTAIL: 236                      
Flags: 01h 20h  Length: 248                                                    
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h  
Ethernet: type 2, Type: 08h 00h                                                
45h 00h 00h E5h 8Dh D7h 00h 00h 1Eh 11h 77h 7Ah C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 65h 11h 02h 8Dh ACh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h                                                                    
Ethernet 2.                                                                    
        RAMdisk                                                                
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached disks:                                                                
                                                                               
Type    Number  Name            Part.   Serial                                  
----------------------------------------------------------------------          
Floppy  1       BLABLA          0       BLABLA                                  
RAMdisk 2       RAMdisk         0       786435                                  
----------------------------------------------------------------------          
                                                                               
--------------------------------------------------------------------------------
                                                                               
--------------------------------------------------------------------------------
                                                                               
RTL8139 Interrupt Status: 01h, Receive OK  RXBUFTAIL: 488                      
Flags: 01h 20h  Length: 248                                                    
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h  
Ethernet: type 2, Type: 08h 00h                                                
45h 00h 00h E5h 8Dh D8h 00h 00h 1Eh 11h 77h 79h C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 64h 11h 02h 8Dh ADh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h                                                                    
Ethernet 2.                                                                    
                                                                               
$> hi <--                                                                      
I am PrettyOS. Always at your service!                                          
Screenshot (Thread)                                                            
                                                                               
                                                                               
$>                                                                              
                                                                               
--------------------------------------------------------------------------------
                                                                               
                                                                               
                                                                               
--------------------------------------------------------------------------------
Saturday, August 14, 2010, 13:28:53   201 s runtime. CPU: 1399 MHz             -



PrettyOS [Version 0.0.1.174 - Rev: 753]                                        
--------------------------------------------------------------------------------
running tasks:                                                                  
pid: 0  esp: 0018FF00h  eip: 00000000h  PD: 00A22000h  k_stack: 00000000h      
pid: 9  esp: C0204B40h  eip: 0011450Eh  PD: 00A22000h  k_stack: C0204E08h      
blocked tasks:                                                                  
pid: 8  esp: C0209E88h  eip: 0011450Eh  PD: C0207000h  k_stack: C020A008h      
                                                                               
                                                                               
--------------------------------------------------------------------------------
                                                                               
--------------------------------------------------------------------------------
                                                                               
RTL8139 Interrupt Status: 01h, Receive OK  RXBUFTAIL: 992                      
Flags: 01h 20h  Length: 248                                                    
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h  
Ethernet: type 2, Type: 08h 00h                                                
45h 00h 00h E5h 8Dh DAh 00h 00h 1Eh 11h 77h 77h C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 62h 11h 02h 8Dh AFh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h                                                                    
Ethernet 2.                                                                    
                                                                               
$> fdir <--                                                                    
<Floppy Disc Directory>                                                        
BLABLA          0 byte           (vol)  1st sector: 31                          
BOOT2.BIN       1002 byte        (arc)  1st sector: 33                          
KERNEL.BIN      223884 byte      (arc)  1st sector: 35                          
HELLO.ELF       9344 byte        (arc)  1st sector: 473                        
CPP.ELF         9252 byte        (arc)  1st sector: 492                        
ARROW.ELF       10637 byte       (arc)  1st sector: 511                        
CALC.ELF        10847 byte       (arc)  1st sector: 532                        
KEYSOUND.ELF    8657 byte        (arc)  1st sector: 554                        
MUSIC.ELF       10538 byte       (arc)  1st sector: 571                        
PQEQ.ELF        8813 byte        (arc)  1st sector: 592                        
README.ELF      9095 byte        (arc)  1st sector: 610                        
TTT.ELF         10672 byte       (arc)  1st sector: 628                        
SCREEN.TXT      4098 byte        (arc)  1st sector: 649                        
                                                                               
Screenshot (Thread)                                                            
                                                                               
                                                                               
$>                                                                              
                                                                               
--------------------------------------------------------------------------------
                                                                               
                                                                               
                                                                               
--------------------------------------------------------------------------------
Saturday, August 14, 2010, 13:29:59   267 s runtime. CPU: 1399 MHz             \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
PrettyOS [Version 0.0.1.174 - Rev: 753]
--------------------------------------------------------------------------------
RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 236
Flags: 01h 20h Length: 248
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h
Ethernet: type 2, Type: 08h 00h
45h 00h 00h E5h 8Dh D7h 00h 00h 1Eh 11h 77h 7Ah C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 65h 11h 02h 8Dh ACh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h
Ethernet 2.
RAMdisk
----------------------------------------------------------------------


Attached disks:

Type Number Name Part. Serial
----------------------------------------------------------------------
Floppy 1 BLABLA 0 BLABLA
RAMdisk 2 RAMdisk 0 786435
----------------------------------------------------------------------

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 488
Flags: 01h 20h Length: 248
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h
Ethernet: type 2, Type: 08h 00h
45h 00h 00h E5h 8Dh D8h 00h 00h 1Eh 11h 77h 79h C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 64h 11h 02h 8Dh ADh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h
Ethernet 2.

$> hi <--
I am PrettyOS. Always at your service!
Screenshot (Thread)


$>

--------------------------------------------------------------------------------



--------------------------------------------------------------------------------
Saturday, August 14, 2010, 13:28:53 201 s runtime. CPU: 1399 MHz -



PrettyOS [Version 0.0.1.174 - Rev: 753]
--------------------------------------------------------------------------------
running tasks:
pid: 0 esp: 0018FF00h eip: 00000000h PD: 00A22000h k_stack: 00000000h
pid: 9 esp: C0204B40h eip: 0011450Eh PD: 00A22000h k_stack: C0204E08h
blocked tasks:
pid: 8 esp: C0209E88h eip: 0011450Eh PD: C0207000h k_stack: C020A008h


--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 992
Flags: 01h 20h Length: 248
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h
Ethernet: type 2, Type: 08h 00h
45h 00h 00h E5h 8Dh DAh 00h 00h 1Eh 11h 77h 77h C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 62h 11h 02h 8Dh AFh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h
Ethernet 2.

$> fdir <--
<Floppy Disc Directory>
BLABLA 0 byte (vol) 1st sector: 31
BOOT2.BIN 1002 byte (arc) 1st sector: 33
KERNEL.BIN 223884 byte (arc) 1st sector: 35
HELLO.ELF 9344 byte (arc) 1st sector: 473
CPP.ELF 9252 byte (arc) 1st sector: 492
ARROW.ELF 10637 byte (arc) 1st sector: 511
CALC.ELF 10847 byte (arc) 1st sector: 532
KEYSOUND.ELF 8657 byte (arc) 1st sector: 554
MUSIC.ELF 10538 byte (arc) 1st sector: 571
PQEQ.ELF 8813 byte (arc) 1st sector: 592
README.ELF 9095 byte (arc) 1st sector: 610
TTT.ELF 10672 byte (arc) 1st sector: 628
SCREEN.TXT 4098 byte (arc) 1st sector: 649

Screenshot (Thread)


$>

--------------------------------------------------------------------------------



--------------------------------------------------------------------------------
Saturday, August 14, 2010, 13:29:59 267 s runtime. CPU: 1399 MHz \
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
PrettyOS [Version 0.0.1.174 - Rev: 753]                                        
--------------------------------------------------------------------------------
RTL8139 Interrupt Status: 01h, Receive OK  RXBUFTAIL: 236                      
Flags: 01h 20h  Length: 248                                                    
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h  
Ethernet: type 2, Type: 08h 00h                                                
45h 00h 00h E5h 8Dh D7h 00h 00h 1Eh 11h 77h 7Ah C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 65h 11h 02h 8Dh ACh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h                                                                    
Ethernet 2.                                                                    
        RAMdisk                                                                
----------------------------------------------------------------------          
                                                                               
                                                                               
Attached disks:                                                                
                                                                               
Type    Number  Name            Part.   Serial                                  
----------------------------------------------------------------------          
Floppy  1       BLABLA          0       BLABLA                                  
RAMdisk 2       RAMdisk         0       786435                                  
----------------------------------------------------------------------          
                                                                               
--------------------------------------------------------------------------------
                                                                               
--------------------------------------------------------------------------------
                                                                               
RTL8139 Interrupt Status: 01h, Receive OK  RXBUFTAIL: 488                      
Flags: 01h 20h  Length: 248                                                    
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h  
Ethernet: type 2, Type: 08h 00h                                                
45h 00h 00h E5h 8Dh D8h 00h 00h 1Eh 11h 77h 79h C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 64h 11h 02h 8Dh ADh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h                                                                    
Ethernet 2.                                                                    
                                                                               
$> hi <--                                                                      
I am PrettyOS. Always at your service!                                          
Screenshot (Thread)                                                            
                                                                               
                                                                               
$>                                                                              
                                                                               
--------------------------------------------------------------------------------
                                                                               
                                                                               
                                                                               
--------------------------------------------------------------------------------
Saturday, August 14, 2010, 13:28:53   201 s runtime. CPU: 1399 MHz             -



PrettyOS [Version 0.0.1.174 - Rev: 753]                                        
--------------------------------------------------------------------------------
running tasks:                                                                  
pid: 0  esp: 0018FF00h  eip: 00000000h  PD: 00A22000h  k_stack: 00000000h      
pid: 9  esp: C0204B40h  eip: 0011450Eh  PD: 00A22000h  k_stack: C0204E08h      
blocked tasks:                                                                  
pid: 8  esp: C0209E88h  eip: 0011450Eh  PD: C0207000h  k_stack: C020A008h      
                                                                               
                                                                               
--------------------------------------------------------------------------------
                                                                               
--------------------------------------------------------------------------------
                                                                               
RTL8139 Interrupt Status: 01h, Receive OK  RXBUFTAIL: 992                      
Flags: 01h 20h  Length: 248                                                    
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h  
Ethernet: type 2, Type: 08h 00h                                                
45h 00h 00h E5h 8Dh DAh 00h 00h 1Eh 11h 77h 77h C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 62h 11h 02h 8Dh AFh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h                                                                    
Ethernet 2.                                                                    
                                                                               
$> fdir <--                                                                    
<Floppy Disc Directory>                                                        
BLABLA          0 byte           (vol)  1st sector: 31                          
BOOT2.BIN       1002 byte        (arc)  1st sector: 33                          
KERNEL.BIN      223884 byte      (arc)  1st sector: 35                          
HELLO.ELF       9344 byte        (arc)  1st sector: 473                        
CPP.ELF         9252 byte        (arc)  1st sector: 492                        
ARROW.ELF       10637 byte       (arc)  1st sector: 511                        
CALC.ELF        10847 byte       (arc)  1st sector: 532                        
KEYSOUND.ELF    8657 byte        (arc)  1st sector: 554                        
MUSIC.ELF       10538 byte       (arc)  1st sector: 571                        
PQEQ.ELF        8813 byte        (arc)  1st sector: 592                        
README.ELF      9095 byte        (arc)  1st sector: 610                        
TTT.ELF         10672 byte       (arc)  1st sector: 628                        
SCREEN.TXT      4098 byte        (arc)  1st sector: 649                        
                                                                               
Screenshot (Thread)                                                            
                                                                               
                                                                               
$>                                                                              
                                                                               
--------------------------------------------------------------------------------
                                                                               
                                                                               
                                                                               
--------------------------------------------------------------------------------
Saturday, August 14, 2010, 13:29:59   267 s runtime. CPU: 1399 MHz             \



Das noch nicht vollständig ausgewertete Netzwerk-Paket
Zitat:

Flags: 01h 20h Length: 248
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h
Ethernet: type 2, Type: 08h 00h
45h 00h 00h E5h 8Dh DAh 00h 00h 1Eh 11h 77h 77h C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 11h 62h 11h 02h 8Dh AFh C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h

bedeutet:

Internet Protocol (IP):
45: version: 4, header length: 20 bytes
00: differentiated services field: ...
00 E5: total length 229
8D DA: identification
00: flags (don't fragment, more fragments)
(00) 00: fragment offset
1E: time to live (TTL) = 30
11: UDP (protocol)
77 77: checksum
C0h A8h 0Ah 67h: source IP 192.168.10.103
C0h A8h 0Ah FFh: dest IP 192.168.10.255

User Datagram Protocol (UDP):
00 8A: source port: netbios-dgm (138)
00 8A: dest port: netbios-dgm (138)
00 D1: length
11 62: checksum

NetBIOS Datagram Service:
...

Server Message Block Protocol:
...

SMB Mailslot Protocol:
...

MS Windows Browser Protocol:
...

screenshot (similar packet)
http://www.henkessoft.de/OS_Dev/Bilder/NetworkPacket_UDP_NetBIOS_SMB.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:03:05 14.08.2010, insgesamt 2-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:12:25 14.08.2010   Titel:              Zitieren

version 0.0.1.175 - Rev: 754

udp.c/.h
- UDPRecv(...), UDPDebug(...): udppacket_t wird leider noch nicht richtig ausgelesen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:50:22 14.08.2010   Titel:              Zitieren

TEST:

PrettyOS [Version 0.0.1.175 - Rev: 754]

RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 488
Flags: 01h 20h Length: 248
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h
Ethernet: type 2, Type: 08h 00h
45h 00h 00h E5h 90h 62h 00h 00h 1Eh 11h 74h EFh C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 0Eh DAh 11h 02h 90h 37h C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h
Ethernet 2.
Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
source port: 16                                                                
destination port: 27159                                                        
                                                                               
UDP Header information:                                                        
+--------------+----------------+                                              
|      16      |      27159     | (source port, destination port)          
+-------------------------------+                                              
|      19      |      64776     | (length, checksum)                        
+-------------------------------+                                              
|             data              | (data)                                      
+-------------------------------+                                  
Code:
1
2
3
4
5
6
7
8
9
10
11
source port: 16
destination port: 27159

UDP Header information:
+--------------+----------------+
| 16 | 27159 | (source port, destination port)
+-------------------------------+
| 19 | 64776 | (length, checksum)
+-------------------------------+
| data | (data)
+-------------------------------+
Code:
1
2
3
4
5
6
7
8
9
10
11
source port: 16                                                                
destination port: 27159                                                        
                                                                               
UDP Header information:                                                        
+--------------+----------------+                                              
|      16      |      27159     | (source port, destination port)          
+-------------------------------+                                              
|      19      |      64776     | (length, checksum)                        
+-------------------------------+                                              
|             data              | (data)                                      
+-------------------------------+                                  


Alles falsch! :D

Vergleich:
Korrekt wäre:

User Datagram Protocol (UDP):
00 8A: source port: netbios-dgm (138)
00 8A: dest port: netbios-dgm (138)
00 D1: length
0E DA: checksum

... sind doch nur 8 Byte, so wie es aussieht. ;)

Die beiden IP-Adressen im Internet-Protocol (IP) C0h A8h 0Ah 67h und C0h A8h 0Ah FFh sollte man auch auswerten.

45h 00h 00h E5h 90h 62h 00h 00h 1Eh 11h 74h EFh C0h A8h 0Ah 67h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 0Eh DAh 11h 02h 90h 37h C0h A8h 0Ah 67h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h

Wir werten die IP-Zeile
45h 00h 00h E5h 90h 62h 00h 00h 1Eh 11h 74h EFh C0h A8h 0Ah 67h C0h A8h 0Ah FFh
überhaupt noch nicht vollständig aus, holen uns nur das Protokoll raus ^^

Im Prinzip Wireshark nachbauen. :D

Ich kann UDP sehr schön testen, denn mein Printserver sendet das ständig ins Netz.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:44:53 15.08.2010, insgesamt 14-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:44:31 15.08.2010   Titel:              Zitieren

Zitat:
wird leider noch nicht richtig ausgelesen


Ist ja auch kein Wunder bei dem intransparenten Gewurschtel.

Design-Vorschlag:
Die nächste Einheit an Header+Data muss doch auch nicht das ganze Paket erhalten? Es reichen doch die Daten des betroffenen Protokolls, bei UDP also UDP-Header plus UDP-Data. Wir müssen die Pakete von außen nach innen zerlegen.
Jede receive-Funktion eines Protokolls sollte nur die Daten ab Header erhalten. Dann setzt man einfach die Header-Struktur auf "data". Sind Informationen von vorher erforderlich werden diese als Parameter dieser funktion übergeben. Dann besteht jedes "packet" eines Protokolls aus Header und nachfolgenden Daten. Das amcht den Code des jeweiligen Protokolls lesbarer. Momentan verheddert man sich komplett. Man weiß nicht mehr, auf welchen Punkt die jeweiligen Zeiger deuten. Das ist schlecht, also konsequenter Umbau und systematisches Abarbeiten in der Baumstruktur! :idea:

ipTcpstack.h/c muesste eigentlich ethernet.h/c heißen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:30:06 15.08.2010, insgesamt 1-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 17:12:56 15.08.2010   Titel:              Zitieren

0.0.1.176 - Revision 755:

* Support für Serielle Schnittstelle.

Lesen: OK
Schreiben: Muss noch getestet werden...


Zuletzt bearbeitet von Erhard Henkes am 19:51:33 15.08.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:02:20 15.08.2010   Titel:              Zitieren

Version 0.0.1.177:

- test-results.txt aktualisiert und umgebaut
- Code in tasking eingefügt, der später create_vm86_ThreadTaskBase ersetzen soll (funktioniert noch nicht)
- Code vereinfacht und Styleänderungen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:28:26 15.08.2010   Titel:              Zitieren

0.0.1.178 - Rev: 757

UDP-Header wird nun korrekt ausgelesen, und ich konnte meinen Designvorschlag umsetzen. :live:

screenshot:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
RTL8139 Interrupt Status: 01h, Receive OK  RXBUFTAIL: 556                      
Flags: 01h 20h  Length: 248                                                    
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h  
Ethernet: type 2, Type: 08h 00h                                                
45h 00h 00h E5h 9Ch 94h 00h 00h 1Eh 11h 68h C1h C0h A8h 0Ah 63h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 02h B4h 11h 02h 9Ch 65h C0h A8h 0Ah 63h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h                                                                    
Ethernet 2.  IP version: 4, IP Header Length: 20 byte                          
source port: 138 dest.  port: 138                                              
                                                                               
UDP Header information:                                                        
+--------------+----------------+                                              
|      138      |      138      | (source port, destination port)              
+-------------------------------+                                              
|      209      |      02B4h    | (length, checksum)                            
+-------------------------------+                                              
IPv4.                                                                          
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
RTL8139 Interrupt Status: 01h, Receive OK RXBUFTAIL: 556
Flags: 01h 20h Length: 248
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h
Ethernet: type 2, Type: 08h 00h
45h 00h 00h E5h 9Ch 94h 00h 00h 1Eh 11h 68h C1h C0h A8h 0Ah 63h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 02h B4h 11h 02h 9Ch 65h C0h A8h 0Ah 63h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h
Ethernet 2. IP version: 4, IP Header Length: 20 byte
source port: 138 dest. port: 138

UDP Header information:
+--------------+----------------+
| 138 | 138 | (source port, destination port)
+-------------------------------+
| 209 | 02B4h | (length, checksum)
+-------------------------------+
IPv4.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
RTL8139 Interrupt Status: 01h, Receive OK  RXBUFTAIL: 556                      
Flags: 01h 20h  Length: 248                                                    
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h C0h 02h C6h E5h 65h  
Ethernet: type 2, Type: 08h 00h                                                
45h 00h 00h E5h 9Ch 94h 00h 00h 1Eh 11h 68h C1h C0h A8h 0Ah 63h C0h A8h 0Ah FFh
00h 8Ah 00h 8Ah 00h D1h 02h B4h 11h 02h 9Ch 65h C0h A8h 0Ah 63h 00h 8Ah 00h BBh
00h 00h 20h 46h 44h 45h 44h 45h 44h 44h 47h 45h 46h 44h 46h 44h 47h 44h 46h 43h
41h 43h 41h                                                                    
Ethernet 2.  IP version: 4, IP Header Length: 20 byte                          
source port: 138 dest.  port: 138                                              
                                                                               
UDP Header information:                                                        
+--------------+----------------+                                              
|      138      |      138      | (source port, destination port)              
+-------------------------------+                                              
|      209      |      02B4h    | (length, checksum)                            
+-------------------------------+                                              
IPv4.                                                                          


Wir übergeben nur den Part hinter dem IP-Header und die notwendigen Parameter.
C/C++ Code:
UDPRecv(  (void*)((uintptr_t)data + sizeof(ethernet_t) + ipHeaderLength), length - ipHeaderLength, *(uint32_t*)ip->source_ip, *(uint32_t*)ip->dest_ip, ipHeaderLength);
C/C++ Code:
UDPRecv( (void*)((uintptr_t)data + sizeof(ethernet_t) + ipHeaderLength), length - ipHeaderLength, *(uint32_t*)ip->source_ip, *(uint32_t*)ip->dest_ip, ipHeaderLength);
C/C++ Code:
UDPRecv(  (void*)((uintptr_t)data + sizeof(ethernet_t) + ipHeaderLength), length - ipHeaderLength, *(uint32_t*)ip->source_ip, *(uint32_t*)ip->dest_ip, ipHeaderLength);


IP-Header Länge wird übrigens als Vielfaches von 32 bit angegeben, also nicht direkt verwenden:
C/C++ Code:
uint32_t ipHeaderLength = 4 * ip->ipHeaderLength; // is given as number of 32 bit pieces (4 byte)
C/C++ Code:
uint32_t ipHeaderLength = 4 * ip->ipHeaderLength; // is given as number of 32 bit pieces (4 byte)
C/C++ Code:
uint32_t ipHeaderLength = 4 * ip->ipHeaderLength; // is given as number of 32 bit pieces (4 byte)


Problem: Die Pakete kommen auf PC verzögert an. :confused:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:44:39 15.08.2010, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:28:27 15.08.2010   Titel:              Zitieren

0.0.1.179 - Rev: 758

- tcpipstack.h/c umbenannt in ethernet.h/c
- Formatierungen von Namen (netzwerk) in CamelCase Form und nicht camel_case (begonnen)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:30:03 15.08.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:52:00 16.08.2010   Titel:              Zitieren

0.0.1.180 - Rev: 759

Auf paging_get_phys_addr(virtual address) vereinfacht (wird immer kernel_pd verwendet)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:52:44 16.08.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:02:15 16.08.2010   Titel:              Zitieren

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
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 22:29:07 16.08.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:38:51 16.08.2010   Titel:              Zitieren

0.0.1.183 - Rev: 762

Fehler #PF (qemu) durch HOTFIX in task.c behoben

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:10:00 18.08.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:38:04 18.08.2010   Titel:              Zitieren

0.0.1.185 - Rev: 764

- udp weiter ausgewertet (protokolle)
- ip/arp auswertung vereinfacht
- projektdateien
- sound abgeschaltet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 19:52:19 18.08.2010   Titel:              Zitieren

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...-.-
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 20:14:37 18.08.2010   Titel:              Zitieren

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.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:30:38 18.08.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:44:33 18.08.2010   Titel:              Zitieren

Dokumentation der Änderung in paging.c:
C/C++ Code:
// 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;
}
C/C++ Code:
// 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;
}
C/C++ Code:
// 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 :warning:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:03:46 19.08.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:52:54 19.08.2010   Titel:              Zitieren

Version 0.0.1.190 - Rev: 769

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
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);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
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);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:54:08 19.08.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 01:09:16 20.08.2010   Titel:              Zitieren

Version 0.0.1.191:

- Tja... (mehr) Hack als Bugfix^^ Einige Dinge in task.h/c auskommentiert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:49:38 21.08.2010   Titel:              Zitieren

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 eingebaut

C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
    uint32_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
C/C++ Code:
1
2
3
4
5
6
7
8
9
uint32_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
C/C++ Code:
1
2
3
4
5
6
7
8
9
    uint32_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


C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);
    }
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);
    }
}


Zitat:

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.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:17:24 21.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:55:28 21.08.2010   Titel:              Zitieren

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

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:48:11 21.08.2010   Titel:              Zitieren

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
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:15:22 21.08.2010   Titel:              Zitieren

Endlich das Task-Disaster besiegt. Wirklich geholfen hat die Visualisierung in Form des Task-log:
Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
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      
Code:
1
2
3
4
5
6
7
8
9
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
Code:
1
2
3
4
5
6
7
8
9
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. :D

Dies war die Stelle, die das Reboot-Chaos der letzten Versionen verursacht hat und nun glatt durchläuft:

task.c:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
    // 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);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
// 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);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
    // 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 :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:12:40 22.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:36:13 22.08.2010   Titel:              Zitieren

0.0.1.195 - Rev: 774

- ckernel.c: line (anstelle for-loop, mit FPU-Fkt. fabs) und drawCircle (mit FPU-Fkt. sqrt)
- beep aus

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:23:33 22.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:46:20 22.08.2010   Titel:              Zitieren

0.0.1.196 - Rev: 775

types.h: #define BIT(n) (1<<(n))

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:40:44 22.08.2010   Titel:              Zitieren

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. :D

C/C++ Code:
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);    
}
C/C++ Code:
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);
}
C/C++ Code:
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);    
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:49:45 22.08.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:54:40 22.08.2010   Titel:              Zitieren

ehenkes: Du hast vergessen zu erwähnen, dass Du dabei auch gleich den Verschiebungsfehler in VBE eliminiert hast.

Version 0.0.1.198:

- Cuervos Testergebnisse hochgeladen
- Besserer Skalierungsalgorithmus
- VBE läuft nun in separatem Thread - Zeitersparnis beim booten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:53:03 23.08.2010   Titel:              Zitieren

0.0.1.199 - Rev: 778

Probeweise zurückverlagert, bitte testen:

kheap.h:
C/C++ Code:
#define PLACEMENT_BEGIN   ((uint8_t*) 0x1000000)     // 16 MiB
#define
PLACEMENT_END     ((uint8_t*) 0x1400000)     // 20 MiB
C/C++ Code:
#define PLACEMENT_BEGIN ((uint8_t*) 0x1000000) // 16 MiB
#define
PLACEMENT_END ((uint8_t*) 0x1400000) // 20 MiB
C/C++ Code:
#define PLACEMENT_BEGIN   ((uint8_t*) 0x1000000)     // 16 MiB
#define
PLACEMENT_END     ((uint8_t*) 0x1400000)     // 20 MiB


Wegen Überschneidung mit Floppy beim DMA-Puffer (0x1000 - 0x33FF):
C/C++ Code:
setVgaInfoBlock((VgaInfoBlock_t*)0x3400);
setModeInfoBlock((ModeInfoBlock_t*)0x3600);
C/C++ Code:
setVgaInfoBlock((VgaInfoBlock_t*)0x3400);
setModeInfoBlock((ModeInfoBlock_t*)0x3600);
C/C++ Code:
setVgaInfoBlock((VgaInfoBlock_t*)0x3400);
setModeInfoBlock((ModeInfoBlock_t*)0x3600);

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:27:15 23.08.2010   Titel:              Zitieren

0.0.1.200 - Rev: 779
Kernel: 515.560 Bytes


http://www.pcidatabase.com/pci_c_header.php (nach Überarbeitung durch Erhard Henkes wegen massiver bugs in der Produkt-Liste, ca. 1h Aufwand) eingebaut zur Erkennung von Devices.

Noch nicht an pci-scan angeschlossen. Bitte erst testen. ;)

bei mir: qemu und PC laufen noch. :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:32:34 23.08.2010, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:13:00 23.08.2010   Titel:              Zitieren

Diese Liste kostet ca. 300 KB. Ich weiß ja nicht, ob wir uns wirklich 20 % der Floppy damit vollstopfen wollen...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:35:22 23.08.2010   Titel:              Zitieren

0.0.1.201 - Rev: 780

pciVendProdList.h verwendet zur Auswertung in pciScan(...)

Beispiel qemu:
Code:
#0 0:0.0  IRQ:0  Intel   PCI & Memory                                              
#1 0:1.0  IRQ:0  Intel   PIIX3 PCI-to-ISA Bridge (Triton II)                      
#2 0:1.1  IRQ:0  Intel   PIIX3 IDE Interface (Triton II)                          
#3 0:1.2  IRQ:11 Intel   USB EHCI Controller USB EHCI F0000000h MMIO sz:4096      
#4 0:1.3  IRQ:9  Intel   PIIX4/4E/4M Power Management Controller                  
#5 0:2.0  IRQ:0  Cirrus  64-bit VisualMedia Accelerator                          
#6 0:26.0 IRQ:10 Realtek Realtek RTL8139 Family PCI Fast Ethernet NIC
Code:
#0 0:0.0 IRQ:0 Intel PCI & Memory
#1 0:1.0 IRQ:0 Intel PIIX3 PCI-to-ISA Bridge (Triton II)
#2 0:1.1 IRQ:0 Intel PIIX3 IDE Interface (Triton II)
#3 0:1.2 IRQ:11 Intel USB EHCI Controller USB EHCI F0000000h MMIO sz:4096
#4 0:1.3 IRQ:9 Intel PIIX4/4E/4M Power Management Controller
#5 0:2.0 IRQ:0 Cirrus 64-bit VisualMedia Accelerator
#6 0:26.0 IRQ:10 Realtek Realtek RTL8139 Family PCI Fast Ethernet NIC
Code:
#0 0:0.0  IRQ:0  Intel   PCI & Memory                                              
#1 0:1.0  IRQ:0  Intel   PIIX3 PCI-to-ISA Bridge (Triton II)                      
#2 0:1.1  IRQ:0  Intel   PIIX3 IDE Interface (Triton II)                          
#3 0:1.2  IRQ:11 Intel   USB EHCI Controller USB EHCI F0000000h MMIO sz:4096      
#4 0:1.3  IRQ:9  Intel   PIIX4/4E/4M Power Management Controller                  
#5 0:2.0  IRQ:0  Cirrus  64-bit VisualMedia Accelerator                          
#6 0:26.0 IRQ:10 Realtek Realtek RTL8139 Family PCI Fast Ethernet NIC

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:45:33 23.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:49:08 23.08.2010   Titel:              Zitieren

Zitat:
Diese Liste kostet ca. 300 KB. Ich weiß ja nicht, ob wir uns wirklich 20 % der Floppy damit vollstopfen wollen...

@MrX: man kann es ja weg lassen mittels #define _PCI_VEND_PROD_LIST_

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:06:14 23.08.2010   Titel:              Zitieren

0.0.1.202 - Rev: 781

nur IRQ != 255 angezeigt

Aktuelle Liste von VBox:
Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
#1 0:1.0 IRQ:0  Intel PIIX3 PCI-to-ISA Bridge (Triton II)                      
#2 0:1.1 IRQ:0  Intel PIIX4/4E/4M IDE Controller                                
#3 0:2.0 IRQ:11 vend:80EEh dev:BEEFh                                            
#4 0:3.0 IRQ:10 Intel Gigabit Ethernet Controller                              
#5 0:4.0 IRQ:9  vend:80EEh dev:CAFEh                                            
#6 0:5.0 IRQ:5  Intel Aureal (AD1881 SOUNDMAX) Placa Mãe Asaki P3-141          
#7 0:6.0 IRQ:11 vend:106Bh dev:003Fh USB OHCI F0804000h MMIO sz:4096            
#8 0:7.0 IRQ:9  Intel PIIX4/4E/4M Power Management Controller                  
#9 0:8.0 IRQ:9  AMD PCnet LANCE PCI Ethernet Controller                        
#10 0:11.0 IRQ:10 Intel USB 2.0 EHCI Controller USB EHCI F0900000h MMIO sz
:4096
Code:
1
2
3
4
5
6
7
8
9
10
11
#1 0:1.0 IRQ:0 Intel PIIX3 PCI-to-ISA Bridge (Triton II)
#2 0:1.1 IRQ:0 Intel PIIX4/4E/4M IDE Controller
#3 0:2.0 IRQ:11 vend:80EEh dev:BEEFh
#4 0:3.0 IRQ:10 Intel Gigabit Ethernet Controller
#5 0:4.0 IRQ:9 vend:80EEh dev:CAFEh
#6 0:5.0 IRQ:5 Intel Aureal (AD1881 SOUNDMAX) Placa Mãe Asaki P3-141
#7 0:6.0 IRQ:11 vend:106Bh dev:003Fh USB OHCI F0804000h MMIO sz:4096
#8 0:7.0 IRQ:9 Intel PIIX4/4E/4M Power Management Controller
#9 0:8.0 IRQ:9 AMD PCnet LANCE PCI Ethernet Controller
#10 0:11.0 IRQ:10 Intel USB 2.0 EHCI Controller USB EHCI F0900000h MMIO sz
:4096
Code:
1
2
3
4
5
6
7
8
9
10
11
#1 0:1.0 IRQ:0  Intel PIIX3 PCI-to-ISA Bridge (Triton II)                      
#2 0:1.1 IRQ:0  Intel PIIX4/4E/4M IDE Controller                                
#3 0:2.0 IRQ:11 vend:80EEh dev:BEEFh                                            
#4 0:3.0 IRQ:10 Intel Gigabit Ethernet Controller                              
#5 0:4.0 IRQ:9  vend:80EEh dev:CAFEh                                            
#6 0:5.0 IRQ:5  Intel Aureal (AD1881 SOUNDMAX) Placa Mãe Asaki P3-141          
#7 0:6.0 IRQ:11 vend:106Bh dev:003Fh USB OHCI F0804000h MMIO sz:4096            
#8 0:7.0 IRQ:9  Intel PIIX4/4E/4M Power Management Controller                  
#9 0:8.0 IRQ:9  AMD PCnet LANCE PCI Ethernet Controller                        
#10 0:11.0 IRQ:10 Intel USB 2.0 EHCI Controller USB EHCI F0900000h MMIO sz
:4096


das klingt komisch:
vend:80EEh dev:BEEFh <---- BEEF :D (vendor 80EEh gibt es nicht)
vend:80EEh dev:CAFEh <---- CAFE :D

vend:106Bh dev:003Fh <--- der Hersteller soll Apple sein, aber Device 003Fh gibt es nicht

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:56:19 23.08.2010, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:59:18 23.08.2010   Titel:              Zitieren

0.0.1.203 - Rev: 782

memory.h eingefügt

Paging.h/c formal überarbeitet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:07:51 24.08.2010   Titel:              Zitieren

0.0.1.203 - Rev: 783

memory.h nachgereicht

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:42:18 24.08.2010   Titel:              Zitieren

0.0.1.204 - Rev: 784

ESC + p zeigt die Belegung der physischen Bittabelle (paging.c). Jedes Bit dort repräsentiert eine physische Page (auch Frame genannt):

0 = frei (grün),
1 = bereits belegt (grau)

Man sieht, dass PrettyOS 23 1/4 MiB für sich verwendet.

Test mit VBox und 24 MiB RAM eingestellt: Laden von mehreren User-Programmen (ca. 10) führt zum #PF mit error 6 (bit1: write access und bit2: user mode access)
http://www.c-plusplus.de/forum/viewtopic-var-t-is-264710.html

Mit obigem physicalMem-Logger kann man diesen Vorgang illustrativ verfolgen. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:31:23 24.08.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 21:01:57 24.08.2010   Titel:              Zitieren

version 0.0.1.204 - Rev: 785

vbe.c/h
- Kommentare entfernt, geändert u. hinzugefügt

other_userprogs/vgatest.c entfernt
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 22:10:38 24.08.2010   Titel:              Zitieren

version 0.0.1.204 - Rev: 786

audio/sb16.c/.h
- Informationen für die Programmierung eines Audiotreibers zusammengelegt (Soundblaster16).
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:24:09 24.08.2010   Titel:              Zitieren

Version 0.0.1.205:

- event_list in todo_list umbenannt. Verbessert/Verallgemeinert. Nutzung reduziert.
- memory.txt ergänzt
- Includes aufgeräumt
- Bootablauf verändert, Ausdruck verbessert.
- Sonstiges^^


Zuletzt bearbeitet von Mr X am 23:02:16 24.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:11:26 25.08.2010   Titel:              Zitieren

0.0.1.206 - Rev: 788

PCI_VEND_PROD_LIST_H weiter überarbeitet (teilweise echt übel, benötigt leider noch viel Arbeit)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:23:05 26.08.2010   Titel:              Zitieren

0.0.1.207 - Rev: 789

PCI_VEND_PROD_LIST_H weiter überarbeitet

Wenn wir da alle mithelfen, kann diese Liste wertvoll werden.
In der Urform ist sie nicht zu gebrauchen gewesen. :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:28:36 26.08.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:44:26 26.08.2010   Titel:              Zitieren

0.0.1.208 - Rev: 790

Freigabe des Userstacks:

C/C++ Code:
// free memory for user stack
if (task->userStack != 0)
{
    paging_free (task->page_directory, task->userStack, task->userStackSize * PAGESIZE);
}
C/C++ Code:
// free memory for user stack
if (task->userStack != 0)
{
paging_free (task->page_directory, task->userStack, task->userStackSize * PAGESIZE);
}
C/C++ Code:
// free memory for user stack
if (task->userStack != 0)
{
    paging_free (task->page_directory, task->userStack, task->userStackSize * PAGESIZE);
}


Test mit VBox und 24 MiB RAM:
Zweimal ttt starten, dann das zweite ttt beenden, anschließend das erste.
Man erkennt, dass zwei Pages noch nicht frei gegeben werden beim "kill".

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:05:28 27.08.2010   Titel:              Zitieren

0.0.1.209 - Rev: 791

nach user-stack paging_free nun auch: user-PD und user-PT auf dem heap wird wieder freigegeben
zwei pages auf dem physischen speicher sind allerdings noch belegt nach user-task kill

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
// free memory for user stack
if (task->userStack != 0)
{
    paging_free (task->page_directory, task->userStack, task->userStackSize * PAGESIZE);
    if (task->page_directory != kernel_pd)
    {
        free(task->page_directory);
        free(task->userPT);
    }
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
// free memory for user stack
if (task->userStack != 0)
{
paging_free (task->page_directory, task->userStack, task->userStackSize * PAGESIZE);
if (task->page_directory != kernel_pd)
{
free(task->page_directory);
free(task->userPT);
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
// free memory for user stack
if (task->userStack != 0)
{
    paging_free (task->page_directory, task->userStack, task->userStackSize * PAGESIZE);
    if (task->page_directory != kernel_pd)
    {
        free(task->page_directory);
        free(task->userPT);
    }
}


So sieht das aus, wenn man 4 mal ttt startet und beendet:
http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_209_physMem.PNG

Man sieht, dass dieser Speicher vor dem user-stack (10 Pages) belegt wird. Die 10 Pages vom user-stack werden also sauber wieder frei gegeben.

Auf dem Heap fällt "ring-element" auf.

MrX im IRC:
Zitat:
hätte ring_DeleteFirst ein Memory Leak, müsste der Heap eigentlich platzen. Dann würde bei jedem Tastedruck Speicher verplempert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:43:42 27.08.2010, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:33:00 27.08.2010   Titel:              Zitieren

0.0.1.210 - Rev: 792

Speicher-Leck ( http://www.henkessoft.de/OS_Dev/Bilder/0_0_1_209_physMem.PNG ) abgedichtet! In elf.c allokierter speicher für das user-programm wird nun auch frei gegeben. Damit ist der Speicher nach Beenden des Programms wieder wie vorher. Typisch sind momentan 2 Frames für das User-Programm (elf.c) und 10 Frames für den User-Stack (task.c). :)

task.c, void kill(task_t* task):
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
paging_free (task->page_directory, task->userStackAddr, task->userStackSize * PAGESIZE);
paging_free (task->page_directory, task->userProgAddr, task->userProgSize);
       
if (task->page_directory != kernel_pd)
{
    free(task->page_directory);
    free(task->userPT);
}
C/C++ Code:
1
2
3
4
5
6
7
8
paging_free (task->page_directory, task->userStackAddr, task->userStackSize * PAGESIZE);
paging_free (task->page_directory, task->userProgAddr, task->userProgSize);

if (task->page_directory != kernel_pd)
{
free(task->page_directory);
free(task->userPT);
}
C/C++ Code:
1
2
3
4
5
6
7
8
paging_free (task->page_directory, task->userStackAddr, task->userStackSize * PAGESIZE);
paging_free (task->page_directory, task->userProgAddr, task->userProgSize);
       
if (task->page_directory != kernel_pd)
{
    free(task->page_directory);
    free(task->userPT);
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:22:14 28.08.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:32:43 27.08.2010   Titel:              Zitieren

0.0.1.211 - Rev: 793

kleine Korrekturen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:52:10 28.08.2010   Titel:              Zitieren

Version 0.0.1.212:

- Diverse Bugfixe:
-- Compiliert nun auch mit NASM 2.09 (Optimerungsschalter mussten für VBE und BL1 auf O1 oder O0 stehen)
-- Makefile kompiliert auch audio-Verzeichnis, in dem auch sys_speaker.h/c liegen
-- Scheduler: Bug beim killen von schlafenden tasks behoben
- kernelTask und kernelConsole sind nun nicht mehr dynamisch allokiert, da sie immer da sein sollen
- operatoren new, new[], delete und delete[] in C++-Userlib ergänzt
- Aufgeräumt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:54:20 29.08.2010   Titel:              Zitieren

0.0.1.213 - Rev: 795

va_end(ap); eingebaut

#define _MEMLEAK_FIND_ macht Probleme bei VBox und VMWare, indirekt auch beim PC, also nur auf qemu einsetzen.

Problem muss bei writeInfo(...) liegen, denn auskommentiert läuft VBox.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:09:08 29.08.2010   Titel:              Zitieren

0.0.1.214 - Rev: 796

#define _MEMLEAK_FIND_

Problem, das zum Absturz bei VMWare und VBox führt, gefunden:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef OS_H
#define
OS_H

#include
"types.h"

// These switches change the behavior of PrettyOS, useful for analyzing tasks:

/// #define _DIAGNOSIS_         // Diagnosis-Output - activates prints to the screen about some details and memory use
/// #define _MALLOC_FREE_       // shows information about malloc/free and heap expansion

#define
_MEMLEAK_FIND_      // Provides a counter of all (successful) malloc and free calls showing memory leaks
/// #define _USB_DIAGNOSIS_     // only as transition state during implementation of USB 2.0 transfers
/// #define _FAT_DIAGNOSIS_     // only as transition state during implementation of FAT 12/16/32
/// #define _DEVMGR_DIAGNOSIS_  // e.g. sectorRead, sectorWrite
/// #define _TASKING_DIAGNOSIS_ // Provides output about tasking and scheduler
/// #define _FLOPPY_DIAGNOSIS_  // Provides information about the floppy(-motor)
/// #define _VM_DIAGNOSIS_      // Provides information about the vm86 task, but critical
/// #define _SOUND_             // This is no sound, only "beep". Better stop it! ^^

#define
_PCI_VEND_PROD_LIST_ // http://www.pcidatabase.com/pci_c_header.php
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef OS_H
#define
OS_H

#include
"types.h"

// These switches change the behavior of PrettyOS, useful for analyzing tasks:

/// #define _DIAGNOSIS_ // Diagnosis-Output - activates prints to the screen about some details and memory use
/// #define _MALLOC_FREE_ // shows information about malloc/free and heap expansion

#define
_MEMLEAK_FIND_ // Provides a counter of all (successful) malloc and free calls showing memory leaks
/// #define _USB_DIAGNOSIS_ // only as transition state during implementation of USB 2.0 transfers
/// #define _FAT_DIAGNOSIS_ // only as transition state during implementation of FAT 12/16/32
/// #define _DEVMGR_DIAGNOSIS_ // e.g. sectorRead, sectorWrite
/// #define _TASKING_DIAGNOSIS_ // Provides output about tasking and scheduler
/// #define _FLOPPY_DIAGNOSIS_ // Provides information about the floppy(-motor)
/// #define _VM_DIAGNOSIS_ // Provides information about the vm86 task, but critical
/// #define _SOUND_ // This is no sound, only "beep". Better stop it! ^^

#define
_PCI_VEND_PROD_LIST_ // http://www.pcidatabase.com/pci_c_header.php
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef OS_H
#define
OS_H

#include
"types.h"

// These switches change the behavior of PrettyOS, useful for analyzing tasks:

/// #define _DIAGNOSIS_         // Diagnosis-Output - activates prints to the screen about some details and memory use
/// #define _MALLOC_FREE_       // shows information about malloc/free and heap expansion

#define
_MEMLEAK_FIND_      // Provides a counter of all (successful) malloc and free calls showing memory leaks
/// #define _USB_DIAGNOSIS_     // only as transition state during implementation of USB 2.0 transfers
/// #define _FAT_DIAGNOSIS_     // only as transition state during implementation of FAT 12/16/32
/// #define _DEVMGR_DIAGNOSIS_  // e.g. sectorRead, sectorWrite
/// #define _TASKING_DIAGNOSIS_ // Provides output about tasking and scheduler
/// #define _FLOPPY_DIAGNOSIS_  // Provides information about the floppy(-motor)
/// #define _VM_DIAGNOSIS_      // Provides information about the vm86 task, but critical
/// #define _SOUND_             // This is no sound, only "beep". Better stop it! ^^

#define
_PCI_VEND_PROD_LIST_ // http://www.pcidatabase.com/pci_c_header.php


C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
void writeInfo(uint8_t line, char* args, ...)
{
    va_list ap;
    va_start(ap, args);
    vsnprintf(infoBar[line], 81, args, ap);
    va_end(ap);
    // refreshUserScreen(); // HACK <--- leads to massive error in VBox and VMWare
}
C/C++ Code:
1
2
3
4
5
6
7
8
void writeInfo(uint8_t line, char* args, ...)
{
va_list ap;
va_start(ap, args);
vsnprintf(infoBar[line], 81, args, ap);
va_end(ap);
// refreshUserScreen(); // HACK <--- leads to massive error in VBox and VMWare
}
C/C++ Code:
1
2
3
4
5
6
7
8
void writeInfo(uint8_t line, char* args, ...)
{
    va_list ap;
    va_start(ap, args);
    vsnprintf(infoBar[line], 81, args, ap);
    va_end(ap);
    // refreshUserScreen(); // HACK <--- leads to massive error in VBox and VMWare
}


Nun ist der schwarze Peter bei refreshUserScreen() ;)
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void refreshUserScreen()
{
    // Printing titlebar
    kprintf("PrettyOS [Version %s]                                                            ", 0, 0x0C, version);

    if (displayedConsole == KERNELCONSOLE_ID)
    {
        cursor.x = COLUMNS - 5;
        kputs("Shell");
    }
    else
    {
        char Buffer[70];
        snprintf(Buffer, 70, "Console %u: %s", displayedConsole, reachableConsoles[displayedConsole]->name);
        cursor.x = COLUMNS - strlen(Buffer);
        cursor.y = 0;
        kputs(Buffer);
    }
    kprintf("--------------------------------------------------------------------------------", 1, 7); // Separation
    if(reachableConsoles[displayedConsole]->showInfobar)
    {
        // copying content of visible console to the video-ram
        memcpy(vidmem + USER_BEGIN * COLUMNS, reachableConsoles[displayedConsole]->vidmem, COLUMNS * (USER_LINES-4) * 2);
        memsetw(vidmem + (USER_BEGIN + USER_LINES - 3) * COLUMNS, 0, 3 * COLUMNS); // Clearing info-area
        kprintf("--------------------------------------------------------------------------------", 44, 7); // Separation
        kprintf(infoBar[0], 45, 14);
        kprintf(infoBar[1], 46, 14);
        kprintf(infoBar[2], 47, 14);
    }
    else
    {
        // copying content of visible console to the video-ram
        memcpy(vidmem + USER_BEGIN * COLUMNS, reachableConsoles[displayedConsole]->vidmem, COLUMNS * USER_LINES*2);
    }
    kprintf("--------------------------------------------------------------------------------", 48, 7); // Separation

    cursor.y = reachableConsoles[displayedConsole]->cursor.y;
    cursor.x = reachableConsoles[displayedConsole]->cursor.x;
    update_cursor();
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void refreshUserScreen()
{
// Printing titlebar
kprintf("PrettyOS [Version %s] ", 0, 0x0C, version);

if (displayedConsole == KERNELCONSOLE_ID)
{
cursor.x = COLUMNS - 5;
kputs("Shell");
}
else
{
char Buffer[70];
snprintf(Buffer, 70, "Console %u: %s", displayedConsole, reachableConsoles[displayedConsole]->name);
cursor.x = COLUMNS - strlen(Buffer);
cursor.y = 0;
kputs(Buffer);
}
kprintf("--------------------------------------------------------------------------------", 1, 7); // Separation
if(reachableConsoles[displayedConsole]->showInfobar)
{
// copying content of visible console to the video-ram
memcpy(vidmem + USER_BEGIN * COLUMNS, reachableConsoles[displayedConsole]->vidmem, COLUMNS * (USER_LINES-4) * 2);
memsetw(vidmem + (USER_BEGIN + USER_LINES - 3) * COLUMNS, 0, 3 * COLUMNS); // Clearing info-area
kprintf("--------------------------------------------------------------------------------", 44, 7); // Separation
kprintf(infoBar[0], 45, 14);
kprintf(infoBar[1], 46, 14);
kprintf(infoBar[2], 47, 14);
}
else
{
// copying content of visible console to the video-ram
memcpy(vidmem + USER_BEGIN * COLUMNS, reachableConsoles[displayedConsole]->vidmem, COLUMNS * USER_LINES*2);
}
kprintf("--------------------------------------------------------------------------------", 48, 7); // Separation

cursor.y = reachableConsoles[displayedConsole]->cursor.y;
cursor.x = reachableConsoles[displayedConsole]->cursor.x;
update_cursor();
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
void refreshUserScreen()
{
    // Printing titlebar
    kprintf("PrettyOS [Version %s]                                                            ", 0, 0x0C, version);

    if (displayedConsole == KERNELCONSOLE_ID)
    {
        cursor.x = COLUMNS - 5;
        kputs("Shell");
    }
    else
    {
        char Buffer[70];
        snprintf(Buffer, 70, "Console %u: %s", displayedConsole, reachableConsoles[displayedConsole]->name);
        cursor.x = COLUMNS - strlen(Buffer);
        cursor.y = 0;
        kputs(Buffer);
    }
    kprintf("--------------------------------------------------------------------------------", 1, 7); // Separation
    if(reachableConsoles[displayedConsole]->showInfobar)
    {
        // copying content of visible console to the video-ram
        memcpy(vidmem + USER_BEGIN * COLUMNS, reachableConsoles[displayedConsole]->vidmem, COLUMNS * (USER_LINES-4) * 2);
        memsetw(vidmem + (USER_BEGIN + USER_LINES - 3) * COLUMNS, 0, 3 * COLUMNS); // Clearing info-area
        kprintf("--------------------------------------------------------------------------------", 44, 7); // Separation
        kprintf(infoBar[0], 45, 14);
        kprintf(infoBar[1], 46, 14);
        kprintf(infoBar[2], 47, 14);
    }
    else
    {
        // copying content of visible console to the video-ram
        memcpy(vidmem + USER_BEGIN * COLUMNS, reachableConsoles[displayedConsole]->vidmem, COLUMNS * USER_LINES*2);
    }
    kprintf("--------------------------------------------------------------------------------", 48, 7); // Separation

    cursor.y = reachableConsoles[displayedConsole]->cursor.y;
    cursor.x = reachableConsoles[displayedConsole]->cursor.x;
    update_cursor();
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:40:25 29.08.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:37:37 29.08.2010   Titel:              Zitieren

0.0.1.215 - Rev: 797

noch einige va_end(ap); eingebaut (irgendwas übersieht man immer)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:48:00 29.08.2010   Titel:              Zitieren

Version 0.0.1.216:

- Mauszeiger (heller Punkt) in VBE angezeigt
- min und max zu Makros umgewandelt - Damit sie bei signed und unsigned wirken
- Bugfix in video.c vervollständigt - Infobar wird wieder aktualisiert, _MEMLEAK_FIND_ funktioniert aber weiterhin
- va_end in console.c ergänzt
- vbe.h/c aufgeräumt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:30:49 29.08.2010   Titel:              Zitieren

0.0.1.217 - Rev: 799

init logging

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 21:35:49 30.08.2010   Titel:              Zitieren

version 0.0.1.218 - Rev: 800

vbe.c/.h
- Neue Funktionen vbe_drawRectFilled(...), vbe_drawBitmapTransparent(...) und keine Funktioniert...

mouse.c/.h
- Cursor Bitmap hinzugefügt...

data.asm
- cursor Bitmap hinzugefügt

user/vm86/cursor.bmp hinzugefügt
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 08:09:31 31.08.2010   Titel:              Zitieren

Version 0.0.1.219:

- Fehler in TTT behoben: Es wird nichtmehr akzeptiert, wenn nichts eingegeben wurde.
- INIT-Log-Ausgabe nicht mehr gebremst
- makefiles für Userspace angepasst/verbessert (Compilerschalter)
- Kleinere Verbesserungen und aufgeräumt (insbesondere keyboard.c)
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 21:43:03 31.08.2010   Titel:              Zitieren

version 0.0.1.220 - Rev: 802

vbe.c/h
- vbe_drawBitmap(...), mit 64k Farbtiefe experimentiert

vidswtch.asm
- neue Bildschirmauflösung mit 64k Farbtiefe hinzugefügt.


Zuletzt bearbeitet von internet am 22:13:35 31.08.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 22:12:43 31.08.2010   Titel:              Zitieren

version 0.0.1.221 - Rev: 803


vbe.c/h
- Mode mit 32 Bit Farbtiefe hinzugefügt

vidswtch.asm
- Neue Bildschirmauflösung mit 32 Bit Farbtiefe hinzugefügt
Ideenlos
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.08.2010
Beiträge: 7
Beitrag Ideenlos Mitglied 19:51:28 01.09.2010   Titel:              Zitieren

(nach 804 von tev)

Revision 805

mov ss,ax und xor sp,sp sollte man nicht einfach vertauschen, da so ein Interrupt losgehen kann, der einen eventuell nicht nutzbaren Stack benutzt (Bootloader-Stage1).


Zuletzt bearbeitet von Ideenlos am 19:52:01 01.09.2010, insgesamt 1-mal bearbeitet
tev
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.08.2010
Beiträge: 15
Beitrag tev Mitglied 20:16:38 01.09.2010   Titel:   Rev 804            Zitieren

Entschuldigung, dass ich das nicht vorher gemacht habe, da ich das mit dem Forum nicht wusste.

Ok ich hatte mit Revision 804 Geschwindigkeitsoptimierungen im Bootloader gemacht.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:16:21 03.09.2010   Titel:              Zitieren

0.0.1.222 - Rev: 806

paging.h/c: formale Änderungen (camelCase)
task.c: paging_destroyUserPageDirectory(task->page_directory) verwendet zur Memory-Freigabe als Gegenstück zu paging_createUserPageDirectory() in elf.c

beep (nicht sound) ausgeschaltet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:17:51 03.09.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:02:17 04.09.2010   Titel:              Zitieren

0.0.1.223 - Rev: 807

Formale Änderungen (camelCase entsprechend Style Guide)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:02:56 04.09.2010, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 01:06:25 05.09.2010   Titel:              Zitieren

Version 0.0.1.224:

- Keine Floppy-IRQ-Timeouts mehr beim boot -> bootet schneller
- Trackweises Lesen von Floppy
-- BUG: Strg+s geht nicht mehr.
- Aufgeräumt
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:30:58 05.09.2010   Titel:              Zitieren

Version 0.0.1.225:

- VBE-Modeliste "entdrosselt": Alle Modi werden angezeigt, keine Begrenzung auf 16 mehr
- flpydsk.c: calibrate und seek verbessert
- Floppy-Motor-Bug behoben, der Motor wird wieder abgeschaltet (Bug durch Caching entstanden)
- Testliste erweitert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:48:09 05.09.2010   Titel:              Zitieren

Zitat:
Strg+s geht nicht mehr


TIPP:
Wer dies verwenden möchte, nach Angaben von MrX in flpydsk.c folgende Änderungen temporär vornehmen:
1) Zeile 616 auskommentieren
2) Zeile 624 auskommentieren, Zeile 625 aktivieren
3) Zeile 654 auskommentieren, Zeile 655 aktivieren
C/C++ Code:
// if(CurrentDrive->lastTrack != sector/18)
//...
// retVal = flpydsk_read(CurrentDrive->lastTrack*18);

retVal = flpydsk_read(sector);
//...
// memcpy(destBuffer, CurrentDrive->trackBuffer + 512*(sector%18), 512);

memcpy(destBuffer, CurrentDrive->trackBuffer, 512);
C/C++ Code:
// if(CurrentDrive->lastTrack != sector/18)
//...
// retVal = flpydsk_read(CurrentDrive->lastTrack*18);

retVal = flpydsk_read(sector);
//...
// memcpy(destBuffer, CurrentDrive->trackBuffer + 512*(sector%18), 512);

memcpy(destBuffer, CurrentDrive->trackBuffer, 512);
C/C++ Code:
// if(CurrentDrive->lastTrack != sector/18)
//...
// retVal = flpydsk_read(CurrentDrive->lastTrack*18);

retVal = flpydsk_read(sector);
//...
// memcpy(destBuffer, CurrentDrive->trackBuffer + 512*(sector%18), 512);

memcpy(destBuffer, CurrentDrive->trackBuffer, 512);

Dann wird der Lesevorgang von Floppy allerdings nicht beschleunigt.

Der aktuelle Code zerstört mittels strg+s FAT2 und die ersten drei Sektoren im Data-Bereich, und er vermehrfacht die Einträge in der Root Dir. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:50:25 05.09.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:44:05 06.09.2010   Titel:              Zitieren

Version 0.0.1.226:

- Bugfix: Floppy-Schreiben geht wieder (siehe auch Fehler-Thread)
- Bugfix: Falscher Schrägstrich (\) in Pfadangabe ersetzt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:33:53 06.09.2010   Titel:              Zitieren

0.0.1.227 - Rev: 811

_DEVMGR_DIAGNOSIS_ und _READCACHE_DIAGNOSIS_ getrennt
Fehler behoben
beep aus!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:56:31 10.09.2010   Titel:              Zitieren

Version 0.0.1.228:

- Verbesserungen in VBE:
-- Anzeige in 32-bit-Modus nun funktionsfähig, kein Pixelsalat mehr, korrekte Farben. In 16/15-bit sind die Farben noch falsch.
-- "Transparentes" Bitmap nun auch transparent
-- Code vereinfacht&verbessert
- Weitere kleine Verbesserungen
- Weitere Testergebnisse
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:32:56 12.09.2010   Titel:              Zitieren

Version 0.0.1.229:

- Verbesserungen bei VBE-Modeerkennung:
-- Farbtiefe jetzt in Bits angegeben
-- Die Eigenschaften der Modi werden jetzt von der Grafikkarte abgefragt
-- Assembler-Code verallgemeinert - Funktioniert mit allen Modi
- vidswtch.asm wird wieder -Ox assembliert
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:05:40 12.09.2010   Titel:              Zitieren

Version 0.0.1.230:

- Jeder beliebige Modus nutzbar (Durch Eingabe der dezimalen Nummer und ENTER)
- Korrekte Darstellung in 8, 15, 16, 24 und 32-bit Modi. 8-bit wird erreicht, indem der 8-bit-Farbwert im alpha-Feld von BGRA_t steht
- gets in util.c
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:34:15 14.09.2010   Titel:              Zitieren

0.0.1.231 - Rev: 815

Formale Änderungen in serial.h/c
Beep ausgeschaltet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:37:33 15.09.2010   Titel:              Zitieren

0.0.1.231 - Rev: 816

Meldungen im BL2 ergänzt
Assembler Code:
msgGTD            db 0x0D, 0x0A, "GTD installed ...', 0
msgUnrealMode     db 0x0D, 0x0A, "Unreal Mode entered ...', 0
msgLoadKernel     db 0x0D, 0x0A, "Now loading Kernel ...', 0
msgFloppyMotorOff db 0x0D, 0x0A, "Floppy Disk Motor switched off ...', 0
msgSwitchToPM     db 0x0D, 0x0A, "Now switching to Protected Mode (PM) ...', 0
msgFailure        db 0x0D, 0x0A, "Missing KERNEL.BIN (Fatal Error)', 0
Assembler Code:
msgGTD db 0x0D, 0x0A, "GTD installed ...', 0
msgUnrealMode db 0x0D, 0x0A, "Unreal Mode entered ...', 0
msgLoadKernel db 0x0D, 0x0A, "Now loading Kernel ...', 0
msgFloppyMotorOff db 0x0D, 0x0A, "Floppy Disk Motor switched off ...', 0
msgSwitchToPM db 0x0D, 0x0A, "Now switching to Protected Mode (PM) ...', 0
msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN (Fatal Error)', 0
Assembler Code:
msgGTD            db 0x0D, 0x0A, "GTD installed ...', 0
msgUnrealMode     db 0x0D, 0x0A, "Unreal Mode entered ...', 0
msgLoadKernel     db 0x0D, 0x0A, "Now loading Kernel ...', 0
msgFloppyMotorOff db 0x0D, 0x0A, "Floppy Disk Motor switched off ...', 0
msgSwitchToPM     db 0x0D, 0x0A, "Now switching to Protected Mode (PM) ...', 0
msgFailure        db 0x0D, 0x0A, "Missing KERNEL.BIN (Fatal Error)', 0

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:04:39 17.09.2010   Titel:              Zitieren

Version 0.0.1.232:

- serial_log eingebaut: Sendet Text über die serielle Schnittstelle (Deaktivierbar in os.h)
- memmove in userlib
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:02:22 17.09.2010   Titel:              Zitieren

0.0.1.233 - Rev: 818

vm86 monitor wird mit serial_log überwacht

in os.h #define _SERIAL_LOG_ aktivieren

Anmerkung: läuft sehr langsam in VBox, also bitte Geduld. Output wird z.B. in VBox in eine text-datei gelenkt.

Hier ein Beispiel eines Durchlaufs in VBox:
http://henkessoft.de/OS_Dev/Bilder/serielle1.txt

interrupt ...
(sensitiver code)
iret
hlt

interrupt ...
(sensitiver code)
iret
hlt

interrupt ...
(sensitiver code)
iret
hlt

usw.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:24:27 17.09.2010, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:42:31 18.09.2010   Titel:              Zitieren

0.0.1.234 - Rev: 819

- os.h formal umgebaut
- serielle Schnittstelle beschleunigt (Divisor 1 anstelle 3)
- vm86 monitor - Ausgaben nach COM1 (und Text-Datei) aktiviert

Deutlich schneller als bei VBox geht es übrigens mit qemu:

Zitat:
qemu.exe -fda FloppyImage.img -soundhw pcspk -localtime -serial file:serielle1.txt -usb -usbdevice disk:format=raw:dummy.bin


Das ist dann COM1. Für COM2 usw. einfach zusätzliche -serial ... einsetzen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:01:53 19.09.2010   Titel:              Zitieren

Version 0.0.1.235:

- makefile verbessert
-- Bootloader wird bei Veränderung automatisch neu kompiliert
-- Alle map-Dateien nach /documentation gelegt
- pci.c: Ausgabe von Vendor&DeviceID verbessert.
- VBE:
-- Palette nutzt nun 8-bit pro Farbe, falls von der Grafikkarte unterstützt (Qemu unterstützt es nicht)
-- Bugfixes: Textmodi werden nun korrekt erkannt; Modi, die nicht von der aktuellen Hardwarekonfiguration unterstützt werden,werden ausgeblendet
- Optimierungen und Aufräumarbeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:35:18 19.09.2010   Titel:              Zitieren

Zitat:
pci.c: Ausgabe von Vendor&DeviceID verbessert.
Was wurde dort genau verbessert?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:46:06 19.09.2010   Titel:              Zitieren

Bislang war es so, das DeviceID und VendorID bekannt sein mussten, damit das Gerät mit Namen genannt wurde. Jetzt wird, wenn nur der Vendor bekannt ist, dieser ausgegeben und dazu dann die DeviceID.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:29:14 19.09.2010   Titel:              Zitieren

Version 0.0.1.236:

- Bugfix: (Hoffentlich) kein unkontrollierter Farbwechsel mehr
- Bugfix: Bei #PF und co werden wieder die richtigen Fehlermeldungen angezeigt
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:56:43 23.09.2010   Titel:              Zitieren

0.0.1.236 - Rev: 822

BL2 optimiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Ideenlos
Mitglied

Benutzerprofil
Anmeldungsdatum: 08.08.2010
Beiträge: 7
Beitrag Ideenlos Mitglied 11:46:28 25.09.2010   Titel:              Zitieren

Revision 823 (behebt hoffentlich den BL2-Bug, auch wenn MrX mir da keine großen Hoffnungen macht ;)):

BL stage2: ebx statt bx sichern

Wenn das BIOS ebx im Ganzen verändert, kann es passieren, dass die Kopierschleife den eigenen Code überschreibt. Wenn man ebx statt nur bx speichert, wird dies verhindert.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:55:19 26.09.2010   Titel:              Zitieren

Version 0.0.1.237:

- Optimierungen BL1 (u.a. jetzt mit -Ox assembliert)
- Optimierungen BL2
- irq.c: Code verbessert/vereinfacht
- vbe.c: Bugfix: Grafikmodi jetzt auf mehr Grafikkarten korrekt angezeigt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:03:21 26.09.2010   Titel:              Zitieren

Bei VMWare nun endlich OK! :) :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:57:44 27.09.2010   Titel:              Zitieren

Version 0.0.1.238:

- Multiboot-kompatibler Kernel. (Weiterhin BIN, noch nicht ELF)
- ELFs mit strip verkleinert
- Unser BL2 liefert dem Kernel eine Multiboot-Struktur, bei der aber nur der Member für die mmap gesetzt ist.
- GRUB-Rohling beigelegt (bootet automatisch KERNEL.BIN)
PNoob
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.07.2010
Beiträge: 23
Beitrag PNoob Mitglied 21:46:46 28.09.2010   Titel:              Zitieren

Version 0.0.1.238: Rev. 826

- Bootloader übergibt jetzt die Memory Map im Multiboot Format
- Bootloader übergibt jetzt Lower/upper Memory
- Bootloader übergibt jetzt den Bootloader Namen PrettyBL
PNoob
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.07.2010
Beiträge: 23
Beitrag PNoob Mitglied 22:12:25 28.09.2010   Titel:              Zitieren

- Upper Mem wird jetzt richtig in der multiboot strukture gespeichert
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:00:29 03.10.2010   Titel:              Zitieren

Version 0.0.1.239:

- Bugfix: strip funktioniert nun auf verschiedenen Umgebungen (im makefile nun als Variable)
- BL2:
-- Bugfix: mmap_length nun korrekt berechnet
-- Bugfix: Konvertierungsfunktion für mmap korrigiert
- paging.c: verwendet nun mmap_length um das Ende der mmap festzustellen (multiboot-Kompatibilität)
- vbe.c:
-- Bugfix: vbe_drawRect nun korrekt
-- Bugfix: VBE-Signatur ("VESA") nun korrekt angezeigt (nicht nullterminiert)
- Aufgeräumt&Kleinigkeiten


EDIT: Achtung! Revisions-Nummer falsch (828 wäre korrekt)


Zuletzt bearbeitet von Mr X am 14:21:13 03.10.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:03:21 08.10.2010   Titel:              Zitieren

Version 0.0.1.240:

- fformat-Bug behoben
- VBE-Bootscreen etwas erweitert^^ (Kreisförmiger Farbverlauf (mit vbe_drawCircle erreicht) wird zeitverzögert gemalt)
- Tab/Leerzeichenkorrekturen und andere Formatierungssachen sowie Codevereinfachungen

(Revisionsnummer nun wieder korrekt)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:18:00 08.10.2010   Titel:              Zitieren

Version 0.0.1.241 - Rev: 830

Zwei zusätzliche Zeilenumbrüche am Ende von video-screenshot ergänzt.
Sieht nun übersichtlicher aus. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:19:37 14.10.2010   Titel:              Zitieren

Version 0.0.2.0, Rev. 831:
- Memoryleak bei FPUptr beseitigt
- Userprogramme jetzt mit strip bearbeitet (kleiner)
- Ausgabe beim boot gestrafft. (u.a. Ramdiskinhalt nicht mehr angezeigt)
- Nicht (mehr) benötigte Funktionen fetchESP und ähnliche gelöscht
- Codestylekorrekturen

Aufgrund der zahlreichen seit dem Versionssprung auf 0.0.1.0 erreichten Verbesserungen am Kernel haben wir beschlossen, die Versionsnummer auf 0.0.2.0 zu erhöhen.
Seit 0.0.2.0 wurde u.a. folgendes implementiert:

  • VM86
  • VBE "Techdemo" Startbildschirm + Mauszeiger
  • Netzwerk (RTL8139): Ping beantworten
  • Bootloader läd nun "beliebig" große Kernel dank Unreal Mode
  • (Teilweise) Multiboot/GRUB-Kompatibilität
  • Beschleunigtes Laden von Dateien durch Caching und trackweises Lesen von Floppy
  • Scheduler-Ausbau, "richtiges" Schlafen
  • Tastaturtreiber erweitert
  • Video/Konsolen: Falschfarben-Problematik untersucht & behoben
  • API (syscalls) erweitern, u.a File-API
  • Syscall-API erweitert und konsolidiert
  • Verbesserte Dokumentation und Logging
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:56:55 14.10.2010   Titel:              Zitieren

Test mit qemu ohne Netzwerk:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
PrettyOS [Version 0.0.2.0 - Rev: 831]                                          
--------------------------------------------------------------------------------
        FPU: yes (Test: OK)                                                    
                                                                               
COM1 (IO-port: 03F8h) initialized                                              
                                                                               
#0 0:0.0 IRQ:0  Intel PCI & Memory                                              
#1 0:1.0 IRQ:0  Intel PIIX3 PCI-to-ISA Bridge (Triton II)                      
#2 0:1.1 IRQ:0  Intel PIIX3 IDE Interface (Triton II)                          
#3 0:1.2 IRQ:11 Intel USB EHCI Controller USB EHCI F0000000h MMIO sz:4096      
#4 0:1.3 IRQ:9  Intel PIIX4/4E/4M Power Management Controller                  
#5 0:2.0 IRQ:0  Cirrus 64-bit VisualMedia Accelerator                          
#6 0:3.0 IRQ:11 Intel Gigabit Ethernet Controller                              
                                                                               
1.44 MB FDD first device found                                                  
Disk is formated with FAT12.                                                    
                                                                               
                                                                               
Available ports:                                                                
                                                                               
Type    Number  Name            Inserted disk                                  
----------------------------------------------------------------------          
FDD     A       Floppy Dev 1    PRETTYOS                                        
RAM     B       RAM             RAMdisk                                        
----------------------------------------------------------------------          
                                                                               
Attached disks:                                                                
                                                                               
Type    Number  Name            Part.   Serial                                  
----------------------------------------------------------------------          
Floppy  1       PRETTYOS        0       PRETTYOS                                
RAMdisk 2       RAMdisk         0       786438                                  
----------------------------------------------------------------------          
                                                                               
                                                                               
--------------------------------------------------------------------------------
                                PrettyOS Booted                                
--------------------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
PrettyOS [Version 0.0.2.0 - Rev: 831]
--------------------------------------------------------------------------------
FPU: yes (Test: OK)

COM1 (IO-port: 03F8h) initialized

#0 0:0.0 IRQ:0 Intel PCI & Memory
#1 0:1.0 IRQ:0 Intel PIIX3 PCI-to-ISA Bridge (Triton II)
#2 0:1.1 IRQ:0 Intel PIIX3 IDE Interface (Triton II)
#3 0:1.2 IRQ:11 Intel USB EHCI Controller USB EHCI F0000000h MMIO sz:4096
#4 0:1.3 IRQ:9 Intel PIIX4/4E/4M Power Management Controller
#5 0:2.0 IRQ:0 Cirrus 64-bit VisualMedia Accelerator
#6 0:3.0 IRQ:11 Intel Gigabit Ethernet Controller

1.44 MB FDD first device found
Disk is formated with FAT12.


Available ports:

Type Number Name Inserted disk
----------------------------------------------------------------------
FDD A Floppy Dev 1 PRETTYOS
RAM B RAM RAMdisk
----------------------------------------------------------------------

Attached disks:

Type Number Name Part. Serial
----------------------------------------------------------------------
Floppy 1 PRETTYOS 0 PRETTYOS
RAMdisk 2 RAMdisk 0 786438
----------------------------------------------------------------------


--------------------------------------------------------------------------------
PrettyOS Booted
--------------------------------------------------------------------------------
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
PrettyOS [Version 0.0.2.0 - Rev: 831]                                          
--------------------------------------------------------------------------------
        FPU: yes (Test: OK)                                                    
                                                                               
COM1 (IO-port: 03F8h) initialized                                              
                                                                               
#0 0:0.0 IRQ:0  Intel PCI & Memory                                              
#1 0:1.0 IRQ:0  Intel PIIX3 PCI-to-ISA Bridge (Triton II)                      
#2 0:1.1 IRQ:0  Intel PIIX3 IDE Interface (Triton II)                          
#3 0:1.2 IRQ:11 Intel USB EHCI Controller USB EHCI F0000000h MMIO sz:4096      
#4 0:1.3 IRQ:9  Intel PIIX4/4E/4M Power Management Controller                  
#5 0:2.0 IRQ:0  Cirrus 64-bit VisualMedia Accelerator                          
#6 0:3.0 IRQ:11 Intel Gigabit Ethernet Controller                              
                                                                               
1.44 MB FDD first device found                                                  
Disk is formated with FAT12.                                                    
                                                                               
                                                                               
Available ports:                                                                
                                                                               
Type    Number  Name            Inserted disk                                  
----------------------------------------------------------------------          
FDD     A       Floppy Dev 1    PRETTYOS                                        
RAM     B       RAM             RAMdisk                                        
----------------------------------------------------------------------          
                                                                               
Attached disks:                                                                
                                                                               
Type    Number  Name            Part.   Serial                                  
----------------------------------------------------------------------          
Floppy  1       PRETTYOS        0       PRETTYOS                                
RAMdisk 2       RAMdisk         0       786438                                  
----------------------------------------------------------------------          
                                                                               
                                                                               
--------------------------------------------------------------------------------
                                PrettyOS Booted                                
--------------------------------------------------------------------------------

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:57:28 14.10.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:25:41 20.10.2010   Titel:              Zitieren

Version 0.0.2.1:

- Header und Implementierungsdateien der C-Standardlib hinzugefügt (userspace)
- Projektdatei umsortiert
- context_t entfernt
- Diverse Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:55:27 22.10.2010   Titel:              Zitieren

Version 0.0.2.2:

- Bugfix: Kein Absturz bei Shell-Eingaben mehr
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:22:58 31.10.2010   Titel:              Zitieren

Version 0.0.2.3 - Rev. 834

- APIC-Bit in cpuid überprüft und apic_install als Rumpf eingebaut (qemu auf intel-dualcore-host emuliert es)
- Beep ausgeschaltet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:48:08 31.10.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:48:14 03.11.2010   Titel:              Zitieren

Version 0.0.2.4:

- Codebasis für Power-Management angelegt
-- APM (funktioniert noch nicht, daher in power_management.c Zeile 88 auskommentiert)
-- Shutdown-Workaround für fehlendes PM
- timer.c/sys_speaker.c: 1193182 statt 1193180
- Task wird nun nach invalid Opcode beendet
- Ergebnisse eines kleinen "Code Reviews" von ehenkes und mir (kernel.asm und ckernel.c)
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:44:54 05.11.2010   Titel:              Zitieren

Version 0.0.2.5:

- Invalid-Opcode Problem unter Qemu mit einem HACK gefixt
- Fat12_BPB.inc im BL2 entfernt
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:01:06 11.12.2010   Titel:              Zitieren

version = "0.0.2.6 - Rev: 837"
Kleine Änderungen in dhcp.h

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 16:53:32 12.12.2010   Titel:              Zitieren

version 0.0.2.6 - Rev: 838

vbe.c
- Einfache und langsame vbe_clearScreen() Funktion hinzugefügt.

gui_window.c/.h
- Versuch: Fenster im VBE Modus zu implementieren, bis jetzt noch nicht funktionierend...
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:26:00 12.12.2010   Titel:              Zitieren

Version 0.0.2.7 - Rev. 839:

- Erkennung von xHCI-Controllern ergänzt (ungetestet)
- Arrays für Ports, Disks und Partitionen in ehci.c verkleinert (ungenutztes Element entfernt)
- strncmp ergänzt (CStdlib)
- Projektmappe aktualisiert
- Codestil

Edit: Ich hab übrigens vergessen, im sourcecode die Revision zu erhöhen, nur die Version hab ich erhöht.


Zuletzt bearbeitet von Mr X am 18:34:47 12.12.2010, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:26:30 12.12.2010   Titel:              Zitieren

Version 0.0.2.8:

- Bugfix für GUI: Fenster nun korrekt gezeichnet
- Bugfix in vbe_drawRect: x und y waren vertauscht
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 20:48:02 12.12.2010   Titel:              Zitieren

version 0.0.2.8 - Rev: 841

- GUI Fenster: Pixel noch etwas zurechtgerückt
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 21:52:59 13.12.2010   Titel:              Zitieren

version 0.0.2.8 - Rev: 842

- gui_window.c/h
reDrawWindow()

- füllen von window_t.data
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 12:39:06 15.12.2010   Titel:              Zitieren

version 0.0.2.8 - Rev: 843

- gui_window.c/h

window_t.data wird jetzt mit Daten gefüllt...
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:25:30 16.12.2010   Titel:              Zitieren

klasse! :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:21:18 16.12.2010   Titel:              Zitieren

version 0.0.2.8 - Rev: 844

- gui_window.c/h
korrekturen

- gui_button.c/h
CreateButton();
DrawButton(...);

- mouse.c
Maus, alte Position löschen
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:56:44 16.12.2010   Titel:              Zitieren

Version 0.0.2.9:
- Verbesserungen an der "GUI"
- Neue Version von mingw32-make.exe (3.82)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:11:21 16.12.2010   Titel:              Zitieren

Version 0.0.2.10:

- Fenster nun wieder angezeigt
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:02:15 17.12.2010   Titel:              Zitieren

Version 0.0.2.11:

- Code wird nun ohne -fleading-underscore übersetzt
- Bugfix im makefile: cstdlib wird auch aufgeräumt bei clean und rebuild
- process.asm gelöscht, da längst obsolet
- Bugfix in util.c/h: abs muss signed integer nehmen.
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 13:21:42 18.12.2010   Titel:              Zitieren

version 0.0.2.12 - Rev: 848

- gui.c/h
GUI wird jetzt hier aufgebaut (ESC zum Beenden)
close button funktioniert (Test)
StartGUI();
EndGUI();

- mouse.c
aufgeräumt

- gui_window.c/h
aufgeräumt

- vbe.c
erweitert, auswahl zwischen Grafischen Tests und der GUI.

Es wird langsam Zeit für einen DoubleBuffer...
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 14:20:39 18.12.2010   Titel:              Zitieren

Bugfix: gui.c/h jetzt da...
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:37:58 18.12.2010   Titel:              Zitieren

Version 0.0.2.13:

- Bugfixes in GUI: Kein Nullpointer mehr dereferenziert
- DrawButton: ÜBergabe des Buttons als Pointer
- Projektmappe aktualisiert
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:47:45 18.12.2010   Titel:              Zitieren

Version 0.0.2.14:

- APM auskommentiert - Führte zu endlosen VM86-sensitive-opcode-Fehler
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 12:32:14 19.12.2010   Titel:              Zitieren

Rev. 851:

* Neuer Bootscreen
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:51:29 19.12.2010   Titel:              Zitieren

Version 0.0.2.15:

- Maus: Unterstützung für 4./5. Taste
- Aufgeräumt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:51:19 22.12.2010   Titel:              Zitieren

kleiner Zwischenstand bei netprotocol/udp und dhcp (da hänge ich fest)

hab vergessen etwas hochzuzählen :rolleyes:

Rev. 854

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:33:10 22.12.2010, insgesamt 1-mal bearbeitet
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 20:26:04 27.12.2010   Titel:              Zitieren

version 0.0.2.17 - Rev: 855

VBEShell.c/.h
- grobe umsetzung der shell.c in VBE-Modus

vbe.c/.h
- Doublebuffer?
- um startVBEShell Option erweitert
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:10:07 31.12.2010   Titel:              Zitieren

Version 0.0.2.18:

- Bugfix in gets: \n nicht mehr im zurückgegebenen String enthalten
- Bugfix im Floppytreiber: Cache beim schreiben eines trackes nun korrekt als ungültig markiert
- Shell/Userspace: "fformat"-Kommando und zugehörigen Syscall gelöscht
- format-Funktion in fsmanager und FAT-Treiber eingehängt. Kommando "format" in Shell hinzugefügt. (FAT16 und FAT32 funktioniert noch nicht. Immernoch Floppy-Abhängig. Enthält HACKS)
- strncpyandfill-Funktion hinzugefügt. strncpy basiert nun darauf.
- Maustreiber vereinfacht
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:36:11 01.01.2011   Titel:              Zitieren

Version 0.0.2.19:

- analyzeBootSector ersetzt durch flexiblere, in FS-/Devicemanager integrierte Funktionen
- memshow: Zeilenumbruch alle 16 bytes -> Übersichtlicher
- APM.COM gelöscht bei make clean.
- Projektmappe aktualisiert
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 13:30:48 05.01.2011   Titel:              Zitieren

version 0.0.2.20 - Rev: 858

vbe.c/h
- Doublebuffer implementiert
- allocDoubleBuffer(), vbe_flipScreen()
- vbe_setPixel() geändert

gui.c/h
- kleine erweiterungen
internet
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.07.2010
Beiträge: 52
Beitrag internet Mitglied 17:01:30 14.01.2011   Titel:              Zitieren

version 0.0.2.21 - Rev: 859

VBEShell.c/h
- um Doublebuffer erweitert
- kleine korrekturen

gui_window.c/h
- close button in die window_t Struktur hinzugefügt
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:31:27 05.02.2011   Titel:              Zitieren

Version 0.0.2.22

- Videomemory jetzt mit Paging gemappt
- Funktionen für Order-Unterstützung hinzugefügt (Funktionieren noch nicht)
- Bugfix: Bootloader springt nun an korrekte Adresse - Sprungbefehl am Anfang des Kernels nicht mehr nötig.
- Aufgeräumt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:49:57 06.02.2011   Titel:              Zitieren

Version 0.0.2.23 - Rev: 861

Teilweise Überarbeitung Networking source code aufgrund Code review.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:44:34 13.02.2011   Titel:              Zitieren

0.0.2.24 - Rev: 862

DHCP weiter vorbereitet.
Für das Senden fehlen z.T. noch die Funktionen.
Klares Design notwendig.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:42:33 19.02.2011   Titel:              Zitieren

Version 0.0.2.25:

- DMA-Code aus Diskettentreiber gelöst. Sollte nun für alle Channels des Slave-Controllers funktionieren. Transfers "beliebiger" Länge
- CDI-DMA implementiert
- Bugfix: Floppy-Motorsteuerung funktioniert wieder
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:32:40 20.02.2011   Titel:              Zitieren

Version 0.0.2.26:

- Scheduler unterstützt nun wait mit timeout
- Floppytreiber nutzt nun waitForIRQ - Spart CPU-Zeit
- cdi-Audio-Header hinzugefügt
- cdi_wait_irq implementiert
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:13:17 20.02.2011   Titel:              Zitieren

Version 0.0.2.27:

- Bugfix: Keine Deadlocks mehr durch zu geringe timeouts
- CDI-Header geupdated
- CDI-Implementierung geringfügig erweitert
- Scheduler gibt bei wait-Funktionen zurück, ob ein timeout eingetreten ist
- waitForIRQ berücksichtigt nun IRQs der Vergangenheit (Zurücksetzen des Zählers mit irq_resetCounter)
- Floppytreiber nun vollständig auf waitForIRQ umgebaut
- Scheduler besser dokumentiert
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:26:51 25.02.2011   Titel:              Zitieren

Version 0.0.2.28:

- Semaphores jetzt funktionsfähig (und abgespeckt. Ob wir sie jemals brauchen, weiß ich nicht, da wir nun auch Mutexes haben)
- Mutexes eingeführt
- Verwendung von Mutexen in Floppytreiber, Heap und Video/Consolen
- Floppytreiber liest nun FDC-Version aus. (Sollte 90h sein)
- Scheduler/Tasking: Hierachische Änderung. Task-Switch-Interrupt ruft nun zuerst Scheduler auf
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:16:15 26.02.2011   Titel:              Zitieren

Wo ist eigentlich fformat abgeblieben?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:13:07 26.02.2011   Titel:              Zitieren

heißt nun format
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:09:02 26.02.2011   Titel:              Zitieren

Version 0.0.2.29:

- Executable-Manager hinzugefügt (Dadurch könnten wir mehrere Executable-Formate unterstützen.)
- Bugfix³: Richtiges PD in elf.c eingestellt nach erstellen des userPD -> weniger #PF-Gefahr, keine waitForKeyStroke mehr nötig, Namensanzeige in Konsolentitel funktioniert wieder
- keyboard.c: Mit mutex_t statt cli/sti geschützt
- Ausgaben der Shell gestrafft.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:47:53 27.02.2011   Titel:              Zitieren

Version 0.0.2.30:

- Kernel baut jetzt wieder bei DIAGNOSIS-Flags (außer USB_DIAGNOSIS)
- Userprogramme jetzt inkrementell erstellt
- Eigenes makefile für Shell
- other_userprogs werden jetzt auch automatisch kompiliert, müssen nicht mehr als Binaries vorliegen
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:09:40 27.02.2011   Titel:              Zitieren

Version 0.0.2.30 - Rev. 869:

- Usertools (prettylib) und stdlibc nun als static library übersetzt und in Userprogramme eingebunden
- shell/makefile mitgeliefert (fehlte in voriger Revision)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:51:51 01.03.2011   Titel:              Zitieren

Version 0.0.2.31:

- Syscall sleepMilliseconds entfernt
- Syscall wait hinzugefügt
- sleep und waitForTask im Userspace über den wait-Syscall implementiert
- textColor-Syscall repariert
- Userspace-Makefiles hängen nun auch von den statischen Bibliotheken ab -> Inkrementeller Build funktioniert besser
- Test-Userprogramm ergänzt
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 12:56:16 08.05.2011   Titel:              Zitieren

Version 0.0.2.32:

- APM: Implementation verbessert (Debug-Ausgaben), funktioniert aber weiterhin nicht
- makefile: Ausgabe gekürzt, Objektdateien nun rekursiv gelöscht
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:57:25 08.05.2011   Titel:              Zitieren

0.0.2.32 macht Probleme bei vbe in qemu

Hinweis von MrX im IRC chat:
version 0.0.2.20 - Rev: 858 hat den Schaden angerichtet.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:08:26 08.05.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:28:10 08.05.2011   Titel:              Zitieren

Und Revision 872 behebt ihn :)

Version 0.0.2.33:

- VBE:
--- Neue DoubleBuffer-Implementation (-> Es wird zumindest wieder ein Bild angezeigt, auf echter Hardware allerdings viel zu langsam)
--- setDisplayStart funktionsfähig
- GUI:
--- Verschieben und X-Buttons nun für alle 4 Fenster
--- Aufräumen beim Beenden
- Maus: Anzeige nun Double-Buffer-Kompatibel, aber nur noch in GUI


Zuletzt bearbeitet von Mr X am 17:28:30 08.05.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:59:06 08.05.2011   Titel:              Zitieren

Wichtig:
- Aktuelles nasm verwenden, am besten: 2.10rc4
- "Rebuild" anstelle "Build" ausführen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:32:28 15.05.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:07:28 21.05.2011   Titel:              Zitieren

Version 0.0.2.34:

- Treiber für AMD PCNet III hinzugefügt.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:54:59 21.05.2011   Titel:              Zitieren

Version 0.0.2.35:

- Netzwerkschnittstelle implementiert, PCnet- und 8139-Treiber angepasst
- Treiberansatz für RTL8168 (vermutlich auch für RTL8169 verwendbar)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:21:16 22.05.2011   Titel:              Zitieren

version = "0.0.2.36 - Rev: 875"

ethernet.c umgebaut auf Erkennung des Ethernet Type (bei Ethernet 2):
0x0800 IP
0x0806 ARP

Leider klappt das momentan nicht mit ping oder hrping, landet beides als ARP in PrettyOS, komischerweise wird dies auch in Wireshark so angezeigt.
Bitte um Ratschläge, woran das liegen kann.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:33:52 22.05.2011   Titel:              Zitieren

Version 0.0.2.37:

- IP wird nun zur Laufzeit abgefragt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:55:26 22.05.2011   Titel:              Zitieren

version = "0.0.2.38 - Rev: 877"

Eingabe der IP mit gets in der letzten Version führte in qemu-EHCI und auf PC zu
#PF (page not present) at 08200837h - EIP: 0010EADBh
in der Zeile "Attached Disks" bei RAMDisk.
Daher wieder statische Zuordnung der IP in network.c. Eingabecode auskommentiert.
gets steht in util.c. Die Eingabe funktioniert auch. Fehlerursache unklar.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:12:44 22.05.2011   Titel:              Zitieren

version = "0.0.2.39 - Rev: 878"

Transmit klappt noch nicht bei rtl8139, Zwischenstand zur besseren Kontrolle des OWN Bits.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:39:56 22.05.2011   Titel:              Zitieren

version = "0.0.2.40 - Rev: 880"

OWN Bit bei Tx von RTL8139 wird gewaltsam auf 1 gesetzt, denn nur 1->0 startet den PCI-Prozess zum Senden. Es funktioniert aber noch nicht. Fehlerursache unklar.

Bitte um Mithilfe, damit das Senden bald klappt. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:50:21 23.05.2011   Titel:              Zitieren

version = "0.0.2.41 - Rev: 881"

Netzwerk senden funktioniert noch nicht
Fehler unklar
malloc bei Tx-Puffer im Verdacht, früher hatten wir da ein statisches Array

MrX teilt im chat mit, das rev. 873 noch mit Transmit OK arbeitet, also hat sich bei der neu implementierten Network-Schnittstelle ein Bug eingeschlichen. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:53:56 23.05.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:44:21 23.05.2011   Titel:              Zitieren

Version 0.0.2.42:

- Senden funktioniert wieder
- Sendefunktion für AMD PCnet hinzugefügt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:49:03 23.05.2011   Titel:              Zitieren

Ist leider nicht funktionsfähig.

Kleine Verbesserung bei qemu mit statischem Array. Dann sowohl bei ARP Req. als auch bei Ping Req. ein Tx OK, kommt aber nix an, auch nicht in wireshark.

rtl8139.c:
global:
C/C++ Code:
// Transmit
uint8_t Tx_network_buffer[4096] __attribute__ ((aligned (4))); // Test
C/C++ Code:
// Transmit
uint8_t Tx_network_buffer[4096] __attribute__ ((aligned (4))); // Test
C/C++ Code:
// Transmit
uint8_t Tx_network_buffer[4096] __attribute__ ((aligned (4))); // Test

bei install:
C/C++ Code:
// device->TxBuffer = malloc(4096, 4, "RTL8139-TxBuf");
   device->TxBuffer = Tx_network_buffer; // global array instead of malloc
C/C++ Code:
// device->TxBuffer = malloc(4096, 4, "RTL8139-TxBuf");
device->TxBuffer = Tx_network_buffer; // global array instead of malloc
C/C++ Code:
// device->TxBuffer = malloc(4096, 4, "RTL8139-TxBuf");
   device->TxBuffer = Tx_network_buffer; // global array instead of malloc


Bei real PC leider kein Tx OK.

adapter-> kann durch device->device-> ersetzt werden. :confused:

Wir werden hier nochmal von der stabilen und funktionierenden Revision 873 ausgehen und in kleinen Schritten vorwärts gehen mit Tests auf einem echten PC mit RTL8139 im LAN mit Router. Das Problem entsteht beim Einbau der abstrakten Schnittstelle.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:50:05 23.05.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:59:54 24.05.2011   Titel:              Zitieren

Version 0.0.2.43:

- Zweiten Fehler beim Senden behoben (length & (0x3F0000 | 256<<11); war schuld)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:44:17 24.05.2011   Titel:              Zitieren

Hardware-Tests mit RTL 8139 Karte positiv. Sowohl ARP reply als auch ICMP reply bei zwei unabhängigen Testern.

hrping -S -t IP (geht bis -s 20, bei -s 10 bricht die Hardware zusammen)

siehe: http://linux-ip.net/html/ether-arp.html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:53:49 24.05.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:32:33 24.05.2011   Titel:              Zitieren

Version 0.0.2.44:

- RTL8139-Treiber überspringt nun die ersten 4 Bytes eines empfangenen Paketes (weil sie RTL8139-spezifische Daten enthalten)
- Analyse der Pakete nach ethernet.c ausgelagert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:26:22 24.05.2011   Titel:              Zitieren

0.0.2.45 - Rev: 885

C/C++ Code:
// set transmit FIFO threshhold to 48*32 = 1536 bytes to avoid tx underrun (gefunden in open solaris)
*((uint32_t*)(adapter->MMIO_base + RTL8139_TXSTATUS0 + 4 * rAdapter->TxBufferIndex)) = length | (48 << 16);
C/C++ Code:
// set transmit FIFO threshhold to 48*32 = 1536 bytes to avoid tx underrun (gefunden in open solaris)
*((uint32_t*)(adapter->MMIO_base + RTL8139_TXSTATUS0 + 4 * rAdapter->TxBufferIndex)) = length | (48 << 16);
C/C++ Code:
// set transmit FIFO threshhold to 48*32 = 1536 bytes to avoid tx underrun (gefunden in open solaris)
*((uint32_t*)(adapter->MMIO_base + RTL8139_TXSTATUS0 + 4 * rAdapter->TxBufferIndex)) = length | (48 << 16);


Das OWN bit 13 wird dabei wohl automatisch auf 0 gesetzt durch die Länge, könnte man evtl. noch separat ergänzen.

IP: 192.168.10.97

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:29:35 24.05.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:32:00 25.05.2011   Titel:              Zitieren

0.0.2.46 - Rev: 886

Zusätzlich zu IPv4 und ARP wurde noch IPv6 als ethernet type 0x86DD hinzugefügt bei der Analyse des Ethernet-Protokolls (ethernet.c).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:30:06 26.05.2011   Titel:              Zitieren

Version 0.0.2.47:

- ARP-code nach arp.c/h ausgelagert
- Bugfix: Richtige Größe beim senden eines ARP-Paketes eingetragen (vorher: Größe des zuvor empfangenen Paketes).
- Bugfix: Senden von Paketen < 60 Bytes funktioniert nun wieder mit RTL8139 (Teile des Pufferinhalts wurden in dem Fall versehentlich gelöscht).
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:31:56 26.05.2011   Titel:              Zitieren

Version 0.0.2.48:

- strncmp im Kernel eingebaut
- Funktionen für Arp-Tabelle eingebaut. (Weitgehend ungetestet). Keyboard-Shortcut STRG+A, um den Inhalt der Tabelle anzuzeigen
- Liste aller Netzwerkkarten eingebaut
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:03:32 26.05.2011   Titel:              Zitieren

Version 0.0.2.49 - rev. 889:

Einträge in ARP Tabelle funktionieren nun bei ARP Req./Reply :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:54:15 26.05.2011   Titel:              Zitieren

Version 0.0.2.50 - rev. 890:

- IP beim network-adapter hinzugefügt, beim Ausdruck aber noch 0.0.0.0 (bei qemu: 111.112.112.121)
- IP/MAC wird manchmal doppelt eingetragen

- Systemfehler beim Empfang: "Time lag" (mit der Zeit stecken immer mehr Pakete im Rohr fest. Müssen erst nach vorne gedrückt werden durch neue Pakete?! :D )


Bei qemu (server 10.0.2.2) mit TAP (10.0.2.16) kam ein ARP reply zum ARP request von TAP durch:
Zitat:
11 00:24:27.671763 Plus_12:12:12 Plus_12:12:11 ARP 10.0.2.15 is at 00:12:12:12:12:12
(Quelle: wireshark)
(10.0.2.15 / 00:12:12:12:12:12 ist PrettyOS)
In der ARP Tabelle von PrettyOS auf qemu findet sich nur der Eintrag von TAP.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:35:48 27.05.2011, insgesamt 7-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:04:09 27.05.2011   Titel:              Zitieren

Hinweis zum ARP Cache:

Zitat:
Der ARP-Cache enthält eine vierspaltige Tabelle, die im Allgemeinen aus <Protokolltyp, Protokolladresse des Senders, Hardware-Adresse des Senders, Eintragszeitpunkt> besteht. Das Zeitintervall, nachdem ein Eintrag aus dem ARP-Cache gelöscht wird, ist implementierungsabhängig. So verwerfen aktuelle Linux-Distributionen Einträge nach ca. 5 Minuten. Sobald ein Eintrag in der Tabelle genutzt wird, wird dessen Ablaufzeit verlängert.

Quelle: http://de.wikipedia.org/wiki/Address_Resolution_Protocol

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:37:00 27.05.2011   Titel:              Zitieren

Erhard Henkes schrieb:
Hinweis zum ARP Cache:

Zitat:
Der ARP-Cache enthält eine vierspaltige Tabelle, die im Allgemeinen aus <Protokolltyp, Protokolladresse des Senders, Hardware-Adresse des Senders, Eintragszeitpunkt> besteht. Das Zeitintervall, nachdem ein Eintrag aus dem ARP-Cache gelöscht wird, ist implementierungsabhängig. So verwerfen aktuelle Linux-Distributionen Einträge nach ca. 5 Minuten. Sobald ein Eintrag in der Tabelle genutzt wird, wird dessen Ablaufzeit verlängert.

Quelle: http://de.wikipedia.org/wiki/Address_Resolution_Protocol

Done.

Version 0.0.2.51:

- Bugfix: STRG+A zeigt nun richtige eigene IP-Adresse an
- Zeitstempel in ARP-Tabelle werden bei Zugriff aktualisiert
- Bootscreen optimiert -> Kein Flackern mehr.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:04:00 27.05.2011   Titel:              Zitieren

0.0.2.52 - Rev: 892

arp.c überarbeitet:
- doppeltes arp_checkTable entfernt
- addTableEntry nur an einer Stelle für request und reply

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:03:00 27.05.2011   Titel:              Zitieren

0.0.2.53 - Rev: 893

Noch Fehler beim Eintrag in die ARP, aber keine doppelten Einträge mehr.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:44:41 27.05.2011   Titel:              Zitieren

0.0.2.54 - Rev: 894

Nun korrekter Code bei arp.c für die ARP tables (dank Hinweis von cefour) :)

Hinweis von MrX im IRC:
Zitat:
<MrX>Der Zeitstempel wird noch aktualisiert, das stimmt.
<MrX>Wenn sich aber eine bereits bekannte IP mit anderer MAC meldet, wird die MAC in der Tabelle nicht mehr geändert.

Der Code ist also noch nicht ok. Es kommt leider auch noch zu Doppeleinträgen mit der gleichen IP/MAC Kombination. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:32:19 28.05.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:00:53 28.05.2011   Titel:              Zitieren

0.0.2.55 - Rev: 895

Gratuitous ARP eingebaut beim Installieren der Netzwerkadapter.

C/C++ Code:
    for (int i=0; i<10; i++)
    {
        arp_sendGratitiousRequest(adapter); // show PrettyOS' IP and MAC to the LAN
        sleepMilliSeconds(1000);
    }
C/C++ Code:
for (int i=0; i<10; i++)
{
arp_sendGratitiousRequest(adapter); // show PrettyOS' IP and MAC to the LAN
sleepMilliSeconds(1000);
}
C/C++ Code:
    for (int i=0; i<10; i++)
    {
        arp_sendGratitiousRequest(adapter); // show PrettyOS' IP and MAC to the LAN
        sleepMilliSeconds(1000);
    }


Mein Entwicklungsrechner im LAN trägt diese IP/MAC aber nicht ein in seiner ARP Tabelle wegen möglichen ARP spoofings. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:34:43 28.05.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:05:45 28.05.2011   Titel:              Zitieren

Version 0.0.2.56:

- PCNet-Treiber: Besser kommentiert, Verbesserte Ausgaben. Senden funktioniert nun unter Qemu (falsche Konstante war Schuld)
- Gratious-ARP auskommentiert (funktioniert i.d.R. nicht, weil viele Betriebssysteme solche ARPs ignorieren, um ARP-Spoofing zu vermeiden. Unter Qemu funktionierte ARP dadurch überhaupt nicht mehr)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:46:21 28.05.2011   Titel:              Zitieren

version = "0.0.2.57 - Rev: 897"

tcp.h/tcp.c erkennung / zerlegung überarbeitet
Ports stimmen, Rest leider noch falsch

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:32:28 28.05.2011   Titel:              Zitieren

version = "0.0.2.58 - Rev: 898"

tcp.h und tcp.c weiter verbessert
6 Flags (nun uint8_t anstelle bool) werden noch nicht richtig angezeigt
(Tests mit telnet und wireshark)

Wichtiger Hinweis:
Mit dem qemu-EHCI (Vers. 0.11.5) klappt der ARP reply nur sporadisch (man kann es mit arp -s 10.0.2.15 00-12-12-12-12-12 statisch eintragen).
Bei qemu 14.1 klappt der ARP reply auf Anhieb.
http://qemu-buch.de/d/QEMU_unter_Microsoft_Windows#QEMU_unter_.C3.A4lteren_Microsoft_Windows-Versionen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:17:39 28.05.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:59:33 28.05.2011   Titel:              Zitieren

version = "0.0.2.59 - Rev: 899"

TCP Debug nun ok

http://tools.ietf.org/html/rfc793#page-15 (TCP header)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:03:56 29.05.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:44:50 29.05.2011   Titel:              Zitieren

version = "0.0.2.60 - Rev: 900"

Schalter _NETWORK_DATA_ in os.h eingeführt, um die Ausgaben etwas übersichtlicher zu machen. Die einzelnen Bytes - und ihre Bedeutung - kann man besser in wireshark analysieren.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:47:29 29.05.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:13:11 29.05.2011   Titel:              Zitieren

Version 0.0.2.61:

- Verbesserungen am RTL8168-Treiber
- Verbesserungen an UDP-Funktionsprototypen
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:58:06 29.05.2011   Titel:              Zitieren

version = "0.0.2.62 - Rev: 902"

Sende-Funktion in UDP aktualisiert:
C/C++ Code:
void UDPSend(struct network_adapter* adapter, void* data, uint32_t length);
C/C++ Code:
void UDPSend(struct network_adapter* adapter, void* data, uint32_t length);
C/C++ Code:
void UDPSend(struct network_adapter* adapter, void* data, uint32_t length);

Noch nicht getestet.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:26:57 30.05.2011   Titel:              Zitieren

Version 0.0.2.63:

- Großer Netzwerkprotokollumbau
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:13:29 30.05.2011   Titel:              Zitieren

Dickes Lob an MrX! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:43:16 31.05.2011   Titel:              Zitieren

Version 0.0.2.64:

- ELF-Loader setzt nun R/W-Privilegien bei der Speicherallokation
- Konsolen unterstützen nun SCROLL_BEGIN
- Anpassungen an arp wegen Netzwerkumbau in 0.0.2.63
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:55:39 31.05.2011   Titel:              Zitieren

Version 0.0.2.65:

- Ausgaben des RTL8139-Handlers hinter Makro verborgen
- Analyse der Netzwerkpakete in Kernel-Idle-Schleife verlegt
- Erkennung des Adressaten einer Nachricht (MAC, IP) -> TODO: Warum funktioniert das bei ICMP nicht zuverlässig?
Cefour
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.01.2006
Beiträge: 114
Beitrag Cefour Mitglied 23:15:35 31.05.2011   Titel:   RE            Zitieren

Version = "0.0.2.66 - Rev: 906";

Netzwerk Interface überarbeitet
udpSend eingebaut

_________________
Flirt Coding Fun Hand und Party www.panbachi.de
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:53:14 31.05.2011   Titel:              Zitieren

Version = "0.0.2.67 - Rev: 907";

(von cefour eingespielt)

PING PONG über router läuft nicht mehr.

Zitat:
23:39:08.264789 192.168.10.103 192.168.10.97 ICMP Echo (ping) request
23:39:08.273097 UnexTech_0f:0a:0c Broadcast ARP Gratuitous ARP for 192.168.10.97 (Request)


"pingender Rechner schickt an den Router, und Router tauscht mac-addresse im Paket gegen seine eigene aus" (cefour)

Hat bisher nur geklappt, weil wir die MAC-Adresse geliefert haben.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:09:15 01.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:08:10 01.06.2011   Titel:              Zitieren

version = "0.0.2.68 - Rev: 908"

- Formatierungen
- Ver./Rev. korrigiert
- IP 192.168.10.97 (für Hardware-Test)
- Frequenz auf 250 Hz eingestellt wie bei Linux 2.6.13
http://de.wikipedia.org/wiki/Linux_%28Kernel%29#Neuerungen_im_Kernel_2.6

Routing-Tabelle fehlt noch
http://de.wikipedia.org/wiki/Routingtabelle

Beispiel: Aufruf mit netstat -r
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Routingtabelle
===========================================================================
Schnittstellenliste
0x1 ........................... MS TCP Loopback interface
0x2 ...00 13 d4 11 27 a5 ...... Intel(R) PRO/1000 PM Network Connection - Paketplaner-Miniport
===========================================================================
===========================================================================
Aktive Routen:
     Netzwerkziel    Netzwerkmaske          Gateway   Schnittstelle  Anzahl
          0.0.0.0          0.0.0.0     192.168.10.1  192.168.10.103       20
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
     192.168.10.0    255.255.255.0   192.168.10.103  192.168.10.103       20
   192.168.10.103  255.255.255.255        127.0.0.1       127.0.0.1       20
   192.168.10.255  255.255.255.255   192.168.10.103  192.168.10.103       20
        224.0.0.0        240.0.0.0   192.168.10.103  192.168.10.103       20
  255.255.255.255  255.255.255.255   192.168.10.103  192.168.10.103       1
Standardgateway:      192.168.10.1
===========================================================================
Ständige Routen:
  Keine
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Routingtabelle
===========================================================================
Schnittstellenliste
0x1 ........................... MS TCP Loopback interface
0x2 ...00 13 d4 11 27 a5 ...... Intel(R) PRO/1000 PM Network Connection - Paketplaner-Miniport
===========================================================================
===========================================================================
Aktive Routen:
Netzwerkziel Netzwerkmaske Gateway Schnittstelle Anzahl
0.0.0.0 0.0.0.0 192.168.10.1 192.168.10.103 20
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.10.0 255.255.255.0 192.168.10.103 192.168.10.103 20
192.168.10.103 255.255.255.255 127.0.0.1 127.0.0.1 20
192.168.10.255 255.255.255.255 192.168.10.103 192.168.10.103 20
224.0.0.0 240.0.0.0 192.168.10.103 192.168.10.103 20
255.255.255.255 255.255.255.255 192.168.10.103 192.168.10.103 1
Standardgateway: 192.168.10.1
===========================================================================
Ständige Routen:
Keine
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Routingtabelle
===========================================================================
Schnittstellenliste
0x1 ........................... MS TCP Loopback interface
0x2 ...00 13 d4 11 27 a5 ...... Intel(R) PRO/1000 PM Network Connection - Paketplaner-Miniport
===========================================================================
===========================================================================
Aktive Routen:
     Netzwerkziel    Netzwerkmaske          Gateway   Schnittstelle  Anzahl
          0.0.0.0          0.0.0.0     192.168.10.1  192.168.10.103       20
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1       1
     192.168.10.0    255.255.255.0   192.168.10.103  192.168.10.103       20
   192.168.10.103  255.255.255.255        127.0.0.1       127.0.0.1       20
   192.168.10.255  255.255.255.255   192.168.10.103  192.168.10.103       20
        224.0.0.0        240.0.0.0   192.168.10.103  192.168.10.103       20
  255.255.255.255  255.255.255.255   192.168.10.103  192.168.10.103       1
Standardgateway:      192.168.10.1
===========================================================================
Ständige Routen:
  Keine


Anzahl = Metrik

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:21:27 01.06.2011, insgesamt 4-mal bearbeitet
Cefour
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.01.2006
Beiträge: 114
Beitrag Cefour Mitglied 22:48:57 01.06.2011   Titel:   RE            Zitieren

"0.0.2.69 - Rev: 909"
Arp Tabelle, finden eines Eintags war Fehlerhaft.
Wurde durch Integer vergleich anstatt string vergleich behoben

_________________
Flirt Coding Fun Hand und Party www.panbachi.de
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 12:35:14 02.06.2011   Titel:              Zitieren

Version 0.0.2.70:

- strncmp durch memcmp ausgetauscht im Netzwerkcode
- Userlib: Weitere Funktionen implementiert
- Bugfix: strncmp repariert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:23:23 02.06.2011   Titel:              Zitieren

version = "0.0.2.71 - Rev: ..." (nicht committed)

- UDPSend korrigiert (src- und destPort mit htons gedreht)
- Funktion ergänzt in network.c: network_adapter_t* network_getAdapter(uint8_t IP[4]);
- In keyboard.c die Erzeugung eines Netzwerkpakets per Tastendruck strg+n für Experimente ergänzt:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        if(retchar == 'n') // If you want to test something in networking
        {  
            uint8_t sourceIP_address[4] ={192,168,10,97};
            uint8_t   destIP_address[4] ={192,168,10,103};
           
            network_adapter_t* adapter = network_getAdapter(sourceIP_address);
            printf("network adapter: %X\n", adapter); // check
           
            uint16_t srcPort  = 40; // unassigend
            uint16_t destPort = 40;
           
            if (adapter)
            {
                UDPSend(adapter, "PrettyOS says hello", strlen("PrettyOS says hello"), srcPort, adapter->IP_address, destPort, destIP_address);
            }
            return 0;
        }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if(retchar == 'n') // If you want to test something in networking
{
uint8_t sourceIP_address[4] ={192,168,10,97};
uint8_t destIP_address[4] ={192,168,10,103};

network_adapter_t* adapter = network_getAdapter(sourceIP_address);
printf("network adapter: %X\n", adapter); // check

uint16_t srcPort = 40; // unassigend
uint16_t destPort = 40;

if (adapter)
{
UDPSend(adapter, "PrettyOS says hello", strlen("PrettyOS says hello"), srcPort, adapter->IP_address, destPort, destIP_address);
}
return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        if(retchar == 'n') // If you want to test something in networking
        {  
            uint8_t sourceIP_address[4] ={192,168,10,97};
            uint8_t   destIP_address[4] ={192,168,10,103};
           
            network_adapter_t* adapter = network_getAdapter(sourceIP_address);
            printf("network adapter: %X\n", adapter); // check
           
            uint16_t srcPort  = 40; // unassigend
            uint16_t destPort = 40;
           
            if (adapter)
            {
                UDPSend(adapter, "PrettyOS says hello", strlen("PrettyOS says hello"), srcPort, adapter->IP_address, destPort, destIP_address);
            }
            return 0;
        }


Kontrolle mittels wireshark: http://www.henkessoft.de/OS_Dev/Bilder/rev911_UDPsend_TEST.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:05:17 02.06.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:48:39 02.06.2011   Titel:              Zitieren

version = "0.0.2.72 - Rev: 911" (ACHTUNG: in ckernel.c versehentlich 912)

- Weiterer Fehler in UDPSend behoben (Länge)

C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
void UDPSend(network_adapter_t* adapter, void* data, uint32_t length, uint16_t  srcPort, uint8_t  srcIP[4], uint16_t destPort, uint8_t destIP[4])
{
    udpPacket_t* packet = (udpPacket_t*)((uintptr_t)data -sizeof(udpPacket_t));
    packet->sourcePort  = htons(srcPort);
    packet->destPort    = htons(destPort);
    packet->length      = htons(length + sizeof(udpPacket_t));
    packet->checksum    = packet->checksum  = udpCalculateChecksum(packet, length + sizeof(udpPacket_t), srcIP, destIP);
    ipv4_send(adapter,packet,length + sizeof(udpPacket_t),destIP,17);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
void UDPSend(network_adapter_t* adapter, void* data, uint32_t length, uint16_t srcPort, uint8_t srcIP[4], uint16_t destPort, uint8_t destIP[4])
{
udpPacket_t* packet = (udpPacket_t*)((uintptr_t)data -sizeof(udpPacket_t));
packet->sourcePort = htons(srcPort);
packet->destPort = htons(destPort);
packet->length = htons(length + sizeof(udpPacket_t));
packet->checksum = packet->checksum = udpCalculateChecksum(packet, length + sizeof(udpPacket_t), srcIP, destIP);
ipv4_send(adapter,packet,length + sizeof(udpPacket_t),destIP,17);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
void UDPSend(network_adapter_t* adapter, void* data, uint32_t length, uint16_t  srcPort, uint8_t  srcIP[4], uint16_t destPort, uint8_t destIP[4])
{
    udpPacket_t* packet = (udpPacket_t*)((uintptr_t)data -sizeof(udpPacket_t));
    packet->sourcePort  = htons(srcPort);
    packet->destPort    = htons(destPort);
    packet->length      = htons(length + sizeof(udpPacket_t));
    packet->checksum    = packet->checksum  = udpCalculateChecksum(packet, length + sizeof(udpPacket_t), srcIP, destIP);
    ipv4_send(adapter,packet,length + sizeof(udpPacket_t),destIP,17);
}


Foto des Wireshark-Pakets: http://www.henkessoft.de/OS_Dev/Bilder/rev912_UDPsend_TEST.PNG

PS: Man muss zuvor PrettyOS pingen, damit die IP/MAC Kombination der destIP in der arp table unseres OS steht.

Nachdem UDPSend funktioniert, kann man sich an DHCPDiscover heran wagen. ;)
An htons denken!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:14:19 02.06.2011, insgesamt 4-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:42:03 02.06.2011   Titel:              Zitieren

Version 0.0.2.73:

- UDPSend repariert. (Gefährliches Spiel mit Pointern entfernt)
- Ansatz für DHCP_Discover
- 255.255.255.255 statisch in ARP-Tabellen eingetragen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:09:12 02.06.2011   Titel:              Zitieren

version = "0.0.2.74 - Rev: 913"

Meilenstein: Erfolgreicher DHCP Discover :live:
Thanks to: MrX, cefour

Foto (wireshark): http://www.henkessoft.de/OS_Dev/Bilder/DHCPDiscover.PNG
C/C++ Code:
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
    // options
    packet.options[0] =  99;  // MAGIC
    packet.options[1] = 130;  // MAGIC
    packet.options[2] =  83;  // MAGIC
    packet.options[3] =  99;  // MAGIC
    packet.options[4] =  53;  // DHCP message type
    packet.options[5] =   1;  // Length
    packet.options[6] =   1;  // data: DHCP Discover
    packet.options[7] = 255;  // end
C/C++ Code:
1
2
3
4
5
6
7
8
9
// options
packet.options[0] = 99; // MAGIC
packet.options[1] = 130; // MAGIC
packet.options[2] = 83; // MAGIC
packet.options[3] = 99; // MAGIC
packet.options[4] = 53; // DHCP message type
packet.options[5] = 1; // Length
packet.options[6] = 1; // data: DHCP Discover
packet.options[7] = 255; // end
C/C++ Code:
1
2
3
4
5
6
7
8
9
    // options
    packet.options[0] =  99;  // MAGIC
    packet.options[1] = 130;  // MAGIC
    packet.options[2] =  83;  // MAGIC
    packet.options[3] =  99;  // MAGIC
    packet.options[4] =  53;  // DHCP message type
    packet.options[5] =   1;  // Length
    packet.options[6] =   1;  // data: DHCP Discover
    packet.options[7] = 255;  // end


Options: code/tag, length, data
http://www.networksorcery.com/enp/protocol/bootp/options.htm

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:10:58 02.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:11:41 03.06.2011   Titel:              Zitieren

Ergänzende Versuche, die jedoch nicht zu DHCP OFFER führten:

1) DHCP Options:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
     // options
    packet.options[0]  =  99;  // MAGIC
    packet.options[1]  = 130;  // MAGIC
    packet.options[2]  =  83;  // MAGIC
    packet.options[3]  =  99;  // MAGIC
   
    packet.options[4]  =  53;  // MESSAGE TYPE
    packet.options[5]  =   1;  // Length
    packet.options[6]  =   1;  // (data)

    packet.options[7]  =  55;  //
    packet.options[8]  =   6;  // Length
    packet.options[9]  =   1;  // SUBNET MASK
    packet.options[10] =   3;  // ROUTERS
    packet.options[11] =   6;  // DOMAIN NAME SERVER
    packet.options[12] =  15;  // DOMAIN NAME
    packet.options[13] =  28;  // BROADCAST ADDRESS
    packet.options[14] =  42;  // Network Time Protocol (NTP) SERVERS
   
    packet.options[15] =  57;  // MAX MESSAGE SIZE
    packet.options[16] =   2;  // Length
    packet.options[17] =   2;  // (data)
    packet.options[18]  = 64;  // (data)
   
    packet.options[19] = 255;  // end
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// options
packet.options[0] = 99; // MAGIC
packet.options[1] = 130; // MAGIC
packet.options[2] = 83; // MAGIC
packet.options[3] = 99; // MAGIC

packet.options[4] = 53; // MESSAGE TYPE
packet.options[5] = 1; // Length
packet.options[6] = 1; // (data)

packet.options[7] = 55; //
packet.options[8] = 6; // Length
packet.options[9] = 1; // SUBNET MASK
packet.options[10] = 3; // ROUTERS
packet.options[11] = 6; // DOMAIN NAME SERVER
packet.options[12] = 15; // DOMAIN NAME
packet.options[13] = 28; // BROADCAST ADDRESS
packet.options[14] = 42; // Network Time Protocol (NTP) SERVERS

packet.options[15] = 57; // MAX MESSAGE SIZE
packet.options[16] = 2; // Length
packet.options[17] = 2; // (data)
packet.options[18] = 64; // (data)

packet.options[19] = 255; // end
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
     // options
    packet.options[0]  =  99;  // MAGIC
    packet.options[1]  = 130;  // MAGIC
    packet.options[2]  =  83;  // MAGIC
    packet.options[3]  =  99;  // MAGIC
   
    packet.options[4]  =  53;  // MESSAGE TYPE
    packet.options[5]  =   1;  // Length
    packet.options[6]  =   1;  // (data)

    packet.options[7]  =  55;  //
    packet.options[8]  =   6;  // Length
    packet.options[9]  =   1;  // SUBNET MASK
    packet.options[10] =   3;  // ROUTERS
    packet.options[11] =   6;  // DOMAIN NAME SERVER
    packet.options[12] =  15;  // DOMAIN NAME
    packet.options[13] =  28;  // BROADCAST ADDRESS
    packet.options[14] =  42;  // Network Time Protocol (NTP) SERVERS
   
    packet.options[15] =  57;  // MAX MESSAGE SIZE
    packet.options[16] =   2;  // Length
    packet.options[17] =   2;  // (data)
    packet.options[18]  = 64;  // (data)
   
    packet.options[19] = 255;  // end


2) Next Server IP eingetragen:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
    for(uint8_t i = 0; i < 4; i++)
    {
        packet.ciaddr[i] = 0;
        packet.yiaddr[i] = 0;
        // packet.siaddr[i] = 0;
        packet.giaddr[i] = 0;
    }

    // next server IP
    packet.siaddr[0] =  192;
    packet.siaddr[1] =  168;
    packet.siaddr[2] =   10;
    packet.siaddr[3] =    1;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
for(uint8_t i = 0; i < 4; i++)
{
packet.ciaddr[i] = 0;
packet.yiaddr[i] = 0;
// packet.siaddr[i] = 0;
packet.giaddr[i] = 0;
}

// next server IP
packet.siaddr[0] = 192;
packet.siaddr[1] = 168;
packet.siaddr[2] = 10;
packet.siaddr[3] = 1;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
    for(uint8_t i = 0; i < 4; i++)
    {
        packet.ciaddr[i] = 0;
        packet.yiaddr[i] = 0;
        // packet.siaddr[i] = 0;
        packet.giaddr[i] = 0;
    }

    // next server IP
    packet.siaddr[0] =  192;
    packet.siaddr[1] =  168;
    packet.siaddr[2] =   10;
    packet.siaddr[3] =    1;


Die Versuche wurden analog mit qemu ausgeführt.


Auch ein Versuch mit
C/C++ Code:
#define IP_1 0
#define
IP_2 0
#define
IP_3 0
#define
IP_4 0
C/C++ Code:
#define IP_1 0
#define
IP_2 0
#define
IP_3 0
#define
IP_4 0
C/C++ Code:
#define IP_1 0
#define
IP_2 0
#define
IP_3 0
#define
IP_4 0

zu starten führt bei realer Hardware zu nichts.

Leider kein Erfolg bezüglich DHCP Offer. :rolleyes:

------------------------------------------------------

Hier ein erfolgreicher DHCP-Vorgang eines anderen Rechners:

http://www.henkessoft.de/OS_Dev/Bilder/DHCPDiscover01a.PNG (Abfolge, zeitlich seltsam)
http://www.henkessoft.de/OS_Dev/Bilder/DHCPDiscover01.PNG (DHCP Discover)
http://www.henkessoft.de/OS_Dev/Bilder/DHCPDiscover01b.PNG (Options)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:44:32 03.06.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 09:23:53 03.06.2011   Titel:              Zitieren

version = "0.0.2.75 - Rev: 914"

IP 0.0.0.0 als source, andere Options, DHCP Autoconfig

Für qemu konfiguriert.

Leider noch kein Offer. Gute Ideen sind gesucht.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:52:37 03.06.2011   Titel:              Zitieren

Einen weiteren PC probiert mit einer RTL8139C, eingestellter IP 192.168.10.96 und natürlich anderer MAC:
ebenfalls kein DHCP OFFER als Antwort

Ergänzung:
1) kein zugang zum router http://www.c-plusplus.de/forum/287416-60
2) IP ... 97 MAC ... ist fest dort eingetragen
jetzt habe ich noch einen testrechner mit passender netzwerkkarte gefunden mit anderer MAC, und da konnte ich nun auch mit 0.0.0.0 starten, hat aber auch keine OFFER gebracht. Nun läuft es aber so, wie es wohl sein soll, nämlich dass die sourceIP 0.0.0.0 ist.

Fazit: wir stecken fest.

Routing? DNS? Gateway?

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:08:58 03.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:53:27 03.06.2011   Titel:              Zitieren

version = "0.0.2.76 - Rev: 915"

- DHCP Discover: Options bearbeitet, z.B. Wunsch-IP. AFFE00xx als laufende xid gebaut, damit man mehrere Messages auseinander halten kann.

- showARPTable optisch verbessert

- bootscreen unterdrückt (macht bei manchen Maschinen Probleme: freeze)

Leider noch kein OFFER :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:33:42 03.06.2011   Titel:              Zitieren

version = "0.0.2.77 - Rev: 916"

in rtl8139.c:
sleepMilliseconds(...) durch delay(...) getauscht, weil ein Testrechner dort >50% hängen blieb (endless loop, freeze). Merkwürdiger Fehler, da es ja ab und zu klappte, also kein systematisches Ereignis.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:41:48 03.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:10:29 04.06.2011   Titel:              Zitieren

version = "0.0.2.78 - Rev: 917"

- Systemfrequenz von 250 Hz (Linux) auf 100 Hz zurückgesetzt, weil es auch bei delay zu Problemen kam (Danke an MrX für diesen Hinweis).

- Options auf 340 Byte erweitert, damit die DHCP-Gesamtgröße von 576 erreicht wird.

- sname und file komplett genullt (sieht in wireshark besser aus ^^)

DHCP Discover sieht in wireshark absolut korrekt aus.

==> bisher kein DHCP OFFER

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:24:57 04.06.2011   Titel:              Zitieren

version = "0.0.2.79 - Rev: 918"

- DHCP_INFORM ergänzt
- IP (beim start), SIP (server), RIP (requested) nach vorne in network.h

==> bisher weder OFFER noch ACK (allerdings erhielt auch ein anderer PC keine Antwort auf sein gesendetes INFORM)

... kann alles an meinem Router, DHCP server liegen :confused:
... Qemu + TAP ist noch verstockter :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:16:28 04.06.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:58:43 05.06.2011   Titel:              Zitieren

Version 0.0.2.80:

- Verbesserungen an Netzwerktreibern (PCNet und RTL8168): Ausgaben im Interrupt-Handler hinter Makro versteckt.
- Memoryleak beseitigt: Mutex der Keyqueues wurde nicht gelöscht, wenn die keyqueue gelöscht wird.
- userPT und userPD werden nicht mehr "doppelt" freigegeben.
- Überflüssige Membervariablen von task_t entfernt
- Kleinigkeiten/Codestyle.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:22:57 05.06.2011   Titel:              Zitieren

Version 0.0.2.81:

- Bugfix unter Bochs
- bochs.bxrc geupdated
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:14:25 05.06.2011   Titel:              Zitieren

version = "0.0.2.82 - Rev: 921"

- Kleinere Formatierungen in task.h/c, kernelStackSize in die Implementierungsdatei verlegt (kein #define)
- Kommentar in arp.c

Test mit Emulatoren Bochs, VBox, MS VPC, VMware Player, Qemu verlaufen alle positiv. Herzlichen Dank hierfür an alle Developer und Tester. :)
Wir hatten auch schon andere Zeiten. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:32:52 05.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:19:40 06.06.2011   Titel:              Zitieren

version = "0.0.2.83 - Rev: 922"

dma.h/c und executable.h/c Formatierung

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:31:59 07.06.2011   Titel:              Zitieren

version = "0.0.2.84 - Rev: 923"

- udp checksum auf 0 (Hinweis von cefour aufgrund RFC), allerdings war hier beim DHCP-Einloggen des Notebooks eine udp checksum voranden: http://www.henkessoft.de/OS_Dev/Bilder/DHCPDiscover01.PNG :confused:
- Auf DHCP Discover erfolgte Antwort des Servers an den Client (67 an 68), leider noch ohne Debug (in wireshark nicht sichtbar ?!)
Wir wissen also noch nicht, was uns der DHCP server auf unser DHCP_Discover mitteilt.

Beweisfoto: Screenshot (strg+s)

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PrettyOS [Version 0.0.2.84 - Rev: 923]                                          
--------------------------------------------------------------------------------
packet sent.                                                                    
                                                                               
DHCP Discover sent.                                                            
                                                                               
EthernetSend: length: 618.                                                      
                                                                               
>>> Transmission starts <<<                                                    
Physical Address of Tx Buffer = 014051D8h                                      
packet sent.                                                                    
                                                                               
DHCP Discover sent.                                                            
                                                                               
EthernetSend: length: 618.                                                      
                                                                               
>>> Transmission starts <<<                                                    
Physical Address of Tx Buffer = 014051D8h                                      
packet sent.                                                                    
                                                                               
Length: 594                                                                    
MAC Receiver: 00h 10h A7h 0Fh 0Ah 0Ch MAC Transmitter: 00h 22h CFh 36h 9Dh 1Ch  
Ethernet: type 2, Type: 08h 00h                                                
Ethernet 2. Ethernet type: IP.                                                  
IPv4 packet received. We are not the addressee.                                
                                                                               
Length: 594                                                                    
MAC Receiver: 00h 10h A7h 0Fh 0Ah 0Ch MAC Transmitter: 00h 22h CFh 36h 9Dh 1Ch  
Ethernet: type 2, Type: 08h 00h                                                
Ethernet 2. Ethernet type: IP.  IP version: 4, IP Header Length: 20 byte        
UDP.                                                                            
UDP Header information:                                                        
+--------------+----------------+                                              
|      67      |      68      | (source port, destination port)                
+-------------------------------+                                              
|      556      |      5338h    | (length, checksum)                            
+-------------------------------+                                              
UDP Bootstrap Protocol (BOOTP) Client, also used by DHCP Client                
                                                                               
Screenshot to Floppy (Thread)                                                  
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PrettyOS [Version 0.0.2.84 - Rev: 923]
--------------------------------------------------------------------------------
packet sent.

DHCP Discover sent.

EthernetSend: length: 618.

>>> Transmission starts <<<
Physical Address of Tx Buffer = 014051D8h
packet sent.

DHCP Discover sent.

EthernetSend: length: 618.

>>> Transmission starts <<<
Physical Address of Tx Buffer = 014051D8h
packet sent.

Length: 594
MAC Receiver: 00h 10h A7h 0Fh 0Ah 0Ch MAC Transmitter: 00h 22h CFh 36h 9Dh 1Ch
Ethernet: type 2, Type: 08h 00h
Ethernet 2. Ethernet type: IP.
IPv4 packet received. We are not the addressee.

Length: 594
MAC Receiver: 00h 10h A7h 0Fh 0Ah 0Ch MAC Transmitter: 00h 22h CFh 36h 9Dh 1Ch
Ethernet: type 2, Type: 08h 00h
Ethernet 2. Ethernet type: IP. IP version: 4, IP Header Length: 20 byte
UDP.
UDP Header information:
+--------------+----------------+
| 67 | 68 | (source port, destination port)
+-------------------------------+
| 556 | 5338h | (length, checksum)
+-------------------------------+
UDP Bootstrap Protocol (BOOTP) Client, also used by DHCP Client

Screenshot to Floppy (Thread)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
PrettyOS [Version 0.0.2.84 - Rev: 923]                                          
--------------------------------------------------------------------------------
packet sent.                                                                    
                                                                               
DHCP Discover sent.                                                            
                                                                               
EthernetSend: length: 618.                                                      
                                                                               
>>> Transmission starts <<<                                                    
Physical Address of Tx Buffer = 014051D8h                                      
packet sent.                                                                    
                                                                               
DHCP Discover sent.                                                            
                                                                               
EthernetSend: length: 618.                                                      
                                                                               
>>> Transmission starts <<<                                                    
Physical Address of Tx Buffer = 014051D8h                                      
packet sent.                                                                    
                                                                               
Length: 594                                                                    
MAC Receiver: 00h 10h A7h 0Fh 0Ah 0Ch MAC Transmitter: 00h 22h CFh 36h 9Dh 1Ch  
Ethernet: type 2, Type: 08h 00h                                                
Ethernet 2. Ethernet type: IP.                                                  
IPv4 packet received. We are not the addressee.                                
                                                                               
Length: 594                                                                    
MAC Receiver: 00h 10h A7h 0Fh 0Ah 0Ch MAC Transmitter: 00h 22h CFh 36h 9Dh 1Ch  
Ethernet: type 2, Type: 08h 00h                                                
Ethernet 2. Ethernet type: IP.  IP version: 4, IP Header Length: 20 byte        
UDP.                                                                            
UDP Header information:                                                        
+--------------+----------------+                                              
|      67      |      68      | (source port, destination port)                
+-------------------------------+                                              
|      556      |      5338h    | (length, checksum)                            
+-------------------------------+                                              
UDP Bootstrap Protocol (BOOTP) Client, also used by DHCP Client                
                                                                               
Screenshot to Floppy (Thread)                                                  


Einstellungen:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define IP_1   0
#define
IP_2   0
#define
IP_3   0
#define
IP_4   0

// server IP
#define
SIP_1 192
#define
SIP_2 168
#define
SIP_3   1
#define
SIP_4   1

// requested IP
#define
RIP_1 192
#define
RIP_2 168
#define
RIP_3   1
#define
RIP_4  97
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define IP_1 0
#define
IP_2 0
#define
IP_3 0
#define
IP_4 0

// server IP
#define
SIP_1 192
#define
SIP_2 168
#define
SIP_3 1
#define
SIP_4 1

// requested IP
#define
RIP_1 192
#define
RIP_2 168
#define
RIP_3 1
#define
RIP_4 97
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define IP_1   0
#define
IP_2   0
#define
IP_3   0
#define
IP_4   0

// server IP
#define
SIP_1 192
#define
SIP_2 168
#define
SIP_3   1
#define
SIP_4   1

// requested IP
#define
RIP_1 192
#define
RIP_2 168
#define
RIP_3   1
#define
RIP_4  97


Nächste Aufgabe: Funktion DHCP_Debug schreiben
Vorbild (?): http://www.koders.com/c/fid179E56E3C11D80DFE25DD6D819369416B3BF583D.aspx

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:27:24 07.06.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:21:57 07.06.2011   Titel:              Zitieren

version = "0.0.2.85 - Rev: 924"

Wir haben ein erstes DHCP-Paket vom Server. Ein "ACK" auf ein "INFORM".


DHCP_AnalyzeServerMessage:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
--------------------------------------------------------------------------------
Monday, June 06, 2011, 22:44:17   141 s runtime. CPU: 1399 MHz                 \

PrettyOS [Version 0.0.2.85 - Rev: 924]                                          
--------------------------------------------------------------------------------
UDP.                                                                            
UDP Header information:                                                        
+--------------+----------------+                                              
|      67      |      68      | (source port, destination port)                
+-------------------------------+                                              
|      556      |      5338h    | (length, checksum)                            
+-------------------------------+                                              
UDP BOOTP/DHCP Client                                                          
                                                                               
op: 2 htype: 1 hlen: 6 hops: 0 xid: 0AFFE003h secs: 0 flags: 0000h              

cIP: 0.0.0.0                                                                    
yIP: 0.0.0.0                                                                  
sIP: 0.0.0.0                                                                    
gIP: 0.0.0.0                                                                  
                                                                               
MAC: 00h-10h-A7h-0Fh-0Ah-0Ch                                                    
63h 82h 53h 63h 35h 01h 05h 36h 04h C0h A8h 01h 01h 01h 04h FFh FFh FFh 00h 03h
04h C0h A8h 01h 01h 06h 04h C0h A8h 01h 01h 0Fh 0Bh 6Ch 6Fh 63h 61h 6Ch 64h 6Fh
6Dh 61h 69h 6Eh 2Ch 08h 00h 00h 00h 00h 00h 00h 00h 00h FFh 00h 00h 00h 00h 00h
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
--------------------------------------------------------------------------------
Monday, June 06, 2011, 22:44:17 141 s runtime. CPU: 1399 MHz \

PrettyOS [Version 0.0.2.85 - Rev: 924]
--------------------------------------------------------------------------------
UDP.
UDP Header information:
+--------------+----------------+
| 67 | 68 | (source port, destination port)
+-------------------------------+
| 556 | 5338h | (length, checksum)
+-------------------------------+
UDP BOOTP/DHCP Client

op: 2 htype: 1 hlen: 6 hops: 0 xid: 0AFFE003h secs: 0 flags: 0000h

cIP: 0.0.0.0
yIP: 0.0.0.0
sIP: 0.0.0.0
gIP: 0.0.0.0

MAC: 00h-10h-A7h-0Fh-0Ah-0Ch
63h 82h 53h 63h 35h 01h 05h 36h 04h C0h A8h 01h 01h 01h 04h FFh FFh FFh 00h 03h
04h C0h A8h 01h 01h 06h 04h C0h A8h 01h 01h 0Fh 0Bh 6Ch 6Fh 63h 61h 6Ch 64h 6Fh
6Dh 61h 69h 6Eh 2Ch 08h 00h 00h 00h 00h 00h 00h 00h 00h FFh 00h 00h 00h 00h 00h
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
--------------------------------------------------------------------------------
Monday, June 06, 2011, 22:44:17   141 s runtime. CPU: 1399 MHz                 \

PrettyOS [Version 0.0.2.85 - Rev: 924]                                          
--------------------------------------------------------------------------------
UDP.                                                                            
UDP Header information:                                                        
+--------------+----------------+                                              
|      67      |      68      | (source port, destination port)                
+-------------------------------+                                              
|      556      |      5338h    | (length, checksum)                            
+-------------------------------+                                              
UDP BOOTP/DHCP Client                                                          
                                                                               
op: 2 htype: 1 hlen: 6 hops: 0 xid: 0AFFE003h secs: 0 flags: 0000h              

cIP: 0.0.0.0                                                                    
yIP: 0.0.0.0                                                                  
sIP: 0.0.0.0                                                                    
gIP: 0.0.0.0                                                                  
                                                                               
MAC: 00h-10h-A7h-0Fh-0Ah-0Ch                                                    
63h 82h 53h 63h 35h 01h 05h 36h 04h C0h A8h 01h 01h 01h 04h FFh FFh FFh 00h 03h
04h C0h A8h 01h 01h 06h 04h C0h A8h 01h 01h 0Fh 0Bh 6Ch 6Fh 63h 61h 6Ch 64h 6Fh
6Dh 61h 69h 6Eh 2Ch 08h 00h 00h 00h 00h 00h 00h 00h 00h FFh 00h 00h 00h 00h 00h


Übersetzung / Analyse:
0AFFE003 ist die Kennung für das von mir per strg+n gesendete DHCP_INFORM
MAC: 00h-10h-A7h-0Fh-0Ah-0Ch <--- mein test-PC
63h 82h 53h 63h magic

35h 01h 05h: 53dec len:1 data:5
DHCP message type: 5 DHCPACK :)

36h 04h C0h A8h 01h 01h Server Identifier: C0h A8h 01h 01h = 192.168.1.1

01h 04h FFh FFh FFh 00h subnet 255.255.255.0

03h 04h C0h A8h 01h 01h listet alle router auf (s.o., 192.168.1.1)

06h 04h C0h A8h 01h 01h DNS macht er auch ^^

0Fh 0Bh 6Ch 6Fh 63h 61h 6Ch 64h 6Fh 6Dh 61h 69h 6Eh ist der Domain-Name, insgesamt 11 Zeichen lang: "localdomain"

2Ch 08h 00h 00h 00h 00h 00h 00h 00h 00h NetBIOS over TCP/IP name server

FFh happy end!

Dafür benötigen wir eine Funktion. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:53:32 07.06.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:34:21 07.06.2011   Titel:              Zitieren

Version 0.0.2.86:

- gdt.c und descriptor_tables.c zusammengeführt und aufgeräumt
- PageDirectory wird nur noch bei Bedarf gewechselt (d.h. wenn der neue Task ein anderes hat als der Alte)
- task_switch greift nun über Funktionen auf TSS zu und nicht mehr direkt
- delayedInitTasks durch kernel_idleTasks ersetzt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:39:38 07.06.2011   Titel:              Zitieren

version = "0.0.2.87 - Rev: 926"

DHCP Options Analyse begonnen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:39:54 07.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:38:07 07.06.2011   Titel:              Zitieren

version = "0.0.2.88 - Rev: 927"

Ausgabe der daten bei Options verbessert

Screenshot eines DHCP_ACK vom router / dhcp server:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PrettyOS [Version 0.0.2.88 - Rev: 927]                                          
--------------------------------------------------------------------------------
+--------------+----------------+                                              
|      67      |      68      | (source port, destination port)                
+-------------------------------+                                              
|      556      |      8DB2h    | (length, checksum)                            
+-------------------------------+                                              
UDP BOOTP/DHCP Client                                                          
                                                                               
op: 2 htype: 1 hlen: 6 hops: 0 xid: 0AFFE003h secs: 0 flags: 0000h              
cIP: 0.0.0.0 yIP: 0.0.0.0                                                      
sIP: 0.0.0.0 gIP: 0.0.0.0                                                      
MAC: 00h-30h-84h-2Bh-F2h-55h                                                    
MAGIC OK                                                                        
Message Type: 5                                                                
Server IP: 192 168 1 1                                                          
Subnet Mask: 255 255 255 0                                                      
Routers: 192 168 1 1                                                            
DNS IP: 192 168 1 1                                                            
Domain name: localdomain                                                        
NetBIOS over TCP/IP Name Server: 0 0 0 0 0 0 0 0                                
END OF OPTIONS                                                                  
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PrettyOS [Version 0.0.2.88 - Rev: 927]
--------------------------------------------------------------------------------
+--------------+----------------+
| 67 | 68 | (source port, destination port)
+-------------------------------+
| 556 | 8DB2h | (length, checksum)
+-------------------------------+
UDP BOOTP/DHCP Client

op: 2 htype: 1 hlen: 6 hops: 0 xid: 0AFFE003h secs: 0 flags: 0000h
cIP: 0.0.0.0 yIP: 0.0.0.0
sIP: 0.0.0.0 gIP: 0.0.0.0
MAC: 00h-30h-84h-2Bh-F2h-55h
MAGIC OK
Message Type: 5
Server IP: 192 168 1 1
Subnet Mask: 255 255 255 0
Routers: 192 168 1 1
DNS IP: 192 168 1 1
Domain name: localdomain
NetBIOS over TCP/IP Name Server: 0 0 0 0 0 0 0 0
END OF OPTIONS
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PrettyOS [Version 0.0.2.88 - Rev: 927]                                          
--------------------------------------------------------------------------------
+--------------+----------------+                                              
|      67      |      68      | (source port, destination port)                
+-------------------------------+                                              
|      556      |      8DB2h    | (length, checksum)                            
+-------------------------------+                                              
UDP BOOTP/DHCP Client                                                          
                                                                               
op: 2 htype: 1 hlen: 6 hops: 0 xid: 0AFFE003h secs: 0 flags: 0000h              
cIP: 0.0.0.0 yIP: 0.0.0.0                                                      
sIP: 0.0.0.0 gIP: 0.0.0.0                                                      
MAC: 00h-30h-84h-2Bh-F2h-55h                                                    
MAGIC OK                                                                        
Message Type: 5                                                                
Server IP: 192 168 1 1                                                          
Subnet Mask: 255 255 255 0                                                      
Routers: 192 168 1 1                                                            
DNS IP: 192 168 1 1                                                            
Domain name: localdomain                                                        
NetBIOS over TCP/IP Name Server: 0 0 0 0 0 0 0 0                                
END OF OPTIONS                                                                  

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:15:48 07.06.2011   Titel:              Zitieren

version = "0.0.2.89 - Rev: 928"

DHCP OFFER mit qemu (Windows, TAP) erreicht:
http://www.henkessoft.de/OS_Dev/Bilder/rev928_DHCP_OFFER.PNG :) :live:

qemu batch: qemu.exe -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -net user -localtime

Wichtiger Hinweis zum Testen:
Es gibt noch irgendwie Blockaden unter Windows bei TAP. Diese kann man umgehen, indem man andere virtuelle Netzwerkadapter (z.B. anderes TAP, VBox oder VMware Adapter) aktiviert oder deaktiviert. Hierdurch "lösen" sich die aufgestauten DHCP_OFFER-Pakete des qemuservers und sie "purzeln" mehrfach auf den Bildschirm.

Man kann das OFFER nicht via wireshark (neueste Vers. 1.6.0) empfangen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:14:03 07.06.2011, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:23:34 08.06.2011   Titel:              Zitieren

version = "0.0.2.90 - Rev: 929"

Startet nur mit DHCP_REQUEST hoch ohne DHCP_DISCOVER (ergibt DHCP_ACK bei qemu)

DHCP_REQUEST_and_DHCP_ACK: http://www.henkessoft.de/OS_Dev/Bilder/DHCP_REQUEST_and_DHCP_ACK.PNG

Die angezeigte lease time 0 1 81 128 (big endian) ist 86400 sec = 24 * 3600 sec = 1 Tag

Eingebaute Befehle:
strg+n = DHCP_DISCOVER
strg+i = DHCP_INFORM
strg+r = DHCP_REQUEST

Mit einer Änderung (weg von qemu) zum Test-PC und in network.c:

// Try to get an IP by DHCP
DHCP_Discover(adapter);
delay(1000000);
DHCP_Request(adapter);

erhält man in wireshark: http://www.henkessoft.de/OS_Dev/Bilder/rev929a_DHCP_REQUEST_DHCP_NAK.PNG

PrettyOS zeigt das NAK:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PrettyOS [Version 0.0.2.90 - Rev: 929]                                          
--------------------------------------------------------------------------------
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h 22h CFh 36h 9Dh 1Ch  
Ethernet: type 2, Type: 08h 00h                                                
Ethernet 2. Ethernet type: IP.  IP version: 4, IP Header Length: 20 byte        
UDP.                                                                            
UDP Header information:                                                        
+--------------+----------------+                                              
|      67      |      68      | (source port, destination port)                
+-------------------------------+                                              
|      556      |      2ED4h    | (length, checksum)                            
+-------------------------------+                                              
UDP BOOTP/DHCP Client                                                          
                                                                               
op: 2 htype: 1 hlen: 6 hops: 0 xid: 0AFFE002h secs: 0 flags: 0000h              
cIP: 0.0.0.0 yIP: 0.0.0.0                                                      
sIP: 0.0.0.0 gIP: 0.0.0.0                                                      
MAC: 00h-30h-84h-2Bh-F2h-55h                                                    
MAGIC OK                                                                        
Message Type: 6                                                                
Server IP: 192 168 1 1                                                          
END OF OPTIONS                                                                
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PrettyOS [Version 0.0.2.90 - Rev: 929]
--------------------------------------------------------------------------------
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h 22h CFh 36h 9Dh 1Ch
Ethernet: type 2, Type: 08h 00h
Ethernet 2. Ethernet type: IP. IP version: 4, IP Header Length: 20 byte
UDP.
UDP Header information:
+--------------+----------------+
| 67 | 68 | (source port, destination port)
+-------------------------------+
| 556 | 2ED4h | (length, checksum)
+-------------------------------+
UDP BOOTP/DHCP Client

op: 2 htype: 1 hlen: 6 hops: 0 xid: 0AFFE002h secs: 0 flags: 0000h
cIP: 0.0.0.0 yIP: 0.0.0.0
sIP: 0.0.0.0 gIP: 0.0.0.0
MAC: 00h-30h-84h-2Bh-F2h-55h
MAGIC OK
Message Type: 6
Server IP: 192 168 1 1
END OF OPTIONS
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PrettyOS [Version 0.0.2.90 - Rev: 929]                                          
--------------------------------------------------------------------------------
MAC Receiver: FFh FFh FFh FFh FFh FFh MAC Transmitter: 00h 22h CFh 36h 9Dh 1Ch  
Ethernet: type 2, Type: 08h 00h                                                
Ethernet 2. Ethernet type: IP.  IP version: 4, IP Header Length: 20 byte        
UDP.                                                                            
UDP Header information:                                                        
+--------------+----------------+                                              
|      67      |      68      | (source port, destination port)                
+-------------------------------+                                              
|      556      |      2ED4h    | (length, checksum)                            
+-------------------------------+                                              
UDP BOOTP/DHCP Client                                                          
                                                                               
op: 2 htype: 1 hlen: 6 hops: 0 xid: 0AFFE002h secs: 0 flags: 0000h              
cIP: 0.0.0.0 yIP: 0.0.0.0                                                      
sIP: 0.0.0.0 gIP: 0.0.0.0                                                      
MAC: 00h-30h-84h-2Bh-F2h-55h                                                    
MAGIC OK                                                                        
Message Type: 6                                                                
Server IP: 192 168 1 1                                                          
END OF OPTIONS                                                                

Request mit XID: 0AFFE002 erhält ein DHCP_NAK:
Zitat:
1 = DHCP Discover message (DHCPDiscover).

2 = DHCP Offer message (DHCPOffer).

3 = DHCP Request message (DHCPRequest).

4 = DHCP Decline message (DHCPDecline).

5 = DHCP Acknowledgment message (DHCPAck).

6 = DHCP Negative Acknowledgment message (DHCPNak).

7 = DHCP Release message (DHCPRelease).

8 = DHCP Informational message (DHCPInform).

Dies ist in diesem Fall klar, da diese MAC bereits unter einer anderen IP im DHCP lease des Servers eingetragen ist.

Nun haben wir bereits mit Message Type 1, 2, 3, 5, 6, 8 experimentiert. Fehlt nur noch DHCPRelease und DHCPDecline. ;)


Nun sollte ein Ablauf etwa wie hier aufgebaut werden: http://www.tcpipguide.com/free/diagrams/dhcpfsm.png

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:34:41 08.06.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:44:32 10.06.2011   Titel:              Zitieren

version = "0.0.2.91 - Rev: 930"

DHCP_State eingebaut:

network.c:
C/C++ Code:
    // Try to get an IP by DHCP
    adapter->DHCP_State  = START;
    DHCP_Discover(adapter);  
C/C++ Code:
// Try to get an IP by DHCP
adapter->DHCP_State = START;
DHCP_Discover(adapter);
C/C++ Code:
    // Try to get an IP by DHCP
    adapter->DHCP_State  = START;
    DHCP_Discover(adapter);  

dhcp.c:
C/C++ Code:
    DHCP_AnalyzeOptions(adapter, dhcp->options);
    if(adapter->DHCP_State == OFFER) { printf("\n >>> PrettyOS got a DHCP OFFER. <<<"); DHCP_Request(adapter);     }
    if(adapter->DHCP_State == ACK)   { printf("\n >>> PrettyOS got a DHCP ACK.   <<<"); useDHCP_IP(adapter, dhcp); }
    if(adapter->DHCP_State == NAK)   { printf("\n >>> DHCP was not successful (NAK). <<<");                        }
C/C++ Code:
DHCP_AnalyzeOptions(adapter, dhcp->options);
if(adapter->DHCP_State == OFFER) { printf("\n >>> PrettyOS got a DHCP OFFER. <<<"); DHCP_Request(adapter); }
if(adapter->DHCP_State == ACK) { printf("\n >>> PrettyOS got a DHCP ACK. <<<"); useDHCP_IP(adapter, dhcp); }
if(adapter->DHCP_State == NAK) { printf("\n >>> DHCP was not successful (NAK). <<<"); }
C/C++ Code:
    DHCP_AnalyzeOptions(adapter, dhcp->options);
    if(adapter->DHCP_State == OFFER) { printf("\n >>> PrettyOS got a DHCP OFFER. <<<"); DHCP_Request(adapter);     }
    if(adapter->DHCP_State == ACK)   { printf("\n >>> PrettyOS got a DHCP ACK.   <<<"); useDHCP_IP(adapter, dhcp); }
    if(adapter->DHCP_State == NAK)   { printf("\n >>> DHCP was not successful (NAK). <<<");                        }


C/C++ Code:
static void useDHCP_IP(network_adapter_t* adapter, dhcp_t* dhcp)
{
    for(uint8_t i = 0; i < 4; i++)
        adapter->IP_address[i] = dhcp->yiaddr[i];    
}
C/C++ Code:
static void useDHCP_IP(network_adapter_t* adapter, dhcp_t* dhcp)
{
for(uint8_t i = 0; i < 4; i++)
adapter->IP_address[i] = dhcp->yiaddr[i];
}
C/C++ Code:
static void useDHCP_IP(network_adapter_t* adapter, dhcp_t* dhcp)
{
    for(uint8_t i = 0; i < 4; i++)
        adapter->IP_address[i] = dhcp->yiaddr[i];    
}


Discover - Offer - Request - ACK (Erfolgreicher Hardwaretest mit Testrechner)

In der DHCP-Lease-Übersicht des Router/DHCP-Servers wurde der Testrechner mit seiner Wunsch-IP hinzugefügt. Wireshark auf einem Rechner im LAN zeigt leider nur die Anfragen von PrettyOS, aber nicht die Antworten des DHCP-Servers.

Damit ist DHCP in grundlegender Form nun in PrettyOS implementiert.

Mit Qemu/TAP ist das Aufzeigen der ganzen Kette unter Windows bisher nicht gelungen.

PS: In keyboard.c wurde DHCP_Discover(...) und DHCP_Request(...) entfernt. strg+n sendet wie zuvor ein UDP-Paket mit aufgesetztem Freitext für UDP-Experimente. strg+i sendet DHCP_Inform.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:10:21 11.06.2011, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:57:26 11.06.2011   Titel:              Zitieren

version = "0.0.2.92 - Rev: 931"

- DHCP Release ergänzt, z.Z. strg+f (gibt bei meinem Router allerdings noch nicht frei)
- Lease Time Daten auch in Std. angezeigt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:22:55 11.06.2011   Titel:              Zitieren

Version 0.0.2.93:

- Initialisierungsreihenfolge verbessert: U.a. wird Video früher installiert (-> je eher, desto besser. Ermöglicht frühere Debugausgaben).
- printf unterstützt nun %M und %I für die Ausgabe von IP und MAC Adressen. Angewendet im Netzwerkcode
- Strg+A resultiert nicht mehr in #PF, wenn keine Netzwerkkarte vorhanden ist
- Code aufgeräumt
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:36:53 11.06.2011   Titel:              Zitieren

Version 0.0.2.94:

- Analyse der DHCP-Option-Bytes vereinfacht
- c/s/vs/v/printf geben nun Anzahl geschriebener Zeichen zurück
- i2Hex (und damit auch c/s/vs/v/printf) gibt kein h mehr am Ende hexadezimaler Zahlen aus
- Ausgabe der ARP-Tabelle verbessert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:30:56 11.06.2011   Titel:              Zitieren

version = "0.0.2.95 - Rev: 934"

SIP ersatzlos gestrichen

Problem: Zusammenhang netzwork adapter und IP geht verloren

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:59:41 11.06.2011   Titel:              Zitieren

version = "0.0.2.96 - Rev: 935"

Fehler bei ACK auf DHCP_Inform korrigiert. Your IP (dhcp->yiaddr) wird nur übernommen, wenn ungleich 0.0.0.0:
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
static void useDHCP_IP(network_adapter_t* adapter, dhcp_t* dhcp)
{
    if (dhcp->yiaddr[0] || dhcp->yiaddr[1] || dhcp->yiaddr[2] || dhcp->yiaddr[3])
    {
        for(uint8_t i = 0; i < 4; i++)
            adapter->IP_address[i] = dhcp->yiaddr[i];
    }
}
C/C++ Code:
1
2
3
4
5
6
7
8
static void useDHCP_IP(network_adapter_t* adapter, dhcp_t* dhcp)
{
if (dhcp->yiaddr[0] || dhcp->yiaddr[1] || dhcp->yiaddr[2] || dhcp->yiaddr[3])
{
for(uint8_t i = 0; i < 4; i++)
adapter->IP_address[i] = dhcp->yiaddr[i];
}
}
C/C++ Code:
1
2
3
4
5
6
7
8
static void useDHCP_IP(network_adapter_t* adapter, dhcp_t* dhcp)
{
    if (dhcp->yiaddr[0] || dhcp->yiaddr[1] || dhcp->yiaddr[2] || dhcp->yiaddr[3])
    {
        for(uint8_t i = 0; i < 4; i++)
            adapter->IP_address[i] = dhcp->yiaddr[i];
    }
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:00:04 12.06.2011   Titel:              Zitieren

version = "0.0.2.97 - Rev: 936"

Endlich habe ich einen Trick gefunden, wie man auch die Antworten des DHCP-Servers in wireshark von einem anderen PC im LAN beobachten kann. Man muss bei den Anfragen die Forderung stellen, dass die Antwort an alle (BROADCAST) gesendet wird.

Beweis-Foto: http://www.henkessoft.de/OS_Dev/Bilder/rev936.PNG :live:

Nachdem dieser Ablauf nun eindeutig demonstriert werden konnte, bitte ich um Reproduktion auch an anderer Stelle. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:10:47 12.06.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:50:44 12.06.2011   Titel:              Zitieren

Version 0.0.2.98:

- Unterstützung von Parametern beim Programmstart
- Hello-Userprogramm zeigt übergebene Parameter an
- Verbessertes makefile für other_userprogs
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:12:32 12.06.2011   Titel:              Zitieren

Tests von Cuervo mit der vorhergehenden Vesrion:

- DHCP_Release funktioniert. Wenn der DHCP-Server will, wird es als abgelaufen angezeigt
- Wir müssen das Angebot aus OFFER verwenden für REQUEST anstelle der konstanten RIP (das kann der Server anders sehen ^^) aus network.h
- HOST NAME angeben bei den options

Fotos (Cuervo): http://prettyos.fanofblitzbasic.de/PrettyNWPics.zip

MrX: deine Version produziert einen #PF F000EF6F eip: 115391

ckernel.c: shell auskommentiert, "executeFile("1:/ttt.ELF", 0, 0); // TEST" eingefügt, klappt bestens. Bitte in Ordnung bringen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:57:53 12.06.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:27:40 12.06.2011   Titel:              Zitieren

version = "0.0.2.99 - Rev: 938"

shell auskommentiert, ttt wird testweise ausgeführt.

Netzwerk: Hostname "PrettyOS" eingeführt bei DHCP, DHCP_Request übernimmt IP aus DHCP_Offer.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:08:50 12.06.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:07:56 12.06.2011   Titel:              Zitieren

Version 0.0.2.100:

- cpu.c: Es wird überprüft, ob cpuid unterstützt wird; Funktionen zum Lesen und Schreiben des MSR implementiert
- memory.txt geupdated und erweitert
- Bugfix/Hack: Shell nimmt nun argv/argc-Parameter beim Start
- Projektmappen: Verbesserte Intellisense-Kompatibilität durch Dummy-Header VCcompatibility.h und verbesserte Includepfad-Einstellungen
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:56:31 12.06.2011   Titel:              Zitieren

Version 0.0.2.101:

- Neuer Bugfix-Versuch. argc/argv nun via user stack übergeben.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:52:40 12.06.2011   Titel:              Zitieren

Bitte darauf achten, dass bei den cross-tools die enthaltenen binutils, darunter auch ld.exe nicht mehr zu einem lauffähigen produkt führen (#PF).

MrX wird demnächst ein neues bundle für die crosstools hochladen. :warning:

http://kloke-witten.dyndns.org/~philipp/bin.zip <--- wenn es eilt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:55:55 12.06.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:57:30 13.06.2011   Titel:              Zitieren

Version 0.0.2.102:

- Parameterübergabe wieder über eax/ecx
- Fehlerbehandlung im Floppytreiber verbessert
- Konsolen überarbeitet (Stabilität, Code vereinfacht)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:28:37 13.06.2011   Titel:              Zitieren

version = "0.0.2.103 - Rev: 942"

TCP weiter ausgebaut:
- Senden klappt
- Checksum (UDP, TCP) bewirkt #PF
- 3-way-handshake: SYN kann bereits mit SYN ACK beantwortet werden

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:46:05 13.06.2011   Titel:              Zitieren

version = "0.0.2.105 - Rev: 944" (beim nächsten Mal bitte stehen lassen, wurde offenbar eine übersprungen)

checksum für UDP: 0 (wegen DHCP)
checksum für TCP: aktiviert, wireshark validiert diese aber als "incorrect" :warning:
Code:
Checksum: 0x7754 [incorrect, should be 0xba47 (maybe caused by "TCP checksum offload"?)]
Code:
Checksum: 0x7754 [incorrect, should be 0xba47 (maybe caused by "TCP checksum offload"?)]
Code:
Checksum: 0x7754 [incorrect, should be 0xba47 (maybe caused by "TCP checksum offload"?)]

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:54:31 14.06.2011, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:58:36 13.06.2011   Titel:              Zitieren

version = "0.0.2.105 - Rev: 944"

Parameter "protocol" ergänzt:
uint16_t udptcpCalculateChecksum(void* p, size_t length, uint8_t sourceIp[4], uint8_t destinationIp[4], uint16_t protocol)

Checksum falsch.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:55:45 14.06.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:20:45 14.06.2011   Titel:              Zitieren

version = "0.0.2.106 - Rev: 945"

- TCP-Checksum noch nicht korrekt
- internetChecksum (Fkt. wird bereits bei ip und icmp eingesetzt) mit verwendet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:56:29 14.06.2011, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:55:23 14.06.2011   Titel:              Zitieren

version = "0.0.2.107 - Rev: 946"

- tcp checksum noch nicht korrekt, aber schon nahe dran ^^

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:57:16 14.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:31:19 14.06.2011   Titel:              Zitieren

version = "0.0.2.108 - Rev: 947"

- tcp checksum noch falsch
- pseudoheader byteweise aufgebaut für besseren Überblick

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, uint8_t srcIP[4], uint8_t destIP[4], uint16_t protocol)
{
    uint32_t pseudoHeaderChecksum = 0;
    uint8_t  header[12]; // Pseudo header
    uint8_t* data = header;
    uint8_t  count = 12; // pseudo header contains 12 byte

    for (uint8_t i=0; i<4; i++)
    {
        header[i] = srcIP[i];
    }
    for (uint8_t i=4; i<8; i++)
    {
        header[i] = destIP[i-4];
    }
   
    header[8]  = 0;
    header[9]  = protocol;
    header[10] = length & 0xFF;
    header[11] = (length >> 8) & 0xFF;
   
    while (count > 1)
    {
        // pseudo header contains 6 WORD
        pseudoHeaderChecksum += (data[0] << 8) | data[1]; // Big Endian
        data   += 2;
        count  -= 2;
    }

    return internetChecksum(p, length, pseudoHeaderChecksum); // util.c
}

// compute internet checksum for "count" bytes beginning at location "addr"
uint16_t internetChecksum(void* addr, size_t count, uint32_t pseudoHeaderChecksum)
{
    uint32_t sum  = pseudoHeaderChecksum;
    uint8_t* data = addr;

    while (count > 1) // inner loop
    {
        sum   += (data[0] << 8) | data[1]; // Big Endian
        data  += 2;
        count -= 2;
    }

    if (count > 0) // add left-over byte, if any
    {
        sum += data[0] << 8;
    }

    while (sum >> 16) // fold 32-bit sum to 16 bits
    {
        sum = (sum & 0xFFFF) + (sum >> 16);
    }

    return ~sum & 0xFFFF;
}

void tcpSend(network_adapter_t* adapter, void* data, uint32_t length, uint16_t srcPort, uint8_t srcIP[4], uint16_t destPort, uint8_t destIP[4], tcpFlags flags, uint32_t seqNumber, uint32_t ackNumber)
{
//...
    packet->checksum = 0; // for checksum calculation
    packet->checksum = htons(udptcpCalculateChecksum((void*)packet, length + sizeof(tcpPacket_t), srcIP, destIP, 6));

    ipv4_send(adapter, packet, length + sizeof(tcpPacket_t), destIP, 6);
//...
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, uint8_t srcIP[4], uint8_t destIP[4], uint16_t protocol)
{
uint32_t pseudoHeaderChecksum = 0;
uint8_t header[12]; // Pseudo header
uint8_t* data = header;
uint8_t count = 12; // pseudo header contains 12 byte

for (uint8_t i=0; i<4; i++)
{
header[i] = srcIP[i];
}
for (uint8_t i=4; i<8; i++)
{
header[i] = destIP[i-4];
}

header[8] = 0;
header[9] = protocol;
header[10] = length & 0xFF;
header[11] = (length >> 8) & 0xFF;

while (count > 1)
{
// pseudo header contains 6 WORD
pseudoHeaderChecksum += (data[0] << 8) | data[1]; // Big Endian
data += 2;
count -= 2;
}

return internetChecksum(p, length, pseudoHeaderChecksum); // util.c
}

// compute internet checksum for "count" bytes beginning at location "addr"
uint16_t internetChecksum(void* addr, size_t count, uint32_t pseudoHeaderChecksum)
{
uint32_t sum = pseudoHeaderChecksum;
uint8_t* data = addr;

while (count > 1) // inner loop
{
sum += (data[0] << 8) | data[1]; // Big Endian
data += 2;
count -= 2;
}

if (count > 0) // add left-over byte, if any
{
sum += data[0] << 8;
}

while (sum >> 16) // fold 32-bit sum to 16 bits
{
sum = (sum & 0xFFFF) + (sum >> 16);
}

return ~sum & 0xFFFF;
}

void tcpSend(network_adapter_t* adapter, void* data, uint32_t length, uint16_t srcPort, uint8_t srcIP[4], uint16_t destPort, uint8_t destIP[4], tcpFlags flags, uint32_t seqNumber, uint32_t ackNumber)
{
//...
packet->checksum = 0; // for checksum calculation
packet->checksum = htons(udptcpCalculateChecksum((void*)packet, length + sizeof(tcpPacket_t), srcIP, destIP, 6));

ipv4_send(adapter, packet, length + sizeof(tcpPacket_t), destIP, 6);
//...
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, uint8_t srcIP[4], uint8_t destIP[4], uint16_t protocol)
{
    uint32_t pseudoHeaderChecksum = 0;
    uint8_t  header[12]; // Pseudo header
    uint8_t* data = header;
    uint8_t  count = 12; // pseudo header contains 12 byte

    for (uint8_t i=0; i<4; i++)
    {
        header[i] = srcIP[i];
    }
    for (uint8_t i=4; i<8; i++)
    {
        header[i] = destIP[i-4];
    }
   
    header[8]  = 0;
    header[9]  = protocol;
    header[10] = length & 0xFF;
    header[11] = (length >> 8) & 0xFF;
   
    while (count > 1)
    {
        // pseudo header contains 6 WORD
        pseudoHeaderChecksum += (data[0] << 8) | data[1]; // Big Endian
        data   += 2;
        count  -= 2;
    }

    return internetChecksum(p, length, pseudoHeaderChecksum); // util.c
}

// compute internet checksum for "count" bytes beginning at location "addr"
uint16_t internetChecksum(void* addr, size_t count, uint32_t pseudoHeaderChecksum)
{
    uint32_t sum  = pseudoHeaderChecksum;
    uint8_t* data = addr;

    while (count > 1) // inner loop
    {
        sum   += (data[0] << 8) | data[1]; // Big Endian
        data  += 2;
        count -= 2;
    }

    if (count > 0) // add left-over byte, if any
    {
        sum += data[0] << 8;
    }

    while (sum >> 16) // fold 32-bit sum to 16 bits
    {
        sum = (sum & 0xFFFF) + (sum >> 16);
    }

    return ~sum & 0xFFFF;
}

void tcpSend(network_adapter_t* adapter, void* data, uint32_t length, uint16_t srcPort, uint8_t srcIP[4], uint16_t destPort, uint8_t destIP[4], tcpFlags flags, uint32_t seqNumber, uint32_t ackNumber)
{
//...
    packet->checksum = 0; // for checksum calculation
    packet->checksum = htons(udptcpCalculateChecksum((void*)packet, length + sizeof(tcpPacket_t), srcIP, destIP, 6));

    ipv4_send(adapter, packet, length + sizeof(tcpPacket_t), destIP, 6);
//...
}



Wenn man header[8] ... [11] dreht, wird die differenz kleiner.

Hier ein Hexpaket:

0013d41127a50010a70f0a0c0800450000280000400080067707c0a80161c0a8011700170607000000001cb30fc95012fffff3750000000000000000
Checksum: 0xf375 [incorrect, should be 0xf96f (maybe caused by "TCP checksum offload"?)]

Hex-Code:
IP-Paket: 450000280000400080067707c0a80161c0a80117
TCP-Paket: 00170607000000001cb30fc95012fffff3750000

Internet Protocol Version 4, Src: 192.168.1.97 (192.168.1.97), Dst: 192.168.1.23 (192.168.1.23)

Transmission Control Protocol, Src Port: telnet (23), Dst Port: simba-cs (1543), Seq: 0, Ack: 1, Len: 0
(Len ist hier die Datenlänge)

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
chat:
<ehenkes>TCP-Paket: 00170607000000001cb30fc95012fffff3750000
<ehenkes>Src: 192.168.1.97 (192.168.1.97), Dst: 192.168.1.23 (192.168.1.23)
<ehenkes>raus kommen muss: 0xf96f
<ehenkes>daten gibts keine, reiner header
<ehenkes>udptcpCalculateChecksum(void* p, uint16_t length, uint8_t srcIP[4], uint8_t destIP[4], uint16_t protocol)
<ehenkes>p zeigt auf den tcp-header
<ehenkes>length = sizeof(tcp_header)
<ehenkes>IPs sind klar
<ehenkes>MrX: gut so?
<MrX>ja
<ehenkes>Header length: 20 bytes
<ehenkes>des TCP headers
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
chat:
<ehenkes>TCP-Paket: 00170607000000001cb30fc95012fffff3750000
<ehenkes>Src: 192.168.1.97 (192.168.1.97), Dst: 192.168.1.23 (192.168.1.23)
<ehenkes>raus kommen muss: 0xf96f
<ehenkes>daten gibts keine, reiner header
<ehenkes>udptcpCalculateChecksum(void* p, uint16_t length, uint8_t srcIP[4], uint8_t destIP[4], uint16_t protocol)
<ehenkes>p zeigt auf den tcp-header
<ehenkes>length = sizeof(tcp_header)
<ehenkes>IPs sind klar
<ehenkes>MrX: gut so?
<MrX>ja
<ehenkes>Header length: 20 bytes
<ehenkes>des TCP headers
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
chat:
<ehenkes>TCP-Paket: 00170607000000001cb30fc95012fffff3750000
<ehenkes>Src: 192.168.1.97 (192.168.1.97), Dst: 192.168.1.23 (192.168.1.23)
<ehenkes>raus kommen muss: 0xf96f
<ehenkes>daten gibts keine, reiner header
<ehenkes>udptcpCalculateChecksum(void* p, uint16_t length, uint8_t srcIP[4], uint8_t destIP[4], uint16_t protocol)
<ehenkes>p zeigt auf den tcp-header
<ehenkes>length = sizeof(tcp_header)
<ehenkes>IPs sind klar
<ehenkes>MrX: gut so?
<MrX>ja
<ehenkes>Header length: 20 bytes
<ehenkes>des TCP headers


Weitere Pakete: (IPs gleich)
Code:
<ehenkes>0017062800000000c56a32495012ffff007827a5    Checksum: 0x0078 [incorrect, should be 0x0672 (maybe caused by "TCP checksum offload"?)]

<ehenkes>0017062900000000591dc44a5012fffffc630604  Checksum: 0xfc63 [incorrect, should be 0x025e (maybe caused by "TCP checksum offload"?)]
Code:
<ehenkes>0017062800000000c56a32495012ffff007827a5 Checksum: 0x0078 [incorrect, should be 0x0672 (maybe caused by "TCP checksum offload"?)]

<ehenkes>0017062900000000591dc44a5012fffffc630604 Checksum: 0xfc63 [incorrect, should be 0x025e (maybe caused by "TCP checksum offload"?)]
Code:
<ehenkes>0017062800000000c56a32495012ffff007827a5    Checksum: 0x0078 [incorrect, should be 0x0672 (maybe caused by "TCP checksum offload"?)]

<ehenkes>0017062900000000591dc44a5012fffffc630604  Checksum: 0xfc63 [incorrect, should be 0x025e (maybe caused by "TCP checksum offload"?)]


erzeugt mit:
C/C++ Code:
header[11]  = 0;
    header[10]  = protocol;
    header[9]   = length & 0xFF;
    header[8]   = (length >> 8) & 0xFF;
C/C++ Code:
header[11] = 0;
header[10] = protocol;
header[9] = length & 0xFF;
header[8] = (length >> 8) & 0xFF;
C/C++ Code:
header[11]  = 0;
    header[10]  = protocol;
    header[9]   = length & 0xFF;
    header[8]   = (length >> 8) & 0xFF;


Nach Simulation:
<MrX>Übrigens weiß ich, wie Du deine Variante lauffähig kriegst.
C/C++ Code:
header[8]  = 0;
header[9]  = protocol;
header[11] = length & 0xFF;
header[10] = (length >> 8) & 0xFF;
C/C++ Code:
header[8] = 0;
header[9] = protocol;
header[11] = length & 0xFF;
header[10] = (length >> 8) & 0xFF;
C/C++ Code:
header[8]  = 0;
header[9]  = protocol;
header[11] = length & 0xFF;
header[10] = (length >> 8) & 0xFF;

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:42:40 14.06.2011, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:46:07 14.06.2011   Titel:              Zitieren

version = "0.0.2.109 - Rev: 948"

MEILENSTEIN: http://www.c-plusplus.de/forum/p2078201#2078201
Erfolg! (thx to Mrx for simulating TCP checksum) :) :live:

tcp.h:
C/C++ Code:
1
2
3
4
5
6
7
8
1
2
3
4
5
6
7
8
typedef struct
{
        uint8_t src[4];
        uint8_t dest[4];
        uint8_t res;
        uint8_t prot;
        uint16_t length;
} __attribute__((packed)) tcpPseudoHeader_t;
C/C++ Code:
1
2
3
4
5
6
7
8
typedef struct
{
uint8_t src[4];
uint8_t dest[4];
uint8_t res;
uint8_t prot;
uint16_t length;
} __attribute__((packed)) tcpPseudoHeader_t;
C/C++ Code:
1
2
3
4
5
6
7
8
typedef struct
{
        uint8_t src[4];
        uint8_t dest[4];
        uint8_t res;
        uint8_t prot;
        uint16_t length;
} __attribute__((packed)) tcpPseudoHeader_t;


network.c:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, uint8_t srcIP[4], uint8_t destIP[4], uint16_t protocol)
{
    tcpPseudoHeader_t pseudo;
    for (uint8_t i=0; i<4; i++)
    {
        pseudo.src[i] = srcIP[i];
        pseudo.dest[i] = destIP[i];
    }
    pseudo.length = htons(length);
    pseudo.prot = protocol;
    pseudo.res = 0;
 
    uint32_t pseudoHeaderChecksum = 0;
    uint8_t  count = 12; // pseudo header contains 12 byte
 
    uint8_t* data = (uint8_t*)&pseudo;  
 
    while (count > 1)
    {
        // pseudo header contains 6 WORD
        pseudoHeaderChecksum += (data[0] << 8) | data[1]; // Big Endian
        data   += 2;
        count  -= 2;
    }
 
    return internetChecksum(p, length, pseudoHeaderChecksum); // util.c
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, uint8_t srcIP[4], uint8_t destIP[4], uint16_t protocol)
{
tcpPseudoHeader_t pseudo;
for (uint8_t i=0; i<4; i++)
{
pseudo.src[i] = srcIP[i];
pseudo.dest[i] = destIP[i];
}
pseudo.length = htons(length);
pseudo.prot = protocol;
pseudo.res = 0;

uint32_t pseudoHeaderChecksum = 0;
uint8_t count = 12; // pseudo header contains 12 byte

uint8_t* data = (uint8_t*)&pseudo;

while (count > 1)
{
// pseudo header contains 6 WORD
pseudoHeaderChecksum += (data[0] << 8) | data[1]; // Big Endian
data += 2;
count -= 2;
}

return internetChecksum(p, length, pseudoHeaderChecksum); // util.c
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, uint8_t srcIP[4], uint8_t destIP[4], uint16_t protocol)
{
    tcpPseudoHeader_t pseudo;
    for (uint8_t i=0; i<4; i++)
    {
        pseudo.src[i] = srcIP[i];
        pseudo.dest[i] = destIP[i];
    }
    pseudo.length = htons(length);
    pseudo.prot = protocol;
    pseudo.res = 0;
 
    uint32_t pseudoHeaderChecksum = 0;
    uint8_t  count = 12; // pseudo header contains 12 byte
 
    uint8_t* data = (uint8_t*)&pseudo;  
 
    while (count > 1)
    {
        // pseudo header contains 6 WORD
        pseudoHeaderChecksum += (data[0] << 8) | data[1]; // Big Endian
        data   += 2;
        count  -= 2;
    }
 
    return internetChecksum(p, length, pseudoHeaderChecksum); // util.c
}


... und schon geht der Weg zum ESTABLISHED:

Zitat:
12 14.042894 192.168.1.23 192.168.1.97 TCP 62 shockwave > telnet [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1
13 14.052667 192.168.1.97 192.168.1.23 TCP 60 telnet > shockwave [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0
14 14.052691 192.168.1.23 192.168.1.97 TCP 54 shockwave > telnet [ACK] Seq=1 Ack=1 Win=65535 Len=0


:arrow: syn - syn ack - ack (TCP 3-way-handshake) :live:

Mit dieser Version kann man erste versuche bei TCP/IP unternehmen, z.B. TELNET nutzen: http://www.henkessoft.de/OS_Dev/Bilder/rev.948_TCP_TELNET.PNG

http://www.manpagez.com/man/1/telnet/ <--- Kommandos

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:45:17 15.06.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:33:08 15.06.2011   Titel:              Zitieren

rev. 949:

TCP weiter ausgebaut, vor allem werden nun die Transition States angezeigt:
(CLOSED -->) LISTEN --> SYN_RECEIVED --> ESTABLISHED

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Length: 66 Rcv: 00-10-A7-0F-0A-0C  Transm.: 00-13-D4-11-27-A5                  
Ethernet 2. Prot. type: IP.  IP version: 4, IP Header Length: 20 byte          
TCP: src port: 1232  dest port: 23 URG: 0 ACK: 0 PSH: 0 RST: 0 SYN: 1 FIN: 0    
TCP prev. state: CLOSED                                                        
TCP set from CLOSED to LISTEN.                                                  
TCP curr. state: LISTEN                                                        
                                                                               
                                                                               
Length: 66 Rcv: 00-10-A7-0F-0A-0C  Transm.: 00-13-D4-11-27-A5                  
Ethernet 2. Prot. type: IP.  IP version: 4, IP Header Length: 20 byte          
TCP: src port: 1232  dest port: 23 URG: 0 ACK: 0 PSH: 0 RST: 0 SYN: 1 FIN: 0    
TCP prev. state: LISTEN                                                        
                                                                               
EthernetSend: length: 54.                                                      
                                                                               
>>> Transmission starts <<<                                                    
Physical Address of Tx Buffer = 014051D8h                                      
packet sent.                                                                    
TCP curr. state: SYN_RECEIVED                                                  
                                                                               
                                                                               
Length: 64 Rcv: 00-10-A7-0F-0A-0C  Transm.: 00-13-D4-11-27-A5                  
Ethernet 2. Prot. type: IP.  IP version: 4, IP Header Length: 20 byte          
TCP: src port: 1232  dest port: 23 URG: 0 ACK: 1 PSH: 0 RST: 0 SYN: 0 FIN: 0    
TCP prev. state: SYN_RECEIVED                                                  
TCP curr. state: ESTABLISHED                                                    
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Length: 66 Rcv: 00-10-A7-0F-0A-0C Transm.: 00-13-D4-11-27-A5
Ethernet 2. Prot. type: IP. IP version: 4, IP Header Length: 20 byte
TCP: src port: 1232 dest port: 23 URG: 0 ACK: 0 PSH: 0 RST: 0 SYN: 1 FIN: 0
TCP prev. state: CLOSED
TCP set from CLOSED to LISTEN.
TCP curr. state: LISTEN


Length: 66 Rcv: 00-10-A7-0F-0A-0C Transm.: 00-13-D4-11-27-A5
Ethernet 2. Prot. type: IP. IP version: 4, IP Header Length: 20 byte
TCP: src port: 1232 dest port: 23 URG: 0 ACK: 0 PSH: 0 RST: 0 SYN: 1 FIN: 0
TCP prev. state: LISTEN

EthernetSend: length: 54.

>>> Transmission starts <<<
Physical Address of Tx Buffer = 014051D8h
packet sent.
TCP curr. state: SYN_RECEIVED


Length: 64 Rcv: 00-10-A7-0F-0A-0C Transm.: 00-13-D4-11-27-A5
Ethernet 2. Prot. type: IP. IP version: 4, IP Header Length: 20 byte
TCP: src port: 1232 dest port: 23 URG: 0 ACK: 1 PSH: 0 RST: 0 SYN: 0 FIN: 0
TCP prev. state: SYN_RECEIVED
TCP curr. state: ESTABLISHED
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Length: 66 Rcv: 00-10-A7-0F-0A-0C  Transm.: 00-13-D4-11-27-A5                  
Ethernet 2. Prot. type: IP.  IP version: 4, IP Header Length: 20 byte          
TCP: src port: 1232  dest port: 23 URG: 0 ACK: 0 PSH: 0 RST: 0 SYN: 1 FIN: 0    
TCP prev. state: CLOSED                                                        
TCP set from CLOSED to LISTEN.                                                  
TCP curr. state: LISTEN                                                        
                                                                               
                                                                               
Length: 66 Rcv: 00-10-A7-0F-0A-0C  Transm.: 00-13-D4-11-27-A5                  
Ethernet 2. Prot. type: IP.  IP version: 4, IP Header Length: 20 byte          
TCP: src port: 1232  dest port: 23 URG: 0 ACK: 0 PSH: 0 RST: 0 SYN: 1 FIN: 0    
TCP prev. state: LISTEN                                                        
                                                                               
EthernetSend: length: 54.                                                      
                                                                               
>>> Transmission starts <<<                                                    
Physical Address of Tx Buffer = 014051D8h                                      
packet sent.                                                                    
TCP curr. state: SYN_RECEIVED                                                  
                                                                               
                                                                               
Length: 64 Rcv: 00-10-A7-0F-0A-0C  Transm.: 00-13-D4-11-27-A5                  
Ethernet 2. Prot. type: IP.  IP version: 4, IP Header Length: 20 byte          
TCP: src port: 1232  dest port: 23 URG: 0 ACK: 1 PSH: 0 RST: 0 SYN: 0 FIN: 0    
TCP prev. state: SYN_RECEIVED                                                  
TCP curr. state: ESTABLISHED                                                    


Da wir mit CLOSED starten und noch keine sockets bauen, müssen wir den Übergang zu LISTEN noch etwas künstlich durchführen:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void tcpListen(network_adapter_t* adapter)
{
    adapter->TCP_PrevState = adapter->TCP_CurrState;
    adapter->TCP_CurrState = LISTEN;

    // TODO: more action needed?
}

Erst ab dort geht es geregelt weiter:

[cpp]if (tcp->SYN && !tcp->ACK) // SYN
    {
        adapter->TCP_PrevState = adapter->TCP_CurrState;
        if (adapter->TCP_CurrState == CLOSED)
        {  
            printf("TCP set from CLOSED to LISTEN.\n");
            tcpListen(adapter);
        }
        else if (adapter->TCP_CurrState == LISTEN)
        {
            tcpSend(adapter, 0, 0, htons(tcp->destPort), adapter->IP_address, htons(tcp->sourcePort), transmittingIP, SYN_ACK_FLAG, 0 /*seqNumber*/ , tcp->sequenceNumber+htonl(1) /*ackNumber*/);
            adapter->TCP_CurrState = SYN_RECEIVED;
        }
//...
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void tcpListen(network_adapter_t* adapter)
{
adapter->TCP_PrevState = adapter->TCP_CurrState;
adapter->TCP_CurrState = LISTEN;

// TODO: more action needed?
}

Erst ab dort geht es geregelt weiter:

[cpp]if (tcp->SYN && !tcp->ACK) // SYN
{
adapter->TCP_PrevState = adapter->TCP_CurrState;
if (adapter->TCP_CurrState == CLOSED)
{
printf("TCP set from CLOSED to LISTEN.\n");
tcpListen(adapter);
}
else if (adapter->TCP_CurrState == LISTEN)
{
tcpSend(adapter, 0, 0, htons(tcp->destPort), adapter->IP_address, htons(tcp->sourcePort), transmittingIP, SYN_ACK_FLAG, 0 /*seqNumber*/ , tcp->sequenceNumber+htonl(1) /*ackNumber*/);
adapter->TCP_CurrState = SYN_RECEIVED;
}
//...
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void tcpListen(network_adapter_t* adapter)
{
    adapter->TCP_PrevState = adapter->TCP_CurrState;
    adapter->TCP_CurrState = LISTEN;

    // TODO: more action needed?
}

Erst ab dort geht es geregelt weiter:

[cpp]if (tcp->SYN && !tcp->ACK) // SYN
    {
        adapter->TCP_PrevState = adapter->TCP_CurrState;
        if (adapter->TCP_CurrState == CLOSED)
        {  
            printf("TCP set from CLOSED to LISTEN.\n");
            tcpListen(adapter);
        }
        else if (adapter->TCP_CurrState == LISTEN)
        {
            tcpSend(adapter, 0, 0, htons(tcp->destPort), adapter->IP_address, htons(tcp->sourcePort), transmittingIP, SYN_ACK_FLAG, 0 /*seqNumber*/ , tcp->sequenceNumber+htonl(1) /*ackNumber*/);
            adapter->TCP_CurrState = SYN_RECEIVED;
        }
//...


telnet baut zumindest einen "Kontakt" zu uns auf, erwartet aber wohl mehr von seinem "Server" als nur einen 3-way-handshake:

Code:
Microsoft Telnet> open 192.168.1.97
Verbindungsaufbau zu 192.168.1.97...
Code:
Microsoft Telnet> open 192.168.1.97
Verbindungsaufbau zu 192.168.1.97...
Code:
Microsoft Telnet> open 192.168.1.97
Verbindungsaufbau zu 192.168.1.97...

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:58:31 15.06.2011, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:17:19 16.06.2011   Titel:              Zitieren

version = "0.0.2.111 - Rev: 950"

TCP/Telnet-Datenübertragung, allerdings noch ohne aktive Bestätigung seitens PrettyOS:
http://www.henkessoft.de/OS_Dev/Bilder/rev.950_TCP_TELNET_DATEN.PNG

Mit strg+c kann man für Experimente den Zustand LISTEN erneut setzen.

TODO: Im state "ESTABLISHED" den Empfang von Daten mit der korrekten ACK bestätigen, damit der "Retransmission Timer" des Senders keine erneute Versendung dieses Paktes veranlasst (s. Bild oben).

Hier ist eine gute Literaturstelle für den Datenaustausch-Mechanismus: http://www.rhyshaden.com/tcp.htm

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:49:29 16.06.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:04:19 16.06.2011   Titel:              Zitieren

version = "0.0.2.112 - Rev: 951"
Experimentelle Version: Man muss genau 10 Byte senden, damit es genau klappt.
TODO: Länge des TCP-Datenpakets bestimmen und übergeben.

Foto: http://www.henkessoft.de/OS_Dev/Bilder/rev.951_TCP_TELNET_DATENAUSTAUSCH.PNG

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    if (!tcp->SYN && !tcp->FIN && tcp->ACK) // ACK
    {
        adapter->TCP_PrevState = adapter->TCP_CurrState;    
       
        if (adapter->TCP_CurrState == ESTABLISHED) // ESTABLISHED --> DATA TRANSFER
        {
            uint32_t length_of_tcpData = 10; // TODO: find length of data !
            printf("\ntcp packet data:");
            for (uint16_t i=0; i<length_of_tcpData; i++)
            {
                printf("%c", *(((uint8_t*)(tcp+1))+i) );
            }
            tcpSend(adapter, 0, 0, htons(tcp->destPort), adapter->IP_address, htons(tcp->sourcePort), transmittingIP, ACK_FLAG, tcp->acknowledgmentNumber /*seqNumber*/, tcp->sequenceNumber+htonl(length_of_tcpData) /*ackNumber*/);
        }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (!tcp->SYN && !tcp->FIN && tcp->ACK) // ACK
{
adapter->TCP_PrevState = adapter->TCP_CurrState;

if (adapter->TCP_CurrState == ESTABLISHED) // ESTABLISHED --> DATA TRANSFER
{
uint32_t length_of_tcpData = 10; // TODO: find length of data !
printf("\ntcp packet data:");
for (uint16_t i=0; i<length_of_tcpData; i++)
{
printf("%c", *(((uint8_t*)(tcp+1))+i) );
}
tcpSend(adapter, 0, 0, htons(tcp->destPort), adapter->IP_address, htons(tcp->sourcePort), transmittingIP, ACK_FLAG, tcp->acknowledgmentNumber /*seqNumber*/, tcp->sequenceNumber+htonl(length_of_tcpData) /*ackNumber*/);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    if (!tcp->SYN && !tcp->FIN && tcp->ACK) // ACK
    {
        adapter->TCP_PrevState = adapter->TCP_CurrState;    
       
        if (adapter->TCP_CurrState == ESTABLISHED) // ESTABLISHED --> DATA TRANSFER
        {
            uint32_t length_of_tcpData = 10; // TODO: find length of data !
            printf("\ntcp packet data:");
            for (uint16_t i=0; i<length_of_tcpData; i++)
            {
                printf("%c", *(((uint8_t*)(tcp+1))+i) );
            }
            tcpSend(adapter, 0, 0, htons(tcp->destPort), adapter->IP_address, htons(tcp->sourcePort), transmittingIP, ACK_FLAG, tcp->acknowledgmentNumber /*seqNumber*/, tcp->sequenceNumber+htonl(length_of_tcpData) /*ackNumber*/);
        }


ACK bei Datenempfang klappt nun auch (Berechnung von Seq.- und Ack.-Nummer).

Tippt man bei telnet "close" ein, kommt auch ein ACK. Mit strg+c kann man dann wieder bei LISTEN starten. Alles noch etwas "getrickst". Aber die ACK-Technik kann man sehr schön testen, und vor allem klappt es. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:12:10 16.06.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:07:13 16.06.2011   Titel:              Zitieren

Version 0.0.2.113:

- Kernel Stack von 0x190000 nach 0x1000000 verschoben (Vermeidung einer Kollision mit KERNEL.BIN)
- Code aufgeräumt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:49:34 16.06.2011   Titel:              Zitieren

version = "0.0.2.114 - Rev: 953"

Nun sind auch variable Längen des TCP-Datenpakets möglich. Wir reichen uns die Paketlänge von unten nach tcpReceive(network_adapter_t* adapter, tcpPacket_t* tcp, uint8_t transmittingIP[4], size_t length) durch.

Codeausschnitt:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
        if (adapter->TCP_CurrState == ESTABLISHED) // ESTABLISHED --> DATA TRANSFER
        {
            uint32_t tcpDataLength = -4 /* frame ? */ + length - (tcp->dataOffset << 2);
            printf("\ntcp packet data:");
            for (uint16_t i=0; i<tcpDataLength; i++)
            {
                printf("%c", *(((uint8_t*)(tcp+1))+i) );
            }
            tcpSend(adapter, 0, 0, htons(tcp->destPort), adapter->IP_address, htons(tcp->sourcePort), transmittingIP, ACK_FLAG, tcp->acknowledgmentNumber /*seqNumber*/, tcp->sequenceNumber+htonl(tcpDataLength) /*ackNumber*/);
        }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
if (adapter->TCP_CurrState == ESTABLISHED) // ESTABLISHED --> DATA TRANSFER
{
uint32_t tcpDataLength = -4 /* frame ? */ + length - (tcp->dataOffset << 2);
printf("\ntcp packet data:");
for (uint16_t i=0; i<tcpDataLength; i++)
{
printf("%c", *(((uint8_t*)(tcp+1))+i) );
}
tcpSend(adapter, 0, 0, htons(tcp->destPort), adapter->IP_address, htons(tcp->sourcePort), transmittingIP, ACK_FLAG, tcp->acknowledgmentNumber /*seqNumber*/, tcp->sequenceNumber+htonl(tcpDataLength) /*ackNumber*/);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
        if (adapter->TCP_CurrState == ESTABLISHED) // ESTABLISHED --> DATA TRANSFER
        {
            uint32_t tcpDataLength = -4 /* frame ? */ + length - (tcp->dataOffset << 2);
            printf("\ntcp packet data:");
            for (uint16_t i=0; i<tcpDataLength; i++)
            {
                printf("%c", *(((uint8_t*)(tcp+1))+i) );
            }
            tcpSend(adapter, 0, 0, htons(tcp->destPort), adapter->IP_address, htons(tcp->sourcePort), transmittingIP, ACK_FLAG, tcp->acknowledgmentNumber /*seqNumber*/, tcp->sequenceNumber+htonl(tcpDataLength) /*ackNumber*/);
        }

telnet:
Code:
open 192.168.1.97
sen ...
sen ................
sen .......
close
Code:
open 192.168.1.97
sen ...
sen ................
sen .......
close
Code:
open 192.168.1.97
sen ...
sen ................
sen .......
close

anschließend bei PrettyOS wieder strg+c und erneut connection aufbauen, oder auch direkt open ... .

Kann alles in wireshark und bei PrettyOS verfolgt werden. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:02:20 16.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:45:17 16.06.2011   Titel:              Zitieren

version = "0.0.2.115 - Rev: 954"

tcp.h weiter mit structs (DRAFT) gefüllt, um mit connections und dazu gehörigen sockets arbeiten zu können:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
typedef struct
{
    uint32_t SND_UNA;   // Send Unacknowledged
    uint32_t SND_NXT;   // Send Next
    uint16_t SND_WND;   // Send Window
    uint32_t SND_ISS;   // Initial send sequence number
    uint32_t RCV_NXT;   // Sequence number of next received set
    uint16_t RCV_WND;   // Receive Window
    uint32_t RCV_IRS;   // Initial receive sequence number
} __attribute__((packed)) tcpTransmissionControlBlock_t;

typedef struct
{
    uint16_t port;
    uint8_t  IP[4];
    network_adapter_t* adapter;
} __attribute__((packed)) tcpSocket_t;

typedef struct
{
    tcpSocket_t localSocket;
    tcpSocket_t remoteSocket;
    tcpTransmissionControlBlock_t tcb;
    TCP_state TCP_PrevState;
    TCP_state TCP_CurrState;
} __attribute__((packed)) tcpConnection_t;

typedef struct
{
    uint32_t SEG_SEQ; // Sequence number
    uint32_t SEG_ACK; // Acknoledgement number
    uint32_t SEG_LEN; // segment length
    uint32_t SEG_WND; // segment windows
    tcpFlags SEG_CTL; // control bits
}  __attribute__((packed)) tcpSegment_t;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
typedef struct
{
uint32_t SND_UNA; // Send Unacknowledged
uint32_t SND_NXT; // Send Next
uint16_t SND_WND; // Send Window
uint32_t SND_ISS; // Initial send sequence number
uint32_t RCV_NXT; // Sequence number of next received set
uint16_t RCV_WND; // Receive Window
uint32_t RCV_IRS; // Initial receive sequence number
} __attribute__((packed)) tcpTransmissionControlBlock_t;

typedef struct
{
uint16_t port;
uint8_t IP[4];
network_adapter_t* adapter;
} __attribute__((packed)) tcpSocket_t;

typedef struct
{
tcpSocket_t localSocket;
tcpSocket_t remoteSocket;
tcpTransmissionControlBlock_t tcb;
TCP_state TCP_PrevState;
TCP_state TCP_CurrState;
} __attribute__((packed)) tcpConnection_t;

typedef struct
{
uint32_t SEG_SEQ; // Sequence number
uint32_t SEG_ACK; // Acknoledgement number
uint32_t SEG_LEN; // segment length
uint32_t SEG_WND; // segment windows
tcpFlags SEG_CTL; // control bits
} __attribute__((packed)) tcpSegment_t;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
typedef struct
{
    uint32_t SND_UNA;   // Send Unacknowledged
    uint32_t SND_NXT;   // Send Next
    uint16_t SND_WND;   // Send Window
    uint32_t SND_ISS;   // Initial send sequence number
    uint32_t RCV_NXT;   // Sequence number of next received set
    uint16_t RCV_WND;   // Receive Window
    uint32_t RCV_IRS;   // Initial receive sequence number
} __attribute__((packed)) tcpTransmissionControlBlock_t;

typedef struct
{
    uint16_t port;
    uint8_t  IP[4];
    network_adapter_t* adapter;
} __attribute__((packed)) tcpSocket_t;

typedef struct
{
    tcpSocket_t localSocket;
    tcpSocket_t remoteSocket;
    tcpTransmissionControlBlock_t tcb;
    TCP_state TCP_PrevState;
    TCP_state TCP_CurrState;
} __attribute__((packed)) tcpConnection_t;

typedef struct
{
    uint32_t SEG_SEQ; // Sequence number
    uint32_t SEG_ACK; // Acknoledgement number
    uint32_t SEG_LEN; // segment length
    uint32_t SEG_WND; // segment windows
    tcpFlags SEG_CTL; // control bits
}  __attribute__((packed)) tcpSegment_t;

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:15:08 17.06.2011   Titel:              Zitieren

version = "0.0.2.116 - Rev: 955"

TCP weiter ausgebaut. Die TCP States zu tcpConn umgehängt.

In network.c das TCP Server "passive open" eingerichtet:
C/C++ Code:
    // open TCP Server with State "LISTEN"
    adapter->tcpConn = malloc(sizeof(tcpConnection_t), 0, "tcp connection");
    adapter->tcpConn->localSocket.port = getFreeSocket();
    memcpy(adapter->tcpConn->localSocket.IP, adapter->IP_address, 4);
    adapter->tcpConn->TCP_PrevState = CLOSED;
    adapter->tcpConn->TCP_CurrState = LISTEN;
    // TODO: ...
C/C++ Code:
// open TCP Server with State "LISTEN"
adapter->tcpConn = malloc(sizeof(tcpConnection_t), 0, "tcp connection");
adapter->tcpConn->localSocket.port = getFreeSocket();
memcpy(adapter->tcpConn->localSocket.IP, adapter->IP_address, 4);
adapter->tcpConn->TCP_PrevState = CLOSED;
adapter->tcpConn->TCP_CurrState = LISTEN;
// TODO: ...
C/C++ Code:
    // open TCP Server with State "LISTEN"
    adapter->tcpConn = malloc(sizeof(tcpConnection_t), 0, "tcp connection");
    adapter->tcpConn->localSocket.port = getFreeSocket();
    memcpy(adapter->tcpConn->localSocket.IP, adapter->IP_address, 4);
    adapter->tcpConn->TCP_PrevState = CLOSED;
    adapter->tcpConn->TCP_CurrState = LISTEN;
    // TODO: ...


networktypes.h fehlt im Commit :warning:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:21:02 17.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:31:52 17.06.2011   Titel:              Zitieren

version = "0.0.2.117 - Rev: 956"

nun auch mit networktypes.h

Wichtige Links z.Z.:
http://www.tcpipguide.com/free/t_TCPConnectionPreparationTransmissionControlBlocksT-2.htm
http://www.cs.northwestern.edu/~agupta/cs340/project2/TCPIP_State_Transition_Diagram.pdf

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:56:28 17.06.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:36:08 17.06.2011   Titel:              Zitieren

Version 0.0.2.118:

- Ausgabe verbessert
- Mutexes verbessert
- PCI nutzt nun eine Liste statt eines statischen Arrays
- Aufgeräumt
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:27:09 17.06.2011   Titel:              Zitieren

Version 0.0.2.119:

- TCP überarbeitet. (BUG: Datentransfer funktioniert nicht.)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:41:56 18.06.2011   Titel:              Zitieren

version = "0.0.2.120 - Rev: 959"

Aktives öffnen und TCP ("SYN") senden (mit strg+w) klappt.
Problem: Internet Checksum ist falsch! (Ursache bisher unklar, da das Senden von SYN ACK oder FIN ACK als server bisher klappt)

Ablauf:
1) PrettyOS bootet, holt sich per DHCP seine IP
2) Man pingt PrettyOS von 192.168.1.23 an, damit der rechner in die ARP-Tabelle eingetragen wird (diese IP steht konkret in strg+w in keyboard.c drinnen, also ändern auf eigenen rechner)
3) Man gibt strg+w ein bei PrettyOS um aktiv ein SYN zu senden
Fazit: SYN senden klappt, aber checksum falsch

Code:
TCP-Paket: 0402001700000000000000005002ffff88b00000
Checksum: 0x88b0 [incorrect, should be 0x2801 ...]
Code:
TCP-Paket: 0402001700000000000000005002ffff88b00000
Checksum: 0x88b0 [incorrect, should be 0x2801 ...]
Code:
TCP-Paket: 0402001700000000000000005002ffff88b00000
Checksum: 0x88b0 [incorrect, should be 0x2801 ...]


Test mit dem Simulationsprogramm ergibt die korrekte Checksum, also stimmen die Eingangsdaten in die Berechnung für diese nicht.

PS: der datentransfer in rev. 958 klappt (war offenbar ein TCP-Netzproblem)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:09:05 18.06.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:19:25 18.06.2011   Titel:              Zitieren

version = "0.0.2.121 - Rev: 960"

Nun erfolgt die korrekte Berechnung der internet checksum. Fehler war im Pseudoheader. Dort fehlte noch die source IP.

Erstes erfolgreiches "active open" mit Senden von SYN, das zum State SYN_SENT führt (wireshark):
Code:
8    22.328396    192.168.1.97    192.168.1.23    TCP    60    blackjack > telnet [SYN] Seq=0 Win=65535 Len=0
Code:
8 22.328396 192.168.1.97 192.168.1.23 TCP 60 blackjack > telnet [SYN] Seq=0 Win=65535 Len=0
Code:
8    22.328396    192.168.1.97    192.168.1.23    TCP    60    blackjack > telnet [SYN] Seq=0 Win=65535 Len=0


blackjack steht für den gewählten Port mit der Nr. 1025.
C/C++ Code:
static uint16_t getFreeSocket()
{
    static uint16_t srcPort = 1025;
    return srcPort++;
}
C/C++ Code:
static uint16_t getFreeSocket()
{
static uint16_t srcPort = 1025;
return srcPort++;
}
C/C++ Code:
static uint16_t getFreeSocket()
{
    static uint16_t srcPort = 1025;
    return srcPort++;
}


Um den kompletten Handshake zu sehen, gibt es einen einfachen Weg:
1) telnet dienst (server) in Windows starten
2) firewall tcp port 23 öffnen
3) strg+w (active open mit SYN)

Resultat:
http://www.henkessoft.de/OS_Dev/Bilder/rev.960_TCP_TELNET_ACTIVE_OPEN.PNG

SYN - SYN ACK - ACK :)

MrX hat auf die Schnelle einen kleinen TCP-Server geschrieben:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <SFML/Network.hpp>
#include
<iostream>
#include
<string>
#include
<cstdint>
 
sf::TcpSocket Socket;
 
void Func()
{
        while(true)
        {
                char buffer[512];
                size_t size;
                if(Socket.Receive(buffer, 512, size) == sf::Socket::Disconnected) return;
                buffer[size] = 0;
                std::cout << buffer;
        }
}
 
sf::Thread Thr(&Func);
 
int main() {
        sf::TcpListener Listener;
        Listener.SetBlocking(true);
        uint16_t port;
        std::cout << "Bitte Port eingeben: ";
        std::cin >> port;
        Listener.Listen(port);
        std::cout << "Server lauscht... ";
        Listener.Accept(Socket);
        std::cout << "Verbunden." << std::endl;
 
        Thr.Launch();
 
        std::string str;
        std::cin >> str;
        while(str != "exit")
        {
                Socket.Send(str.c_str(), str.length());
                std::cin >> str;
        }
 
        return(0);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <SFML/Network.hpp>
#include
<iostream>
#include
<string>
#include
<cstdint>

sf::TcpSocket Socket;

void Func()
{
while(true)
{
char buffer[512];
size_t size;
if(Socket.Receive(buffer, 512, size) == sf::Socket::Disconnected) return;
buffer[size] = 0;
std::cout << buffer;
}
}

sf::Thread Thr(&Func);

int main() {
sf::TcpListener Listener;
Listener.SetBlocking(true);
uint16_t port;
std::cout << "Bitte Port eingeben: ";
std::cin >> port;
Listener.Listen(port);
std::cout << "Server lauscht... ";
Listener.Accept(Socket);
std::cout << "Verbunden." << std::endl;

Thr.Launch();

std::string str;
std::cin >> str;
while(str != "exit")
{
Socket.Send(str.c_str(), str.length());
std::cin >> str;
}

return(0);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <SFML/Network.hpp>
#include
<iostream>
#include
<string>
#include
<cstdint>
 
sf::TcpSocket Socket;
 
void Func()
{
        while(true)
        {
                char buffer[512];
                size_t size;
                if(Socket.Receive(buffer, 512, size) == sf::Socket::Disconnected) return;
                buffer[size] = 0;
                std::cout << buffer;
        }
}
 
sf::Thread Thr(&Func);
 
int main() {
        sf::TcpListener Listener;
        Listener.SetBlocking(true);
        uint16_t port;
        std::cout << "Bitte Port eingeben: ";
        std::cin >> port;
        Listener.Listen(port);
        std::cout << "Server lauscht... ";
        Listener.Accept(Socket);
        std::cout << "Verbunden." << std::endl;
 
        Thr.Launch();
 
        std::string str;
        std::cin >> str;
        while(str != "exit")
        {
                Socket.Send(str.c_str(), str.length());
                std::cin >> str;
        }
 
        return(0);
}

Download der exe-Datei zusammen mit dem Sourcecode: http://www.henkessoft.de/OS_Dev/Downloads/TCPServer.zip (EXE etwas weiter entwickelt bezüglich Ausgaben)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 09:49:37 19.06.2011, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:33:00 18.06.2011   Titel:              Zitieren

version = "0.0.2.122 - Rev: 960"

- Beseitigung eines Fehlers, der nur ab und zu aufgetreten ist: versehentlich wurde mit bigEndian-Zahlen gerechnet, dabei verschiebt sich der Überlauf - falls vorhanden - nach rechts, da wir immer mit littleEndian-Zahlen "rechnen". Daher immer erst nach littleEndian umwandeln, dann rechnen, anschließend zurück nach bigEndian umwandeln:
C/C++ Code:
htonl(htonl(tcp->sequenceNumber)+1)
C/C++ Code:
htonl(htonl(tcp->sequenceNumber)+1)
C/C++ Code:
htonl(htonl(tcp->sequenceNumber)+1)
<--- EDIT: das zweite htonl müsste ein ntohl sein, wurde inzwischen behoben.
- internetChecksumTest.cpp (von MrX, für code::blocks umgeschrieben) in /tools

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:46:04 19.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:18:35 19.06.2011   Titel:              Zitieren

version = "0.0.2.123 - Rev: 961"

ntohs/ntohl und htons/htonl im Code aus Gründen der Dokumentation geordnet.

vgl. http://beej.us/guide/bgnet/output/html/multipage/htonsman.html

Die Inhalte der Macros sind für IA32 bei x86 zufällig gleich, aber es geht um den Weg (Netz <---> Host), der verschieden ist.
C/C++ Code:
// htonl = Host To Network Long  // htons = Host To Network Short
#define
htons(v) ((((v) >> 8) & 0xFF) | (((v) & 0xFF) << 8))
#define
htonl(v) ((((v) >> 24) & 0xFF) | (((v) >> 8) & 0xFF00) | (((v) & 0xFF00) << 8) | (((v) & 0xFF) << 24))
// ntohl = Network To Host Long  // ntohs = Network To Host Short
#define
ntohs(v) htons(v)
#define
ntohl(v) htonl(v)
C/C++ Code:
// htonl = Host To Network Long // htons = Host To Network Short
#define
htons(v) ((((v) >> 8) & 0xFF) | (((v) & 0xFF) << 8))
#define
htonl(v) ((((v) >> 24) & 0xFF) | (((v) >> 8) & 0xFF00) | (((v) & 0xFF00) << 8) | (((v) & 0xFF) << 24))
// ntohl = Network To Host Long // ntohs = Network To Host Short
#define
ntohs(v) htons(v)
#define
ntohl(v) htonl(v)
C/C++ Code:
// htonl = Host To Network Long  // htons = Host To Network Short
#define
htons(v) ((((v) >> 8) & 0xFF) | (((v) & 0xFF) << 8))
#define
htonl(v) ((((v) >> 24) & 0xFF) | (((v) >> 8) & 0xFF00) | (((v) & 0xFF00) << 8) | (((v) & 0xFF) << 24))
// ntohl = Network To Host Long  // ntohs = Network To Host Short
#define
ntohs(v) htons(v)
#define
ntohl(v) htonl(v)

Diese Macros machen den Code mehr portabel, denn wenn z.B. die CPU gemäß Big Endian arbeitet dann ist die Umsetzung eben einfach ein "no operation".

Beispiel aus tpc.c:
Zitat:
tcp_send(connection, 0, 0, ACK_FLAG, tcp->acknowledgmentNumber /*seqNumber*/, htonl(ntohl(tcp->sequenceNumber)+tcpDataLength) /*ackNumber*/);

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:44:48 19.06.2011, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 09:38:02 19.06.2011   Titel:              Zitieren

version = "0.0.2.124 - Rev: 962"

Ausgaben bei networking etwas vereinfacht.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:17:26 19.06.2011   Titel:              Zitieren

version = "0.0.2.125 - Rev: 963"

Kleine Veränderungen in networking Ausgabe

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:23:39 19.06.2011   Titel:              Zitieren

Version 0.0.2.126:

- netutils.c/h gebildet. Enthält ntohl (u.ä.) sowie checksum-Funktionen
- Syscall-Aufruf verwendet festgelegte Register (vermeidet Fehler mit -fomit-frame-pointer)
- Code wird nun mit -fomit-frame-pointer gebaut
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:12:44 19.06.2011   Titel:              Zitieren

Version 0.0.2.127:

- IPs und MACs jetzt mit memcmp verglichen
- IP_address und MAC_address in IP und MAC umbenannt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:58:24 19.06.2011   Titel:              Zitieren

version = "0.0.2.128 - Rev: 966" (versehentlich zu hoch gedreht in ckernel.c)

PrettyOS goes to INTERNET via routing (FIRST TEST)

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        if(retchar == 'w') // Create & Bind connection
        {
            connection = tcp_createConnection(); // 94.142.241.111 auf Port 23
            uint8_t destIP[4] ={94,142,241,111};
            memcpy(connection->remoteSocket.IP, destIP, 4);
            connection->remoteSocket.port = 23;

            uint8_t sourceIP[4] ={IP_1,IP_2,IP_3,IP_4}; //HACK
            memcpy(connection->localSocket.IP, sourceIP, 4);

            network_adapter_t* adapter = network_getAdapter(sourceIP);
            printf("network adapter: %Xh\n", adapter); // check
            connection->adapter = adapter;

            if(adapter)
            {
                tcp_connect(connection);
            }
            return 0;
        }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if(retchar == 'w') // Create & Bind connection
{
connection = tcp_createConnection(); // 94.142.241.111 auf Port 23
uint8_t destIP[4] ={94,142,241,111};
memcpy(connection->remoteSocket.IP, destIP, 4);
connection->remoteSocket.port = 23;

uint8_t sourceIP[4] ={IP_1,IP_2,IP_3,IP_4}; //HACK
memcpy(connection->localSocket.IP, sourceIP, 4);

network_adapter_t* adapter = network_getAdapter(sourceIP);
printf("network adapter: %Xh\n", adapter); // check
connection->adapter = adapter;

if(adapter)
{
tcp_connect(connection);
}
return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        if(retchar == 'w') // Create & Bind connection
        {
            connection = tcp_createConnection(); // 94.142.241.111 auf Port 23
            uint8_t destIP[4] ={94,142,241,111};
            memcpy(connection->remoteSocket.IP, destIP, 4);
            connection->remoteSocket.port = 23;

            uint8_t sourceIP[4] ={IP_1,IP_2,IP_3,IP_4}; //HACK
            memcpy(connection->localSocket.IP, sourceIP, 4);

            network_adapter_t* adapter = network_getAdapter(sourceIP);
            printf("network adapter: %Xh\n", adapter); // check
            connection->adapter = adapter;

            if(adapter)
            {
                tcp_connect(connection);
            }
            return 0;
        }


Da wird die Starwars Story erzählt von einem sehr geschwätzigen telnet server (IP: 94.142.241.111). Vielen Dank an Cuervo für diesen Bomben-Tipp!

Foto: http://www.henkessoft.de/OS_Dev/Bilder/rev.966_INTERNET.PNG

Wer dies nachstellen möchte, benötigt eine rtl8139 Netzwerkkarte, und bitte die router-mac (erhält man oft mit arp -a aus dem arp-cache) und die IP/RIP (gleich), die man von DHCP erhält, in network.h eintragen. Das muss alles noch automatisiert werden.

Start ist z.Z. mit strg+w

HTTP geht noch nicht (fehlt noch die ACH-Number aus dem SYN-ACK des handshake), kommt demnächst wenn der TCB in connection gefüttert wird. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:34:16 19.06.2011, insgesamt 4-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 13:48:47 19.06.2011   Titel:              Zitieren

So, Star Wars läuft auch bei mir.

Video:
http://www.youtube.com/watch?v=CI2-yyE_EJ0



Cuervo


Zuletzt bearbeitet von Cuervo am 14:00:50 19.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:38:55 19.06.2011   Titel:              Zitieren

version = "0.0.2.129 - Rev: 967"

- Zuerst Senden (also erstes ACK nach handshake) auf www.henkessoft.de port 80 (HTTP)
- bei TIME_WAIT wird connection zerstört, damit man diese mit strg+w neu aufbauen kann.

Anwendung:
strg+w (verb. aufbauen),
strg+x (Daten werden geschickt: "GET / HTTP/1.0\r\nHost: www.henkessoft.de\r\n\r\n")

(Die Homepage rast durch)

Foto: http://www.henkessoft.de/OS_Dev/Bilder/rev.967_INTERNET_HTTP.PNG :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:44:31 19.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:25:23 19.06.2011   Titel:              Zitieren

version = "0.0.2.130 - Rev: 968"

- srand, rand eingebaut für Erzeugung von ISS in tcp.c
- Extra eine eigene Übungsseite gebaut: http://www.henkessoft.de/OS_Dev/PrettyOS.htm

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        if(retchar == 'w') // Create & Bind connection
        {
            connection = tcp_createConnection();
            // uint8_t destIP[4] ={94,142,241,111}; // 94.142.241.111 at Port 23, starwars story
            uint8_t destIP[4] = {82,100,220,68};  // www.henkessoft.de Port 80
            memcpy(connection->remoteSocket.IP, destIP, 4);
            connection->remoteSocket.port = 80;
           
            uint8_t sourceIP[4] ={IP_1,IP_2,IP_3,IP_4}; //HACK
            memcpy(connection->localSocket.IP, sourceIP, 4);

            network_adapter_t* adapter = network_getAdapter(sourceIP);
            printf("network adapter: %Xh\n", adapter); // check
            connection->adapter = adapter;

            if(adapter)
            {
                tcp_connect(connection);
            }
            return 0;
        }
        if(retchar == 'x') // send data to the connection
        {
            tcp_send(connection, "GET /OS_Dev/PrettyOS.htm HTTP/1.1\r\nHost: www.henkessoft.de\r\nConnection: close\r\n\r\n", strlen("GET /OS_Dev/PrettyOS.htm HTTP/1.1\r\nHost: www.henkessoft.de\r\nConnection: close\r\n\r\n"), ACK_FLAG, connection->tcb.SND_NXT, connection->tcb.SND_UNA);
            return 0;
        }
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if(retchar == 'w') // Create & Bind connection
{
connection = tcp_createConnection();
// uint8_t destIP[4] ={94,142,241,111}; // 94.142.241.111 at Port 23, starwars story
uint8_t destIP[4] = {82,100,220,68}; // www.henkessoft.de Port 80
memcpy(connection->remoteSocket.IP, destIP, 4);
connection->remoteSocket.port = 80;

uint8_t sourceIP[4] ={IP_1,IP_2,IP_3,IP_4}; //HACK
memcpy(connection->localSocket.IP, sourceIP, 4);

network_adapter_t* adapter = network_getAdapter(sourceIP);
printf("network adapter: %Xh\n", adapter); // check
connection->adapter = adapter;

if(adapter)
{
tcp_connect(connection);
}
return 0;
}
if(retchar == 'x') // send data to the connection
{
tcp_send(connection, "GET /OS_Dev/PrettyOS.htm HTTP/1.1\r\nHost: www.henkessoft.de\r\nConnection: close\r\n\r\n", strlen("GET /OS_Dev/PrettyOS.htm HTTP/1.1\r\nHost: www.henkessoft.de\r\nConnection: close\r\n\r\n"), ACK_FLAG, connection->tcb.SND_NXT, connection->tcb.SND_UNA);
return 0;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        if(retchar == 'w') // Create & Bind connection
        {
            connection = tcp_createConnection();
            // uint8_t destIP[4] ={94,142,241,111}; // 94.142.241.111 at Port 23, starwars story
            uint8_t destIP[4] = {82,100,220,68};  // www.henkessoft.de Port 80
            memcpy(connection->remoteSocket.IP, destIP, 4);
            connection->remoteSocket.port = 80;
           
            uint8_t sourceIP[4] ={IP_1,IP_2,IP_3,IP_4}; //HACK
            memcpy(connection->localSocket.IP, sourceIP, 4);

            network_adapter_t* adapter = network_getAdapter(sourceIP);
            printf("network adapter: %Xh\n", adapter); // check
            connection->adapter = adapter;

            if(adapter)
            {
                tcp_connect(connection);
            }
            return 0;
        }
        if(retchar == 'x') // send data to the connection
        {
            tcp_send(connection, "GET /OS_Dev/PrettyOS.htm HTTP/1.1\r\nHost: www.henkessoft.de\r\nConnection: close\r\n\r\n", strlen("GET /OS_Dev/PrettyOS.htm HTTP/1.1\r\nHost: www.henkessoft.de\r\nConnection: close\r\n\r\n"), ACK_FLAG, connection->tcb.SND_NXT, connection->tcb.SND_UNA);
            return 0;
        }

Klappt gut!

HTTP hat natürlich im eigentlichen Kernel nichts verloren. Dies hier in keyboard ist sozusagen ein "Steckbrett".

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 04:12:00 21.06.2011, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:46:28 19.06.2011   Titel:              Zitieren

version = "0.0.2.131 - Rev: 969"

- Gateway IP aus DHCP ACK gezogen und bei adpater->... eingehängt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:06:59 20.06.2011   Titel:              Zitieren

version = "0.0.2.132 - Rev: 970"

- Subnet Mask aus DHCP ACK gezogen und bei adpater->... eingehängt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:58:48 20.06.2011   Titel:              Zitieren

version = "0.0.2.132 - Rev: 970" <--- Simulation mit qemu:
qemu gestartet mit TAP1/TAP2 unter Windows XP.

Foto: http://www.henkessoft.de/OS_Dev/Bilder/rev.970_INTERNET_HTTP.PNG

strg+w baut die connection via router zum Internet auf Port 80 (HTTP) auf, strg+x fordert Daten mittels GET ... an.

DHCP läuft hierbei nicht sauber zum Ende durch (bleibt bei OFFER hängen, wobwi REQUEST gesendet wird, man muss mit TAP1 Aktivierung/Deaktivierung toggeln). Daher sind die HACKs wichtig.

So wie es aussieht, kann man TCP/IP damit trotz des DHCP-Problems testen.

qemu batch datei:
Code:
qemu.exe  -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -net user -localtime
Code:
qemu.exe -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -net user -localtime
Code:
qemu.exe  -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -net user -localtime


Die Emulation mit qemu funktioniert auch mit dem pcnet-Treiber. :)
pcnet anstelle rtl8139

Noch besser: Da qemu und der HOST zusammen NAT spielen, werden die PrettyOS-Pakete unter der IP des HOST verschickt, sodass man in wireshark jedes Paket sieht: http://www.henkessoft.de/OS_Dev/Bilder/rev.970_INTERNET_HTTP_WIRESHARK.PNG

PrOS = PrettyOS, web = Website
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Send Recv flags     seq#   ack#    nextseq#    window        
---------------------------------------------------------------------------

PrOS web  SYN        0     -                   65535
web  PrOS SYN ACK    0     1                   65535
PrOS web  ACK        1     1                   65535

PrOS web  PSH ACK    1     1        82         65535    GET /OS_Dev/...
web  PrOS ACK        1    82       248         65535        1. Teil Header
web  PrOS ACK      248    82       755         65535    OK  2. Teil <!DOCTYPE ...
PrOS web  ACK       82   755                   64781

web  PrOS FIN ACK  755    82                   65535  
PrOS web  ACK       82   756                   64781
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Send Recv flags seq# ack# nextseq# window
---------------------------------------------------------------------------

PrOS web SYN 0 - 65535
web PrOS SYN ACK 0 1 65535
PrOS web ACK 1 1 65535

PrOS web PSH ACK 1 1 82 65535 GET /OS_Dev/...
web PrOS ACK 1 82 248 65535 1. Teil Header
web PrOS ACK 248 82 755 65535 OK 2. Teil <!DOCTYPE ...
PrOS web ACK 82 755 64781

web PrOS FIN ACK 755 82 65535
PrOS web ACK 82 756 64781
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Send Recv flags     seq#   ack#    nextseq#    window        
---------------------------------------------------------------------------

PrOS web  SYN        0     -                   65535
web  PrOS SYN ACK    0     1                   65535
PrOS web  ACK        1     1                   65535

PrOS web  PSH ACK    1     1        82         65535    GET /OS_Dev/...
web  PrOS ACK        1    82       248         65535        1. Teil Header
web  PrOS ACK      248    82       755         65535    OK  2. Teil <!DOCTYPE ...
PrOS web  ACK       82   755                   64781

web  PrOS FIN ACK  755    82                   65535  
PrOS web  ACK       82   756                   64781


Anmerkung: beim ersten Datenpaket vom Webserver steht: TCP segment of a reassembled PDU

HTTP Protokollschicht:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
GET /OS_Dev/PrettyOS.htm HTTP/1.1
Host: www.henkessoft.de
Connection: close


HTTP/1.1 200 OK
Date: Mon, 20 Jun 2011 19:45:22 GMT
Server: Apache/2.2.17
Last-Modified: Sun, 19 Jun 2011 16:32:48 GMT
ETag: "1e07e25-1fb-4a6132b4e8c00"
Accept-Ranges: bytes
Content-Length: 507
Connection: close
Content-Type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-15"
 http-equiv="Content-Type">
  <title>PrettyOS</title>
</head>
<body>
<h1>Hallo, hier spricht PrettyOS. </h1>
<h1>Ich wurde in C und Assembler erstellt. </h1>
<h1>Es gibt eine Community, die mich hingebungsvoll pflegt und weiter
entwickelt.<br>
</h1>
<h1><a href="http://www.c-plusplus.de/forum/f62">http://www.c-plusplus.de/forumf62</a></h1>
<br>
</body>
</html>
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
GET /OS_Dev/PrettyOS.htm HTTP/1.1
Host: www.henkessoft.de
Connection: close


HTTP/1.1 200 OK
Date: Mon, 20 Jun 2011 19:45:22 GMT
Server: Apache/2.2.17
Last-Modified: Sun, 19 Jun 2011 16:32:48 GMT
ETag: "1e07e25-1fb-4a6132b4e8c00"
Accept-Ranges: bytes
Content-Length: 507
Connection: close
Content-Type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-15"
http-equiv="Content-Type">
<title>PrettyOS</title>
</head>
<body>
<h1>Hallo, hier spricht PrettyOS. </h1>
<h1>Ich wurde in C und Assembler erstellt. </h1>
<h1>Es gibt eine Community, die mich hingebungsvoll pflegt und weiter
entwickelt.<br>
</h1>
<h1><a href="http://www.c-plusplus.de/forum/f62">http://www.c-plusplus.de/forumf62</a></h1>
<br>
</body>
</html>
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
GET /OS_Dev/PrettyOS.htm HTTP/1.1
Host: www.henkessoft.de
Connection: close


HTTP/1.1 200 OK
Date: Mon, 20 Jun 2011 19:45:22 GMT
Server: Apache/2.2.17
Last-Modified: Sun, 19 Jun 2011 16:32:48 GMT
ETag: "1e07e25-1fb-4a6132b4e8c00"
Accept-Ranges: bytes
Content-Length: 507
Connection: close
Content-Type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-15"
 http-equiv="Content-Type">
  <title>PrettyOS</title>
</head>
<body>
<h1>Hallo, hier spricht PrettyOS. </h1>
<h1>Ich wurde in C und Assembler erstellt. </h1>
<h1>Es gibt eine Community, die mich hingebungsvoll pflegt und weiter
entwickelt.<br>
</h1>
<h1><a href="http://www.c-plusplus.de/forum/f62">http://www.c-plusplus.de/forumf62</a></h1>
<br>
</body>
</html>

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 04:13:31 21.06.2011, insgesamt 9-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:01:33 21.06.2011   Titel:              Zitieren

version = "0.0.2.133 - Rev: 971"

- tcp etwas überarbeitet: mehr Ausgaben über connection (addr) und port
- bei strg+b und strg+w (gemischt) geht noch einiges durcheinander!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:21:21 21.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:12:10 21.06.2011   Titel:              Zitieren

version = "0.0.2.134 - Rev: 972"

- strg+c: listet alle connections auf
- tcp kleine änderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:37:44 22.06.2011   Titel:              Zitieren

Version 0.0.2.135:

- Keyboard-Treiber komplett neu geschrieben
-- Alle Tasten der Tastatur werden nun unterstützt (z.B. war früher der Num-Block unbenutzbar)
-- Bessere Unterstützung für US-International-Layout (fast vollständig)
-- Änderungen bei der Bedienung: Screenshots werden mit Print im Speicher angelegt. Drückt man unmittelbar danach f oder u, wird er auf Floppy bzw. USB-Stick gespeichert.
- Bessere ASCII -> CP437-Übersetzung: Mehr Zeichen darstellbar.
- Event-System
- getCursor nimmt nun position_t* (in den die Position geschrieben wird) und gibt void zurück. (Führte vorher zu #PF bei Verwendung als Syscall)
- Bugfix in list_Delete (führte ggf. zur Zerstörung der Listen)
- Keysound etwas verbessert: Tonhöhe hängt von gedrückter Taste ab, ESC beendet das Programm.

Bekannte Probleme:
- Jedes zweite %-Zeichen wird von der Shell (genauer: printLine/kprintf) verschluckt (Problem existiert schon länger, ist erst jetzt aufgefallen)
- Unter Qemu 0.14.1 und 0.14.0 senden E0-Tasten kein 0xE0. Sie funktionieren daher nicht.


Zuletzt bearbeitet von Erhard Henkes am 09:31:57 23.06.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 22:17:40 22.06.2011   Titel:              Zitieren

Version 0.0.2.135 - Rev: 974:

- events.h/c nachgeliefert
- Bugfix: Rebuild der Userprogramme geht wieder
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:15:41 23.06.2011   Titel:              Zitieren

Version 0.0.2.136 - Rev: 975

Experimenteller Zwischenstand mit arp_sendRequest und dem Versuch das Gateway einzutragen, klappt leider nicht (s. wireshark). Ursache unklar.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:01:13 23.06.2011   Titel:              Zitieren

Version 0.0.2.137

- Berücksichtigung des Subnets beim Senden von Paketen. Problem: ARP-Requests funktionieren nicht
- Events mit mutex geschützt
- Für Tests die Funktion network_getFirstAdapter bereitgestellt
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:43:07 23.06.2011   Titel:              Zitieren

version = "0.0.2.138 - Rev: 977"

- arp_sendRequest korrigiert
- arp_waitForReply geändert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:10:15 23.06.2011   Titel:              Zitieren

version = "0.0.2.139 - Rev: 978"

- arp_sendRequest eingebaut in DHCP ACK options
- qemu HACK dort eingebaut
aber es läuft noch nicht rund, qemu gar nicht mit TCP wegen der nun fehlenden MAC-Adresse des gateways des externen routers, an den qemu/TAP nicht ran kommt. Da muss wohl ein MAC-HACK her wie vorher.

In findConnection (tcp.c) ist auch noch ein blöder HACK für passive open im ersten recveive schritt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:39:35 23.06.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:14:00 23.06.2011   Titel:              Zitieren

version = "0.0.2.140 - Rev: 979"

- QEMU_HACK (in network.h zusammen mit externer router MAC definiert) eingebaut in ipv4.c beim Senden
- tcpConnection_t* findConnectionID(uint32_t ID) neu eingeführt (zur Brückung strg+w und strg+x)
- QEMU HACK aus DHCP entfernt
- strg c listet nun incl. ID und Adresse auf

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:20:37 23.06.2011   Titel:              Zitieren

version = "0.0.2.141 - Rev: 980"

Fehler behoben in tcp.c bezüglich Übergabe des Ports an findConnection(...)

Es gibt nun drei Versionen:
- tcpConnection_t* findConnectionID(uint32_t ID)
- tcpConnection_t* findConnectionListen(network_adapter_t* adapter)
- tcpConnection_t* findConnection(uint8_t IP[4], uint16_t port, network_adapter_t* adapter)

Es wird nun jeweils die qemu-Version von mir ins Repo gestellt. Bitte daran denken, die router-MACs in network.h anzupassen (qemu HACK). Man erhält diese mittels arp -a, evtl. vorher den router pingen, wenn er noch nicht im arp cache steht. :)

Die Zuordnung der empfangenen Pakete zu den connections sollte nun recht gut klappen.

Probleme:
- strg c (connection list) ohne \n am Ende
- telnet daten empfang macht probleme (ACK passt nicht?? Funktionierte aber schon gut)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:37:29 23.06.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:34:28 24.06.2011   Titel:              Zitieren

version = "0.0.2.142 - Rev: 981" :)

Veränderungen in ckernel.c und tcp.c, die durch Suchen der passenden Verbindung helfen, dass die Experimente gelingen.

Wichtig: Hinzufügen von ESTABLISHED als Parameter bei findConnection(...).

Probieren Sie folgendes aus: (bitte MACs für Ihren externen Router zum Internet anpassen)

Mehrfach strg+w drücken. Hierdurch werden zu meiner Homepage mehrere Verbindungen geöffnet, allerdings nur die erste wird auf ESTABLISHED gesetzt. Die anderen sitzen auf SYN_SENT. Wenn Sie nun strg+x drücken wird die angesprochene HTML-Datei gezogen und die Verbindung anschließend geschlossen. Daraufhin wird die nächste connection von SYN_SENT auf ESTABLISHED gesetzt (einige Sekunden warten). Das geht immer so weiter (mit strg+c die connections auflisten), bis keine HTTP-Verbindung mehr vorhanden ist. Dann erfolgt auf strg+x hin eine Fehlermeldung. Sie können auch beliebig passive LISTEN Sockets eröffnen. Diese kann man ebenfalls auf diese Weise mit z.B. telnet (gelingt bisher nur bei Hardware Tests) "abarbeiten".

Diese Version zeigt die Möglichkeiten, wie man mehrere Verbindungen beispielhaft strukturieren kann, und die Abläufe, wenn man sich mit der gleichen Client-IP mit mehreren Verbindungen (verschiedene Port-Nummern) auf dieselbe Datei auf einem HTTP-Server (im Internet) aufsetzt. :)

Sonstiges:
copy_kernel_bin_to_floppy.bat wurde hinzugefügt:
Code:
xcopy /y kernel\kernel.bin a:\kernel.bin
Code:
xcopy /y kernel\kernel.bin a:\kernel.bin
Code:
xcopy /y kernel\kernel.bin a:\kernel.bin

Beschleunigt das Erstellen von Floppydisks bei Reihenversuchen, bei denen nur kernel.bin verändert wird.

Bedienungshinweise:
strg+w: baut HTTP-Verbindung auf zu meiner Homepage (ESTABLISHED)
strg+x: zieht den HTML Text. Die Verbindung wird geschlossen
strg+b: erstellt LISTEN socket (wartet auf SYN von außen)
strg+c: listet alle Verbindungen auf

qemu batch: qemu.exe -fda FloppyImage.img -soundhw pcspk -net nic,model=pcnet,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -net user -localtime

wichtig: -net user

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:52:01 24.06.2011, insgesamt 8-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:44:34 24.06.2011   Titel:              Zitieren

version = "0.0.2.143 - Rev: 982"

- bei qemu wird DHCP_Discover nun übergangen in network.c
- unwichtige Korrektur in tcp.c

Die Verbindung mit strg+w klappt nicht immer zuverlässig.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:45:02 24.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:48:51 24.06.2011   Titel:              Zitieren

version = "0.0.2.143 - Rev: 983"

Farbwerte aus video.h eingesetzt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:39:25 24.06.2011   Titel:              Zitieren

version = "0.0.2.144 - Rev: 984"

Neues Farbschema eingefügt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:06:58 24.06.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:53:26 24.06.2011   Titel:              Zitieren

Version 0.0.2.145

- Stack Trace implementiert
- Ausgabe bei Exceptions verbessert
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:02:14 24.06.2011   Titel:              Zitieren

Version 0.0.2.146:

- Textausgabe gemeinsam mit ehenkes verbessert
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:32:57 24.06.2011   Titel:              Zitieren

Version 0.0.2.147:

- Ausgaben (hauptsächlich im Netzwerkcode) zusammen mit ehenkes wesentlich verbessert.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:31:38 24.06.2011   Titel:              Zitieren

version = "0.0.2.148 - Rev: 988"

- Ausgabe-Fehler in tcp.c behoben

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:22:39 25.06.2011   Titel:              Zitieren

version = "0.0.2.149 - Rev: 989"

Netzwerk-Ausgaben weiter verfeinert, dass man IPs, MACs, TCP flags klar erkennt, bei connections nur noch die ID anstelle der längeren und bedeutungslosen Adresse. Man kann nun auch Empfang und Senden von Paketen besser erkennen.

Dank an MrX für die Unterstützung bei der Einleitung der Umgestaltung der Ausgabe!

Man erkennt nun auch merkwürdige Adressierungen klar, z.B. den nicht funktionierenden DHCP Ablauf in qemu oder wenn Nachzügler-Pakete an offenbar zu rasch (ohne time_wait) gelöschte Verbindungen geschickt werden. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:26:26 25.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:54:25 25.06.2011   Titel:              Zitieren

version = "0.0.2.150 - Rev: 990"

SEQ und ACK Nummern in Host-Format umgewandelt zum Speichern, Rechnen und als Parameter

Anmerkung:
qemu version, bitte router MAC in network.h anpassen an eigene Daten.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:56:11 25.06.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:05:39 25.06.2011   Titel:              Zitieren

Version 0.0.2.151:

- IP_t als Typ für IPs geschaffen (union, Zugriff auf Integer-Repräsentation mit .iIP, auf die uint8t[4]-repräsentation mit .IP). (Fukanos Tipp).
- USB-Ausgabe gekürzt
- Bugfix in Floppy-Motorsteuerung: Motor wird wieder ausgestellt, nachdem ein Screenshot erstellt wurde
- Heap besser mit Mutexen geschützt
- F12 als Alias für PrintScreen bei Screenshots (-> Bessere Kompatibilität mit Emulatoren)
- Hack für Qemu verbessert: MAC des Qemu-Gateways statt des externen Gateways angegeben (Ehenkes Tipp)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:08:03 25.06.2011   Titel:              Zitieren

version = "0.0.2.152 - Rev: 992"

- qemu IP/MAC statisch in arp cache hinzugefügt
- Korrektur in ethernet.c für _NETWORK_DIAGNOSIS_
- Ausgabe bei arp_sendRequest für gesuchte IP
- DHCP_Discover gestrichen bei qemu (wirklich?), dafür 10.0.2.15 eingestellt in network.h
- beep off

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:12:57 26.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:59:16 25.06.2011   Titel:              Zitieren

Tipp für Testumgebung qemu (von taljeth):
-net dump,file=xyz.pcap (hinterher mit wireshark öffnen)

aktueller qemu batch:
Code:
qemu.exe  -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -localtime -net user -net dump,file=netdump.pcap
Code:
qemu.exe -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -localtime -net user -net dump,file=netdump.pcap
Code:
qemu.exe  -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139,addr=1A,macaddr=00:12:12:12:12:12 -net tap,ifname=TAP2 -localtime -net user -net dump,file=netdump.pcap


Eigene Erfahrungen: Bridge TAP/LAN macht wenig Sinn, gibt Probleme mit -net user. Ohne -net user geht es nicht, dann bleibt alles stecken nach dem ersten Senden, keine Antwort an PrettyOS.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:34:34 26.06.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:00:59 26.06.2011   Titel:              Zitieren

version = "0.0.2.153 - Rev: 993"

- struct zur Speicherung von Daten während des Empfangs über die verschiedenen Protokolle hinweg eingebaut (bisher gesammelt: senderMAC, senderIP).
- ACHTUNG: Änderung in network.h

Mit Qemu wurde bisher kein vollständiges DHCP erreicht, was selbst bei Hardware ohne Probleme verlief.

EDIT: diese version macht auch mit Test-PC Probleme. Ursache wird ermittelt. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:21:33 26.06.2011, insgesamt 7-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:35:05 26.06.2011   Titel:              Zitieren

version = "0.0.2.154 - Rev: 994"

- DHCP Request wieder auf BROADCAST Flag umgerüstet (nur damit läuft der Test-PC).

Committed wurde die Qemu-Version.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:10:29 26.06.2011   Titel:              Zitieren

version = "0.0.2.154 - Rev: 995"

Wir verzichten nun in Qemu auf das DHCP Discover (network.c). Damit erhalten wir von lästigen DHCP-Paketen freie und wirklich interessante Wireshark-Protokolle (pcap), die man direkt mit wireshark aus dem Internet als Vergleich zu eigenen Versuchen öffnen kann.

Hier ein Beispiel mit strg+w (Handshake mit Homepage) und strg+x (Daten laden, Verbindung ordnungsgemäß schließen). Hier wirkt vor allem der Host zusätzlich mit, so dass wir davon lernen können, wie man es richtig macht. :)

http://www.henkessoft.de/OS_Dev/wireshark_captions/rev.995_netdump.pcap

Es kam letzt die Frage auf, ob 00-12-12-12-12-12 eine gültige MAC-Adresse ist (The first 3 byte of each MAC address are assigned to a specific vendor.). Sie ist es in der Tat:

http://www.base64online.com/mac_address.php?mac=00%3A12%3A12
Mac address: 00:12:12 Vendor: Plus PLUS Corporation

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:16:43 26.06.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:59:47 26.06.2011   Titel:              Zitieren

Version 0.0.2.155:

- Floppytreiber: Dump-Funktion implementiert, Configure-Kommando genutzt, IRQ-Timeout bei Calibrate gesenkt, Reset gemäß Spezifikation implementiert.
- Bugfix: BL2 übergibt korrekte mmap-Länge an Kernel -> Keine Reboot-Probleme mehr.
- Code angepasst, sodass keine Compilerfehler beim kompilieren mit -O2 oder -O3 kommen.
- DHCP: Redundanten Code in Funktion ausgelagert.
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:16:33 26.06.2011   Titel:              Zitieren

Version 0.0.2.156:

- Netzwerk-API implementiert -> Userprogramme im Netzwerk mit TCP sind jetzt möglich
- starwars.ELF als erstes Netzwerk-Userprogramm hinzugefügt


Zuletzt bearbeitet von Erhard Henkes am 23:58:13 26.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:53:38 26.06.2011   Titel:              Zitieren

version = "0.0.2.157 - Rev: 998"

- Fehler (Parameterreihenfolge) berichtigt in tcp_usend
- user program "browser.elf" beispielhaft erstellt (Zugriff auf Homepage ehenkes), um tcp_usend (kernel) aus dem user-land mittels syscall zu testen. Funktioniert nun prächtig!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:44:54 27.06.2011   Titel:              Zitieren

version = "0.0.2.158 - Rev: 999"

- strg+i, strg+w, strg+x entfernt.

- tcp..h/c: Nutzung von TCB entsprechend RFC 793 testweise für Active Open begonnen.

Active open klappt noch. :)

Literatur: http://www.systems.ethz.ch/education/past-courses/fs10/operating-systems-and-networks/material/TCP-Spec.pdf

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:13:23 28.06.2011, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:14:20 28.06.2011   Titel:              Zitieren

version = "0.0.2.159 - Rev: 1000" und
version = "0.0.2.160 - Rev: 1001"

Weiterentwicklung bei tcp.h/c gemäßt rfc 793.

Problem: SEQs und ACKs beim Datentausch auf auf FIN offenbar noch falsch.
Letzte korrekte Rev: 999

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:01:25 28.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:42:49 28.06.2011   Titel:              Zitieren

version = "0.0.2.161 - Rev: 1002"

Problem bei tcp.c:

Mischung aus Rev. 1001 und rollback zu Rev. 999. Nun kann man systematisch den Logikfehler im Ablauf suchen.
Ein Fehler war die Verwechslung zwischen length und tcpDataLength = -4 /* frame ? */ + length - (tcp->dataOffset << 2);
Die -4 wird bis jetzt nicht verstanden!!!

Die passive open Seite läuft leider nicht ok (Test-PC, strg+b, telnet: open geht, send blabla <--- ACK-Problem)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:15:49 28.06.2011   Titel:              Zitieren

version = "0.0.2.162 - Rev: 1003"

Wesentliche Fehler beseitigt in tcp.c:
- kein Erhöhen der SND.NXT beim Empfang bei ESTABLISHED (die +1 gilt nur für den 3-way-handshake)
- dafür Erhöhen der SND.NXT beim eigenen Senden ^^

Unklar nach wie vor:
C/C++ Code:
uint32_t tcpDataLength = -4 /* frame ? */ + length - (tcp->dataOffset << 2);
C/C++ Code:
uint32_t tcpDataLength = -4 /* frame ? */ + length - (tcp->dataOffset << 2);
C/C++ Code:
uint32_t tcpDataLength = -4 /* frame ? */ + length - (tcp->dataOffset << 2);


Problem: passive open noch nicht in Ordnung!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:16:14 28.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:54:37 28.06.2011   Titel:              Zitieren

version = "0.0.2.163 - Rev: 1004"

Nun gelingt auch passive open mit anschließendem Datentausch:
Hierbei Test-PC verwenden, dafür #define QEMU_HACK auskommentieren.
Für telnet (PrettyOS als Server) unbedingt #define _NETWORK_DATA_ aktivieren, damit man die ankommenden Daten sieht. Hier müsste jemand ein telnet-Server-Programm schreiben im user-land von PrettyOS. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:03:39 28.06.2011   Titel:              Zitieren

Version 0.0.2.164:

- Funktion zum verschieben von Elementen zwischen Ringen implementiert: Scheduler verursacht weniger Speicherallokationen/Deallokationen
- Code aufgeräumt, Änderung an dummy.c reverted.
- rtl8139_eeprom.c/h gelöscht, da kein konkreter Anwendungszweck vorhanden (wurde ohne klaren Zweck mit Rev. 708 von bheide hinzugefügt)


Zuletzt bearbeitet von Erhard Henkes am 23:58:41 28.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:56:12 28.06.2011   Titel:              Zitieren

version = "0.0.2.165 - Rev: 1006"

static bool IsSegmentAcceptable (tcpPacket_t* tcp, tcpConnection_t* connection, uint16_t tcpDatalength) hinzugefügt und im TCP-Datenempfang eingesetzt, um eingehende Pakete zu prüfen.

beep ausgeschaltet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:19:11 30.06.2011   Titel:              Zitieren

version = "0.0.2.166 - Rev: 1007" (??)

Codevereinfachungen in tcp.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:20:15 30.06.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:18:12 30.06.2011   Titel:              Zitieren

version = "0.0.2.167 - Rev: 1007"

SND.WND, RCV.WND. SEG.WND verwendet.

Aktuell:

Vorgabe:
const uint16_t STARTWINDOWS = 8192; // Wert des Empfangspuffers

Reduktion des Empfangspuffers nach Empfang (vor tcp_send):
connection->tcb.SND.WND -= tcpDataLength;
connection->tcb.SEG.WND = connection->tcb.SND.WND;

Wiederherstellung des Empfangspuffers (mach tcp_send):
connection->tcb.SND.WND = STARTWINDOWS; // Simuliert Weitergabe der Daten an user-App, z.B. unseren Browser.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:21:03 30.06.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:50:38 30.06.2011   Titel:              Zitieren

version = "0.0.2.168 - Rev: 1008"

TCP: kleine Verbesserungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:18:13 01.07.2011   Titel:              Zitieren

version = "0.0.2.169 - Rev: 1009"

Funktion tcp_receive(...) wurde intern komplett umgebaut. Die erste Ordnungspriorität haben nun die Zustände (states) und nicht mehr die Flags.
Damit lässt sich das Modul besser mit den Plänen in http://www.medianet.kent.edu/techreports/TR2005-07-22-tcp-EFSM.pdf vergleichen.

Tests: browser , starwars (beides active open) und telnet-server (passive open, zur Zeit nur mit Hardware testbar) gehen noch.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:56:12 01.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:02:56 01.07.2011   Titel:              Zitieren

version = "0.0.2.170 - Rev: 1010"

Verbesserungen in tcp.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:33:57 02.07.2011   Titel:              Zitieren

version = "0.0.2.171 - Rev: 1011"

Verbesserungen tcp.c und network.h (nun kann einfacher zwischen Qemu und Hardware umgestellt werden)

Anmerkungen :
Will man Qemu als telnet-Server verwenden: _NETWORK_DATA_ aktivieren in os.h, damit die Daten angezeigt werden (vielleicht hat dies auch noch einen Seiteneffekt).

Mit Qemu/TAP klappt es leider noch nicht korrekt. Es bleibt beim SYN (telnet) - SYN,ACK (PrettyOS) hängen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:56:58 02.07.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:59:30 02.07.2011   Titel:              Zitieren

version = "0.0.2.172 - Rev: 1012"

Farbschemata weiter angepasst, z.B. textColor(WHITE) durch textColor(TEXT) usw.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:13:52 02.07.2011   Titel:              Zitieren

version = "0.0.2.173 - Rev: 1013"

#define _TCP_NETWORK_DATA_ geschaffen. Damit klappt dann auch der telnet-Server Hardwaretest. Offensichtlich ein Zeitproblem, bei Hardware nicht erstaunlich.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:34:41 02.07.2011   Titel:              Zitieren

version = "0.0.2.174 - Rev: 1014"

Einige Fehler bei passive open in tcp.c behoben.
tcp_data_Längenberechnung noch falsch. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:05:57 02.07.2011   Titel:              Zitieren

version = "0.0.2.175 - Rev: 1015"

lastPacket erweitert, um die verbleibenden Datenlängen auf den einzelnen Stufen zu ermitteln

Kette bei uns:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
EthernetRecv(buffer->adapter, (ethernet_t*)buffer->data, buffer->length);               // network.c
EthernetRecv(network_adapter_t* adapter, ethernet_t* eth, uint32_t length){...}         // ethernet.c

if ((eth->type_len[0] == 0x08) && (eth->type_len[1] == 0x00)) // IPv4                   // ethernet.c
{
     ipv4_received(adapter, (void*)(eth+1), length-sizeof(ethernet_t));
}

ipv4_received(struct network_adapter* adapter, ipv4Packet_t* packet, uint32_t length)   // ipv4.c

tcp_receive(adapter, (void*)(packet+1), packet->sourceIP, length-sizeof(ipv4Packet_t)); // ipv4.c
uint32_t tcpDataLength = -4 /* CRC ? */ + length - (tcp->dataOffset << 2);            // tcp.c
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
EthernetRecv(buffer->adapter, (ethernet_t*)buffer->data, buffer->length); // network.c
EthernetRecv(network_adapter_t* adapter, ethernet_t* eth, uint32_t length){...} // ethernet.c

if ((eth->type_len[0] == 0x08) && (eth->type_len[1] == 0x00)) // IPv4 // ethernet.c
{
ipv4_received(adapter, (void*)(eth+1), length-sizeof(ethernet_t));
}

ipv4_received(struct network_adapter* adapter, ipv4Packet_t* packet, uint32_t length) // ipv4.c

tcp_receive(adapter, (void*)(packet+1), packet->sourceIP, length-sizeof(ipv4Packet_t)); // ipv4.c
uint32_t tcpDataLength = -4 /* CRC ? */ + length - (tcp->dataOffset << 2); // tcp.c
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
EthernetRecv(buffer->adapter, (ethernet_t*)buffer->data, buffer->length);               // network.c
EthernetRecv(network_adapter_t* adapter, ethernet_t* eth, uint32_t length){...}         // ethernet.c

if ((eth->type_len[0] == 0x08) && (eth->type_len[1] == 0x00)) // IPv4                   // ethernet.c
{
     ipv4_received(adapter, (void*)(eth+1), length-sizeof(ethernet_t));
}

ipv4_received(struct network_adapter* adapter, ipv4Packet_t* packet, uint32_t length)   // ipv4.c

tcp_receive(adapter, (void*)(packet+1), packet->sourceIP, length-sizeof(ipv4Packet_t)); // ipv4.c
uint32_t tcpDataLength = -4 /* CRC ? */ + length - (tcp->dataOffset << 2);            // tcp.c

Die -4 könnte die CRC sein, wenn diese im Paket noch dabei ist.
TODO: das ganze verbleibende TCP-Paket zeigen in PrettyOS (in wireshark sieht man hinter den tcp-Daten nichts)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:12:59 02.07.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:56:29 02.07.2011   Titel:              Zitieren

version = "0.0.2.176 - Rev: 1016" (in ckernel.c zu hoch gedreht)

Analyse des TCP Daten Pakets, dort hinten hängt noch ggf. PAD und 4 bytes CRC

TODO: CRC und PAD müssen korrekt behandelt werden!

Tests mit Cuervo (bei ihm klappts in qemu ohne TAP):

Cuervo:
mit pcnet:
Code:
send 123456: 31 32 33 34 35 36 0D 0A
send 12345:  31 32 33 34 35 0D 0A
Code:
send 123456: 31 32 33 34 35 36 0D 0A
send 12345: 31 32 33 34 35 0D 0A
Code:
send 123456: 31 32 33 34 35 36 0D 0A
send 12345:  31 32 33 34 35 0D 0A

mit rtl8139:
Code:
send 1:      31 0D 0A 00 00 00 16 FC 7F A0
Code:
send 1: 31 0D 0A 00 00 00 16 FC 7F A0
Code:
send 1:      31 0D 0A 00 00 00 16 FC 7F A0

also mehrere PADs möglich.

Zitat:
Das PAD-Feld wird verwendet, um den Ethernet-Frame auf die erforderliche Minimalgröße von 64 Byte zu bringen. Das ist bei alten Übertragungsverfahren wichtig, um Kollisionen in der sogenannten Collision-Domain sicher zu erkennen. Präambel und SFD (8 Bytes) werden bei der erforderlichen Mindestlänge des Frames nicht mitgezählt, wohl aber ein VLAN-Tag. Ein PAD-Feld wird somit erforderlich, wenn als Nutzdaten weniger als 46 bzw. 42 Bytes (ohne bzw. mit 802.1Q-VLAN-Tag) zu übertragen sind. Das in Type angegebene Protokoll muss dafür sorgen, dass diese als Pad angefügten Bytes (auch „Padding Bytes“ genannt) nicht interpretiert werden, wofür es üblicherweise eine eigene Nutzdaten-Längenangabe bereithält.

http://upload.wikimedia.org/wikipedia/de/a/aa/Ethernetpaket.svg


testPC ehenkes:
Code:
send 123456: 31 32 33 34 35 36 .. .. .. ..
send 12345:  31 32 33 34 35 00 .. .. .. ..
Code:
send 123456: 31 32 33 34 35 36 .. .. .. ..
send 12345: 31 32 33 34 35 00 .. .. .. ..
Code:
send 123456: 31 32 33 34 35 36 .. .. .. ..
send 12345:  31 32 33 34 35 00 .. .. .. ..
:warning:

Cuervo: mit pcnet kommt die CRC nicht, mit rtl8139 schon (in qemu)

Die Frage ist nun: wie analysiert man das ganz vorne in ethernet.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:56:38 02.07.2011, insgesamt 8-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:17:19 02.07.2011   Titel:              Zitieren

version = "0.0.2.177 - Rev: 1017"

tcp.c: Test auf PADs im Ethernet-Paket zur Korrektur von tcpDataLength
Erläuterung: bei Ethernet-Paketen < 64 byte (ohne VLAN tag gerechnet, aber mit CRC) wird mit Nullen aufgefüllt. Wir setzen uns genau auf das letzte mit tcpDataLength ermittelte Byte, dann klappern wir die Bytes ab. Bei 0x00 (padding) wird tcpDataLength jeweils um 1 verkürzt.

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uint32_t tcpDataLength = tcpDataLength = length - (tcp->dataOffset << 2) - 4; /* FCS */;
uint8_t PadCount = 0;
for (uint16_t i=tcpDataLength-1; i>=0; i--)
{
    if ( (*(uint8_t*)((uintptr_t)tcp + (tcp->dataOffset << 2) + i) ) == 0x00 )
    {
        PadCount++;
    }
    else
    {
        break;                       
    }
}
tcpDataLength -= PadCount;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uint32_t tcpDataLength = tcpDataLength = length - (tcp->dataOffset << 2) - 4; /* FCS */;
uint8_t PadCount = 0;
for (uint16_t i=tcpDataLength-1; i>=0; i--)
{
if ( (*(uint8_t*)((uintptr_t)tcp + (tcp->dataOffset << 2) + i) ) == 0x00 )
{
PadCount++;
}
else
{
break;
}
}
tcpDataLength -= PadCount;
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uint32_t tcpDataLength = tcpDataLength = length - (tcp->dataOffset << 2) - 4; /* FCS */;
uint8_t PadCount = 0;
for (uint16_t i=tcpDataLength-1; i>=0; i--)
{
    if ( (*(uint8_t*)((uintptr_t)tcp + (tcp->dataOffset << 2) + i) ) == 0x00 )
    {
        PadCount++;
    }
    else
    {
        break;                       
    }
}
tcpDataLength -= PadCount;


Damit erzielen wir gültige ACKs. :)

version = "0.0.2.177 - Rev: 1018"

ohne lästiger Stop ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:59:33 02.07.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:36:21 02.07.2011   Titel:              Zitieren

version = "0.0.2.178 - Rev: 1019"

Farbkorrektur bei ARP Cache: ... (thx to Cuervo)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:25:07 03.07.2011   Titel:              Zitieren

version = "0.0.2.178 - Rev: 1020"

irc.c hinzugefügt, experimentalstatus, aber es gelang damit der eintritt in den euirc chat #PrettyOS

Meilenstein IRC! :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:26:42 03.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:42:38 03.07.2011   Titel:              Zitieren

version = "0.0.2.179 - Rev: 1021"

C/C++ Code:
connection->tcb.SEG.SEQ = connection->tcb.SND.NXT;
C/C++ Code:
connection->tcb.SEG.SEQ = connection->tcb.SND.NXT;
C/C++ Code:
connection->tcb.SEG.SEQ = connection->tcb.SND.NXT;

ergänzt in tcp.c bei tcp_send(...) für ESTABLISHED

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:20:21 03.07.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:49:33 03.07.2011   Titel:              Zitieren

version = "0.0.2.179 - Rev: 1022"

irc.c weiter entwickelt, man kann texte bis max. 7 zeichen (gets oder event Problem?) eingeben. Diese werden in den channel #PrettyOS gesendet.

Problem:
<Pretty00001>1234567 sieben zeichen gehen
bei 12345678 (Eingabe) bleibt das User-Programm hängen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:56:51 03.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:54:36 04.07.2011   Titel:              Zitieren

version = "0.0.2.180 - Rev: 1023"

#define MAX_EVENTS 2000 <--- damit der IRC Client funktioniert (ist nun auf max. 667 Zeichen beschränkt, da drei Events pro Zeichen: EVENT_KEY_DOWN, EVENT_KEY_UP und EVENT_TEXT_ENTERED)

Nicht perfekt, aber eine Zwischenlösung.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:56:49 04.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:15:24 04.07.2011   Titel:              Zitieren

version = "0.0.2.181 - Rev: 1024"

list und ring mit ASSERT gesichert (list.c), damit fehlerhafte Parameter sichtbar werden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:17:40 04.07.2011   Titel:              Zitieren

Version 0.0.2.182:

- PCI: pci_deviceSentInterrupt implementiert, PCI-Bars 2-6 nur ausgelesen, wenn headerType 0
- listHead_t in list_t umbenannt
- CRC nun im RTL8139-Treiber aus empfangenen Paketen entfernt.
- Dummy.c: Schon wieder reverted. Das ist keine Spielwiese! Zum testen einfach eine neue .c-Datei in other_userprogs anlegen. Das funktioniert viel besser, weil die dann automatisch übersetzt und auf die Floppy gepackt wird.
- fdir-Anzeige überarbeitet, Code verständlich gemacht
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:24:35 05.07.2011   Titel:              Zitieren

version = "0.0.2.183 - Rev: 1026" (in ckernel.c: versehentlich 1025)

tcp: in/out Buffer angefangen

arp: nicht table, sondern cache (führt zu cache->table, besser als table->table)

user-prg:
irc.elf etwas weiter entwickelt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:04:16 06.07.2011   Titel:              Zitieren

version = "0.0.2.184 - Rev: 1027"

tcpIn_t, tcpOut_t, ... hinzu gefügt.

Problem: tcp.c, Zeile 432 ff.: Fill in-buffer list arbeitet zu langsam.
Aktiviert man memcpy(In->data, ...), dann bleibt der starwars-Empfang in Qemu hängen (Test auf einen hohen Dateninput). Kann man event.buffer und In->data (dauerhaft auf dem Heap) kombinieren und das doppelte memcpy sparen?

Vielleicht benötigen wir auch ein schnelleres memcpy in Assembler.

beep weg (sehr lästig beim Testen)


Code läst sich bis -O2 compilieren, dann gehen auch beide memcpy, allerdings nicht mit -O3, dort kommt ein Fehler bei der checksum-Routine.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:20:12 06.07.2011, insgesamt 5-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:21:03 06.07.2011   Titel:              Zitieren

Lösungsvorschlag:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, IP_t srcIP, IP_t destIP, uint16_t protocol)
{
    updtcpPseudoHeader_t pseudo = { srcIP, destIP, 0, protocol, htons(length) };
    uint32_t pseudoHeaderChecksum = 0;

    for(uint32_t i = 0; i < sizeof(updtcpPseudoHeader_t); i+=2)
    {
        pseudoHeaderChecksum += htons(((uint16_t*)&pseudo)[i]);
    }

    return internetChecksum(p, length, pseudoHeaderChecksum);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, IP_t srcIP, IP_t destIP, uint16_t protocol)
{
updtcpPseudoHeader_t pseudo = { srcIP, destIP, 0, protocol, htons(length) };
uint32_t pseudoHeaderChecksum = 0;

for(uint32_t i = 0; i < sizeof(updtcpPseudoHeader_t); i+=2)
{
pseudoHeaderChecksum += htons(((uint16_t*)&pseudo)[i]);
}

return internetChecksum(p, length, pseudoHeaderChecksum);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
uint16_t udptcpCalculateChecksum(void* p, uint16_t length, IP_t srcIP, IP_t destIP, uint16_t protocol)
{
    updtcpPseudoHeader_t pseudo = { srcIP, destIP, 0, protocol, htons(length) };
    uint32_t pseudoHeaderChecksum = 0;

    for(uint32_t i = 0; i < sizeof(updtcpPseudoHeader_t); i+=2)
    {
        pseudoHeaderChecksum += htons(((uint16_t*)&pseudo)[i]);
    }

    return internetChecksum(p, length, pseudoHeaderChecksum);
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:14:50 06.07.2011   Titel:              Zitieren

Den O3-Fehler kenne ich. Ist afaik ein Bug in GCC 4.4.0, der in gcc 4.4.4? gefixt wurde. Da es aber keinen Grund gibt, mit -O3 zu kompilieren, denke ich, dass ein Workaround nicht nötig ist.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:50:20 06.07.2011   Titel:              Zitieren

Version 0.0.2.185:

- IRC-Programm verbessert: Joinen mit Strg+J, Senden an #PrettyOS mit Strg+P
- Padding wird nun in ipv4.c entfernt und nicht mehr (fehlerhaft) in tcp.c.
- Paket- und Headerlängen in tcp.c und ipv4.c korrekt verwendet.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:57:01 06.07.2011   Titel:              Zitieren

version = "0.0.2.186 - Rev: 1029"

@MrX: hab deinen Vorschlag umgesetzt, aber es besteht ein Zugriffsproblem von user nach kernel heap.

Experimenteller Zwischenstatus: Übergabe eines Events in tcp.c mit buffer als Zeiger. Ist Array notwendig? Wenn ja, welche Größe?
Problem: Daten stecken im Kernel Heap. Wie greift man darauf von user-land aus zu? (Erfolgloser Versuch in browser.c, irc und starwars noch unverändert, wieso gibt das keinen #PF?) :rolleyes:

MrX: Idee, wie man das auflösen kann?


memcpy durch etwas schnellere Assembler-Version ersetzt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:59:49 06.07.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:59:46 07.07.2011   Titel:              Zitieren

Anmerkung aus #lost: wir sollten mehr Unterordner einziehen unter \kernel.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:48:12 07.07.2011   Titel:              Zitieren

version = "0.0.2.187 - Rev: 1030"

- TCP-Datentransfer nun korrekt von kernel nach user
- TCP-Datentransfer beschleunigt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:35:16 07.07.2011   Titel:              Zitieren

version = "0.0.2.188 - Rev: 1031"

- kleine Änderungen in tcp.c und types.h (connectionID)
- bei receive FIN,ACK (geht bei browser.c) werden testweise die Pakete in der IN-Queue angezeigt: Seq, len, data (funktioniert!)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:30:28 07.07.2011   Titel:              Zitieren

version = "0.0.2.188 - Rev: 1032"

- irc angepasst, damit ein zufälliger Name (Pretty+Zufallszahl) gebildet wird.

Zitat:
- Pretty14309 joined
<Pretty14309>hi
<ehenkes>test
- Pretty14309 quit (Client exited)

- Pretty17705 joined
<Pretty17705>schon wieder da ^^
- Pretty17705 quit (Connection reset by peer)

- Pretty19370 joined
...
- Pretty19370 quit (Connection reset by peer)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:39:23 07.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:00:22 08.07.2011   Titel:              Zitieren

version = "0.0.2.188 - Rev: 1033"

Hinweis von Kollegen aus #lost auf die Pflicht, sich mit QUIT zu entfernen.
“A client session is ended with a quit message.”

Dem kommen wir gerne nach. Kostet aber schon wieder zwei Zeilen.;)
C/C++ Code:
case KEY_ESC:
{
    char* msgQuit = "QUIT\r\n";
    tcp_send(connection, msgQuit, strlen(msgQuit));
    tcp_close(connection);
    return(0);
}
C/C++ Code:
case KEY_ESC:
{
char* msgQuit = "QUIT\r\n";
tcp_send(connection, msgQuit, strlen(msgQuit));
tcp_close(connection);
return(0);
}
C/C++ Code:
case KEY_ESC:
{
    char* msgQuit = "QUIT\r\n";
    tcp_send(connection, msgQuit, strlen(msgQuit));
    tcp_close(connection);
    return(0);
}


Zitat:
- Pretty31812 joined
<Pretty31812>test auf quit
- Pretty31812 quit (Life is too short...)

- Pretty28547 joined
<Pretty28547>nochmal jetzt mit ESC weg
- Pretty28547 quit (Life is too short...)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:01:48 08.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:05:25 08.07.2011   Titel:              Zitieren

version = "0.0.2.189 - Rev: 1034"

- memcpy, memset nun schneller (MrX)
- irc.c (Nummernausgabe weg)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:26:27 08.07.2011   Titel:              Zitieren

Version 0.0.2.190:

- console.c: Bugfix: console_clear ändert Textfarbe nicht mehr.
- memshow: Bugfix bei count%16!=0: Darstellung korrigiert.
- memsetl durch memset ersetzt (Performance-Hack nicht mehr nötig)
- optimiertes memset/memcpy auch im Userspace, memsetw ebenfalls optimiert
- Shell:
-- Bugfix: Eingabezeile nun korrekt gelöscht.
-- Bugfix: Cursorposition wird zurückgesetzt, wenn Eintrag mit Pfeiltaste nach unten gelöscht wird.
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:42:42 08.07.2011   Titel:              Zitieren

version = "0.0.2.191 - Rev: 1036"

Steuerungsmechanismus window mittels Feedback aus event_issue testweise installiert, um Erfahrung zu bekommen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:22:15 08.07.2011   Titel:              Zitieren

version = "0.0.2.192 - Rev: 1037"

Gesamtgröße der TCP-Daten in der Event-Queue bestimmt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:30:14 09.07.2011   Titel:              Zitieren

version = "0.0.2.193 - Rev: 1038"

Versuchsweise Steuerung des sliding window mit der Gesamtmenge an TCP-Data (bytes) in der Event Queue des task.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 09:20:50 09.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:38:25 09.07.2011   Titel:              Zitieren

version = "0.0.2.194 - Rev: 1039"

tcp ausgaben stark vereinfacht

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:33:31 09.07.2011   Titel:              Zitieren

version = "0.0.2.195 - Rev: 1040"

Fehler in TCP korrigiert (z.B. window Steuerung)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:10:55 10.07.2011   Titel:              Zitieren

version = "0.0.2.196 - Rev: 1041"

Eigenes Ping, also ICMP_echoRequest, eingebaut, und Empfang auf den ICMP_echoReply erweitert. leider funktioniert das auf der VM Qemu bisher noch nicht. Daher sollte man zunächst auf Hardware testen.

Hier das Ergebnis auf strg+p:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
case 'p':
{
  IP_t destIP; // www.henkessoft.de
  destIP.IP[0] =    82; destIP.IP[1] =   100;
  destIP.IP[2] =   220; destIP.IP[3] =    68;
 
  network_adapter_t* adapter = network_getFirstAdapter();
  if (adapter)
  {
    ICMP_echoRequest(adapter, destIP);
  }
  break;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
case 'p':
{
IP_t destIP; // www.henkessoft.de
destIP.IP[0] = 82; destIP.IP[1] = 100;
destIP.IP[2] = 220; destIP.IP[3] = 68;

network_adapter_t* adapter = network_getFirstAdapter();
if (adapter)
{
ICMP_echoRequest(adapter, destIP);
}
break;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
case 'p':
{
  IP_t destIP; // www.henkessoft.de
  destIP.IP[0] =    82; destIP.IP[1] =   100;
  destIP.IP[2] =   220; destIP.IP[3] =    68;
 
  network_adapter_t* adapter = network_getFirstAdapter();
  if (adapter)
  {
    ICMP_echoRequest(adapter, destIP);
  }
  break;
}


Folgendes tauscht dann als Analyse des Echos in PrettyOS wieder auf:
Code:
ICMP_echoReply:  ID: AFFE seq: 1
PrettyOS ist das Betriebssystem der Projektgru
ppe "OS-Development" im deutschsprachigen C++-Forum ...              
Code:
ICMP_echoReply: ID: AFFE seq: 1
PrettyOS ist das Betriebssystem der Projektgru
ppe "OS-Development" im deutschsprachigen C++-Forum ...
Code:
ICMP_echoReply:  ID: AFFE seq: 1
PrettyOS ist das Betriebssystem der Projektgru
ppe "OS-Development" im deutschsprachigen C++-Forum ...              
(Anmerkung: string wird noch nicht korrekt ausgelesen. Zeichen danach?)

aus wiki: Das „Daten“-Feld kann jedoch auch dazu missbraucht werden, um Nutzdaten zu übertragen (ICMP-Tunneling). ;) Werbung für PrettyOS und c++.de ;)
hrping hat Cäsars de bello Gallico als Datensatz. :D

Macht man dies mit dem qemu hack, so taucht beim Versuch des Erreichens des Host-Subnets eine ICMP Botschaft in wireshark auf, die wir bisher noch nicht analysieren: "destination unreachable".

Zitat:
264 27.444422 10.0.2.15 192.168.1.1 ICMP 2187 Echo (ping) request id=0xaffe, seq=1/256, ttl=128
265 27.444593 10.0.2.2 10.0.2.16 ICMP 120 Destination unreachable (Port unreachable)


ICMP bietet hiermit einen vielleicht guten Weg, um das qemu subnet 10.0.2.x und den Zusammenhang zum Host subnet (hier 192.168.1.x) zu analysieren und qemu so einzurichten, dass wir letztendlich auch unter Windows auf den störenden qemu hack verzichten können.

siehe: http://de.wikipedia.org/wiki/Internet_Control_Message_Protocol

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:00:42 10.07.2011, insgesamt 6-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 12:45:30 10.07.2011   Titel:              Zitieren

Version 0.0.2.197:

- BL1 und BL2: Code aufgeräumt/optimiert, Hotfixes gesichtet und ggf. entfernt.
- memcpy, memset und memsetw weiter verbessert; Zwei Bugs entfernt.
- Weitere Funktionen in Standardlib implementiert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:47:52 10.07.2011   Titel:              Zitieren

version = "0.0.2.198 - Rev: 1043"

- ICMP weiter vervollständigt

strg+p: wir versuchen uns selbst zu "pingen": http://www.henkessoft.de/OS_Dev/Bilder/rev.1043_ICMP_PING.PNG "Destination port unreachable"

Anmerkung: der ARP request erscheint sinnlos.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:48:50 10.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:30:42 10.07.2011   Titel:              Zitieren

version = "0.0.2.199 - Rev: 1044"

- Kleine Korrekturen im Netzwerkbereich

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:21:29 11.07.2011   Titel:              Zitieren

version = "0.0.2.200 - Rev: 1045"

- #defines ... in os.h getestet und Fehler beseitigt (nun können alle geöffnet werden. Code compiliert, aber das Programm ist nicht mehr wirklich lauffähig. ;) )
- icmp.c Zahlen gegen die defines ausgetauscht aus icmp.h
- Ausgaben bei Netzwerk verfeinert (z.B. nur eigenes tcp-window beim Senden)
- tcp-window-Steuerung verbessert

TODO: tcp In-Buffer freigeben nach Weitergabe an die Application

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:29:25 11.07.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:48:02 11.07.2011   Titel:              Zitieren

version = "0.0.2.200 - Rev: 1046"

starwars:
Bildschirmlöschen eingebaut (vielleicht muss man noch Pakete zusammenfassen)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:34:47 11.07.2011   Titel:              Zitieren

version = "0.0.2.201 - Rev: 1047"

- NetBIOS hinzugefügt
- tcp Out Buffer versuchsweise verwendet (log-Fkt. eingebaut)
- strg+p pingt jetzt 10.0.2.x (x = 0 ... 254)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:35:20 11.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:02:55 11.07.2011   Titel:              Zitieren

version = "0.0.2.202 - Rev: 1048"

Fehler korrigiert in tcp.c, der zu #PF führte (malloc ...)

tcp_showOutBuffers(connection,true); <--- testweise in tcp.c, zeile 460

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:17:40 11.07.2011   Titel:              Zitieren

version = "0.0.2.203 - Rev: 1049"

Netzwerk: Fehlerbeseitigung, Verfeinerung

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:06:41 11.07.2011   Titel:              Zitieren

version = "0.0.2.204 - Rev: 1050"

bei tcp_showOutBuffers werden bereits per ACK bestätigte Daten grün und die anderen braun angzeigt.

Idee: Die grün angezeigten Daten können gelöscht werden, weil bereits angekommen und bestätigt. Die braun angezeigten Daten werden nach einer gewissen Zeit erneut gesendet. Hierbei wird keine Sinnfrage gestellt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:37:23 11.07.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:58:10 12.07.2011   Titel:              Zitieren

version = "0.0.2.205 - Rev: 1051"

- Zeiterfassung packet sent und packet acknowledged eingebaut, RTT-Bestimmung ( http://de.wikipedia.org/wiki/Paketumlaufzeit )

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:50:24 12.07.2011   Titel:              Zitieren

version = "0.0.2.206 - Rev: 1052"

- Verbesserte Version für RTT

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:04:03 12.07.2011   Titel:              Zitieren

Version 0.0.2.207:

- tcp_findConnection verbessert: Mit tcp_findConnectionListen zusammengeführt, beachtet beim passiven Verbinden die Angabe des Ports
- Angefangen, lastPacket zu entfernen. Nur noch der derzeit nötige Teil ist vorhanden
- Zahlreiche Codestyle-Anpassungen. Bitte Styleguide beachten: Leerzeichen statt Tabs, keine Leerzeichen am Zeilenende.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:29:57 12.07.2011   Titel:              Zitieren

version = "0.0.2.208 - Rev: 1054"

- RTO wird bestimmt nach RFC 2988 und aufgerundet auf 1000 msec (typische RTT sind ca. 100 ms ins Internet)
- #define SYSTEMFREQUENCY 100 in timer.h (nicht mehr versteckt in ckernel.c) :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:35:51 12.07.2011   Titel:              Zitieren

version = "0.0.2.209 - Rev: 1055"

- retransmission eingefügt (rfc2988)


version = "0.0.2.210 - Rev: 1056"

- Fehler korrigiert bei retransmit (seq.nxt anstelle alte seq wurde in tcp_send geschickt)


version = "0.0.2.211 - Rev: 1057"

- Testwert für RTO in tcp.c entfernt. Jetzt wieder check auf time > RTO.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:15:04 13.07.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:01:07 13.07.2011   Titel:              Zitieren

version = "0.0.2.212 - Rev: 1058"

Vereinfachungen im Code von tcp.c, z.B. send_ACK(...)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:26:29 13.07.2011   Titel:              Zitieren

version = "0.0.2.213 - Rev: 1059"

- Fehler in RTO calculation (in letzter Versioin versehentlich eingebaut) wieder behoben

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:09:33 14.07.2011   Titel:              Zitieren

version = "0.0.2.214 - Rev: 1060"

- Eigenen tcp-Log auf die serielle Schittstelle 1 implementiert, der empfangene und gesendete Pakete mit relativen seq-/ack-Numbers dokumentiert
- Fehler korrigiert (mit Hilfe des serial Logs aufgefallen!) :)

Einfügen in qemu-Batch: -serial file:serielleSchnittstelle1.txt (nicht com1.txt verwenden. Das wird bereits unsichtbar verwendet, kann also nicht erstellt werden.)

Bsp. mit "browser":
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
send:  SYN        seq:    0      seq nxt:    1
recv:  SYN ACK    seq:    0      rcv nxt:    1      ack:    1
send:  ACK        seq:    1      seq nxt:    1      ack:    1         SND.UNA:    0

send:  ACK        seq:    1      seq nxt:    82     ack:    1
recv:  ACK PSH    seq:    1      rcv nxt:    248    ack:    82        SND.UNA:    82
send:  ACK        seq:    82     seq nxt:    82     ack:    248
recv:  ACK PSH    seq:    248    rcv nxt:    755    ack:    82        SND.UNA:    82
send:  ACK        seq:    82     seq nxt:    82     ack:    755
recv:  ACK PSH    seq:    248    rcv nxt:    755    ack:    82        SND.UNA:    82
send:  ACK        seq:    82     seq nxt:    82     ack:    755

send:  RST        seq:    82     seq nxt:    82
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
send: SYN seq: 0 seq nxt: 1
recv: SYN ACK seq: 0 rcv nxt: 1 ack: 1
send: ACK seq: 1 seq nxt: 1 ack: 1 SND.UNA: 0

send: ACK seq: 1 seq nxt: 82 ack: 1
recv: ACK PSH seq: 1 rcv nxt: 248 ack: 82 SND.UNA: 82
send: ACK seq: 82 seq nxt: 82 ack: 248
recv: ACK PSH seq: 248 rcv nxt: 755 ack: 82 SND.UNA: 82
send: ACK seq: 82 seq nxt: 82 ack: 755
recv: ACK PSH seq: 248 rcv nxt: 755 ack: 82 SND.UNA: 82
send: ACK seq: 82 seq nxt: 82 ack: 755

send: RST seq: 82 seq nxt: 82
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
send:  SYN        seq:    0      seq nxt:    1
recv:  SYN ACK    seq:    0      rcv nxt:    1      ack:    1
send:  ACK        seq:    1      seq nxt:    1      ack:    1         SND.UNA:    0

send:  ACK        seq:    1      seq nxt:    82     ack:    1
recv:  ACK PSH    seq:    1      rcv nxt:    248    ack:    82        SND.UNA:    82
send:  ACK        seq:    82     seq nxt:    82     ack:    248
recv:  ACK PSH    seq:    248    rcv nxt:    755    ack:    82        SND.UNA:    82
send:  ACK        seq:    82     seq nxt:    82     ack:    755
recv:  ACK PSH    seq:    248    rcv nxt:    755    ack:    82        SND.UNA:    82
send:  ACK        seq:    82     seq nxt:    82     ack:    755

send:  RST        seq:    82     seq nxt:    82

Reihenfolge der Pakete stimmt so wie oben (dort manuell sortiert) in der Ausgabe noch nicht, liegt noch am Sourcecode, da wir dort noch sofort senden, den serial_log gebe ich erst am Ende der tcp_receive aus. Sollte noch sinnvoll umgebaut werden. Die Abläufe funktionieren noch nicht komplett RFC793ff. konform.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:35:11 14.07.2011, insgesamt 7-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:15:40 14.07.2011   Titel:              Zitieren

version = "0.0.2.215 - Rev: 1061"

- tcp structs und abläufe weiter optimiert (Paket-Reihenfolge kommt nun richtig)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:53:31 14.07.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:57:50 14.07.2011   Titel:              Zitieren

Version 0.0.2.216:

- Unterstützung für PE-Dateien implementiert
- VM86-Tasks haben nun ein eigenes PD -> Mehrere VM86-Tasks mit gleicher virtuellen Adresse (0x100) sind nun möglich
- waitForEvent implementiert, Als syscall eingeführt, in Userprogrammen genutzt
- RTO-Formel korrigiert (Klammern falsch gesetzt)
- Kleinigkeiten. U.a. Include-Gruppierung in ckernel.c überarbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 09:36:45 15.07.2011   Titel:              Zitieren

version = "0.0.2.217 - Rev: 1063"

Kleine Korrekturen in tcp.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:06:37 15.07.2011   Titel:              Zitieren

version = "0.0.2.218 - Rev: 1064"

C/C++ Code:
//serial.h:
static inline void serial_logUINT(uint8_t com, uint32_t num)
static inline void serial_logINT (uint8_t com, int32_t  num)
C/C++ Code:
//serial.h:
static inline void serial_logUINT(uint8_t com, uint32_t num)
static inline void serial_logINT (uint8_t com, int32_t num)
C/C++ Code:
//serial.h:
static inline void serial_logUINT(uint8_t com, uint32_t num)
static inline void serial_logINT (uint8_t com, int32_t  num)


Anwendung in tcp.c (vereinfachter code)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:07:22 15.07.2011   Titel:              Zitieren

Version 0.0.2.219:

- serial_log verhält sich nun analog zu printf
- Code von network.h/usb_hc.c nach pci.c verlegt
- Bugfix: Memoryleak beim löschen von eventqueues beseitigt
- Bugfix: Freetimetask nimmt nun keine events mehr an
- Verbesserungen am heap (placementMalloc in Funktion ausgelagert, unnötigen code hinter _MALLOC_FREE_ versteckt)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:47:11 15.07.2011   Titel:              Zitieren

version = "0.0.2.220 - Rev: 1066"

- starwars darstellung optimiert (Folge ESC,[,H als Bildtrenner nach clearScreen übersetzt und RU (bedeutung?) gelöscht)
- region_t nun als packed (spart 2 byte)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:13:48 15.07.2011   Titel:              Zitieren

version = "0.0.2.220 - Rev: 1067"

- Fehler in starwars.c korrigiert (das RU entstammt der MAC des qemu gateway???)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:44:39 15.07.2011   Titel:              Zitieren

version = "0.0.2.221 - Rev: 1068"

Weitere Korrekturen in tcp.c (ports nun zufällig zwischen 49152 und 65535)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:28:32 16.07.2011   Titel:              Zitieren

version = "0.0.2.222 - Rev: 1069"

- Im Heap gespeicherte tcp In/Out-Pakete werden beim Schließen gelöscht (Test: Browser klappt)
- Anmerkung: ge-ackte Pakete in der out-Liste werden nun sofort vollständig gelöscht (nicht erst beim Schließen). In den vorhergehenden Versionen wurde nur das Listenelement gelöscht, ohne die Struct und die Daten zu löschen (üble Fehlerquelle).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:31:08 16.07.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:26:39 16.07.2011   Titel:              Zitieren

version = "0.0.2.223 - Rev: 1070"

tcp.h/c: msl (maximum segment lifetime) eingebaut in connection->tcb und auf 10 sec gesetzt in createConnection(...)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:28:32 16.07.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:24:34 16.07.2011   Titel:              Zitieren

Version 0.0.2.224:

- memcpyr geschaffen (optimiert mit rep movsl), genutzt durch memmove. -> memmove optimiert.
- kheap nutzt nun memmove statt for-Schleife
- CPU-Cache in kernel.asm aktiviert (Bits 30 und 29 in CR0 gelöscht)
- todolist enthält nun timer-ähnliche Funktion
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:11:39 16.07.2011   Titel:              Zitieren

version = "0.0.2.225 - Rev: 1072"

Neue timer-Funktion verwendet im tcp-Prozess. Allerdings sind da noch Fehler im Ablauf im ACTIVE CLOSE Ablauf (qemu, irc). In FIN_WAIT_2 kommt ein ACK PSH und nicht das erwartete FIN. TODO: analysieren.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:27:00 17.07.2011   Titel:              Zitieren

version = "0.0.2.226 - Rev: 1073"

Duplicate ACK Empfang / Senden in tcp.c versuchsweise ergänzt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:34:18 17.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:54:20 17.07.2011   Titel:              Zitieren

version = "0.0.2.227 - Rev: 1074"

list_insert(list_t* list, element_t* next, void* data) hinzugefügt

Vorbereitung für den Übertrag vom noch zu schaffenden Out-of-Order Receive In-Buffer zum regulären In-Buffer.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:55:48 17.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:34:03 18.07.2011   Titel:              Zitieren

version = "0.0.2.228 - Rev: 1075"

tcpRCV_t ergänzt um: uint32_t ACKforDupACK // Speicher für letztes in Serie eingegangenes Paket, wird bei Lücke verwendet. Damit wurde das Dup-ACK Procedere korrigiert, sodass nun das korrekte ACK wiederholt wird. Die Sendung wird aber vom Sender nicht immer zeitnah (oder garnicht?) beachtet.

Gutes Testmodell: starwars.elf, weil von dort massenweise Pakete in korrekter Serie erscheinen sollen, der ideale Testserver für Dup-ACK.

TODO: Sortiervorgang aufbauen bei falscher Eingangsreihenfolge, wenn das, mittels Duplicate ACK angeforderte, fehlende frühere Paket in tcp_receive(...) erscheint oder bei Paketversetzungen durch Überholvorgänge über verschiedene Routen durchs Internet. Liste für Out-of-Order RCV Buffer schaffen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:43:06 18.07.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:44:49 18.07.2011   Titel:              Zitieren

version = "0.0.2.229 - Rev: 1076"

tcp modul weiter entwickelt: Out-of-Order-Buffer List geschaffen

(Zahlen im serial_log bei ACK auf SYN ACK sind falsch, in wireshark aber ok. Ursache?)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:45:48 18.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:07:13 18.07.2011   Titel:              Zitieren

version = "0.0.2.230 - Rev: 1077"

Ausgabefehler im serial_log korrigiert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:44:40 18.07.2011   Titel:              Zitieren

version = "0.0.2.231 - Rev: 1078"

tcp.c:
Statische Funktion tcp_timeoutDeleteConnection(tcpConnection_t* connection, uint32_t timeMilliseconds) zur Vereinfachung/Kapselung geschaffen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:50:52 19.07.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:43:16 19.07.2011   Titel:              Zitieren

version = "0.0.2.232 - Rev: 1079"

Fehler in tcp.c behoben. timeouts korrigiert. tcp_prepare_send_FIN gelöscht.
Anzeige:
C/C++ Code:
printf("\nconnection ID %u will be deletetd at %u sec runtime.",
 connection->ID, (timeMilliseconds + timer_getMilliseconds()) / 1000);
C/C++ Code:
printf("\nconnection ID %u will be deletetd at %u sec runtime.",
connection->ID, (timeMilliseconds + timer_getMilliseconds()) / 1000);
C/C++ Code:
printf("\nconnection ID %u will be deletetd at %u sec runtime.",
 connection->ID, (timeMilliseconds + timer_getMilliseconds()) / 1000);

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:39:52 19.07.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:37:41 19.07.2011   Titel:              Zitieren

version = "0.0.2.233 - Rev: 1080"

tcp.c: tcp_sendFin(tcpConnection_t* connection)

Bsp.:
C/C++ Code:
case CLOSE_WAIT:
tcp_sendFin(connection);
connection->TCP_CurrState = LAST_ACK;
tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl);
break;
C/C++ Code:
case CLOSE_WAIT:
tcp_sendFin(connection);
connection->TCP_CurrState = LAST_ACK;
tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl);
break;
C/C++ Code:
case CLOSE_WAIT:
tcp_sendFin(connection);
connection->TCP_CurrState = LAST_ACK;
tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl);
break;

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:39:29 19.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:37:22 19.07.2011   Titel:              Zitieren

version = "0.0.2.234 - Rev: 1081"

Finishing process improved:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
case FIN_WAIT_1:
{
    if (tcp->FIN && !tcp->ACK) // FIN
    {
        tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true);
        connection->TCP_CurrState = CLOSING;
    }
    else if (tcp->FIN && tcp->ACK) // FIN ACK
    {
        tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true);
        tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl);
        connection->TCP_CurrState = TIME_WAIT;
    }
    else if (!tcp->SYN && !tcp->FIN && tcp->ACK && (length - 4*tcp->dataOffset == 0)) // ACK
    {
        connection->TCP_CurrState = FIN_WAIT_2;
    }
    else if (!tcp->SYN && !tcp->FIN && tcp->ACK && (length - 4*tcp->dataOffset > 0)) // ACK with data
    {
        tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl); // if there will not come a FIN at FIN_WAIT_2
        connection->TCP_CurrState = FIN_WAIT_2;
    }
    break;
}

case FIN_WAIT_2:
{
    if (tcp->FIN) // FIN
    {
        tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true);
        tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl);
        connection->TCP_CurrState = TIME_WAIT;
    }
    break;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
case FIN_WAIT_1:
{
if (tcp->FIN && !tcp->ACK) // FIN
{
tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true);
connection->TCP_CurrState = CLOSING;
}
else if (tcp->FIN && tcp->ACK) // FIN ACK
{
tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true);
tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl);
connection->TCP_CurrState = TIME_WAIT;
}
else if (!tcp->SYN && !tcp->FIN && tcp->ACK && (length - 4*tcp->dataOffset == 0)) // ACK
{
connection->TCP_CurrState = FIN_WAIT_2;
}
else if (!tcp->SYN && !tcp->FIN && tcp->ACK && (length - 4*tcp->dataOffset > 0)) // ACK with data
{
tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl); // if there will not come a FIN at FIN_WAIT_2
connection->TCP_CurrState = FIN_WAIT_2;
}
break;
}

case FIN_WAIT_2:
{
if (tcp->FIN) // FIN
{
tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true);
tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl);
connection->TCP_CurrState = TIME_WAIT;
}
break;
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
case FIN_WAIT_1:
{
    if (tcp->FIN && !tcp->ACK) // FIN
    {
        tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true);
        connection->TCP_CurrState = CLOSING;
    }
    else if (tcp->FIN && tcp->ACK) // FIN ACK
    {
        tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true);
        tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl);
        connection->TCP_CurrState = TIME_WAIT;
    }
    else if (!tcp->SYN && !tcp->FIN && tcp->ACK && (length - 4*tcp->dataOffset == 0)) // ACK
    {
        connection->TCP_CurrState = FIN_WAIT_2;
    }
    else if (!tcp->SYN && !tcp->FIN && tcp->ACK && (length - 4*tcp->dataOffset > 0)) // ACK with data
    {
        tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl); // if there will not come a FIN at FIN_WAIT_2
        connection->TCP_CurrState = FIN_WAIT_2;
    }
    break;
}

case FIN_WAIT_2:
{
    if (tcp->FIN) // FIN
    {
        tcp_sendFlag = tcp_prepare_send_ACK(connection, tcp, true);
        tcp_timeoutDeleteConnection(connection, 2*connection->tcb.msl);
        connection->TCP_CurrState = TIME_WAIT;
    }
    break;
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:38:12 19.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:50:53 19.07.2011   Titel:              Zitieren

version = "0.0.2.235 - Rev: 1082"

tcp.h/c:
- Funktionen umgestellt auf tcp_...
- Ausgaben der In- und OutofOrderIn Buffers nach COM1

output to COM1:
http://codepad.org/yiSnoKjD (starwars.elf)
http://codepad.org/n98wEcDi (irc.elf)
http://codepad.org/QF4hpgkJ (browser.elf)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:27:21 19.07.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:12:45 20.07.2011   Titel:              Zitieren

version = "0.0.2.236 - Rev: 1083"

tcp.c:
- retransmission due to received duplicate acks
- return values of usend and uclose changed to bool
- code optimization / correction

TODO: http://de.wikipedia.org/wiki/Transmission_Control_Protocol#Fast-Retransmit_und_Fast-Recovery

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:01:26 21.07.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:44:19 21.07.2011   Titel:              Zitieren

Version 0.0.2.237:

- Grafikschnittstelle implementiert, VBE-Treiber entsprechend angepasst
- VBEShell auf aktuellste Text-Shell-Version aktualisiert (Event-Handling u.a.)
- Events optimiert: Daten, die in 4 Bytes passen, werden im data-Pointer selbst gespeichert (spart Speicherallokationen)
- Heap: Schutz gegen überlauf der placement-Area
- Netzwerkcode (ipv4 und arp) vereinfacht und optimiert (Pufferung eingehender Pakete läuft nun über die todolist)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:53:14 21.07.2011   Titel:              Zitieren

version = "0.0.2.238 - Rev: 1085"

Da irc.elf nicht funktionierte, habe ich die Retransmission aufgrund fehlenden ACKs (rto-Vergleich) deaktiviert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:47:00 21.07.2011   Titel:              Zitieren

version = "0.0.2.239 - Rev: 1086"

Zeitausgaben (Laufzeit) inkludiert in output nach COM1

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:17:41 22.07.2011   Titel:              Zitieren

version = "0.0.2.240 - Rev: 1087"

tcp.c: in tcp_receive korrigiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:54:59 22.07.2011   Titel:              Zitieren

Version 0.0.2.241:

- TCP überarbeitet, Code vereinfacht
- Makefile wird nun mit --jobs ausgeführt (Multithreading)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:59:14 22.07.2011   Titel:              Zitieren

version = "0.0.2.242 - Rev: 1089"

tcp.c: retransmission due to wrong dup-acks corrected

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:27:51 22.07.2011   Titel:              Zitieren

version = "0.0.2.243 - Rev: 1090"

tcp.c: tcp_sendReset(tcpConnection_t* connection, tcpPacket_t* tcp, bool ack, uint32_t length)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:50:25 24.07.2011   Titel:              Zitieren

Version 0.0.2.244:

- Ramdisk nicht mehr an 4 KiB-Grenzen ausgerichtet
- Erstellen und Starten von Tasks getrennt:
-> Race-Condition beim Warten auf VM86-Tasks behoben: Probleme auf bestimmten Systemen mit VBE sollten damit behoben sein
-> Race-Condition beim Erstellen von Tasks mit eigener Konsole behoben: Selten auftretenes Erscheinen von Text in der falschen Konsole sollte damit behoben sein.
- VM86-Monitor überarbeitet
- APM-Code überarbeitet: Läuft nun unter Qemu, Bochs und VBox, nicht aber auf VPC und echter Hardware. Zum Testen Zeile 131 in power_management.c ändern
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 12:14:34 25.07.2011   Titel:              Zitieren

Version 0.0.2.245:

- Bessere logische Trennung zwischen Tasks, Prozessen und Threads (Vorschlag von kosmick):
-> Task: Allgemeine Containerstruktur für Prozesse und Threads
-> Prozess: Task in eigenen Paging-Context
-> Thread: Task im Context des Erstellers, Abhängig vom Ersteller
- Memory-Übersicht erweitert
- Bugfix: Shell-Prozess wird nicht mehr gestartet, wenn Shell.elf nicht gefunden werden konnte
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:23:14 25.07.2011   Titel:              Zitieren

version = "0.0.2.246 - Rev: 1093"

DHCP gelingt nun auch unter Emulation mit Qemu.

Foto: http://www.henkessoft.de/OS_Dev/Bilder/DHCP_on_Qemu.PNG

qemu-batch:
Code:
del serielleSchnittstelle1.txt
qemu.exe  -fda G:\OSDev\PrettyOS\trunk\Source\FloppyImage.img -soundhw pcspk -net nic,model=rtl8139 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt
Code:
del serielleSchnittstelle1.txt
qemu.exe -fda G:\OSDev\PrettyOS\trunk\Source\FloppyImage.img -soundhw pcspk -net nic,model=rtl8139 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt
Code:
del serielleSchnittstelle1.txt
qemu.exe  -fda G:\OSDev\PrettyOS\trunk\Source\FloppyImage.img -soundhw pcspk -net nic,model=rtl8139 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:09:40 26.07.2011   Titel:              Zitieren

version = "0.0.2.247 - Rev: 1094"

list.c kleine Korrektur

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:56:26 26.07.2011   Titel:              Zitieren

version = "0.0.2.248 - Rev: 1095"

list.h/c und ring.h/c getrennt.

ring.h/c wird bisher nur in scheduler.c eingesetzt und wurde von MrX speziell dafür entwickelt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 16:57:37 27.07.2011   Titel:              Zitieren

Version 0.0.2.249:

- ring.h/c comittet (hat ehenkes vergessen)
- Neuer Interrupt-Code: Mehrfachbelegung von IRQs möglich, Interrupt-Handler mit anderen Prototypen (z.B. für PCI-Geräte oder für CDI) möglich. Benutzung des Interrupt-Status-Bits von PCI erstmal auskommentiert.
-> Es sollten nun mehrere baugleiche Netzwerkkarten zugleich unterstützt werden. Zumindest theoretisch.
- CDI-Implementation deutlich erweitert - Es ist nun möglich, den e1000-CDI-Treiber zu kompilieren und in den Kernel zu linken
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:42:37 28.07.2011   Titel:              Zitieren

version = "0.0.2.250 - Rev: 1097"

Netzwerkausgaben arp, dhcp, udp hinter debug (os.h)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:29:20 29.07.2011   Titel:              Zitieren

version = "0.0.2.251 - Rev: 1098"

tcp-Ausgaben hinter debug (os.h: _TCP_DEBUG_)

Screen Photo (PrettyOS emuliert mit qemu. Erfolgreiches DHCP und Ausführung von browser.elf und starwars.elf in eigener jeweils separater Konsole): http://www.henkessoft.de/OS_Dev/Bilder/rev.1098.PNG :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:35:10 29.07.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:35:25 29.07.2011   Titel:              Zitieren

version = "0.0.2.251 - Rev: 1099"

browser.elf verallgemeinert: Man kann nun eine IP-Adresse (Zahlenwerte) eingeben.

Tipps:
Code:
 82 100 220  68    goneo.de
 65  55 175 254    bing.com
209  85 149 105    google
188  40 141  82    c-plusplus.de
Code:
82 100 220 68 goneo.de
65 55 175 254 bing.com
209 85 149 105 google
188 40 141 82 c-plusplus.de
Code:
 82 100 220  68    goneo.de
 65  55 175 254    bing.com
209  85 149 105    google
188  40 141  82    c-plusplus.de

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:52:25 29.07.2011, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:15:49 29.07.2011   Titel:              Zitieren

Version 0.0.2.252:

- Listen nun doppelt verkettet
- Linkerscript aufgeräumt
- strstr im Userspace implementiert
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 21:23:44 29.07.2011   Titel:              Zitieren

Rev. 1101; 0.0.2.253:

* Workaround DNS Resolver (hack, proof of concept)

Anmerkung (ehenkes):
- browser.c mit Auflösung von Namen (thx to Cuervo)
- TCP beendet manchmal nicht, wenn TCP_DEBUG nicht eingeschlatet ist


Zuletzt bearbeitet von Erhard Henkes am 21:37:13 29.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:40:21 29.07.2011   Titel:              Zitieren

version = "0.0.2.254 - Rev: 1102"

Experimentelle Version:
- zusätzliche Sicherheits-Timeouts angestoßen bei Übergang zu CLOSE_WAIT und zu FIN_WAIT_1 (nicht schön)
- Leider treten nun vermehrt #PF auf, z.B. beim Erfolgen des Timeouts.
- resolve.php unter tools/ (wurde von Cuervo erstellt)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:42:09 29.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:08:28 30.07.2011   Titel:              Zitieren

version = "0.0.2.255 - Rev: 1103"

version = "0.0.2.256 - Rev: 1104"

tcp.c: stabiler, aber leider immer noch #PF bei tcp_deleteConnection (erfolgt exakt beim timeout)

Foto: http://www.henkessoft.de/OS_Dev/Bilder/rev.1104_PF.PNG

C/C++ Code:
static void scheduledDeleteConnection(void* data, size_t length)
{
    if ( (*(tcpConnection_t**)data) && (deleteProtection != (*(tcpConnection_t**)data)->ID) )
    {
        tcp_deleteConnection(*(tcpConnection_t**)data);
    }
}
C/C++ Code:
static void scheduledDeleteConnection(void* data, size_t length)
{
if ( (*(tcpConnection_t**)data) && (deleteProtection != (*(tcpConnection_t**)data)->ID) )
{
tcp_deleteConnection(*(tcpConnection_t**)data);
}
}
C/C++ Code:
static void scheduledDeleteConnection(void* data, size_t length)
{
    if ( (*(tcpConnection_t**)data) && (deleteProtection != (*(tcpConnection_t**)data)->ID) )
    {
        tcp_deleteConnection(*(tcpConnection_t**)data);
    }
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:22:28 30.07.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:36:20 30.07.2011   Titel:              Zitieren

version = "0.0.2.257 - Rev: 1105"

version = "0.0.2.258 - Rev: 1106"

#PF durch multiple deleteConnection mittels Variable "deleteProtection" endlich besiegt. :)

Warum sind die Verbindungen bei einer Wiederholung so langsam? :rolleyes:


Anmerkung: Nun kommen neue #PF (browser.elf, aber auch vom kernel, nun aber nicht mehr tcp_deleteConnection)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:17:17 30.07.2011, insgesamt 4-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:05:08 30.07.2011   Titel:              Zitieren

Version 0.0.2.259:

- Protection-Hack durch list_find ersetzt
- Code aus browser.c, userlib.c und tcp vereinfacht
- srand jetzt einmal beim Start und anschließend nicht mehr aufgerufen
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 11:43:01 30.07.2011   Titel:              Zitieren

Rev. 1108 (0.0.2.260):

* Shell makefile und shell.c aktualisiert (helptext)
* DNS Resolver verhübscht
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:18:44 30.07.2011   Titel:              Zitieren

version = "0.0.2.261 - Rev: 1109"

- srand nur einmal in ckernel.c ist ok
- rand() im Kernel repariert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:35:36 30.07.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:51:48 30.07.2011   Titel:              Zitieren

version = "0.0.2.262 - Rev: 1110"

Interface zwischen user app und tcp-Modul beim Senden erweitert um sendBuffer, um Datenmengen, die größer MSS bzw. connection->tcb.RCV.WND sind, segmentiert versenden zu können.

TODO: segmentation / buffering / steering data flow

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:29:59 30.07.2011   Titel:              Zitieren

Version mit sendBuffer zum Testen (Tester: Cuervo, ehenkes):

version = "0.0.2.263 - Rev: 1111" (Fehler)
version = "0.0.2.264 - Rev: 1112" (Fehler: 2. abgeschnittenes Paket kommt nicht an)
version = "0.0.2.265 - Rev: 1113" (funktioniert, man muss nur noch alle Pakete im sendBuffer "flushen" mittels dummy schicken.)


version = "0.0.2.266 - Rev: 1114" ("flush" des sendBuffer erfolgt nun ohne dummy senden.)

Mit dem Programm rt.elf kann man beispielhaft testen (schickt langen lateinischen Text "lorum ipsum").

memshow (util.c) wurde erweitert mit bool alpha, sodass man wahlweise auch Texte zeigen kann (siehe auskommentierten Code in tcp_usend).

PrettyOS ist Server (passive open):

cmd: telnet 127.0.0.1 8080 (client erhält den Text)

qemu-batch:
Zitat:
del serielleSchnittstelle1.txt
qemu.exe -fda G:\OSDev\PrettyOS\trunk\Source\FloppyImage.img -net nic,model=rtl8139 -redir tcp:5023::23 -redir tcp:8080::80 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:13:25 31.07.2011, insgesamt 11-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:55:16 31.07.2011   Titel:              Zitieren

version = "0.0.2.267 - Rev: 1115"

- ESC+h auf serial output umgeleitet (inzwischen zu groß)

Aktuell auf dem Heap nach dem Start:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
---------------- HEAP REGIONS ----------------
address        size        number    comment
C0000000h    00000008h    1    mutex
C0000008h    00000008h    2    listHead
C0000010h    0000000Ch    3    event_queue
C000001Ch    00000008h    4    mutex
C0000024h    00000008h    5    listHead
C000002Ch    0000000Ch    6    listElement
C0000038h    0000000Ch    7    listElement
C0000044h    00000008h    8    ring
C000004Ch    00000008h    9    ring
C0000054h    00000008h    10    ring-element
C000005Ch    00000008h    11    listHead
C0000064h    00000004h    13    todoList
C0000068h    00000008h    14    listHead
C0000070h    00001CD8h    15    thread-console
C0001D48h    0000000Ch    16    console-name
C0001D54h    00000008h    17    listHead
C0001D5Ch    00000008h    18    mutex
C0001D64h    00000048h    19    task_t
C0001DACh    00001000h    20    task-kernelstack
C0002DACh    0000000Ch    21    listElement
C0002DB8h    0000000Ch    22    listElement
C0002DC4h    00000008h    23    listHead
C0002DCCh    0000000Ch    24    listElement
C0002DD8h    0000000Ch    25    event_queue
C0002DE4h    00000008h    26    mutex
C0002DECh    00000008h    27    listHead
C0002DF4h    00000008h    28    ring-element
C0002DFCh    0000006Ch    29    FPUptr
C0002E68h    00000008h    30    listHead
C0002E70h    0000005Ch    31    pciDev_t
C0002ECCh    0000000Ch    32    listElement
C0002ED8h    0000005Ch    33    pciDev_t
C0002F34h    0000000Ch    34    listElement
C0002F40h    0000005Ch    35    pciDev_t
C0002F9Ch    0000000Ch    36    listElement
C0002FA8h    0000005Ch    37    pciDev_t
C0003004h    0000000Ch    38    listElement
C0003010h    0000005Ch    39    pciDev_t
C000306Ch    0000000Ch    40    listElement
C0003078h    0000005Ch    41    pciDev_t
C00030D4h    0000000Ch    42    listElement
C00030E0h    00000034h    43    network apdapter
C0003114h    00000008h    44    listHead
C000311Ch    00000014h    45    arp entry
C0003130h    0000000Ch    46    listElement
C000313Ch    00000014h    47    arp entry
C0003150h    0000000Ch    48    listElement
C000315Ch    00000018h    49    RTL8139
C0003174h    00002000h    50    RTL8139-RxBuf
C0005174h    00001000h    51    RTL8139-TxBuf
C0006174h    00000008h    52    listHead
C000617Ch    0000000Ch    53    listElement
C0006188h    00000030h    60    flpydsk-FDD
C00061B8h    00000008h    61    mutex
C00061C0h    00000038h    63    flpydsk-Disk
C00061F8h    00000048h    64    task_t
C0006240h    0000000Ch    66    listElement
C000624Ch    0000000Ch    67    listElement
C0006258h    00000028h    68    partition_t
C0006280h    00000200h    69    part->buffer
C0006480h    00000028h    70    FAT_partition_t
C00064A8h    00000008h    71    part->serial
C00064B0h    000000B8h    73    initrd-root
C0006568h    000000B8h    74    initrd-dev
C0006620h    00000170h    75    initrd-rootnodes
C0006790h    00000028h    76    initrd-part
C00067B8h    00000008h    77    initrd-partdata
C00067C0h    00000010h    79    initrd-partserial
C00067D0h    00000048h    83    task_t
C0006818h    0000000Ch    85    listElement
C0006824h    0000000Ch    86    listElement
C0006830h    0000000Ch    87    event_queue
C000683Ch    00000008h    88    mutex
C0006844h    00000008h    89    listHead
C000684Ch    00000008h    90    ring-element
C0006898h    00000010h    57    todoList_task_t
C00068D4h    00000010h    115    todoList_task_t
C0006B08h    00002400h    62    flpydsk-TrackBuffer
C0008F08h    00001000h    65    task-kernelstack
C0009F08h    00200000h    72    initrd-RAMD-start
C0209F08h    00000200h    78    initrd-partbuffer
C020CE40h    00000010h    111    todoList_task_t
C020CE6Ch    00000010h    105    todoList_task_t
C020E000h    00002004h    81    pag-userPD
C0211000h    00001000h    82    pageTable
C0212000h    00001000h    84    task-kernelstack
---------------- HEAP REGIONS ----------------
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
---------------- HEAP REGIONS ----------------
address size number comment
C0000000h 00000008h 1 mutex
C0000008h 00000008h 2 listHead
C0000010h 0000000Ch 3 event_queue
C000001Ch 00000008h 4 mutex
C0000024h 00000008h 5 listHead
C000002Ch 0000000Ch 6 listElement
C0000038h 0000000Ch 7 listElement
C0000044h 00000008h 8 ring
C000004Ch 00000008h 9 ring
C0000054h 00000008h 10 ring-element
C000005Ch 00000008h 11 listHead
C0000064h 00000004h 13 todoList
C0000068h 00000008h 14 listHead
C0000070h 00001CD8h 15 thread-console
C0001D48h 0000000Ch 16 console-name
C0001D54h 00000008h 17 listHead
C0001D5Ch 00000008h 18 mutex
C0001D64h 00000048h 19 task_t
C0001DACh 00001000h 20 task-kernelstack
C0002DACh 0000000Ch 21 listElement
C0002DB8h 0000000Ch 22 listElement
C0002DC4h 00000008h 23 listHead
C0002DCCh 0000000Ch 24 listElement
C0002DD8h 0000000Ch 25 event_queue
C0002DE4h 00000008h 26 mutex
C0002DECh 00000008h 27 listHead
C0002DF4h 00000008h 28 ring-element
C0002DFCh 0000006Ch 29 FPUptr
C0002E68h 00000008h 30 listHead
C0002E70h 0000005Ch 31 pciDev_t
C0002ECCh 0000000Ch 32 listElement
C0002ED8h 0000005Ch 33 pciDev_t
C0002F34h 0000000Ch 34 listElement
C0002F40h 0000005Ch 35 pciDev_t
C0002F9Ch 0000000Ch 36 listElement
C0002FA8h 0000005Ch 37 pciDev_t
C0003004h 0000000Ch 38 listElement
C0003010h 0000005Ch 39 pciDev_t
C000306Ch 0000000Ch 40 listElement
C0003078h 0000005Ch 41 pciDev_t
C00030D4h 0000000Ch 42 listElement
C00030E0h 00000034h 43 network apdapter
C0003114h 00000008h 44 listHead
C000311Ch 00000014h 45 arp entry
C0003130h 0000000Ch 46 listElement
C000313Ch 00000014h 47 arp entry
C0003150h 0000000Ch 48 listElement
C000315Ch 00000018h 49 RTL8139
C0003174h 00002000h 50 RTL8139-RxBuf
C0005174h 00001000h 51 RTL8139-TxBuf
C0006174h 00000008h 52 listHead
C000617Ch 0000000Ch 53 listElement
C0006188h 00000030h 60 flpydsk-FDD
C00061B8h 00000008h 61 mutex
C00061C0h 00000038h 63 flpydsk-Disk
C00061F8h 00000048h 64 task_t
C0006240h 0000000Ch 66 listElement
C000624Ch 0000000Ch 67 listElement
C0006258h 00000028h 68 partition_t
C0006280h 00000200h 69 part->buffer
C0006480h 00000028h 70 FAT_partition_t
C00064A8h 00000008h 71 part->serial
C00064B0h 000000B8h 73 initrd-root
C0006568h 000000B8h 74 initrd-dev
C0006620h 00000170h 75 initrd-rootnodes
C0006790h 00000028h 76 initrd-part
C00067B8h 00000008h 77 initrd-partdata
C00067C0h 00000010h 79 initrd-partserial
C00067D0h 00000048h 83 task_t
C0006818h 0000000Ch 85 listElement
C0006824h 0000000Ch 86 listElement
C0006830h 0000000Ch 87 event_queue
C000683Ch 00000008h 88 mutex
C0006844h 00000008h 89 listHead
C000684Ch 00000008h 90 ring-element
C0006898h 00000010h 57 todoList_task_t
C00068D4h 00000010h 115 todoList_task_t
C0006B08h 00002400h 62 flpydsk-TrackBuffer
C0008F08h 00001000h 65 task-kernelstack
C0009F08h 00200000h 72 initrd-RAMD-start
C0209F08h 00000200h 78 initrd-partbuffer
C020CE40h 00000010h 111 todoList_task_t
C020CE6Ch 00000010h 105 todoList_task_t
C020E000h 00002004h 81 pag-userPD
C0211000h 00001000h 82 pageTable
C0212000h 00001000h 84 task-kernelstack
---------------- HEAP REGIONS ----------------
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
---------------- HEAP REGIONS ----------------
address        size        number    comment
C0000000h    00000008h    1    mutex
C0000008h    00000008h    2    listHead
C0000010h    0000000Ch    3    event_queue
C000001Ch    00000008h    4    mutex
C0000024h    00000008h    5    listHead
C000002Ch    0000000Ch    6    listElement
C0000038h    0000000Ch    7    listElement
C0000044h    00000008h    8    ring
C000004Ch    00000008h    9    ring
C0000054h    00000008h    10    ring-element
C000005Ch    00000008h    11    listHead
C0000064h    00000004h    13    todoList
C0000068h    00000008h    14    listHead
C0000070h    00001CD8h    15    thread-console
C0001D48h    0000000Ch    16    console-name
C0001D54h    00000008h    17    listHead
C0001D5Ch    00000008h    18    mutex
C0001D64h    00000048h    19    task_t
C0001DACh    00001000h    20    task-kernelstack
C0002DACh    0000000Ch    21    listElement
C0002DB8h    0000000Ch    22    listElement
C0002DC4h    00000008h    23    listHead
C0002DCCh    0000000Ch    24    listElement
C0002DD8h    0000000Ch    25    event_queue
C0002DE4h    00000008h    26    mutex
C0002DECh    00000008h    27    listHead
C0002DF4h    00000008h    28    ring-element
C0002DFCh    0000006Ch    29    FPUptr
C0002E68h    00000008h    30    listHead
C0002E70h    0000005Ch    31    pciDev_t
C0002ECCh    0000000Ch    32    listElement
C0002ED8h    0000005Ch    33    pciDev_t
C0002F34h    0000000Ch    34    listElement
C0002F40h    0000005Ch    35    pciDev_t
C0002F9Ch    0000000Ch    36    listElement
C0002FA8h    0000005Ch    37    pciDev_t
C0003004h    0000000Ch    38    listElement
C0003010h    0000005Ch    39    pciDev_t
C000306Ch    0000000Ch    40    listElement
C0003078h    0000005Ch    41    pciDev_t
C00030D4h    0000000Ch    42    listElement
C00030E0h    00000034h    43    network apdapter
C0003114h    00000008h    44    listHead
C000311Ch    00000014h    45    arp entry
C0003130h    0000000Ch    46    listElement
C000313Ch    00000014h    47    arp entry
C0003150h    0000000Ch    48    listElement
C000315Ch    00000018h    49    RTL8139
C0003174h    00002000h    50    RTL8139-RxBuf
C0005174h    00001000h    51    RTL8139-TxBuf
C0006174h    00000008h    52    listHead
C000617Ch    0000000Ch    53    listElement
C0006188h    00000030h    60    flpydsk-FDD
C00061B8h    00000008h    61    mutex
C00061C0h    00000038h    63    flpydsk-Disk
C00061F8h    00000048h    64    task_t
C0006240h    0000000Ch    66    listElement
C000624Ch    0000000Ch    67    listElement
C0006258h    00000028h    68    partition_t
C0006280h    00000200h    69    part->buffer
C0006480h    00000028h    70    FAT_partition_t
C00064A8h    00000008h    71    part->serial
C00064B0h    000000B8h    73    initrd-root
C0006568h    000000B8h    74    initrd-dev
C0006620h    00000170h    75    initrd-rootnodes
C0006790h    00000028h    76    initrd-part
C00067B8h    00000008h    77    initrd-partdata
C00067C0h    00000010h    79    initrd-partserial
C00067D0h    00000048h    83    task_t
C0006818h    0000000Ch    85    listElement
C0006824h    0000000Ch    86    listElement
C0006830h    0000000Ch    87    event_queue
C000683Ch    00000008h    88    mutex
C0006844h    00000008h    89    listHead
C000684Ch    00000008h    90    ring-element
C0006898h    00000010h    57    todoList_task_t
C00068D4h    00000010h    115    todoList_task_t
C0006B08h    00002400h    62    flpydsk-TrackBuffer
C0008F08h    00001000h    65    task-kernelstack
C0009F08h    00200000h    72    initrd-RAMD-start
C0209F08h    00000200h    78    initrd-partbuffer
C020CE40h    00000010h    111    todoList_task_t
C020CE6Ch    00000010h    105    todoList_task_t
C020E000h    00002004h    81    pag-userPD
C0211000h    00001000h    82    pageTable
C0212000h    00001000h    84    task-kernelstack
---------------- HEAP REGIONS ----------------


- tcp.c serial output optimiert, z.B. connection-ID integriert (da inzwischen mehrere connections parallel laufen)

Anmerkung: Dup-Acks kommen zum Teil nicht von uns, da wir mit Qemu gekapselt laufen. Qemu greift leider ein mit Dup-Acks und tcp-Options.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:48:53 04.08.2011, insgesamt 6-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 19:03:57 31.07.2011   Titel:              Zitieren

Rev. 1116 - 0.0.2.268:

* rctl.c: Remote Control als User-Programm hinzugefügt



Rev. 1117:

* Updated rctl.c



Anmerkung (ehenkes):
http://127.0.0.1:8080/ <--- im Browser eingeben und -redir tcp:8080::80 in Qemu.


Zuletzt bearbeitet von Cuervo am 22:07:14 31.07.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:50:29 31.07.2011   Titel:              Zitieren

Wichtig: in Qemu -net nic,model=pcnet einstellen. Mit der rtl8139 gibt es massive Probleme ab der zweiten Verbindung.

TODO: Tatsache ist, dass es auch beim Test-PC sehr langsam war. Das deutet auf einen Fehler im rtl8139 Treiber hin.


Code:
del serielleSchnittstelle1.txt
qemu.exe  -fda G:\OSDev\PrettyOS\trunk\Source\FloppyImage.img -net nic,model=pcnet -redir tcp:5023::23 -redir tcp:8080::80 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt
Code:
del serielleSchnittstelle1.txt
qemu.exe -fda G:\OSDev\PrettyOS\trunk\Source\FloppyImage.img -net nic,model=pcnet -redir tcp:5023::23 -redir tcp:8080::80 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt
Code:
del serielleSchnittstelle1.txt
qemu.exe  -fda G:\OSDev\PrettyOS\trunk\Source\FloppyImage.img -net nic,model=pcnet -redir tcp:5023::23 -redir tcp:8080::80 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:05:05 01.08.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:30:47 01.08.2011   Titel:              Zitieren

version = "0.0.2.269 - Rev: 1118"

rtl8139.h/c etwas verändert. Fehler aber noch nicht gefunden. Die Frage ist daher noch offen, ob der Fehler dort im Modul liegt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:48:32 04.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:12:20 02.08.2011   Titel:              Zitieren

version = "0.0.2.270 - Rev: 1119"

Netzwerkkarten-Modul rtl8139.c erfolgreich korrigiert. Nun ist man nicht mehr gezwungen, auf pcnet auszuweichen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:48:19 04.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:28:49 02.08.2011   Titel:              Zitieren

version = "0.0.2.271 - Rev: 1120"

- tcp.c: SND.UNA korrigiert bei ACK im passiven 3-way-handshake
- timer.h: System-Frequenz wieder auf 100 Hz eingestellt (war versuchsweise bei 10 Hz)
- Kleinigkeiten

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:48:06 04.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:01:04 02.08.2011   Titel:              Zitieren

version = "0.0.2.272 - Rev: 1121"

rtl8139.c: Fehler bei rtl8139_isRxBufEmpty korrigiert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 20:38:51 02.08.2011   Titel:              Zitieren

Rev. 1122:

* file.c hinzugefügt für Dateitests (vllt 0 zurückgeben wenn Datei nicht existent beim Lesen?)
* shell.c: Fehler in format behoben, 'ls' als Äquivalent zu 'fdir' eingebaut, Farben überarbeitet
* AdditionalFiles/ hinzugefügt für Dateitests, Entsprechende Änderung im Makefile


Dateispeichern klappt nicht


Zuletzt bearbeitet von Cuervo am 23:42:21 02.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:39:30 02.08.2011   Titel:              Zitieren

version = "0.0.2.273 - Rev: 1123"

tcp.c: kleine Änderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:47:41 04.08.2011, insgesamt 1-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 12:13:32 03.08.2011   Titel:              Zitieren

Rev. 1124:

* Bootvorgang optisch verändert: Baumstruktur (da bräuchte man eine library für^^), Bootscreen, Farben
* Shell optisch verändert
* mouse.c: Ein unbekanntes Paket wird erst beim 2. Mal angezeigt, da einige Emulatoren (und auch einige PCs) seltsamerweise beim Booten ungültige Pakete senden

Das einzige was noch nicht in den Bootvorgang passt ist pci_scan(), da müsste mal jemand die Ausgabe verändern. Hier der Vergleich:

Bisheriges Booten (Rev. 1123)

Neues Booten (Rev. 1124) - Ohne pci_scan()
Neues Booten (Rev. 1124) - Mit pci_scan()

Man sieht ganz klar, dass pci_scan(); eine sehr ungünstige Ausgabe erzeugt. Ich traue mich aber nicht, diese zu verändern^^

Leider wird in pci_scan auch die Netzwerkkarte installiert (wer ist denn auf diese Idee gekommen? oO)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:42:53 03.08.2011   Titel:              Zitieren

Version 0.0.2.275:

- Bootscreen wiederhergestellt und zugleich gekürzt, Sound und Ladebalken nun parallel
- _BOOTSCREEN_ und _VIDEOTEST_ geschaffen; _BEEP_ entfernt
- /additionalfiles entfernt
- file.c entfernt, Test in test.c integriert
- Readcaches werden beim Schreiben aktualisiert anstatt gelöscht
- fgetc gibt nun -1 zurück, wenn Dateiende erreicht.
- cli, sti, hlt, nop, rdtsc, inportX, outportX nun static inline
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:45:38 04.08.2011   Titel:              Zitieren

version = "0.0.2.276 - Rev: 1126"

- Optimierung der Ausgaben bei EHCI/USB2.0
- Sprechende Konstanten bei usb_hc.h/c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:47:26 04.08.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:39:08 04.08.2011   Titel:              Zitieren

version = "0.0.2.276 - Rev: 1127"

CPPDUMMY.cpp etwas ausgebaut als Test im user-land, funktioniert gut. Also für "C with classes" ist der Weg geebnet.
Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/CPPDUMMY.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:37:31 05.08.2011   Titel:              Zitieren

Version 0.0.2.277:

- Videotest nun auf strg+v gelegt: Muss nicht mehr über _VIDEOTEST_ (de-)aktiviert werden, ist mehrfach startbar
- Bugfix: Shell und VBE-Shell akzeptieren Leerzeichen wieder
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:34:02 05.08.2011   Titel:              Zitieren

version = "0.0.2.278 - Rev: 1129"

tcp.c: kleine Veränderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:24:25 06.08.2011   Titel:              Zitieren

version = "0.0.2.279 - Rev: 1130"

tcp.c: Korrekturen bezüglich tcp_RemoveAckedPacketsFromOutBuffer

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:18:04 06.08.2011   Titel:              Zitieren

version = "0.0.2.280 - Rev: 1131"

- Memory-Fehler in tcp_RemoveAckedPacketsFromOutBuffer behoben
- Bedien-Anzeige in arrow.c korrigiert (Dank an "neuer_user" für Hinweis)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:50:15 06.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:13:28 06.08.2011   Titel:              Zitieren

version = "0.0.2.281 - Rev: 1132"

Fehler korrigiert, damit man wieder mit #define _TCP_DEBUG_ kompilieren kann.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:50:57 06.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:31:26 06.08.2011   Titel:              Zitieren

version = "0.0.2.282 - Rev: 1133"

Fehler in rtl8139.c korrigiert. Buffer muss genau xxx KiB groß sein, nicht xxx KiB plus 16 Byte (war ein fehlerhafter Versuch, weil es in der Doku nicht richtig steht).
Nun sollte die RTL8139 langsam aber sicher korrekt funktionieren.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:51:34 06.08.2011, insgesamt 3-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 19:44:11 06.08.2011   Titel:              Zitieren

Rev.: 1134 - Version 0.0.2.283

* TextGUI hinzugefügt (MessageBox und Yes/No)
* Bootscreen deaktiviert, gibt derzeit noch Grafikfehler


TODO (WICHTIG!!!):

EVENT_SCREEN_UPDATED einbauen, das ausgelöst wird, wenn ein anderer Task (!!!) sichtbar malt.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:30:34 06.08.2011   Titel:              Zitieren

version = "0.0.2.284 - Rev: 1135"

- Tastenkombinationen in ckernel.c bereinigt
- arrow.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 21:50:10 06.08.2011   Titel:              Zitieren

Rev.: 1136 - Version 0.0.2.285

* TextGUI - Wiederherstellung des Videobuffers klappt
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 21:56:09 06.08.2011   Titel:              Zitieren

version = "0.0.2.286 - Rev: 1137";

* free(oldvidmem) in textgui.c


Zuletzt bearbeitet von Cuervo am 21:56:35 06.08.2011, insgesamt 1-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 22:02:04 06.08.2011   Titel:              Zitieren

Rev. 1138:

* alignment = 4


Zuletzt bearbeitet von Cuervo am 22:02:23 06.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:42:37 06.08.2011   Titel:              Zitieren

version = "0.0.2.288 - Rev: 1139"

- QEMU_HACK entfernt (bitte intensiv prüfen, ob es wirklich geht)
- NIC IP (Start und Wunsch) und Gateway IP (Wunsch) sind in network.h eingetragen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:17:33 07.08.2011   Titel:              Zitieren

version = "0.0.2.289 - Rev: 1140"

- EVENT_TCP_CLOSED hinzugefügt (bitte testen).
- log des heaps auf COM4 umgeleitet (die Ausgaben auf COMx sollte man noch in os.h definierbar machen)

qemu-batch:
Code:
del serielleSchnittstelle1.txt
del serielleSchnittstelle2.txt
del serielleSchnittstelle3.txt
del serielleSchnittstelle4.txt
set QEMU_AUDIO_DRV=wav
qemu.exe  -boot a -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139 -redir tcp:5023::23 -redir tcp:8080::80 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt -serial file:serielleSchnittstelle2.txt -serial file:serielleSchnittstelle3.txt -serial file:serielleSchnittstelle4.txt -usb
Code:
del serielleSchnittstelle1.txt
del serielleSchnittstelle2.txt
del serielleSchnittstelle3.txt
del serielleSchnittstelle4.txt
set QEMU_AUDIO_DRV=wav
qemu.exe -boot a -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139 -redir tcp:5023::23 -redir tcp:8080::80 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt -serial file:serielleSchnittstelle2.txt -serial file:serielleSchnittstelle3.txt -serial file:serielleSchnittstelle4.txt -usb
Code:
del serielleSchnittstelle1.txt
del serielleSchnittstelle2.txt
del serielleSchnittstelle3.txt
del serielleSchnittstelle4.txt
set QEMU_AUDIO_DRV=wav
qemu.exe  -boot a -fda FloppyImage.img -soundhw pcspk -net nic,model=rtl8139 -redir tcp:5023::23 -redir tcp:8080::80 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt -serial file:serielleSchnittstelle2.txt -serial file:serielleSchnittstelle3.txt -serial file:serielleSchnittstelle4.txt -usb

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:42:52 07.08.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:21:48 07.08.2011   Titel:              Zitieren

version = "0.0.2.290 - Rev: 1141"

- rtl8139.c: Änderung der Reihenfolge im handler analog programming guide
- os.h: defines zur Wahl der vier COMx für serial_log
- Kleinigkeiten

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:44:51 07.08.2011   Titel:              Zitieren

version = "0.0.2.291 - Rev: 1142"

Einbau einer Zeitabfrage zur Vermeidung/Verzögerung eines Absturzes (freeze des asteriks) bei dauernd gehaltener Tastenkombination in kernel idle loop, z.B. strg+c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:46:48 07.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:29:08 07.08.2011   Titel:              Zitieren

version = "0.0.2.292 - Rev: 1143"

- Personenwaggon vergrößert
- TODO: weitere Bewegungsabläufe / Infos in den unteren 3 Zeilen
- userlib.c formale Kleinigkeiten

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:34:12 08.08.2011   Titel:              Zitieren

version = "0.0.2.292 - Rev: 1144"
- userlib.c:
Der Zug in der "Scrolling Ticker Line" wurde um ein Schiff (Die Idee hierzu hatte Cuervo, ich musste nur die Schornsteine für die Fahrtrichtung nach rechts umformen ^^) ergänzt.
- shell.c:
Nach jeweils 20 sec wird in der shell das motiv getauscht: (getCurrentSeconds()/20) % 2 + 1 ergibt 1 oder 2

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:39:03 08.08.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:12:01 08.08.2011   Titel:              Zitieren

version = "0.0.2.293 - Rev: 1145"

Kleine Veränderungen in fs.h/c und ckernel.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:37:44 09.08.2011   Titel:              Zitieren

version = "0.0.2.294 - Rev: 1146"

Fehler in todoList.c korrigiert: task wird in todoList_execute nun ebenfalls frei gegeben.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:39:25 09.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:38:23 09.08.2011   Titel:              Zitieren

version = "0.0.2.295 - Rev: 1147"

userlib.h:
bool udp_send(void* data, uint32_t length, IP_t destIP, uint16_t srcPort, uint16_t destPort) hinzugefügt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:13:57 09.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:13:29 09.08.2011   Titel:              Zitieren

version = "0.0.2.296 - Rev: 1148"

udpsend.c und udprecv.c und default in udp.c zum testen von udp-tranfers

EMPFANG geht nicht in user (Problem: event-system ?)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:38:04 09.08.2011   Titel:              Zitieren

version = "0.0.2.297 - Rev: 1149"

TextGUI_ShowMSG, TextGUI_AskYN (syscalls)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 22:41:45 09.08.2011   Titel:              Zitieren

Rev. 1152:

* ftp.c von neuer_user hinzugefügt
* Userprogramm-Maps werden erzeugt in documentation/
* pong.c hinzugefügt (nutzlos für normale Benutzer)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:06:12 10.08.2011   Titel:              Zitieren

version = "0.0.2.298 - Rev: 1153"

Problem gelöst. udpsend, udprecv im user-land funktioniert nun grundsätzlich. :)


qemu-batch:
Zitat:
del serielleSchnittstelle1.txt
del serielleSchnittstelle2.txt
del serielleSchnittstelle3.txt
del serielleSchnittstelle4.txt
set QEMU_AUDIO_DRV=wav
qemu.exe -boot a -fda FloppyImage.img -soundhw pcspk -net nic,model=pcnet -redir tcp:5023::23 -redir tcp:8080::80 -redir udp:8084::8084 -redir udp:8085::8085 -localtime -net user -net dump,file=netdump.pcap -serial file:serielleSchnittstelle1.txt -serial file:serielleSchnittstelle2.txt -serial file:serielleSchnittstelle3.txt -serial file:serielleSchnittstelle4.txt -usb

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:26:39 10.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:24:34 10.08.2011   Titel:              Zitieren

version = "0.0.2.299 - Rev: 1154"

- udp.c: alle blocked tasks erhalten den Payload im UDP-Paket (ist in rev. 1157/1158 korrigiert)
- udpsend/udprecv.c leicht überarbeitet
- pit.h eingefügt (für timer.c und sys_speaker.c)
- Sonstiges

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:56:39 11.08.2011, insgesamt 2-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 21:31:15 10.08.2011   Titel:              Zitieren

Rev. 1155 (Version 0.0.2.300):

* Codeaufräumarbeiten laut Styleguide


Wenn nicht gewünscht bitte auf Rev. 1154, Version 0.0.2.299 reverten.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:26:19 11.08.2011   Titel:              Zitieren

version = "0.0.2.301 - Rev: 1156"

pit.h, timer.c, sys_speaker.c: Konstanten für Counter 0,1,2 des PIT überarbeitet.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:05:21 11.08.2011   Titel:              Zitieren

version = "0.0.2.302 - Rev: 1157"

bool flushEvents(EVENT_t filter); eingefügt in userlib.h/c (als syscall)
(Fehlerhaft: versehentlich wird der task gelöscht anstelle das event :D )

udp.c wird umgebaut auf "tasks" (Liste aller tasks, siehe task.c) anstelle blocked tasks (aus scheduler.c). Die beiden Ringe werden wieder static. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:55:45 11.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:43:22 11.08.2011   Titel:              Zitieren

version = "0.0.2.303 - Rev: 1158"

bool flushEvents(EVENT_t filter) korrigiert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:52:55 11.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:05:48 11.08.2011   Titel:              Zitieren

version = "0.0.2.304 - Rev: 1159"

- void flip() und void autorefresh(bool on) in video.c. (syscall)
- Variable autoRefresh in video.c

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:16:52 12.08.2011   Titel:              Zitieren

version = "0.0.2.305 - Rev: 1160"

userlib.h/c: uint32_t getMyIP() (syscall nach network.h/c)

Verwendung in test.c:
C/C++ Code:
IP_t ip;
ip.iIP = getMyIP();
printf("My IP is %u.%u.%u.%u", ip.IP[0], ip.IP[1], ip.IP[2], ip.IP[3]);
C/C++ Code:
IP_t ip;
ip.iIP = getMyIP();
printf("My IP is %u.%u.%u.%u", ip.IP[0], ip.IP[1], ip.IP[2], ip.IP[3]);
C/C++ Code:
IP_t ip;
ip.iIP = getMyIP();
printf("My IP is %u.%u.%u.%u", ip.IP[0], ip.IP[1], ip.IP[2], ip.IP[3]);

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:20:04 12.08.2011, insgesamt 2-mal bearbeitet
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 10:46:18 12.08.2011   Titel:              Zitieren

Rev. 1161, v0.0.2.306:

* DoubleBuffering kann jetzt für jede Konsole einzeln eingestellt werden (gab vorher echte Probleme beim Umschalten in andere Konsolen, die kein DoubleBuffering konnten, wie z.B. die Kernelkonsole)
Das hätte man nicht global in video.c einbauen dürfen, sondern in console_t.
* Scrollen in Konsolen kann ausgeschaltet werden (auch im Userland) (yeah, erster eigener Syscall!)
* Kleinere Fehlerbehebungen


DoubleBuffering funktioniert immer noch nicht korrekt, clearScreen(0x00); löscht komischerweise nicht... -.-

"Beweisbild":
http://prettyos.fanofblitzbasic.de/ppong2dbuffng.png

Erklärung:
Das Menü wird von unten in das Bild hereingeschoben und zieht anscheinend "Schlieren", allerdings nur über etwas mehr als die linke Hälfte des Bildes.
clearScreen(); ist anscheinend ganz oder nur teilweise nicht funktionsfähig.

Leider brauche ich DoubleBuffering, sonst flackert das Bild die ganze Zeit.


Zuletzt bearbeitet von Erhard Henkes am 14:58:00 12.08.2011, insgesamt 7-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:34:34 12.08.2011   Titel:              Zitieren

Lösung im chat:
C/C++ Code:
void flip()
{
    autorefresh(true);
    __asm__ volatile("int $0x7F" : : "a"(67));
    autorefresh(false);
}
C/C++ Code:
void flip()
{
autorefresh(true);
__asm__ volatile("int $0x7F" : : "a"(67));
autorefresh(false);
}
C/C++ Code:
void flip()
{
    autorefresh(true);
    __asm__ volatile("int $0x7F" : : "a"(67));
    autorefresh(false);
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 15:46:25 12.08.2011   Titel:              Zitieren

Rev. 1162:

* DoubleBuffering geht jetzt (zwar mit Hack, aber immerhin)
* tcp.c korrigiert (Korrektur von Dr. Erhard Henkes)
neuer_user
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.12.2010
Beiträge: 210
Beitrag neuer_user Mitglied 16:39:59 12.08.2011   Titel:              Zitieren

0.0.2.307 - Rev: 1163:
-ftp.c: Funktionen hinzugefügt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:21:17 12.08.2011   Titel:              Zitieren

version = "0.0.2.308 - Rev: 1164"

defines in video.h für updateCursor hinzugefügt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:04:53 13.08.2011   Titel:              Zitieren

version = "0.0.2.309 - Rev: 1165"

- Kleinigkeiten, defines
- const uint32_t RAMDISKSIZE = 0x100000;

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
neuer_user
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.12.2010
Beiträge: 210
Beitrag neuer_user Mitglied 20:26:18 13.08.2011   Titel:              Zitieren

0.0.2.309 - Rev: 1166
browser.c:
-Neue Funktionen
ftp.c:
-Dateien herunterladen/speichern
-unterschiedliche Ports möglich
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:33:22 14.08.2011   Titel:              Zitieren

version = "0.0.2.310 - Rev: 1167"

- tcp.c: EVENT_TCP_CLOSED wird nun ausgelöst, wenn die Verbindung ESTABLISHED verlässt, nicht erst, wenn sie gelöscht wird
- fat.c: FAT_showDirectoryEntry(dir); in fillFILEPTR wurde mit _FAT_DIAGNOSIS_ auskommentiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:17:53 14.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:16:34 14.08.2011   Titel:              Zitieren

version = "0.0.2.311 - Rev: 1168"

tcp.c: Unkritische Error-Ausgaben hinter _TCP_DEBUG_ verbannt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
neuer_user
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.12.2010
Beiträge: 210
Beitrag neuer_user Mitglied 13:31:25 14.08.2011   Titel:              Zitieren

0.0.2.311 - Rev: 1169:
browser.c: tcp_close(connection) aus EVENT_TCP_RECEIVED verschoben.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:56:57 14.08.2011   Titel:              Zitieren

version = "0.0.2.311 - Rev: 1170"

userlip.hpp: Ersatz für new/delete ist nicht notwendig (Dank an cooky451 für den Hinweis)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:33:43 15.08.2011   Titel:              Zitieren

version = "0.0.2.312 - Rev: 1171"

Neue User-Fkt. in userlib.h/c (syscalls):
void dns_setServer(IP_t server);
void dns_getServer(IP_t* server);

Startwert DNS-Server: 0.0.0.0.
Nach DHCP ACK wird auf gateway (DHCP server) gesetzt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
cooky451
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4799
Beitrag cooky451 Mitglied 20:41:41 15.08.2011   Titel:              Zitieren

"0.0.2.313 - Rev: 1175"

- Neue Dateien in user_tools: dns.c dns.h dns_help.c dns_help.h
- Neue Datei in other_userprogs: showdns.c

dns.h bietet Funktionen zum parsen/erstellen von DNS Anfragen.
Momentan können nur header, questions und answers geparst werden, für Näheres siehe dns.c.
dns_help.h bietet kleine Helferfunktionen, wie:
getAddrByName(); // gibt erste gefundene Adresse zurück
showDNSQuery();

showdns.c: Ruft einfach showDNSQuery() auf; zum testen.

---
DNS Server auf statische IP 208.67.222.222 geändert, da es noch Probleme mit der automatischen Findung gibt. (@Erhard: 10.0.2.2 funktioniert leider nicht wie vermutet.)

_________________
Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™


Zuletzt bearbeitet von cooky451 am 22:11:50 15.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:08:34 15.08.2011   Titel:              Zitieren

DNS server (name server) in qemu ist 10.0.2.3 ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:38:42 16.08.2011   Titel:              Zitieren

version = "0.0.2.314 - Rev: 1176"

- syscall.c etwas erweitert und userlib.c nach Nummern sortiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:46:06 16.08.2011   Titel:              Zitieren

version = "0.0.2.315 - Rev: 1177"

- events.c (style)
- network.h: working DNS server

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:02:34 17.08.2011   Titel:              Zitieren

version = "0.0.2.316 - Rev: 1178"

task.c, scheduler.c: Anzeige der tasks (strg+t) optimiert


Lustiger Nebeneffekt: dauerhaft strg+t gedrückt halten. :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:26:39 17.08.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:24:06 18.08.2011   Titel:              Zitieren

Version 0.0.2.317:

- showInfobar, autorefresh, autoscroll zu console_setProperties zusammengefasst
- Vollbildmodus möglich (console_setProperties(CONSOLE_FULLSCREEN))
- flushEvent entfernt. Das gleiche Verhalten kann mit event_poll simuliert werden.
- Kleinigkeiten (u.a. Codestyle)


Zuletzt bearbeitet von Mr X am 23:24:39 18.08.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:06:08 19.08.2011   Titel:              Zitieren

Version 0.0.2.317 - Rev. 1180:

- resolveIP-Hack durch DNS ersetzt
- Bugfix im DNS: Einmal zuviel dereferenziert
- syscalls.c von userlib.c abgespalten
- Bugfix in Shell: Keine doppelte not-Found-Ausgabe mehr
- Codestyle, Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:35:30 19.08.2011   Titel:              Zitieren

version = "0.0.2.317 - Rev: 1181"

ftp.c korrigiert:
C/C++ Code:
IP_t IP = getAddrByName(hostname)
C/C++ Code:
IP_t IP = getAddrByName(hostname)
C/C++ Code:
IP_t IP = getAddrByName(hostname)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
cooky451
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4799
Beitrag cooky451 Mitglied 10:23:51 20.08.2011   Titel:              Zitieren

0.0.2.318 - Rev: 1182
- Kleine Änderung an DNS
- stdlib: qsort, strtol, strtoul, strtod eingefügt.
+ atoi/atol gefixt (rufen jetzt strtol() auf)
+ atof() gibt jetzt double zurück. (ruft strtod() auf)
- stdio: strrchr gefixt, alte Version hat den ersten Buchstaben ignoriert.
- stoupper/stolower: strlen() entfernt

_________________
Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:49:30 20.08.2011   Titel:              Zitieren

Fast ein Jahr nach Version 0.0.2.0 veröffentlichen wir hiermit:

PrettyOS 0.0.3.0

Neue Features:
- Clang-Kompatibilität
- Erweiterte Netzwerkkartenunterstützung
- Interface für Netzwerktreiber
- Treiber für AMD PCNet
- Erweiterte Netzwerkprotokollunterstützung
- VBE-GUI-Ansatz
- Halbwegs vollständige C-Standardbibliothek (Userbereich)
- Parameter beim Programmstart
(- Powermanagement (APM))

Verbesserungen:
- Besserer Tastaturtreiber
- Besserer Maustreiber
- Besserer Floppy/DMA-Treiber
- Besserer Scheduler
- VBE-Schnittstelle
- Zahlreiche Bugfixes und kleine Verbesserungen
- Erweiterte Dateisystemformatierung


Version 0.0.3.0 - Rev. 1183
- IPC-Stubs hinzugefügt
- Codestyle
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:28:10 21.08.2011   Titel:              Zitieren

Version 0.0.3.1:

- Bugfix: Partitionen 1 bis 3 werden bei nicht-Vorhandensein korrekt mit 0 initialisiert.
- Bugfix: setCursor prüft nun übergebene Werte auf Plausibilität
- test-results.txt aktualisiert
- Vendorliste um Leereinträge bereinigt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:37:36 22.08.2011   Titel:              Zitieren

version = "0.0.3.2 - Rev: 1185"

subversion von rtl8139 wird festgestellt und ausgegeben.
qemu 0.11.5 mit EHCI und qemu 0.14.1 verwenden rtl8139C+.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:19:13 22.08.2011   Titel:              Zitieren

Version 0.0.3.3:

- Floppytreiber gibt Zugriffsversuche nach weniger Versuchen auf.
- Events schreiben, wenn möglich, Größe des Events in Puffer, wenn dieser zu klein für das Event selbst ist.
- upd_bind/udp_unbind ermöglichen Zuordnung von UDP-Paketen zu tasks.
- tcpConnectedEventHeader_t enthält Informationen zum Remotesocket.
- udpReceivedEventHeader_t enthält zusätzlich die sourceIP des Pakets.
- Codestil&Codevereinfachungen
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:49:15 22.08.2011   Titel:              Zitieren

Version 0.0.3.4:

- Bugfix: Keine Nullpointerdereferenzierung bei UDP mehr
- Bugfix: Kein "Broken free" beim Löschen von gefüllten Event queues mehr
- Bugfix: udprecv nutzt nun udp_unbind
- "Garbage Collector" für offengebliebene Dateien, TCP-Verbindungen, UDP-Ports und angeschaltetem PC-Speaker
- Tasks können mit Strg+Esc und Strg+e (da Strg+Esc unter Windows das Startmenü öffnet und darum bei Emulatoren Probleme auftreten) abgeschossen werden (Wirkt jeweils auf alle Tasks, die zur aktuellen Konsole gehören)
- Cuervos Textgui debugged und aufgeräumt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:21:54 22.08.2011   Titel:              Zitieren

version = "0.0.3.5 - Rev: 1188" (im kernel fasch bezeichnet)

ckernel.c: formale Änderungen, unnötige Header entfernt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:22:28 22.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:29:34 22.08.2011   Titel:              Zitieren

version = "0.0.3.6 - Rev: 1189"

rtl8139.c: Fehler bei Versionsausgabe korrigiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:32:32 22.08.2011   Titel:              Zitieren

Version 0.0.3.7:

- Bugfix: event_poll mit kleinem Puffer geht wieder (führte dazu, dass getch nicht funktionierte)
- Bugfix: Fehlendes ntohs in udp.c ergänzt -> udp_bind funktioniert nun
- Makefiles unterstützen nun auch clang (funktioniert bislang nur teilweise)
- dns-Funktionen nutzen udp_bind/udp_unbind
cooky451
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4799
Beitrag cooky451 Mitglied 00:03:57 23.08.2011   Titel:              Zitieren

Version 0.0.3.8 - Revision 1191
- DNS CNAME Parser gefixt.

_________________
Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 18:31:48 23.08.2011   Titel:              Zitieren

Rev. 1192: (v0.0.3.8)

* ppong.c added (WIP)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:04:25 23.08.2011   Titel:              Zitieren

version = "0.0.3.8 - Rev: 1193"

ppong.c:
- W und S als Steuerung im Spiel nachgerüstet.
- Fehlende breaks ergänzt.
- #defines teilweise durch echte Typen ersetzt

Ich finde ppong ein hervorragendes User-Projekt. Dank an Cuervo für die Erstellung des bisherigen Apps.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:05:45 23.08.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:08:03 23.08.2011   Titel:              Zitieren

Version 0.0.3.9:

- Bugfix: Freetimetask wird keiner Konsole mehr zugewiesen -> Strg+Esc führt nicht mehr zu Reboots bei strg+t
- IP/MAC-Filter in Ethernet- und IPv4-Modul wieder in Betrieb genommen (-> Bitte testen, ob noch alles geht)
- IPv4-Code überarbeitet
- Codestil und Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:28:29 23.08.2011   Titel:              Zitieren

version = "0.0.3.9 - Rev: 1195"

ppong.c:
- double für ball position/speed
- gegenerisches "Tor" etwas geöffnet ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:25:15 23.08.2011   Titel:              Zitieren

version = "0.0.3.9 - Rev: 1197" (1196 hatte Fehler)

ppong.c:
- Wichtige Ball-Parameter oben aufgeführt
- Sound bei Treffer

TODO: Ball-/Wandkollision noch fehlerhaft

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:30:57 23.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:39:03 24.08.2011   Titel:              Zitieren

version = "0.0.3.9 - Rev: 1198"

ppong.c weiter verbessert (Kollision, random, Goal mit Ton, Anstoßrichtung entsprechend dem vorherigem Tor, ...)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:54:58 25.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 05:27:20 25.08.2011   Titel:              Zitieren

version = "0.0.3.9 - Rev: 1199"

ppong.c: Spielverlauf noch etwas verbessert (UpdateGame(), ...)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 05:42:26 25.08.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 12:51:02 25.08.2011   Titel:              Zitieren

Version 0.0.3.10:

- Bugfix: flpydsk_read_directory überspringt nun gelöschte Dateien
- IPC-Implementation erweitert
- strpbrk in kernel und stdlib implementiert
- Strg+b-Shortcut entfernt (-> Bei Bedarf als Userprogramm implementieren)
- Code einiger Userprogramme überarbeitet (gefährlichen/langsamen/unflexiblen Code ersetzt, aufgeräumt, kleine Bugfixes)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:16:50 25.08.2011   Titel:              Zitieren

version = "0.0.3.10 - Rev: 1201"

ppong.c:
- AI für den Computer-Gegner eingeführt
- Scores und Games
- Schlägergröße variiert von game zu Game bei AI

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 13:36:26 25.08.2011   Titel:              Zitieren

version = "0.0.3.10 - Rev: 1202"

ppong.c:
- AI verbessert (Vorzeichenfehler behoben)

Screenshot (qemu): http://www.henkessoft.de/OS_Dev/Bilder/rev_1202.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:44:04 25.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:03:03 25.08.2011   Titel:              Zitieren

version = "0.0.3.10 - Rev: 1203"

ppong.c:
- random angepasst (RAND_MAX war falsch), nun springt der Ball sowohl nach oben als auch nach unten beim Anstoß

TODO: Festfressen einer Laufbahn verhindern!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:34:24 25.08.2011, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:47:28 25.08.2011   Titel:              Zitieren

Version 0.0.3.11:

- sprintf, vsprintf, snprintf und vsnprintf im kernel und Userspace optimiert. Dabei Bugfix für #PF in browser und irc.
- strcat/strncat stellenweise durch snprintf ersetzt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:53:48 26.08.2011   Titel:              Zitieren

irc.c geht wieder.

Fehler bei browser.c:
fa.de eingeben: #PF EIP 100F8Eh

0x00100f75 memcmp
aufgerufen von: ethernet_received
aufgerufen von: network_receivedPacket
aufgerufen von: todoList_execute

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:18:42 26.08.2011   Titel:              Zitieren

version = "0.0.3.11 - Rev: 1205"

ppong.c: Geschwindigkeit verringert, Festfressen verhindert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:19:39 26.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:19:37 26.08.2011   Titel:              Zitieren

version = "0.0.3.11 - Rev: 1206"

ppong.c:
- 1 Player
- 2 Players (W/S and P/L)

Nun kann man endlich gegen sich selbst spielen (W/S und P/L als Steuerung) ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:41:51 26.08.2011   Titel:              Zitieren

version = "0.0.3.12 - Rev: 1207"

uhci.h begonnen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:13:00 26.08.2011   Titel:              Zitieren

version = "0.0.3.12 - Rev: 1210" (1208,1209 fehlerhaft)

ppong.c:
- ppong.h geschaffen
- Ball kann nicht mehr hinter Schläger abgefangen werden (Fehler beseitigt)
- Menü wieder schöner (ohne Tastenanzeige)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:33:53 26.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:31:57 26.08.2011   Titel:              Zitieren

version = "0.0.3.13 - Rev: 1211"

uhci.h: structs für qh und td modelliert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:32:58 27.08.2011   Titel:              Zitieren

version = "0.0.3.14 - Rev: 1212"

memory.h: Großzügiger Stack für user-Programme (1 MiB minus Programmgröße)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:19:56 27.08.2011   Titel:              Zitieren

Version 0.0.3.15:

- Abhängigkeit von Systemfrequenz bei scheduler_blockCurrentTask entfernt
- Bugfixes in vsnprintf, vsprintf
- Optimierungen an String- und Ausgabefunktionen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:38:57 27.08.2011   Titel:              Zitieren

version = "0.0.3.16 - Rev: 1214"

uhci.c hinzugefügt (Start/Handler soll analog EHCI aufgebaut werden)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
cooky451
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4799
Beitrag cooky451 Mitglied 14:16:50 27.08.2011   Titel:              Zitieren

Version 0.0.3.16, Revision 1215

- qsort fixed
- psort.c als Userprogramm eingefügt.

_________________
Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:23:02 27.08.2011   Titel:              Zitieren

version = "0.0.3.17 - Rev: 1216"

uhci.h/c, ehci.c, usb_hc.c: uhci weiter ausgebaut

vm86.c: cli/sti ersetzt durch task_switching false/true

memory.txt und Syscalls.odt aktualisiert

syscalls.c: TODOs eingefügt gemäß Planung

TODO: user-threads erzeugen (syscall auf Kombination von createTask, scheduler_insertTask, ret task->pid) MrX: befürchtet rat race condition ehenkes: fordert Begrenzung auf max. Anzahl an User-Threads pro User-Programm.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:21:13 27.08.2011   Titel:              Zitieren

Version 0.0.3.18:

- Angefangen, Lizenzprobleme bei Userprogrammen zu beheben:
-- calc, hello, music, readme, test, dummy, dummy-cpp und ttt stehen nun unter 2-Klausel-BSD
-- keysound in piano, rctl in webshell und ppong in pong umbenannt (-> 2-Klausel-BSD)
- Userprogramme pong und rt entfernt
- Kleinigkeiten am BL


Zuletzt bearbeitet von Mr X am 21:21:23 27.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:10:05 27.08.2011   Titel:              Zitieren

version = "0.0.3.18 - Rev: 1218"

Weitere User-Programme unter BSD-2-Klausel-Lizenz gestellt.

Diese BSD-2-Klausel-Lizenz wird zukünftig die Regel sein bei User-Programmen, um den freien Zugriff des gesamten Teams auf den Code von User-Programmen zu gewährleisten. Ausnahmen müssen von allen für das Repo zugelassenen Developern getragen werden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:23:49 27.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:22:37 28.08.2011   Titel:              Zitieren

version = "0.0.3.19 - Rev: 1219"

uhci.c: Interrupterkennung u. -Reset (I/O BASE+USBSTS) implementiert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:18:03 28.08.2011   Titel:              Zitieren

version = "0.0.3.20 - Rev: 1220"

uhci.c: uhci_resetHostController() gemäß
http://www.lowlevel.eu/wiki/Universal_Host_Controller_Interface#Reset

In qemu 0.14.1 und bei VMWARE-Player wird eine Rootport-Anzahl von 2 festgestellt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:19:48 28.08.2011, insgesamt 1-mal bearbeitet
cooky451
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.10.2010
Beiträge: 4799
Beitrag cooky451 Mitglied 08:39:00 28.08.2011   Titel:              Zitieren

Version: 0.0.3.20 - Revision: 1221

- Alle meine Userprogramme unter die BSD-Lizenz gestellt, unter welcher jetzt alle Userprogramme stehen.

_________________
Sie sind nicht berechtigt unrechtmäßige Kopien dieses Datenträgers zu erstellen.™
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:56:29 28.08.2011   Titel:              Zitieren

version = "0.0.3.21 - Rev: 1222"

uhci.h/c: UHCI reset ausgeführt, frame list definiert
pci.h/c: pci_config_write_word ergänzt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:58:25 28.08.2011   Titel:              Zitieren

version = "0.0.3.22 - Rev: 1223"

uhci.c: LEGSUP vor/nach reset auslesen, ports mit UHCI_PORT_CS_CHANGE schreiben

Code:
qemu:          vor: 8F00 nach: 2000  
VMWare-Player: vor: 2000 nach: 2000  
test-PC 1:     vor: 2000 nach: 2000  
test-PC 2:     vor: 2000 nach: 2000
Code:
qemu: vor: 8F00 nach: 2000
VMWare-Player: vor: 2000 nach: 2000
test-PC 1: vor: 2000 nach: 2000
test-PC 2: vor: 2000 nach: 2000
Code:
qemu:          vor: 8F00 nach: 2000  
VMWare-Player: vor: 2000 nach: 2000  
test-PC 1:     vor: 2000 nach: 2000  
test-PC 2:     vor: 2000 nach: 2000


C/C++ Code:
// Interrupt carried out as a PCI interrupt
#define
UHCI_PCI_LEGACY_SUPPORT_PIRQ     0x2000

// Status bits that are cleared by setting to 1
#define
UHCI_PCI_LEGACY_SUPPORT_STATUS   0x8F00
C/C++ Code:
// Interrupt carried out as a PCI interrupt
#define
UHCI_PCI_LEGACY_SUPPORT_PIRQ 0x2000

// Status bits that are cleared by setting to 1
#define
UHCI_PCI_LEGACY_SUPPORT_STATUS 0x8F00
C/C++ Code:
// Interrupt carried out as a PCI interrupt
#define
UHCI_PCI_LEGACY_SUPPORT_PIRQ     0x2000

// Status bits that are cleared by setting to 1
#define
UHCI_PCI_LEGACY_SUPPORT_STATUS   0x8F00

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:08:10 28.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:54:46 28.08.2011   Titel:              Zitieren

version = "0.0.3.23 - Rev: 1224"

uhci.c: Fehler korrigiert: framelist base address nun page-aligned und 4K groß. Auf physischen Wert im Speicher achten (wird ausgegeben)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:17:46 29.08.2011   Titel:              Zitieren

version = "0.0.3.24 - Rev: 1225"

uhci.h/c auf struct umgestellt. Test-PC 1: Zwei uhci werden initiiert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:55:48 29.08.2011   Titel:              Zitieren

version = "0.0.3.25 - Rev: 1226"

uhci.c: start von mehreren UHCI


qemu: -usb -device piix4-usb-uhci -device piix4-usb-uhci (3 UHCI)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:32:01 29.08.2011   Titel:              Zitieren

Version 0.0.3.26:

- TTT überarbeitet: Schönere und klarere Ausgabe. Spieler, der an der Reihe ist, wird angezeigt. Spieler, der beginnt, wird durch Zufall "ausgelost"
- Kleinere Bugfixes und Überarbeitungen an UHCI, serial, Maustreiber und ISA-DMA.
- GCC-generierte mmap-Konvertierung im BL2 verbessert. U.a. Funktionsprolog und -epilog entfernt.
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:09:53 30.08.2011   Titel:              Zitieren

version = "0.0.3.27 - Rev: 1228"

uhci.c: Handler weiter optimiert (Abfangen von gleichen fremden IRQ)

Nun muss auf Hardware getestet werden, ob LEGSUP problemlos umgeschaltet werden kann.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:59:18 30.08.2011   Titel:              Zitieren

version = "0.0.3.28 - Rev: 1229"

devicemanager.h/c: USB 1.1 und USB 2.0
uhci.h/c: attach to device manager as USB 1.1
ehic.c: USB 2.0

strg+d provides correct results

TODO: enable/reset port does not yet work

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:00:47 30.08.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:08:52 30.08.2011   Titel:              Zitieren

version = "0.0.3.29 - Rev: 1230 in ckernel.c eine Ver./Rev. zu hoch

uhci.c: reset analog http://www.lvr.com/forum/index.php?topic=19.0

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:09:38 30.08.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:05:30 01.09.2011   Titel:              Zitieren

version = "0.0.3.30 - Rev: 1231

uhci.c: weiter testweise ausgebaut, läuft auf Test-PC und VMware Player ohne HChalted durch (kein Freeze!), in qemu noch ein unverständliches HChalted.

Screenshot auf VMWare Player: http://www.henkessoft.de/OS_Dev/Bilder/uhci.PNG
LEGSUP im Beispiel probeweise auf 0x0000 eingestellt (anstelle 0x2000).

Portstatus nach enable: 0x0085 = 10000101
bit0: Current Connect Status ReadOnly. 1=Device is present on port. 0=No device is present.
bit2: Port Enabled/Disabled R/W. 1=Enable. 0=Disable. Ports can be enabled by host software only. <--- das haben wir gerade durchgeführt.
bit7: Reserved ReadOnly. Always read as 1.

Nach diesem Ergebis empfehle ich uhci-Tests auf VMWarePlayer (war bei ehci ebenfalls der entscheidende Helfer) bzw. Hardware.

rtl8139.c: Filter gegen falsche interrupts eingebaut (in pcnet funktioniert analoge Vorgehensweise nicht?! MrX: bitte checken) - Auf Test-PC gibt es mit Netzwerk noch Probleme (#PF), aber nun rebootet er nicht mehr sofort, wenn Netzwerk verbunden ist, damit kann man das Problem einkreisen.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:57:34 01.09.2011, insgesamt 9-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:17:46 01.09.2011   Titel:              Zitieren

version = "0.0.3.31 - Rev: 1232"

uhci.c: Auswertung portstatus weiter entwickelt, LEGSUP auf 0x0000 gestellt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:26:04 01.09.2011   Titel:              Zitieren

version = "0.0.3.32 - Rev: 1233"

uhci.c: Ausgaben verbessert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:48:02 01.09.2011   Titel:              Zitieren

Version 0.0.3.33:

- Zusammenspiel von IRQs, PCI, Netzwerkadaptern und HCIs verbessert
- Übler Bug im UHCI-Handler beseitigt - Dieser ist nun nichtmehr tot
- IRQ-Filter im Netzwerkcode verbessert
- todolist aus UHCI entfernt


Zuletzt bearbeitet von Mr X am 21:48:41 01.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:58:34 01.09.2011   Titel:              Zitieren

version = "0.0.3.34 - Rev: 1235"

uhci.c: showPortState(uhci_t* u, uint8_t j)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:32:46 02.09.2011   Titel:              Zitieren

version = "0.0.3.35 - Rev: 1236"

uhci.h/c: Fehler beseitigt, code umgestellt

qemu: läuft (invalid interrupts)
vmware: halted
test-pc 1: halted / process error
test-pc 2: läuft

C/C++ Code:
// set PIRQ or zero (???)
    pci_config_write_word(bus, dev, func, UHCI_PCI_LEGACY_SUPPORT, 0 /*UHCI_PCI_LEGACY_SUPPORT_PIRQ*/);
C/C++ Code:
// set PIRQ or zero (???)
pci_config_write_word(bus, dev, func, UHCI_PCI_LEGACY_SUPPORT, 0 /*UHCI_PCI_LEGACY_SUPPORT_PIRQ*/);
C/C++ Code:
// set PIRQ or zero (???)
    pci_config_write_word(bus, dev, func, UHCI_PCI_LEGACY_SUPPORT, 0 /*UHCI_PCI_LEGACY_SUPPORT_PIRQ*/);
Mit 0 läuft es auf VMWare besser, richtig ist aber UHCI_PCI_LEGACY_SUPPORT_PIRQ.

Zitat:
USB PIRQ Enable (USBPIRQDEN) R/W. 1 (default) = USB interrupt is routed to PIRQD. 0 = USB interrupt does not route to PIRQD. This bit prevents the USB controller from generating an interrupt. Note that it will probably be configured to generate an SMI using bit 4 of this register. Default to 1 for compatibility with older USB software.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:00:22 02.09.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:51:47 02.09.2011   Titel:              Zitieren

version = "0.0.3.36 - Rev: 1237"

uhci.c: 0x2000 in LEGSUP und nur einen QH der horizontal/vertikal das T-Bit (inaktiv) geschaltet hat, keine TDs.

Test-PC 1 (1400 MHz): erkennt angesteckte usb-sticks (high-speed) als fullspeed:

- fullspeed device
- device changed (CSC)
- device attached (CS)
- line state: D+

screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev.1236_uhci.PNG

Das ist eine Basis. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:14:09 02.09.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:01:02 02.09.2011   Titel:              Zitieren

version = "0.0.3.37 - Rev: 1238"

uhci.c: invalid interrupts gefiltert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:46:58 02.09.2011   Titel:              Zitieren

version = "0.0.3.38 - Rev: 1239"

uhci.h/c: Fehler behoben bezüglich BIT_T und BIT_Q, Ausgaben verbessert (z.B. RS bit zur Sicherheit)

Tests: qemu und Test-PC 1 laufen gut, vmware und Test-PC 2 halted und process error

TODO: Fehlerstelle finden durch debuggen mittels vmware

Wichtig: die Interrupts kommen manchmal doppelt/dreifach für den gleichen UHCI! :rolleyes: EDIT: lag am mehrfachen Setzen des RS-Bits, also völlig korrekt! ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:23:40 03.09.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:07:37 03.09.2011   Titel:              Zitieren

version = "0.0.3.39 - Rev: 1240"

uhci.c:
- Fehler korrigiert:
C/C++ Code:
u->framelistAddrVirt->frPtr[i] = paging_getPhysAddr(qhIn) | BIT_QH;
C/C++ Code:
u->framelistAddrVirt->frPtr[i] = paging_getPhysAddr(qhIn) | BIT_QH;
C/C++ Code:
u->framelistAddrVirt->frPtr[i] = paging_getPhysAddr(qhIn) | BIT_QH;
( Vorher & anstelle | )

Nun laufen alle! :) MrX: bitte Hardware (alle 3 PCs) testen.

Damit sind nur Test-PC 2 und VMWare als "echte Tester" geeignet. ;)
VMWare war auch bereits bei EHCI die ideale Emulation.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:22:44 03.09.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:15:47 03.09.2011   Titel:              Zitieren

version = "0.0.3.40 - Rev: 1241"

uhci.c: experimentelle Variante für eigene qh/td-Versuche
siehe uhci.c, zeile 14, #define UHCI_SCENARIO // qh/td experiments

wenn's stört: uhci.c, zeile 14, #define UHCI_SCENARIO wegnehmen (qemu bockt mit HC Process Error)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:22:23 03.09.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:27:40 03.09.2011   Titel:              Zitieren

Version 0.0.3.41:

- IO/MMIO-Bit im PCI-Commandregister bei allen Gerätetreibern korrekt gesetzt
- PCNet-Handler gefixt, Interrupt-Filter geht nun
- Codestil (im Zusammenhang mit PCI)
- Optimierungen am Bootloader
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:20:25 03.09.2011   Titel:              Zitieren

version = "0.0.3.42 - Rev: 1243"

ohci.h/c: erster Rahmen analog uhci.h/c eingefügt (ohci verwendet MMIO)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:26:18 03.09.2011   Titel:              Zitieren

Version 0.0.3.43:

- UHCI/OHCI-Funktionsnamen aufgeräumt
- Portscan-Mechanismus im Devicemanager, implementiert für UHCI
- Ausgabe verbessert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:26:37 04.09.2011   Titel:              Zitieren

version = "0.0.3.44 - Rev: 1245"

OHCI Operational Registers implementiert (Open Host Controller Interface Specification for USB 1.0a, Kap. 7; S. 108)
Als Test fragen wir in der PCI-Device-List die HCI Revision und die Number Downstream Ports ab. Klappt alles bestens. :)

Wer keinen PC mit OHCI hat, verwendet VBox.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:54:00 04.09.2011, insgesamt 1-mal bearbeitet
taljeth
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.09.2009
Beiträge: 148
Beitrag taljeth Mitglied 15:08:01 04.09.2011   Titel:              Zitieren

qemu kann übrigens auch OHCI, -device pci-ohci ist die richtige Option dafür.

_________________
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.
Lowlevel - die deutschsprachige OS-Dev-Community
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:45:22 04.09.2011   Titel:              Zitieren

version = "0.0.3.45 - Rev: 1246"

ohci.c: HC Reset begonnen

@taljeth: Danke für den Hinweis!

2*UHCI und 2*OHCI:
Code:
-usb -device piix4-usb-uhci -device pci-ohci -device pci-ohci
Code:
-usb -device piix4-usb-uhci -device pci-ohci -device pci-ohci
Code:
-usb -device piix4-usb-uhci -device pci-ohci -device pci-ohci

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:51:18 04.09.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:41:00 04.09.2011   Titel:              Zitieren

Version 0.0.3.46:

- EHCI-Code aufgeräumt
- Bugfix in ftp, kein #PF mehr beim Verbinden
- A20-Code im BL2 verbessert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:03:19 04.09.2011   Titel:              Zitieren

version = "0.0.3.47 - Rev: 1248"

ohci.c: handler ausgebaut, um Interrupts zu zeigen und zurück zu setzen (kommt bei einem Test-PC). Hilft bei einem PC aber nichts, kommt massiv Port Status Changed.

Zeit für Übernahme von SMM wurde erweitert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:54:54 04.09.2011   Titel:              Zitieren

version = "0.0.3.48 - Rev: 1249"

ohci.c: handler leicht verbessert


Test mit VBox:
- usb2.0 deaktivieren in VBox
- PrettyOS starten (ohne Stick im Port)
- Stick in Port einstecken
---> Interrupt: "Root hub status change." kommt einmal

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:56:40 04.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:01:50 04.09.2011   Titel:              Zitieren

version = "0.0.3.49 - Rev: 1250"

ohci.c: HCCA eingebunden, Interrupts enabled (SF - start of frame - wurde deaktiviert wegen Dauerbeschuss in qemu)

Ideal: Test der ohci OpRegs im VBox debugger (Tipp von MrX)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:46:09 04.09.2011   Titel:              Zitieren

version = "0.0.3.50 - Rev: 1251"

ohci.h/c, ehci.h/c, ... Formelle Verbesserungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:02:37 05.09.2011   Titel:              Zitieren

version = "0.0.3.51 - Rev: 1252"

ohci.h/c: defines/comments; ohci_handler vervollstandigt

Anmerkung: EHCI in os.h deaktiviert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:18:26 05.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:04:32 05.09.2011   Titel:              Zitieren

version = "0.0.3.52 - Rev: 1253"

ohci.c: HC setup überarbeitet entsprechend Kap. 5 der OHCI Spec (rev. 1.0a)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:03:28 06.09.2011   Titel:              Zitieren

version = "0.0.3.53 - Rev: 1254"

ohci.c:
- Übernahme von SMM durch IR bit setzen (nach erfolglosem request) wird angezeigt
- Ports werden gezeigt und untersucht (attached, low/full speed, power)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:44:46 06.09.2011   Titel:              Zitieren

version = "0.0.3.54 - Rev: 1255"

ohci.c: nun wird der Port aktiviert ("enabled"), erfolgt nur beim Anstecken eines Device. Alle PortStatusBits werden ausgewertet/zurückgesetzt(falls notwendig).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:39:11 06.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:27:36 06.09.2011   Titel:              Zitieren

version = "0.0.3.55 - Rev: 1256"

ohci.h/c: ED, TD

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:28:28 06.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:02:33 07.09.2011   Titel:              Zitieren

version = "0.0.3.56 - Rev: 1257"

ohci.c: Port-Aktivierung im Code vereinfacht (MrX: bitte testen, Start-of-frame muss aktiviert bleiben für die Porterkennung)
usb1.h/c: als frame hinzugefügt (für UHCI und OHCI)

TODO: bei EHCI Abgabe an companion HC überprüfen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:06:13 07.09.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:24:45 07.09.2011   Titel:              Zitieren

version = "0.0.3.57 - Rev: 1258"

ehci.c: Wechsel zwischen EHCI und Companion HC eingebaut (nun ist UHCI und OHCI ja verfügbar). Es wird z.Z. die "lowest cHC number" verwendet.
(SE0 --> EHCI, K-State --> lowest cHC)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:26:40 07.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:09:01 07.09.2011   Titel:              Zitieren

version = "0.0.3.58 - Rev: 1259"

siehe: http://www.c-plusplus.de/forum/p2116360#2116360
ehci.c: K- und J-State werden abgegeben. Code als switch/case übersichtlicher.

J-State kann z.B. mit einer Fullspeed Gamer-Maus getestet werden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:17:55 07.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:52:33 08.09.2011   Titel:              Zitieren

version = "0.0.3.59 - Rev: 1260"

ehci.h/c. kleine Veränderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:35:54 08.09.2011   Titel:              Zitieren

version = "0.0.3.60 - Rev: 1261"

ohci.h/c: ED, TD, TDbuffer eingerichtet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:11:08 10.09.2011   Titel:              Zitieren

version = "0.0.3.61 - Rev: 1262"

ehci umgebaut von global auf Struktur ehci_t pro EHCI

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:32:46 10.09.2011   Titel:              Zitieren

version = "0.0.3.62 - Rev: 1263"

Auch für _EHCI_DIAGNOSIS_ und _USB2_DIAGNOSIS_ nun fehlerfrei. :)

Nun kann man in os.h alle HCI gezielt für die Installation in PrettyOS einstellen:
C/C++ Code:
#define _EHCI_ENABLE_              // EHCI will be installed, if this is defined, otherwise not
#define
_OHCI_ENABLE_              // OHCI will be installed, if this is defined, otherwise not
#define
_UHCI_ENABLE_              // UHCI will be installed, if this is defined, otherwise not
C/C++ Code:
#define _EHCI_ENABLE_ // EHCI will be installed, if this is defined, otherwise not
#define
_OHCI_ENABLE_ // OHCI will be installed, if this is defined, otherwise not
#define
_UHCI_ENABLE_ // UHCI will be installed, if this is defined, otherwise not
C/C++ Code:
#define _EHCI_ENABLE_              // EHCI will be installed, if this is defined, otherwise not
#define
_OHCI_ENABLE_              // OHCI will be installed, if this is defined, otherwise not
#define
_UHCI_ENABLE_              // UHCI will be installed, if this is defined, otherwise not

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 15:34:57 10.09.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:35:40 11.09.2011   Titel:              Zitieren

Version 0.0.3.63:

- Interrupt-Filter für EHCI, OHCI und UHCI verbessert
- Code umsortiert, Codestyle
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:55:44 11.09.2011   Titel:              Zitieren

Version 0.0.3.64:

- EHCI-Transactions implementiert, mit usbTransferEnumerate und usbTransferDevice getestet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:23:56 11.09.2011   Titel:              Zitieren

Version 0.0.3.65:

- usb2.c auf neue Transaction-Funktionen umgestellt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:46:55 11.09.2011   Titel:              Zitieren

version = "0.0.3.66 - Rev: 1267"

usb2_msd.c: control-transfers umgesetzt auf neues usb-interface

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:25:37 11.09.2011   Titel:              Zitieren

version = "0.0.3.67 - Rev: 1268"

ehci.c: VMWare läuft nun wieder (seit rev. 1258: HCHalted)
C/C++ Code:
// e->CapRegs->HCSPPORTROUTE_Hi = e->CapRegs->HCSPPORTROUTE_Lo = 0; // all valid ports go to lowest cHC number // VMWare does not reset!
C/C++ Code:
// e->CapRegs->HCSPPORTROUTE_Hi = e->CapRegs->HCSPPORTROUTE_Lo = 0; // all valid ports go to lowest cHC number // VMWare does not reset!
C/C++ Code:
// e->CapRegs->HCSPPORTROUTE_Hi = e->CapRegs->HCSPPORTROUTE_Lo = 0; // all valid ports go to lowest cHC number // VMWare does not reset!

Dieses 15-nibble-array-Register sollte sowieso RO sein, also ein netter VMWare-Bug.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:53:04 11.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:18:56 12.09.2011   Titel:              Zitieren

version = "0.0.3.68 - Rev: 1269"

- ohci-Ports werden nun ebenfalls "attached"
- Ausgabe der Port-Liste bezüglich Formatierung verbessert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:58:25 13.09.2011   Titel:              Zitieren

Version 0.0.3.69:

- USB/EHCI-Code aufgeräumt
- Bugfix: Unicode-Strings werden wieder korrekt transferriert (Vergessene Verweise auf dataQTDpage0 entfernt)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:27:38 13.09.2011   Titel:              Zitieren

Version 0.0.3.70:

- SCSI-Commands umgeschrieben. (Funktioniert emuliert, aber nicht auf echter Hardware)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:45:19 13.09.2011   Titel:              Zitieren

sehr fragil, stick-abhängig.
USB_BULK ist besser als USB_CONTROL für die bulk-tranfers. Damit ging es am PC mit einem anderen Stick, bei dem dann ttt ausgeführt werden konnte.

Probleme:
1) hispeed-sticks werden am PC nicht sicher erkannt, dann Umschalten auf cHC
2) 3:/ttt --> file not found (obwohl es da sein muss, floppy geht manchmal!)
3) Kombination aus TestUnitReady und RequestSense in testDeviceReady(...) klappt mit dem neuen Code nicht bei jedem Stick zuverlässig (kein ehci/usb Code-Problem)

Die Probleme tauchen auf bei VBox 4.08 und beim EHCI-Test-PC (OHCI als cHC)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:59:10 13.09.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:31:06 14.09.2011   Titel:              Zitieren

version = "0.0.3.71 - Rev: 1272"

usb msd etwas optimiert (VBox 4.08 und test-PC läuft nun).
Der ehci/usb-Umbau ist gelungen. :live:

C/C++ Code:
sleepMilliSeconds(50 + velocity * 200);
C/C++ Code:
sleepMilliSeconds(50 + velocity * 200);
C/C++ Code:
sleepMilliSeconds(50 + velocity * 200);


Es spielt also das Zeitverhalten eine große Rolle.

Das Wechselspiel zwischen den SCSI commands TestUnitReady und RequestSense läuft solange, bis das Ergebnis zufriedenstellend ist, siehe testDeviceReady(...), allerdings z.Z. höchstens drei Runden ( const uint8_t maxTest = 3; ).

In der Regel klappt es nach dem zweiten TestUnitReady.


TODO: usb- und usb_msd-Funktionen unabhängig machen von e/o/uhci!

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:47:13 14.09.2011, insgesamt 6-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:49:38 14.09.2011   Titel:              Zitieren

Erhard Henkes schrieb:
version = "0.0.3.71 - Rev: 1272"

usb msd etwas optimiert (VBox 4.08 und test-PC läuft nun).
Der ehci/usb-Umbau ist gelungen. :live:

C/C++ Code:
sleepMilliSeconds(50 + velocity * 200);
C/C++ Code:
sleepMilliSeconds(50 + velocity * 200);
C/C++ Code:
sleepMilliSeconds(50 + velocity * 200);


Es spielt also das Zeitverhalten eine große Rolle.

Sehr schön, dass Du den Fehler gefunden hast.
Ärgerlich allerdings, dass es ausgerechnet mit der Ausführungsgeschwindigkeit des asyncSchedulers zusammenhängt - wir müssen unbedingt einen Weg finden, diese langen Wartezeiten loszuwerden, andernfalls bleibt unser EHCI so lahm wie ein Floppylaufwerk.

Erhard Henkes schrieb:
TODO: usb- und usb_msd-Funktionen unabhängig machen von e/o/uhci!

Weitgehend obsolet - Genau das haben wir doch jetzt getan.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:33:17 14.09.2011   Titel:              Zitieren

version = "0.0.3.72 - Rev: 1273"

Zwei (bisher ignorierte) Fehler bei der Eingabe ungültiger Laufwerke in die Shell abgefangen (fsmanager.c, fopen).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:55:05 14.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:40:02 14.09.2011   Titel:              Zitieren

version = "0.0.3.73 - Rev: 1274"

#define _EHCI_DIAGNOSIS_ // Debug EHCI
#define _USB2_DIAGNOSIS_ // Debug USB 2.0 transfers
können nun wieder verwendet werden (liefert Einsichten in Details des Transfer-Ablaufs).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:15:15 15.09.2011   Titel:              Zitieren

version = "0.0.3.74 - Rev: 1275"

ehci-usb-Transfer signifikant beschleunigt durch Nutzung der doorbell und des bit5 im Statusregister. Stabil?

usbsts:
Zitat:
USBSTS - USB Status Register, bit5: Interrupt on Async Advance R/WC 0=Default. System software can force the host controller to issue an interrupt the next time the host controller advances the asynchronous schedule by writing a one to the Interrupt on Async Advance Doorbell bit in the USBCMD register. This status bit indicates the assertion of that interrupt source.


doorbell:
Zitat:
USBCMD – USB Command Register, bit 6: Interrupt on Async Advance Doorbell R/W. This bit is used as a doorbell by software to tell the host controller to issue an interrupt the next time it advances asynchronous schedule. Software must write a 1 to this bit to ring the doorbell. When the host controller has evicted all appropriate cached schedule state, it sets the Interrupt on Async Advance status bit in the USBSTS register. If the Interrupt on Async Advance Enable bit in the USBINTR register is a one then the host controller will assert an interrupt at the next interrupt threshold. See Section 4.8.2 for operational details. The host controller sets this bit to a zero after it has set the Interrupt on Async Advance status bit in the USBSTS register to a one. Software should not write a one to this bit when the asynchronous schedule is disabled. Doing so will yield undefined results.


Test auf PC mit zwei usb2.0-Sticks: viele asyncInt time outs, noch immer langsam. Funktioniert aber. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:14:12 16.09.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:10:44 16.09.2011   Titel:              Zitieren

version = "0.0.3.75 - Rev: 1276"

irq.h/c: sprechende defines eingefügt, BIT(n) verwendet


Bezüglich ehci/usb2.0 hier ein Ablauf (4 screenshots) in VMWare Player beim Anstecken eines usb-sticks: http://www.henkessoft.de/OS_Dev/Bilder/rev.1276_ehci_asyncScheduler.PNG

3:/arrow wird erfolgreich geladen. Zeitbedarf beim Laden: ca. 50 sec, insgesamt 23 asyncInterrupt Timeouts beim Laden, das aber funktioniert.

Manche Dateien werden gefunden, manche nicht (Kopie des FAT12 FloppyImages auf den usb-stick mit dd_for_windows aus dem FloppyImage):

Gefunden werden: arrow, ftp, pqeq, readme (der readcache funktioniert beim Mehrfachladen sehr gut!)
Nicht gefunden werden: browser, calc, hello, irc, music, piano, pong, psort, showdns, starwars, , test, ttt, udprecv, udpsend, webshell

Schaut man bei den geladenen Dateien nach einer Gemeinsamkeit, so findet man diese: http://www.henkessoft.de/OS_Dev/Bilder/rev.1276_ehci_asyncScheduler_GeladeneDateien.PNG
Sie starten bei cluster 1450, 1493, 1429, 1410. Der Ort der Datei im FAT12-Filesystem (1410 - 1493) bestimmt also, ob sie auf dem usb-stick gefunden wird. Von Floppy werden bei gleichem Zustand des devicemanagers, also mit zugefügtem usb-stick, alle Dateien geladen!

Auch mit einem anderen Stick wurde das gleiche Ergebnis gefunden.

Ausnahmen: einmal wurde test gefunden, manchmal wird garnichts gefunden.

Ein Stick wurde dann auf FAT32 formatiert und alle Dateien im Windows Explorer von Floppy auf den Stick kopiert (keine Ahnung, wie die dort ankommen, dürfte bezüglich Reihenfolge aber bleiben). Dateien konnte geladen werden!


Vielleicht bringt uns dieser umfangreiche Test bei der Fehlersuche weiter. Da dieser Vorgang "früher" problemlos lief, fragt sich, was geändert wurde.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:46:03 16.09.2011, insgesamt 6-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:58:21 16.09.2011   Titel:              Zitieren

version = "0.0.3.76 - Rev: 1277"

fat.c: Ausgaben umgelegt nach serial output (VMWare kann das in ein File umleiten)

ehci-asyncScheduler deutlich beschleunigt! (asyncInt wird pos./neg. angezeigt)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:20:28 18.09.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:39:23 16.09.2011   Titel:              Zitieren

Version 0.0.3.77:

- EHCI: J-State und undefined state werden nicht mehr an Companion HC abgegeben (Änderung gemäß EHCI-Spezifikation 1.0, Seite 28, 56), port-Reset nach Auslesen des states
- readCacheFlag entfernt - Readcaches nun dauerhaft aktiv
- getPartition stabilisiert - Bugfixes in fopen von ehenkes dahingehend überarbeitet.
- VM86-Tasks mit cli/sti statt task_switching=false/true gesichert -> VBE geht nun wieder
- flpydsk_refreshVolumeName optimiert, weniger Zugriffe bei mehreren Diskettenlaufwerken, nur noch für Floppylaufwerke aufgerufen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:57:18 17.09.2011   Titel:              Zitieren

Bezüglich der Fehlersuche "File not found" wude festgestellt, dass bei einem usb-Stick mit FAT12 (hergestellt durch Kopieren des Floppy-Images mit dd) das rootdir falsch angesteuert wurde.

Partitions-Start gemäß MasterBootRecord(MBR): sector 32
Angesteuert wurde Sector 52 bei der Suche nach einem File.
Das hätte aber 32+19 sein müssen, also 51.
Ein Test zeigte, dass diese Annahme richtig ist.
Die Ursache der fehlerhaften Berechnung wurde bisher noch nicht gefunden.

Eine FATx-abhängige Stelle in fat.c:
uint32_t cluster2sector(FAT_partition_t* volume, uint32_t cluster)
Hier erfolgt die Berechnung des Sectors. Für die root dir von FAT12 und FAT16 ist die Formel: sector = (volume->root + cluster * volume->SecPerClus);
Eine falsche Zahl könnte hier durch volume->root entstehen.


Anylsiert man die Revisionen, so tritt ein/der Fehler bei dem Übergang Rev. 1178 --> 1179 (MrX) ein.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:57:08 17.09.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:59:56 17.09.2011   Titel:              Zitieren

version = "0.0.3.78 - Rev: 1279"

ehci: asyncScheduler umgebaut

FloppyImage fehlt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:46:36 17.09.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:47:44 17.09.2011   Titel:              Zitieren

version = "0.0.3.79 - Rev: 1280"

fat.c: Fehler bei FAT12/16 korrigiert
Es fehlte: fpart->FatRootDirCluster = 0; bei FAT12/16

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:23:28 18.09.2011   Titel:              Zitieren

Version 0.0.3.80:

- Erkennung und Abgabe von Fullspeed-Geräten
- Erkennung von fehlgeschlagenen Transfers ergänzt, Timeout von 5 zur Wiederholung
- Codestil und -vereinfachungen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:22:15 18.09.2011   Titel:              Zitieren

Diese Version läuft bezüglich usb hervorragend (vor allem richtig schnell) auf VMWare, allerdings schlecht (transfers klappen nicht vernünftig) auf meinem EHCI-Test-PC (lief früher dort perfekt). ;)

Hispeed sticks werden auf dem PC abgewiesen und nach ohci (noch nicht in usb-Transfers eingebunden) abgegeben.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:24:01 18.09.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:22:43 18.09.2011   Titel:              Zitieren

Version 0.0.3.81:

- USB-Abstraktion verbessert, zahlreiche EHCI-Abhängigkeiten beseitigt
- statische disk- und usb2_Device_t-Arrays beseitigt
- Patch von neuer_user für FTP-Client: Shortcuts umgebaut, neue Funktionen (Upload, Dateirechte), Ausgaben verbessert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:14:20 18.09.2011   Titel:              Zitieren

version = "0.0.3.82 - Rev: 1283"

asyncScheduler: Zeitsteuerung optimiert, so dass sowohl VMWare als auch PC mit verschiedenen Sticks läuft.

performAsyncScheduler(e, true, true, 1 + transfer->packetSize/100);
timeout = 3 * velocity + 1;
sleepMilliSeconds(10);

Bei 512 Byte: ( 3 * 6 + 1 ) * 10 = 190 ms

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:19:26 18.09.2011   Titel:              Zitieren

version = "0.0.3.83 - Rev: 1284"

usb_hc.c: Implementierung für u/o/ehci vorgesehen unter Nutzung der Schnittstelle transfer->HC->type

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:30:15 19.09.2011   Titel:              Zitieren

version = "0.0.3.84 - Rev: 1285"

ohci.h/c: USB-Transfers vorbereitet

Für Tests:
OHCI_USB_TRANSFER aktivieren in ohci.c, line 16

Offene Fragen/TODOs:
Beim Anstecken eines Low-Speed-Device (einfache Maus) werden sofort alle Konsolen belegt (Grund nicht klar).

Die Zahl der von Anfang an vorhandenen rootports bei ohci reicht nicht aus, wenn weitere ports von ehci abgegeben werden können, im Prinzip alle. Hier sollte ein separater Portmanager her, der alle usb-Ports verwaltet.

Aber die Abstraktion von USB und HC ist gelungen! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:38:00 19.09.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:41:00 19.09.2011   Titel:              Zitieren

version = "0.0.3.85 - Rev: 1286"

ohci.c korrigiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:37:57 19.09.2011   Titel:              Zitieren

version = "0.0.3.86 - Rev: 1287"

ohci.c: Korrektur im handler (OHCI_MAX)
uhci.h/c: analog ohci in usb eingehängt

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:53:11 20.09.2011   Titel:              Zitieren

version = "0.0.3.87 - Rev: 1288"

ohci/usb weiter ausgebaut :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:38:14 20.09.2011   Titel:              Zitieren

version = "0.0.3.88 - Rev: 1289"

ohci-usb-Transfer weiter entwickelt.
Transaktionen/Transfer laufen offenbar. Daten sind noch nicht korrekt.

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev.1289_ohci_USB_Transfer.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:18:48 21.09.2011   Titel:              Zitieren

version = "0.0.3.89 - Rev: 1290"

ohci/usb weiter entwickelt. Verbindung zwischen setup-TD und Rest fehlt noch in der TD-Queue (durch die Umstellung der TDs von vorne nach hinten ist das nun schwieriger. MrX: wie hast du dir das gedacht bei deinem Modell?). Hier wird um Ideen gebeten.

TD->cond (condition = status) wird nun mit 15 (NOT ACCESSED) gefüllt, damit man sieht, ob der TD korrekt abgearbeitet wird (bei setup klappt es bereits).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 18:29:49 21.09.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:17:27 21.09.2011   Titel:              Zitieren

version = "0.0.3.90 - Rev: 1291"

ohci.c: Fehler (hoffentlich) korrigiert, curOHCI ersetzt.

Transfers laufen noch nicht.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:19:47 21.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:26:39 22.09.2011   Titel:              Zitieren

version = "0.0.3.91 - Rev: 1292"

ohci.h/c: Fehlerkorrekturen (Ausgabe der ED -> TD queue zur Kontrolle)

Code:
ED -> ED -> ...
|     |
TD    TD
|     |    
TD    TD
Code:
ED -> ED -> ...
| |
TD TD
| |
TD TD
Code:
ED -> ED -> ...
|     |
TD    TD
|     |    
TD    TD

Ketten sind ok (check der struct member)

Nun muss man den OHCI noch ordentlich gemäß spec bewegen. :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:46:26 22.09.2011   Titel:              Zitieren

version = "0.0.3.92 - Rev: 1293"

Fehler in ohci.c beseitigt, z.B. tailPointer und directions

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:30:01 22.09.2011   Titel:              Zitieren

version = "0.0.3.93 - Rev: 1294"

ohci.h/c: Transfer-Mechnanismus läuft nun endlich, aber Fehler bei den Paketen in den Transactions: Device: no response to IN or no handshake (OUT)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:30:57 22.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:11:54 22.09.2011   Titel:              Zitieren

version = "0.0.3.94 - Rev: 1295"

ohci.c: donehead begonnen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:01:28 23.09.2011   Titel:              Zitieren

version = "0.0.3.95 - Rev: 1296"

ohci: weiter entwickelt, Transfers funktionieren aber noch nicht korrekt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:00:21 23.09.2011   Titel:              Zitieren

version = "0.0.3.96 - Rev: 1297" experimentelle Version (Rückbau von ohci_createQTD_SETUP auf rev. 1290 - ist zwar falsch, aber die transaction läuft)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:20:38 23.09.2011   Titel:              Zitieren

version = "0.0.3.97 - Rev: 1298"

ohci.h/c: noch einige Korrekturen, es hakt aber immer noch gewaltig. ^^

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:04:26 23.09.2011   Titel:              Zitieren

Version 0.0.3.98:

- OHCI aufgeräumt, kleinere Fehler behoben
- Kein #PF bei OHCI mehr, wenn usbTransferStringUnicode aufgerufen wird
- Kein #PF bei unbekanntem Partitionstyp mehr
- SCSI-Commands werden bis zu 5 mal wiederholt bei Fehlschlag
- Kleinigkeiten & Codestil


Zuletzt bearbeitet von Mr X am 20:04:54 23.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:08:56 23.09.2011   Titel:              Zitieren

version = "0.0.3.99 - Rev: 1300"

ohci.c: Ausgaben verbessert, Zeitschleifen in issueTransfer

Hauptproblem: Device: no response to IN or no handshake (OUT). (bei Setup Transaction)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:56:34 24.09.2011   Titel:              Zitieren

version = "0.0.3.100 - Rev: 1301"

ohci.h/c: weitere Veränderungen (hoffentlich Fehler behoben, usb läuft noch nicht)

Wichtiger Hinweis: // #define _EHCI_ENABLE_ in os.h
Wer den EHCI nutzen möchte, dies bitte vorher aktivieren.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 11:26:30 24.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:07:15 24.09.2011   Titel:              Zitieren

version = "0.0.3.101 - Rev: 1302"

ohci.c: Ausgaben erweitert zur Kontrolle ( skip, halted in HeadPointer )
EHCI wieder enabled

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:30:05 24.09.2011   Titel:              Zitieren

version = "0.0.3.102 - Rev: 1303"

ohci weiter entwickelt. Immer noch Fehler beim ersten TD (setup).

VBox zeigt übrigens immer toggle 0 an, obwohl ohci.c sauber togglet. Auch buffer werden nicht angezeigt. Tests mit PCs sind aussagekräftiger.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:53:24 24.09.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:35:42 25.09.2011   Titel:              Zitieren

Version 0.0.3.103:

- PCNet: "Undefined error" hinter _NETWORK_DIAGNOSIS_ versteckt
- createQTD_SETUP und createQTD_IO vereinheitlicht: Beide allokieren einen Puffer.
- restrict zu VCcompatibility.h hinzugefügt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:49:52 25.09.2011   Titel:              Zitieren

version = "0.0.3.104 - Rev: 1305"

ohci.c: ausgaben weiter verbessert, CLE,CLF umpositoniert, Haltestellen eingefügt für VBox Debugger

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:41:14 25.09.2011   Titel:              Zitieren

version = "0.0.3.105 - Rev: 1306"

ohci.c: buffer zusätzlich ausgegeben zur Kontrolle

ED, TD, TD-buffer sieht alles gut aus.

CLE als Hauptschalter

Bei Fehler:
- CLF (Control List Filled) auf 0
- currentED auf 0
- ED->HeadP Halted-Bit auf 0
- Fehlerausgabe via condition Feld (Status)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:04:39 25.09.2011   Titel:              Zitieren

version = "0.0.3.106 - Rev: 1307"

ohci.c: weiter optimiert (z.B. Rücksetzen des HeadPtr Halted Bit) - transfer läuft noch nicht

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:48:42 26.09.2011   Titel:              Zitieren

version = "0.0.3.107 - Rev: 1308"

ohci_ und ehci_request zu usb_request vereinigt.
usb1.h/c gelöscht.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:52:23 26.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:05:57 29.09.2011   Titel:              Zitieren

version = "0.0.3.108 - Rev: 1309"

ohci-Ausgaben reduziert (hinter define)

In VBox: Device Not Responding

http://www.ti.com/lit/ug/sprufm8/sprufm8.pdf
Zitat:
The USB1.1 host controller ignores upstream traffic from downstream devices for about 3 ms after the host controller state (HCCONTROL.HCFS) changes from USB resume state to USB operational state. If any TDs cause generation of downstream packets during that time, the downstream packets are sent, but downstream device responses are ignored. Any such TDs are aborted with completion codes marked as Device Not Responding. TDs on any of the lists (periodic, control, bulk, and isochronous) can cause such an occurrence.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 03:22:19 29.09.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:14:11 30.09.2011   Titel:              Zitieren

version = "0.0.3.109 - Rev: 1310"

ohci - Zwischenstand

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:11:22 30.09.2011   Titel:              Zitieren

version = "0.0.3.110 - Rev: 1311"

ohci.h/c: erweitert um einige Port-Funktionen analog EHCI.

Transfer läuft aber noch nicht (Fehler: Device not responding, wie bisher)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:08:59 01.10.2011   Titel:              Zitieren

version = "0.0.3.111 - Rev: 1312"

ohci.c: Die erste Transaktion verläuft inzwischen nach Status-Meldung erfolgreich! Nun sind wir - auch bei ohci - endlich im Thema usb angekommen. :)
(ehci läuft schon lange)

Hinweis: Wer EHCI testen will, bitte erst in os.h per define aktivieren (versehentlich noch ausgeschaltet)

TODO: Abarbeiten der TDs analysieren unter Berücksichtigung, dass "done" TDs ausgehängt werden.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:00:30 01.10.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:52:45 02.10.2011   Titel:              Zitieren

version = "0.0.3.112 - Rev: 1313"

Reihenfolge verändert/ergänzt in ohci_setupUSBDevice:

- usbTransferDevice
- usbTransferEnumerate
- usbTransferDevice

Leider schlagen irgendwo noch interrupts zu.
Aber man sieht bei dieser Version (mit Glück), dass die In-Transaktion erfolgreich durchgeführt werden kann

TODO: bitte helfen, den Interrupt-Fehler zu finden, damit wir wieder vernünftig testen können

C/C++ Code:
if (val & OHCI_INT_RHSC) // root hub status change
{
  // printf("Root hub status change.");
     handledInterrupts |= OHCI_INT_RHSC;
     scheduler_insertTask(create_cthread(&ohci_portCheck, "OHCI Ports"));        
}
C/C++ Code:
if (val & OHCI_INT_RHSC) // root hub status change
{
// printf("Root hub status change.");
handledInterrupts |= OHCI_INT_RHSC;
scheduler_insertTask(create_cthread(&ohci_portCheck, "OHCI Ports"));
}
C/C++ Code:
if (val & OHCI_INT_RHSC) // root hub status change
{
  // printf("Root hub status change.");
     handledInterrupts |= OHCI_INT_RHSC;
     scheduler_insertTask(create_cthread(&ohci_portCheck, "OHCI Ports"));        
}

Hier liegt wohl ein Problem. VBox hat hier alleine schon 8 Ports.

Weiter geht's hier:
C/C++ Code:
void ohci_portCheck()
{
  //...
  if (o->OpRegs->HcRhPortStatus[j] & OHCI_PORT_CCS) // connected
  ohci_showPortstatus(o,j);
C/C++ Code:
void ohci_portCheck()
{
//...
if (o->OpRegs->HcRhPortStatus[j] & OHCI_PORT_CCS) // connected
ohci_showPortstatus(o,j);
C/C++ Code:
void ohci_portCheck()
{
  //...
  if (o->OpRegs->HcRhPortStatus[j] & OHCI_PORT_CCS) // connected
  ohci_showPortstatus(o,j);


Das Problem (Absturz VBox) beginnt hier:
C/C++ Code:
ohci_resetPort(o, j);  
C/C++ Code:
ohci_resetPort(o, j);
C/C++ Code:
ohci_resetPort(o, j);  

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:12:51 02.10.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:24:51 02.10.2011   Titel:              Zitieren

version = "0.0.3.113 - Rev: 1314" (experimentelle Version)

Verbesserte Version: Damit sieht man die ersten erfolgreichen Transaktionen (setup, in). Anschließend "freeze" (VBox muss abgeschossen werden).

Freeze ist hier:
C/C++ Code:
o->ports[portNumber]->num = 1 + usbTransferEnumerate(&o->ports[portNumber]->port, portNumber);
C/C++ Code:
o->ports[portNumber]->num = 1 + usbTransferEnumerate(&o->ports[portNumber]->port, portNumber);
C/C++ Code:
o->ports[portNumber]->num = 1 + usbTransferEnumerate(&o->ports[portNumber]->port, portNumber);


Korrekte Darstellung der usb-Version 01.10:
C/C++ Code:
printf("\nUSB %y.%y\t", BYTE2(usbDev->usbSpec), BYTE1(usbDev->usbSpec));
C/C++ Code:
printf("\nUSB %y.%y\t", BYTE2(usbDev->usbSpec), BYTE1(usbDev->usbSpec));
C/C++ Code:
printf("\nUSB %y.%y\t", BYTE2(usbDev->usbSpec), BYTE1(usbDev->usbSpec));

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 13:50:20 02.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:03:11 02.10.2011   Titel:              Zitieren

version = "0.0.3.114 - Rev: 1315"

ohci funktioniert! Problem ist momentan im usb-Transfer enumerate (set address)

screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev.1315_OHCI_USB.PNG

Endlich! :)

Nun müssen wir den Freeze finden und das usb-Problem, aber das ist sicher machbar, wenn man endlich mal die übertragenen Daten sehen kann. :D

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:06:11 02.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:26:53 02.10.2011   Titel:              Zitieren

version = "0.0.3.115 - Rev: 1316"

endlich freeze-free (delay anstelle sleep...)
sof-check in jetziger Form gestrichen (Programm ist nicht in die while-loop eingetreten). In spec steht: "Perform SOF check" und "Time available?". Diese beiden Punkte werden bisher ignoriert.


Probleme:
- Bei EHCI/UHCI- oder EHCI/OHCI-Übergang "prellt" das OS, sodass schnell alle 10 Konsolen (0-9) verbraucht sind.
- Bei OHCI klappen die IO-Transfers mit 0 byte (handshake) noch nicht (egal ob OUT oder IN)
- OHCI und PC läuft noch nicht (freeze wegen ständiger interrupts)
- Emulator VBox (0.4.12) auf Host Win XP bei USB völlig unzuverlässig (ehenkes)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:35:27 03.10.2011, insgesamt 4-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:38:39 03.10.2011   Titel:              Zitieren

version = "0.0.3.116 - Rev: 1317"

ohci: wieder testbar mit VBox
C/C++ Code:
if (val & OHCI_INT_RHSC) // root hub status change
{
   // printf("Root hub status change.");
   handledInterrupts |= OHCI_INT_RHSC;
   // scheduler_insertTask(create_cthread(&ohci_portCheck, "OHCI Ports"));  
   ohci_portCheck();  
}
C/C++ Code:
if (val & OHCI_INT_RHSC) // root hub status change
{
// printf("Root hub status change.");
handledInterrupts |= OHCI_INT_RHSC;
// scheduler_insertTask(create_cthread(&ohci_portCheck, "OHCI Ports"));
ohci_portCheck();
}
C/C++ Code:
if (val & OHCI_INT_RHSC) // root hub status change
{
   // printf("Root hub status change.");
   handledInterrupts |= OHCI_INT_RHSC;
   // scheduler_insertTask(create_cthread(&ohci_portCheck, "OHCI Ports"));  
   ohci_portCheck();  
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:14:57 03.10.2011   Titel:              Zitieren

version = "0.0.3.117 - Rev: 1318"

void ohci_portCheck(ohci_t* o)

Problem: bei dem test-PC: dauerinterrupt root hub change bei ohci 0, port 3


(EHCI nicht enabled, s. os.h)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:16:23 03.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:58:42 03.10.2011   Titel:              Zitieren

version = "0.0.3.118 - Rev: 1319"

ohci.c: ohne enumeration (set address), also mit 0, läuft der ohci die control transfers durch.

SET ADDRESS läuft anders als andere control transfers. Nummerierung wird erst nach erfolgreichem Transfer ausgeführt.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 08:44:27 04.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:16:16 04.10.2011   Titel:              Zitieren

version = "0.0.3.119 - Rev: 1320"

ohci.c: issueTransfer überarbeitet, sodass man die Wartezeiten nach transaction und transfer getrennt einstellen kann.

Der letzte TD wird momentan nicht ausgeführt, weil er der letzte ist! (einfach einen dummy handshake dahinter setzen)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:23:23 04.10.2011   Titel:              Zitieren

version = "0.0.3.120 - Rev: 1321"

ohci.c: Durch Anhängen eines Dummy-TD in ohci_issueTransfer und check der conditions nach Ende des Transfers klappt nun auch set_address (Enumeration).

Meilenstein: Die USB 1.1 control-Transfers (mit ohci) laufen auf VBox! :) :live:

screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev.1321_OHCI_USB.PNG

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:57:38 04.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:29:33 04.10.2011   Titel:              Zitieren

version = "0.0.3.121 - Rev: 1322"

usb2_msd.c:
curEHCI bzw. showUSBSTS(e) in diesem Modul eliminiert, um es auch für ohci- und uhci-bulk-Transfers benutzen zu können.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:00:14 05.10.2011   Titel:              Zitieren

version = "0.0.3.122 - Rev: 1323"

ohci.c: bulk transfers laufen test-weise (tranfer/transaction system funktioniert auch dort)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:45:01 05.10.2011   Titel:              Zitieren

version = "0.0.3.123 - Rev: 1324"

ohci.c: recycling der bulk-ED/TD Ressourcen

Nun kann man ttt mittels usb 1.1 mit ohci laden! ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:21:59 06.10.2011   Titel:              Zitieren

version = "0.0.3.124 - Rev: 1325"

ohci.c:
- recycling der control-ED/TD
- "disk" und "usb-device" entfernen beim Entfernen einer USB Mass Storage Device vom Port (usb slot) <--- funktioniert noch nicht, da zur Zeit nur connected behandelt wird

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 21:36:32 06.10.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:00:08 06.10.2011   Titel:              Zitieren

version = "0.0.3.125 - Rev: 1326"

ohci.h/c: "device removed" wird nun wieder angezeigt (aber nur bei Ports, bei denen vorher ein connect war) und die Disk-Liste aktualisiert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 15:25:18 08.10.2011   Titel:              Zitieren

version = "0.0.3.126 - Rev: 1327"

list.h/c: Zahl der Elemente kann nun erfragt werden (Test in ohci.c)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:21:54 08.10.2011   Titel:              Zitieren

version = "0.0.3.127 - Rev: 1328"

Formale Änderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:27:07 08.10.2011   Titel:              Zitieren

Version 0.0.3.128:

- IPC verbessert:
-- Funktional nun fast vollständig
-- Strg+i zeigt Inhalt der IPC an
-- IPC-Syscalls implementiert
- EHCI AsyncScheduler verbessert. Kein Start-Stop mehr. (-> Deutlich beschleunigt, aber nicht 100% zuverlässig)
- Codestil und kleinere Optimierungen


Zuletzt bearbeitet von Mr X am 21:28:08 08.10.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:24:31 09.10.2011   Titel:              Zitieren

Version 0.0.3.129:

- IN-Transfer von SCSI-Commands werden bei Fehlschlag nicht mehr wiederholt (-> führte zu Freeze)
- EHCI-AsyncScheduler prüft nun, ob das Active-Bit jeder qTD gelöscht wurde (-> wesentliche Beschleunigung)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 12:39:21 09.10.2011   Titel:              Zitieren

version = "0.0.3.130 - Rev: 1331"

ohci.c: bei Transfer-Ausführung code vereinfacht und stop-Vorgänge zwischen transactions gestrichen

ehci.c: reset-Wartezeit von 250 ms auf 100 ms verkürzt (OpenBSD nimmt 100 ms).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 12:42:56 09.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:33:44 09.10.2011   Titel:              Zitieren

version = "0.0.3.131 - Rev: 1332"

ehci.c: Code klarer formuliert
usb2_msd.c: Fehler bei Paketgröße (control transfers) berichtigt

EHCI-Tests auf PC: Vorgänge verlaufen sehr schnell, leider funktionieren Memory-Sticks der Marke Intenso Rainbowline (4GB) z.Z. nicht (allerdings problemlos mit VMWare Player), Grund leider unklar.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:18:07 09.10.2011   Titel:              Zitieren

Version 0.0.3.132:

- EHCI-Funktionen gemäß Styleguide benannt
- Start of Frame Interrupt bei OHCI deaktiviert
- Kein Broken Free mehr bei OHCI (EDs dürfen nicht gelöscht werden, da sie in einem Mempool sind)
- _BROKENFREE_DIAGNOSIS_ implementiert: Wenn definiert, werden Datei und Zeilennummern des dazugehörenden free-Aufrufs angezeigt
- Code vereinfacht
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:36:30 09.10.2011   Titel:              Zitieren

version = "0.0.3.133 - Rev: 1334"

ohci.h/c: Structs/Funktionen/Parameter korrekt auf das bei ohci übliche ED/TD umbenannt. Debug-Ausgaben stark reduziert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:26:32 10.10.2011   Titel:              Zitieren

version = "0.0.3.134 - Rev: 1335"

uhci.c: Fehler bei usb-attach-Erkennung repariert, usb-Transfer/Transaction-frame als Interface für das usb-Modul aufgebaut. TODO: Mit Leben füllen

pcnet.c: Versuchsweise auf full-duplex geschaltet, um collision error in VBox zu vermeiden (klappt nicht)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:35:33 10.10.2011   Titel:              Zitieren

version = "0.0.3.135 - Rev: 1336"

uhci.h/c: Weiter implementiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:26:26 11.10.2011   Titel:              Zitieren

Version 0.0.3.136:

- Bugfix: Shell stürzt nicht mehr ab, wenn man den Schreibcursor nach links bewegt
- Bugfix: Kein #GPF mehr, wenn ein USB-Stick schon beim boot steckt (EHCI)
- Einige fehlende E0-Tasten ergänzt - Entf, Pos1, End, ...-Tasten funktionieren wieder (u.a. von der Shell unterstützt)
- Timer-Ticks jetzt als uint64_t gespeichert (Rechnungen weiterhin mit uint32_t, da keine 64-bit-Unterstützung)
- video_updateCursor in vga_updateCursor umbenannt. Einsatz überarbeitet.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:36:52 11.10.2011   Titel:              Zitieren

version = "0.0.3.137 - Rev: 1338"

uhci.c: transfer/transactions/QH- u. TD-Funktionen eingerichtet (Transfers klappen noch nicht)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:10:50 11.10.2011   Titel:              Zitieren

version = "0.0.3.138 - Rev: 1339"

uhci.c: Fehler beseitigt (Transfers laufen noch nicht korrekt)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:12:02 12.10.2011   Titel:              Zitieren

version = "0.0.3.139 - Rev: 1340"

uhci.c: weiter gecheckt, aber Transfers laufen noch nicht. :rolleyes:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:40:17 12.10.2011   Titel:              Zitieren

version = "0.0.3.140 - Rev: 1341"

uhci.c: Verkettung und Vf, QH, T sollte nun stimmen nach debugging.

Aufgabe: TDs werden noch nicht abgearbeitet (active bit).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 19:41:06 12.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 06:05:41 13.10.2011   Titel:              Zitieren

version = "0.0.3.141 - Rev: 1342"

uhci.c: Port Reset nach attach, alle 1024 Frames auf QH
Debugging zeigt korrekte Verknüpfung, Transfers laufen trotzdem noch nicht (wie wenn device nicht vorhanden; evtl. noch nicht korrekt konfiguriert nach attach)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 16:38:11 13.10.2011   Titel:              Zitieren

version = "0.0.3.142 - Rev: 1343"

uhci.h/c: Erste erfolgreiche uhci usb 1.1 Transfers erfolgen, nun kann die Optimierung beginnen. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:03:56 13.10.2011   Titel:              Zitieren

Version 0.0.3.143:

- Einige Memory-Leaks im Videomanager und VBE beseitigt
- Kleinere Optimierungen im Paging-Modul
- TransferFlag bei UHCI, OHCI und EHCI eliminiert (redundant durch andere Flags, inkonsequente Nutzung)
- UHCI kompiliert nun auch ohne _UHCI_DIAGNOSIS_
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:49:42 13.10.2011   Titel:              Zitieren

Version 0.0.3.144:

- Bugfix: Backspace funktioniert wieder (Daten wurden nicht in Videospeicher durchgeschrieben)
- Bugfix: Kein #PF mehr in IPC (folder-Inhalt war nicht initialisiert)
- IPC in Betrieb genommen - system_t-Struktur entfernt
- Callstack automatisch angezeigt bei Fehlern
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:16:18 13.10.2011   Titel:              Zitieren

version = "0.0.3.145 - Rev: 1346"

uhci.c: Transfers laufen bei einem Stick bis read capacity komplett fehlerfrei durch. Fehler (babble) tauchen bei singleSectorRead(0, buffer, disk) auf.

Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/rev.1346_UHCI_USB.PNG

Babble:
Zitat:
When a device transmits on the USB for a time greater than its assigned Max Length, it is said to be babbling. Since isochrony can be destroyed by a babbling device, this error results in the Active bit in the TD being cleared to 0 and the Stalled and Babble bits being set to one. The C_Err field is not decremented for a babble. The USB Error Interrupt bit in the HC Status register is set to 1 at the end of the frame. A hardware interrupt is signaled to the system. If an EOF babble was caused by the host controller (due to incorrect schedule for instance), the host controller will force a bit stuff error followed by an EOP and the start of the next frame.


USB COMMAND REGISTER - Bit 7:
Zitat:
Max Packet (MAXP). 1=64 bytes. 0=32 bytes. This bit selects the maximum packet size that can be used for full speed bandwidth reclamation at the end of a frame. This value is used by the Host Controller to determine whether it should initiate another transaction based on the time remaining in the SOF counter. Use of reclamation packets larger than the programmed size will cause a Babble error if executed during the critical window at frame end. The Babble error results in the offending endpoint being stalled. Software is responsible for ensuring that any packet which could be executed under bandwidth reclamation be within this size limit.

Wir wollen hier 512 Byte übertragen (bei ohci geht es in irgendeiner Form problemlos).

Die Stichworte sind: Babble und Stall

Auf einem anderen PC mit UHCI wurden analoge Resultate erzielt, also repräsentativ.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 23:34:29 13.10.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 11:06:10 14.10.2011   Titel:              Zitieren

Funktionskette zur Unterstützung bei Abhilfe bezüglich Fehler (Babble):

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// usb2_msd.c, line 600
analyzeDisk(device->disk);


// devicemanager.c, line 296 ff.
FS_ERROR analyzeDisk(disk_t* disk)
{
    uint8_t buffer[512];
    singleSectorRead(0, buffer, disk); // first sector of partition


// devicemanager.c, line 456

FS_ERROR singleSectorRead(uint32_t sector, uint8_t* buffer, disk_t* disk)
{
    disk->accessRemaining++;
    return sectorRead(sector, buffer, disk);
}


// devicemanager.c, line 28 ff.
diskType_t FLOPPYDISK = {.readSector = &flpydsk_readSector, .writeSector = &flpydsk_writeSector},
           USB_MSD    = {.readSector = &usbRead,            .writeSector = &usbWrite},
           RAMDISK    = {.readSector = 0,                   .writeSector = 0};


// usb2_msd.c, line 603 ff.
FS_ERROR usbRead(uint32_t sector, void* buffer, void* dev)
{
    usb2_Device_t* device = dev;
    uint32_t blocks = 1; // number of blocks to be read
    usbBulkTransfer_t read;

    startLogBulkTransfer(&read, 0x28, blocks, 0);

    usbSendSCSIcmd(device, device->numInterfaceMSD, device->numEndpointOutMSD, device->numEndpointInMSD,
                   read.SCSIopcode,
                   sector, // LBA
                   read.DataBytesToTransferIN,
                   &read, buffer, 0);

    logBulkTransfer(&read);

    return(CE_GOOD);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// usb2_msd.c, line 600
analyzeDisk(device->disk);


// devicemanager.c, line 296 ff.
FS_ERROR analyzeDisk(disk_t* disk)
{
uint8_t buffer[512];
singleSectorRead(0, buffer, disk); // first sector of partition


// devicemanager.c, line 456

FS_ERROR singleSectorRead(uint32_t sector, uint8_t* buffer, disk_t* disk)
{
disk->accessRemaining++;
return sectorRead(sector, buffer, disk);
}


// devicemanager.c, line 28 ff.
diskType_t FLOPPYDISK = {.readSector = &flpydsk_readSector, .writeSector = &flpydsk_writeSector},
USB_MSD = {.readSector = &usbRead, .writeSector = &usbWrite},
RAMDISK = {.readSector = 0, .writeSector = 0};


// usb2_msd.c, line 603 ff.
FS_ERROR usbRead(uint32_t sector, void* buffer, void* dev)
{
usb2_Device_t* device = dev;
uint32_t blocks = 1; // number of blocks to be read
usbBulkTransfer_t read;

startLogBulkTransfer(&read, 0x28, blocks, 0);

usbSendSCSIcmd(device, device->numInterfaceMSD, device->numEndpointOutMSD, device->numEndpointInMSD,
read.SCSIopcode,
sector, // LBA
read.DataBytesToTransferIN,
&read, buffer, 0);

logBulkTransfer(&read);

return(CE_GOOD);
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// usb2_msd.c, line 600
analyzeDisk(device->disk);


// devicemanager.c, line 296 ff.
FS_ERROR analyzeDisk(disk_t* disk)
{
    uint8_t buffer[512];
    singleSectorRead(0, buffer, disk); // first sector of partition


// devicemanager.c, line 456

FS_ERROR singleSectorRead(uint32_t sector, uint8_t* buffer, disk_t* disk)
{
    disk->accessRemaining++;
    return sectorRead(sector, buffer, disk);
}


// devicemanager.c, line 28 ff.
diskType_t FLOPPYDISK = {.readSector = &flpydsk_readSector, .writeSector = &flpydsk_writeSector},
           USB_MSD    = {.readSector = &usbRead,            .writeSector = &usbWrite},
           RAMDISK    = {.readSector = 0,                   .writeSector = 0};


// usb2_msd.c, line 603 ff.
FS_ERROR usbRead(uint32_t sector, void* buffer, void* dev)
{
    usb2_Device_t* device = dev;
    uint32_t blocks = 1; // number of blocks to be read
    usbBulkTransfer_t read;

    startLogBulkTransfer(&read, 0x28, blocks, 0);

    usbSendSCSIcmd(device, device->numInterfaceMSD, device->numEndpointOutMSD, device->numEndpointInMSD,
                   read.SCSIopcode,
                   sector, // LBA
                   read.DataBytesToTransferIN,
                   &read, buffer, 0);

    logBulkTransfer(&read);

    return(CE_GOOD);
}


Experiment: Tauscht man in usb2_msd.c 512 konsequent gegen 64 aus, so verschwindet babble (und das daraus folgende stall und USB error).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 16:50:26 14.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:18:46 14.10.2011   Titel:              Zitieren

version = "0.0.3.146 - Rev: 1347"

uhci.h/c: Funktion bool isTransactionSuccessful(uhci_transaction_t* uT) geschaffen, damit der Erfolg korrekt festgestellt werden kann, denn auch bei manchen Fehlern (z.B. babble) stellt der UHCI das inactive-Bit (active==0) ein.

usb2_msd.c: Unterscheidung zwischen ohci/ehci und uhci bei usbRead und usbWrite

TODO: implement 64-byte-packet transfers with UHCI instead of 512-byte-packets with OHCI (obviously auto-split) and EHCI

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:21:36 14.10.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 18:48:51 15.10.2011   Titel:              Zitieren

version = "0.0.3.147 - Rev: 1348"

ipc.c und paging.c: Style Anpassungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:27:04 15.10.2011   Titel:              Zitieren

version = "0.0.3.148 - Rev: 1349" (in ckernel.c versehentlich nicht angepasst)

paging.h/c: uint32_t paging_getVirtAddr(void* physAddress);

Liefert virtuelle Adresse, wenn die phys. Adresse zugeordnet ist, bzw. 0, falls nicht. Damit kann man also auch feststellen, ob eine physische Adresse bereits im Paging verwendet wird.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 20:30:31 15.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 21:08:34 15.10.2011   Titel:              Zitieren

version = "0.0.3.149 - Rev: 1350"

paging.h/c: uintptr_t paging_getVirtAddr(uintptr_t physAddress)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:40:58 15.10.2011   Titel:              Zitieren

version = "0.0.3.150 - Rev: 1351"

paging_getVirtAddr(uintptr_t physAddress) bezüglich Geschwindigkeit optimiert

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:10:26 16.10.2011   Titel:              Zitieren

version = "0.0.3.151 - Rev: 1352"

kheap.c: kleine Änderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:02:44 17.10.2011   Titel:              Zitieren

Version 0.0.3.152:

- Initialisierungsreihenfolge bei USB-HCs geändert (*hci_setupUSBDevice)
-> Kein #PF bei UHCI mehr
- Aufsplitten von Transaktionen, die größer als die MPS des Endpoints sind (-> Funktioniert nicht?)
- usbRead/usbWrite werden auch bei UHCI wieder ausgeführt (Teilweiser revert von r1347)
- Bugfix: RAM in Bytes wird wieder korrekt angezeigt (nicht mehr 0 Bytes)
- IPC weiter gefüllt (PCI-Daten)
- IPC-Ausgabe verbessert: waitForKeyStroke alle 36 Zeilen
- Kleinigkeiten
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 08:55:29 18.10.2011   Titel:              Zitieren

Problem liegt im toggle-Verhalten. Durch Verändern von 1 Transfer auf 8 Transfers passt das nicht mehr (Status In-Transfer (13 bytes) ebenfalls 0 wie der letzte der acht vorherigen In-Transfers):

512: 1 - 0
64: 1 0 1 0 1 0 1 0 - 0 (bumm!)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:19:48 22.10.2011, insgesamt 2-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:22:21 18.10.2011   Titel:              Zitieren

Erhard Henkes schrieb:
Problem liegt im toggle-Verhalten. Durch Verändern von 1 Transfer auf 8 Transfers passt das nicht mehr (Status In-Transfer (13 bytes) ebenfalls 0 wie der letzte der acht vorherigen In-Transfers):

512: 1 - 0
64: 1 0 1 0 1 0 1 0 - 0 (bumm!)

Dann hat eine Internetquelle, die ich dazu konsultiert habe, unrecht. Die hat nämlich behauptet dass der Split keinen Einfluss auf das Toggle folgender Transaktions hat (die nicht zum gesplitteten Teil gehören)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 20:04:25 21.10.2011   Titel:              Zitieren

version = "0.0.3.153 - Rev: 1354"

Formale Änderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:41:19 21.10.2011   Titel:              Zitieren

Version 0.0.3.154:

- *hci_setupUSBDevice-Funktionen zusammengefasst in usb_setupDevice
- Neues, generischeres Toggle-System (-> UHCI läuft nun)
- Kleinigkeiten (u.a. überflüssige printf-Parameter an 3 Stellen entfernt)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 22:10:06 21.10.2011   Titel:              Zitieren

Dickes Lob! :live:

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 14:06:35 23.10.2011   Titel:              Zitieren

Version 0.0.3.155:

- Speicherverbrauch der *HCI-Treiber reduziert
- USB-Code aufgeräumt und z.T. logischer gestaltet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:38:50 23.10.2011   Titel:              Zitieren

Test-Resultat:

3 Typen bei Test mit uhci:

1) Corsair Flash Voyager funktioniert komplett incl. 3:/ttt (lediglich 2 * HC Halted ohne Schadwirkung)

2) EMTEC 4GB: SET ADDRESS ok, GET DEVICE: usb error & stalled

3) Intenso Rainbow Line: bei SET ADDRESS: No response from Device

uhci spec:
Zitat:
4.1.5 STALLED
This event indicates that a device/endpoint returned a STALL handshake during a transaction or that the transaction ended in an error condition. This indicates that the endpoint has reached a condition where no more activity can occur without intervention from the driver. In addition to the TDs Stalled bit being set, the Active bit will be cleared. HCD will not accept any more transfers on this endpoint until the condition is cleared by driver software. Like the Babble event, reception of a STALL does not decrement the error counter. A hardware interrupt is signaled to the system.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 14:49:25 23.10.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:22:16 23.10.2011   Titel:              Zitieren

version = "0.0.3.156 - Rev: 1357"

usb weiter optimiert. Bei ausbleibendem Erfolg von GET_DEVICE wird mit Fehlermeldung abgebrochen!

Kleine Korrekturen in uhci (z.B. korrekte Port-Ausgaben j+1).

TODO: Leider wurde der wesentliche Erfolgsfaktor für alle Typen von usb-Sticks bei uhci noch nicht gefunden (s.o.).

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:37:23 23.10.2011   Titel:              Zitieren

version = "0.0.3.157 - Rev: 1358"

Reihenfolge umgebaut:
Einer der drei EMTEC pensticks, mit denen u.a. getestet wird, läuft basierend auf uhci durch die controls durch und steigt erst bei test-unit-ready (also ab bulk) aus.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 22:06:03 23.10.2011, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:20:51 24.10.2011   Titel:              Zitieren

version = "0.0.3.158 - Rev: 1359"

usb uhci weiter analysiert/optimiert.
- Fehler beseitigt:
- Ergebnisse nur in usb-structs bei transfer.success (sonst: schwere Fehler)
- Disk entfernt beim Ziehen des Pensticks

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:40:55 24.10.2011   Titel:              Zitieren

Version 0.0.3.159:

- Umbenennungen: usb2 nach usb, USB-Funktionsnamen analog Styleguide und Ausgabe
- usbBulkTransfer_t entfernt
- Anzahl der Retries für fehlgeschlagene Transfers bei allen HC-Typen auf 3 gesetzt
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:00:26 28.10.2011   Titel:              Zitieren

version = "0.0.3.160 - Rev: 1361"

Formale Änderungen

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 23:45:07 31.10.2011   Titel:              Zitieren

version = "0.0.3.161 - Rev: 1362"

e1000 via cdi-schnittstelle eingebaut (funktioniert noch nicht), vlt. noch falsche Aufruf-Funktion:
C/C++ Code:
                        else if (PCIdev->classID == 0x02 && PCIdev->subclassID == 0x00 &&
                                 PCIdev->deviceID == 0x100E && PCIdev->vendorID == 0x8086) // Intel Gigabit Ethernet Controller // CDI-Interface
                        {
                            // driver = &network_drivers[...]; // CDI
                            printf("\nIntel Gigabit Ethernet Controller");
                            e1000_driver_init(); // CDI
                        }
C/C++ Code:
else if (PCIdev->classID == 0x02 && PCIdev->subclassID == 0x00 &&
PCIdev->deviceID == 0x100E && PCIdev->vendorID == 0x8086) // Intel Gigabit Ethernet Controller // CDI-Interface
{
// driver = &network_drivers[...]; // CDI
printf("\nIntel Gigabit Ethernet Controller");
e1000_driver_init(); // CDI
}
C/C++ Code:
                        else if (PCIdev->classID == 0x02 && PCIdev->subclassID == 0x00 &&
                                 PCIdev->deviceID == 0x100E && PCIdev->vendorID == 0x8086) // Intel Gigabit Ethernet Controller // CDI-Interface
                        {
                            // driver = &network_drivers[...]; // CDI
                            printf("\nIntel Gigabit Ethernet Controller");
                            e1000_driver_init(); // CDI
                        }

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 00:23:57 01.11.2011, insgesamt 3-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 23:52:38 31.10.2011   Titel:              Zitieren

Erhard Henkes schrieb:
version = "0.0.3.161 - Rev: 1362"

e1000 via cdi-schnittstelle eingebaut (funktioniert noch nicht), vlt. noch falsche Aufruf-Funktion:
C/C++ Code:
                        else if (PCIdev->classID == 0x02 && PCIdev->subclassID == 0x00 &&
                                 PCIdev->deviceID == 0x100E && PCIdev->vendorID == 0x8086) // Intel Gigabit Ethernet Controller // CDI-Interface
                        {
                            // driver = &network_drivers[...]; // CDI
                            printf("\nIntel Gigabit Ethernet Controller");
                            e1000_driver_init(); // CDI
                        }
C/C++ Code:
else if (PCIdev->classID == 0x02 && PCIdev->subclassID == 0x00 &&
PCIdev->deviceID == 0x100E && PCIdev->vendorID == 0x8086) // Intel Gigabit Ethernet Controller // CDI-Interface
{
// driver = &network_drivers[...]; // CDI
printf("\nIntel Gigabit Ethernet Controller");
e1000_driver_init(); // CDI
}
C/C++ Code:
                        else if (PCIdev->classID == 0x02 && PCIdev->subclassID == 0x00 &&
                                 PCIdev->deviceID == 0x100E && PCIdev->vendorID == 0x8086) // Intel Gigabit Ethernet Controller // CDI-Interface
                        {
                            // driver = &network_drivers[...]; // CDI
                            printf("\nIntel Gigabit Ethernet Controller");
                            e1000_driver_init(); // CDI
                        }

Nichts mit "vielleicht". Das ist die falsche Funktion. Nächste Aufgabe ist also, herauszufinden, welche Funktion aufgerufen werden soll.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:24:07 01.11.2011   Titel:              Zitieren

taljeth in #lost: ... bei jedem Treiber das .driver_init aufrufen, und dann für jedes PCI-Gerät die .device_init, bis sich ein Treiber für zuständig erklärt

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
1
2
3
4
5
6
7
8
9
10
11
12
13
static struct cdi_net_driver driver = {
    .drv = {
        .name           = DRIVER_NAME,
        .type           = CDI_NETWORK,
        .bus            = CDI_PCI,
        .init           = e1000_driver_init,
        .destroy        = e1000_driver_destroy,
        .init_device    = e1000_init_device,
        .remove_device  = e1000_remove_device,
    },

    .send_packet        = e1000_send_packet,
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
static struct cdi_net_driver driver = {
.drv = {
.name = DRIVER_NAME,
.type = CDI_NETWORK,
.bus = CDI_PCI,
.init = e1000_driver_init,
.destroy = e1000_driver_destroy,
.init_device = e1000_init_device,
.remove_device = e1000_remove_device,
},

.send_packet = e1000_send_packet,
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
static struct cdi_net_driver driver = {
    .drv = {
        .name           = DRIVER_NAME,
        .type           = CDI_NETWORK,
        .bus            = CDI_PCI,
        .init           = e1000_driver_init,
        .destroy        = e1000_driver_destroy,
        .init_device    = e1000_init_device,
        .remove_device  = e1000_remove_device,
    },

    .send_packet        = e1000_send_packet,
};


Es fehlt noch:
C/C++ Code:
e1000_init_device(/*  struct cdi_bus_data*  */); // CDI
C/C++ Code:
e1000_init_device(/* struct cdi_bus_data* */); // CDI
C/C++ Code:
e1000_init_device(/*  struct cdi_bus_data*  */); // CDI

Woher bekommt man diese Daten für struct cdi_bus_data? Beim Aufruf haben wir das korrekte pci device bereits identifiziert mit allen PCI-Daten (bus:device.function).

Bei VBox kann man mit der "Intel PRO/1000 MT Desktop" die "e1000" im PCI Scan emulieren.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:17:34 01.11.2011, insgesamt 5-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:04:08 01.11.2011   Titel:              Zitieren

Version 0.0.3.162:

- CDI weitergebaut, läuft nun teilweise
-> "Linkermagie" gefixt. Section war falsch angegeben.
-> Geräte werden nun initialisiert
-> CDI-List vollständig implementiert, andere Teile weiter implementiert
- Makefile: Automatischer build aller Unterordner von /kernel
- Bugfix: Backspace-"Zeichen" wird nicht mehr auf den Bildschirm geschrieben
- Bugfix: PrettyOS läuft wieder auf Rechnern mit 4 GiB RAM. (Dazu musste die Speicheranordnung geändert werden, damit zugleich eine Optimierung für Rechner mit weniger Speicher möglich bleibt)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:50:55 01.11.2011   Titel:              Zitieren

Version 0.0.3.163:

- Bugfix: MAC wird bei CDI-Netzwerkkarten in network_adapter_t-Struktur kopiert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:06:37 01.11.2011   Titel:              Zitieren

Der via CDI eingebundene e1000-Treiber läuft nun.
Test: qemu 0.14.1 browser.elf

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:13:35 02.11.2011   Titel:              Zitieren

version = "0.0.3.164 - Rev: 1365"

- Wochentag-Formel korrigiert (Alternative: http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Wochentagsformel#4._Allgemeing.C3.BCltige_Formel)
- Formale Änderungen

siehe auch: http://www.c-plusplus.de/forum/294811-10

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 01:33:45 02.11.2011   Titel:              Zitieren

version = "0.0.3.165 - Rev: 1366"

Wochentag-Formel nochmals überarbeitet:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static uint16_t days[12] = {  0,  31,  59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

static bool isLeapyear(uint16_t year)
{
    return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
{
    day += 6; // 1.1.2000 was a saturday
    day += (year-2000) * 146097.0/400.0 + days[month-1];

    if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
    {
        day--;
    }

    return ( day % 7 + 1 );
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static uint16_t days[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

static bool isLeapyear(uint16_t year)
{
return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
{
day += 6; // 1.1.2000 was a saturday
day += (year-2000) * 146097.0/400.0 + days[month-1];

if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
{
day--;
}

return ( day % 7 + 1 );
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
static uint16_t days[12] = {  0,  31,  59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

static bool isLeapyear(uint16_t year)
{
    return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
{
    day += 6; // 1.1.2000 was a saturday
    day += (year-2000) * 146097.0/400.0 + days[month-1];

    if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
    {
        day--;
    }

    return ( day % 7 + 1 );
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 01:34:58 02.11.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:24:24 02.11.2011   Titel:              Zitieren

version = "0.0.3.166 - Rev: 1367" (in ckernel.c versehentlich eins zu hoch)

Dank an Volkard für seine Hinweise. Damit haben wir nun auch vor 2000 den Wochentag im Griff:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static uint16_t days[12] = {  0,  31,  59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

static bool isLeapyear(uint16_t year)
{
    return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

// Gregorian calender started 15th October 1582
static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
{
    day += 6; // 1.1.1600 was a saturday
    day += (year/*-1600*/) * 146097.0/400.0 + days[month-1];   

    if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
    {
        day--;
    }

    return ( day % 7 + 1 );
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static uint16_t days[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

static bool isLeapyear(uint16_t year)
{
return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

// Gregorian calender started 15th October 1582
static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
{
day += 6; // 1.1.1600 was a saturday
day += (year/*-1600*/) * 146097.0/400.0 + days[month-1];

if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
{
day--;
}

return ( day % 7 + 1 );
}
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static uint16_t days[12] = {  0,  31,  59, 90, 120, 151, 181, 212, 243, 273, 304, 334};

static bool isLeapyear(uint16_t year)
{
    return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

// Gregorian calender started 15th October 1582
static uint8_t calculateWeekday(uint16_t year, uint8_t month, int32_t day)
{
    day += 6; // 1.1.1600 was a saturday
    day += (year/*-1600*/) * 146097.0/400.0 + days[month-1];   

    if (isLeapyear(year) && (month < 2 || (month == 2 && day <= 28)))
    {
        day--;
    }

    return ( day % 7 + 1 );
}

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 02:24:46 02.11.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:13:33 03.11.2011   Titel:              Zitieren

Version 0.0.3.168:

- Ordnerstruktur angepasst:
-- Ordner tasking und util geschaffen
- Devicemanager-Schnittstelle verbessert
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:41:34 04.11.2011   Titel:              Zitieren

Version 0.0.3.169:

- Clang ins Buildsystem vollständig integriert
- __unix__ durch Compilererkennung ersetzt (-> Damit "out-of-the-box"-Lauffähig mit GCC 4.5, 4.6 und clang)
- Ergebnis von calculateWeekday gecacht - Nur noch bei Veränderung des Wochentags aufgerufen
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:46:04 06.11.2011   Titel:              Zitieren

version = "0.0.3.170 - Rev: 1370"

Formale Änderungen, Arrays in keyboard.c als Tabelle übersichtlich angeordnet

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:47:48 06.11.2011, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:57:36 08.11.2011   Titel:              Zitieren

Version 0.0.3.171:

- Maustreiber nutzt nun Event-System
- Paging-Modul invalidiert TLB-Einträge, wenn das aktive PD verändert wird
- setjmp "implementiert". Funktioniert leider nicht.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:53:17 11.11.2011   Titel:              Zitieren

Version 0.0.3.172:

- %S-Option bei printf (kernel) ergänzt (gibt Größen in Bytes aus)
- data.o/asm inkrementell gebaut
- Größe einer disk wird angegeben bei strg+d
- Bugfix: Event-Enum im Userspace synchronisiert -> Netzwerk geht wieder
- Kleinere Optimierungen. U.a.:
-- htonl und Makros CLEAR_BIT und SET_BIT (neu) als Assembler-"Intrinsics"
-- Speicher zwischen 0 und 20 MiB mit MEM_NOTLBUPDATE versehen (wird beim Setzen von cr3 nicht aus dem TLB-Cache genommen)
-- Weitere Funktionen inlined
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 14:57:02 12.11.2011   Titel:              Zitieren

version = "0.0.3.172 - Rev: 1373"

irc.c umgestellt auf DNS

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:03:02 13.11.2011   Titel:              Zitieren

Version 0.0.3.173:

- Führende 0 bei ftoa ergänzt (basiert nun auf itoa) <-- Das ist sogar standardisiert: http://de.wikipedia.org/wiki/ISO_31-0 ;)
- getc, fputs, putc, sinh, cosh, tanh implementiert (-> math.h vollständig)
- Calc überarbeitet (v0.4.0):
-- Unterstützt nun negative Zahlen, Potenzen und Klammern
-- Rechnung kann als Kommandozeilenargument übergeben werden
- IRC verbessert: Server kann beim Start ausgewählt werden
- Zeitmessung in psort verbessert: Zeit zur Ergebnisprüfung nicht mehr mitgemessen
- FloppyImage.img nicht mehr gelöscht vorm Build
- Bugfix: Größenangabe bei Floppys gefixt (1440 KB statt KiB als Ausgangsbasis)
- Bugfix: pow mit Workaround korrigiert für negative Exponenten


Zuletzt bearbeitet von Mr X am 00:20:22 13.11.2011, insgesamt 3-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 00:14:48 13.11.2011   Titel:              Zitieren

Disketten verfügen über 1440 KiB (2880*512 byte), wird aber immer als KB geschrieben.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 00:19:50 13.11.2011   Titel:              Zitieren

Erhard Henkes schrieb:
Disketten verfügen über 1440 KiB (2880*512 byte), wird aber immer als KB geschrieben.

Bug beim Bugfix eingebaut. Wird behoben.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 13:49:19 13.11.2011   Titel:              Zitieren

Version 0.0.3.174:

- Buildsystem verbessert:
-- Unbenutzte Symbole aus den Userbibliotheken werden nicht mehr gelinkt.
-- Strip bereits beim Linken angewandt
-- Userprogramme bei Änderungen an Userbibliotheken automatisch neu übersetzt
- pow, log und log10 gefixt (neu implementiert)
- Fix für Floppygröße aus r1374 reverted
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 02:09:04 14.11.2011   Titel:              Zitieren

@MrX: calc.elf liefert nun bei 0^5 die 0, das ist fein, bei 5^3 kommt brav die 125, aber ab 5^4 kommt 624 raus, auch bei 5^5 eins zu wenig. Bei 25^0.5 kommt erst 1.5 dann 1. Da sollte man nachschärfen. ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 15:08:57 14.11.2011   Titel:              Zitieren

Zitat:
Bei 25^0.5 kommt erst 1.5 dann 1

Der Taschenrechner kann keine Fließkommazahlen. Er rechnet:
25^0 => 1 -> 1.5 => 1,5 -> atoi("1.5") => 1

Zitat:
5^4 kommt 624 raus, auch bei 5^5 eins zu wenig

Rundungsfehler, da der Taschenrechner Integer nutzt, aber mit dem Fließkommafunktionen rechnet.


Zuletzt bearbeitet von Mr X am 15:11:48 14.11.2011, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 19:47:20 14.11.2011   Titel:              Zitieren

Vor der Benutzung der aktuellen Version von calc.elf wird gewarnt. Die Ergebnisse sind weitgehend falsch. Das PrettyOS Team übernimmt keinerlei Haftung für evtl. daraus entstehende Schäden! ;)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:18:19 15.11.2011   Titel:              Zitieren

Version 0.0.3.175:

- Unterstützung für Sysenter/Sysexit. Code aber deaktiviert (task.c, z. 146)
- Unterstützung für SSE: OSFXSR-Bit in CR4 gesetzt, FPU-Status bei Unterstützung entsprechend mit fxsave und fxrstor gesichert
- Global Pages aktiviert (in CR4)
- Bugfix: CPUID-Code früher initialisiert (vor erster Verwendung)
- Bugfix: Inkrementeller Build für initrd.dat gefixt
- Bugfix: "volatile foo*" durch "foo* volatile" ersetzt, wo sinnvoll.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 10:56:18 20.11.2011   Titel:              Zitieren

Version 0.0.3.176:

- fsmanager-Schnittstelle geändert: fwrite und fread statt fputc und fgetc als Treiberschnittstelle
- Write-Caching im Devicemanager implementiert
- Caching-Mechanismus im FAT-Treiber ausgebaut; Weitere Optimierungen dort.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:05:17 21.12.2011   Titel:              Zitieren

Version 0.0.3.177:

- FAT-Treiber weiter aufgeräumt
- System friert bei Fehlern wie "Division durch 0" nicht mehr ein
- bochs.bxrc auf Bochs 2.5 geupdated
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 21:43:23 08.01.2012   Titel:              Zitieren

Version 0.0.3.178:

- Stilistische Änderungen um ckernel.c (zusammen mit ehenkes ausgearbeitet)
- fpu.c in cpu.c integriert
- Kleiner Fix an der Compilererkennung in der userlib
- strg+s startet die Shell
- PrettyOS gibt nicht mehr stupide [OK] beim Start aus: Reihenfolge: Ausgabe "Was" - Ausführung - Ausgabe "Ergebnis"
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 18:35:38 13.01.2012   Titel:              Zitieren

Version 0.0.3.179:

- Speicherlayout überarbeitet: Löcher im Bereich ~ 10 MiB beseitigt. PrettyOS fordert nur noch 12 MiB RAM.
- paging.c überarbeitet bzgl. Kommentaren und Codelayout. Feste Adressen durch Makros ersetzt. (Zusammen mit ehenkes ausgearbeitet)
- Dokumentation in memory.txt verbessert


Zuletzt bearbeitet von Mr X am 18:35:59 13.01.2012, insgesamt 1-mal bearbeitet
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 20:40:42 16.01.2012   Titel:              Zitieren

Version 0.0.3.180:

- Code der ELF- und PE-Treiber überarbeitet, Funktionsnamen der Schnittstelle geändert (gemeinsam mit ehenkes erarbeitet)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 19:22:01 31.03.2012   Titel:              Zitieren

Version 0.0.3.181:

- Bugfix: todolist_create allokiert nun Speicher richtiger Größe (cppcheck-Fund)
- Diverse Verbesserungen an der C-Standardbibliothek:
-- string.c: strcspn, strerror, strspn und strtok implementiert, Prototyp von strchr korrigiert
-- signal.c: Implementiert
-- stdlib.c: abort() sendet nun SIGABRT; atexit implementiert
-- errno.h: Namen der Fehler korrigiert (Präfix "E" statt "ERR")
- Calc fängt Division durch 0 nun ab
- Kleinigkeiten
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 17:03:27 08.04.2012   Titel:              Zitieren

Nach zahlreichen Änderungen, Verbesserungen und neuen Funktionen und genau 200 Revisionen nach 0.0.3.0 erhöhen wir die Versionsnummer auf:

PrettyOS 0.0.4.0

Neue Features:
- Erweiterte USB-Unterstützung
-> UHCI-, OHCI-Treiber neu
-> EHCI-Treiber deutlich verbessert
-> USB-Code deutlich überarbeitet
- CDI-Unterstützung
-> e1000-Treiber eingebunden
- PrettyIPC-Baum
- Vollständige Clang-Unterstützung

Verbesserungen:
- Bootloader optimiert
- "File not Found"-Fehler behoben
- Einige neue Userprogramme, alte verbessert. Lizenzen vereinheitlicht.
- Erweiterte Debug-Funktionalität: Broken-Free-Diagnose
- Ausgabecode von Kernel in Shell/Userspace verlagern
- fast vollständige C-Standardbibliothek (Userbereich)
- Zahlreiche kleine Bugfixes und Verbesserungen



Version 0.0.4.0 - Rev. 1383
- APIC-Rahmen eingefügt; noch deaktiviert.
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1073
Beitrag Mr X Mitglied 11:17:35 09.04.2012   Titel:              Zitieren

Version 0.0.4.1:

- APIC-Registeradressen korrigiert
- APIC+PIC-Modus, bis unser APIC-Treiber fertig ist; APIC-Treiber aktiviert
C/C++ Forum :: Projekt: OS-Development  ::  Sourcecode Fortschritt   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.