Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
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: 4341
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 11:56:17 24.01.2015, insgesamt 2-mal bearbeitet
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4341
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: 14843
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: 14843
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: 14843
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/ ....... opic-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: 14843
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: 14843
Beitrag Erhard Henkes Mitglied 23:28:09 27.11.2009   Titel:              Zitieren

Version 32:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 20:24:42 28.11.2009   Titel:              Zitieren

Version 33:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 05:26:10 29.11.2009   Titel:              Zitieren

Version 34:
http://prettyos.svn.sourc ....... ?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

_________________
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: 14843
Beitrag Erhard Henkes Mitglied 16:02:36 29.11.2009   Titel:              Zitieren

Version 35:
http://prettyos.svn.sourc ....... ?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++:
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: 14843
Beitrag Erhard Henkes Mitglied 18:41:07 29.11.2009   Titel:              Zitieren

Version 36:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 19:30:12 29.11.2009   Titel:              Zitieren

Version 37:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 21:31:58 30.11.2009   Titel:              Zitieren

Version 38:
http://prettyos.svn.sourc ....... ?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++:
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.sourc ....... ?view=rev&revision=39

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


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

Version 40:

http://prettyos.svn.sourc ....... ?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: 4341
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: 14843
Beitrag Erhard Henkes Mitglied 16:04:01 13.12.2009   Titel:              Zitieren

Version 42:
http://prettyos.svn.sourc ....... ?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: 4341
Beitrag Badestrand Mitglied 17:43:38 13.12.2009   Titel:              Zitieren

Version 43:
http://prettyos.svn.sourc ....... ?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: 4341
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: 14843
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


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


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


boot2.asm, Zeile 26:
Assembler:
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: 14843
Beitrag Erhard Henkes Mitglied 20:03:34 13.12.2009   Titel:              Zitieren

Version 46:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 20:45:26 13.12.2009   Titel:              Zitieren

Version 47:
http://prettyos.svn.sourc ....... ?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: 4341
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: 14843
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.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 20:24:19 14.12.2009   Titel:              Zitieren

Version 50:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 02:09:56 23.12.2009   Titel:              Zitieren

Version 51: (badestrand)
http://prettyos.svn.sourc ....... ?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.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 19:41:35 23.12.2009   Titel:              Zitieren

Version 53:
http://prettyos.svn.sourc ....... ?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/ ....... ing-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: 14843
Beitrag Erhard Henkes Mitglied 12:23:04 24.12.2009   Titel:              Zitieren

Version 54:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 13:38:50 25.12.2009   Titel:              Zitieren

Version 55:

http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 11:50:56 16.01.2010   Titel:              Zitieren

Version 56:

http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 20:50:22 24.01.2010   Titel:              Zitieren

Rev. 57:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 20:58:51 24.01.2010   Titel:              Zitieren

Rev. 57a:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 23:45:25 24.01.2010   Titel:              Zitieren

Rev. 59:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 00:55:31 25.01.2010   Titel:              Zitieren

Rev. 60:
http://prettyos.svn.sourc ....... ?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++:
    /// 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++:
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.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 02:04:06 27.01.2010   Titel:              Zitieren

Rev. 62:
http://prettyos.svn.sourc ....... ?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/ ....... 3791-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: 14843
Beitrag Erhard Henkes Mitglied 10:04:27 27.01.2010   Titel:              Zitieren

Rev. 63:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 05:38:48 29.01.2010   Titel:              Zitieren

Rev. 64:
http://prettyos.svn.sourc ....... ?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.sourc ....... ?view=rev&revision=65
calibrate ohne motor on/off

Rev. 66:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 18:07:35 30.01.2010   Titel:              Zitieren

Rev 67:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 04:19:16 31.01.2010   Titel:              Zitieren

Rev.68:
http://prettyos.svn.sourc ....... ?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. ....... /cc776720%28WS.10%29.aspx
http://www.microsofttrans ....... .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: 14843
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/ ....... opic-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: 14843
Beitrag Erhard Henkes Mitglied 17:09:19 31.01.2010   Titel:              Zitieren

Rev. 69:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 22:50:23 31.01.2010   Titel:              Zitieren

Rev. 70:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 00:53:32 02.02.2010   Titel:              Zitieren

Rev. 71:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 02:04:56 03.02.2010   Titel:              Zitieren

Rev. 72:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 07:56:50 04.02.2010   Titel:              Zitieren

Rev. 73:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 01:42:30 05.02.2010   Titel:              Zitieren

Rev. 74:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 01:52:56 05.02.2010   Titel:              Zitieren

Rev. 75:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 19:28:07 05.02.2010   Titel:              Zitieren

Rev. 76:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 00:10:33 06.02.2010   Titel:              Zitieren

Rev. 77:
http://prettyos.svn.sourc ....... ?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/ ....... d_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: 14843
Beitrag Erhard Henkes Mitglied 03:14:46 06.02.2010   Titel:              Zitieren

Rev. 78:
http://prettyos.svn.sourc ....... ?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++:
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: 14843
Beitrag Erhard Henkes Mitglied 14:28:28 06.02.2010   Titel:              Zitieren

Rev. 79:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 15:28:34 06.02.2010   Titel:              Zitieren

Rev. 80:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 00:01:28 07.02.2010   Titel:              Zitieren

Rev. 81:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 01:29:16 07.02.2010   Titel:              Zitieren

Rev. 82:
http://prettyos.svn.sourc ....... ?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.sourc ....... ?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.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 03:25:32 08.02.2010   Titel:              Zitieren

Rev. 85:
http://prettyos.svn.sourc ....... ?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++:
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: 14843
Beitrag Erhard Henkes Mitglied 20:55:05 08.02.2010   Titel:              Zitieren

Rev. 86:
http://prettyos.svn.sourc ....... ?view=rev&revision=86

- getch() in user.c umgebaut, so dass auf eine Eingabe gewartet wird.
C++:
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


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: 14843
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
==> 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: 14843
Beitrag Erhard Henkes Mitglied 22:17:55 09.02.2010   Titel:              Zitieren

Rev. 87:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 00:22:43 11.02.2010   Titel:              Zitieren

Rev 88:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 02:07:17 11.02.2010   Titel:              Zitieren

Rev. 89:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 22:31:02 11.02.2010   Titel:              Zitieren

Rev. 90:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 23:45:58 11.02.2010   Titel:              Zitieren

Rev. 91
http://prettyos.svn.sourc ....... ?view=rev&revision=90

userlib.h/c: itoa, atoi
Beispielprogramm hello.elf mit Collatz-Folge (3n+1)
C++:
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: 14843
Beitrag Erhard Henkes Mitglied 20:44:22 12.02.2010   Titel:              Zitieren

Rev. 92:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 20:55:21 12.02.2010   Titel:              Zitieren

Rev. 93:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 10:18:19 13.02.2010   Titel:              Zitieren

Rev. 94:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 12:20:22 13.02.2010   Titel:              Zitieren

Rev. 95:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 13:13:08 13.02.2010   Titel:              Zitieren

Rev. 96:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 15:54:08 13.02.2010   Titel:              Zitieren

Rev. 97:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 20:03:43 13.02.2010   Titel:              Zitieren

Rev. 98:
http://prettyos.svn.sourc ....... ?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++:
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: 14843
Beitrag Erhard Henkes Mitglied 21:35:40 13.02.2010   Titel:              Zitieren

Rev. 99:
http://prettyos.svn.sourc ....... ?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: 14843
Beitrag Erhard Henkes Mitglied 01:20:11 14.02.2010   Titel:              Zitieren

Rev. 100:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 15:35:30 14.02.2010   Titel:              Zitieren

Rev. 101:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 20:24:53 14.02.2010   Titel:              Zitieren

Rev. 102:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 02:09:54 15.02.2010   Titel:              Zitieren

Rev 103:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 20:51:38 15.02.2010   Titel:              Zitieren

Rev 104:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 23:13:25 15.02.2010   Titel:              Zitieren

Rev 105: :live: Durchbruch bei Floppy/DMA :live:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 00:18:15 16.02.2010   Titel:              Zitieren

Rev 106: :live:
http://prettyos.svn.sourc ....... 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
*************
|   | 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: 14843
Beitrag Erhard Henkes Mitglied 00:34:05 18.02.2010   Titel:              Zitieren

Rev. 107:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 02:11:28 19.02.2010   Titel:              Zitieren

Rev. 108:
http://prettyos.svn.sourc ....... 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


Wer den IRQ-Handler testen will, gibt nach dem PCI-Scan folgenden Code ein (qemu wählt bei mir IRQ 11):
C++:
///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/ ....... opic-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: 14843
Beitrag Erhard Henkes Mitglied 03:28:04 20.02.2010   Titel:              Zitieren

Rev. 109:
http://prettyos.svn.sourc ....... 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.sourc ....... ew=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: 14843
Beitrag Erhard Henkes Mitglied 11:03:57 20.02.2010   Titel:              Zitieren

Rev. 110:
http://prettyos.svn.sourc ....... 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-elekt ....... em/rtl8139d-datasheet.pdf (S.14/15)

http://svn.rot13.org/inde ....... /rtl8139/rtl8139.cc?rev=1
C++:
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: 14843
Beitrag Erhard Henkes Mitglied 11:42:32 20.02.2010   Titel:              Zitieren

Rev. 111:
http://prettyos.svn.sourc ....... 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-elekt ....... em/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: 14843
Beitrag Erhard Henkes Mitglied 13:04:57 20.02.2010   Titel:              Zitieren

Rev. 112:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 16:42:48 20.02.2010   Titel:              Zitieren

Rev. 113:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 00:05:22 21.02.2010   Titel:              Zitieren

Rev. 114:
http://prettyos.svn.sourc ....... 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-elekt ....... em/rtl8139d-datasheet.pdf (S.14/15)

http://svn.rot13.org/inde ....... /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: 98
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: 14843
Beitrag Erhard Henkes Mitglied 01:34:52 21.02.2010   Titel:              Zitieren

Rev. 115:
http://prettyos.svn.sourc ....... 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.brainswar ....... dex.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: 14843
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: 14843
Beitrag Erhard Henkes Mitglied 11:24:39 21.02.2010   Titel:              Zitieren

Rev. 116:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 13:46:12 21.02.2010   Titel:              Zitieren

Rev. 117:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 16:35:10 21.02.2010   Titel:              Zitieren

Rev. 118:
http://prettyos.svn.sourc ....... 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: 4341
Beitrag Badestrand Mitglied 18:13:28 21.02.2010   Titel:              Zitieren

Rev. 119:
http://prettyos.svn.sourc ....... 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: 4341
Beitrag Badestrand Mitglied 20:01:51 21.02.2010   Titel:              Zitieren

Rev. 120:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 21:29:47 21.02.2010   Titel:              Zitieren

Rev. 121:
http://prettyos.svn.sourc ....... 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: 14843
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++:
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: 4341
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: 4341
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: 14843
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++:
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: 4341
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++:
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: 14843
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: 14843
Beitrag Erhard Henkes Mitglied 00:48:37 22.02.2010   Titel:              Zitieren

Rev. 124:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 20:04:37 22.02.2010   Titel:              Zitieren

Rev. 125:
http://prettyos.svn.sourc ....... view=rev&revision=125

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

Rev. 126:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 21:42:26 22.02.2010   Titel:              Zitieren

Rev. 127:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 01:25:32 23.02.2010   Titel:              Zitieren

Rev. 128:
http://prettyos.svn.sourc ....... view=rev&revision=128

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

C++:
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/ ....... 0731-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: 14843
Beitrag Erhard Henkes Mitglied 20:53:45 23.02.2010   Titel:              Zitieren

Rev. 129:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 22:51:30 23.02.2010   Titel:              Zitieren

Rev. 130:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 23:25:42 23.02.2010   Titel:              Zitieren

Rev. 131:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 01:19:04 24.02.2010   Titel:              Zitieren

Rev. 132:
http://prettyos.svn.sourc ....... view=rev&revision=132

pci.c: USB EHCI: Einstieg in Daten-Ermittlung (z.B. OpRegs Adresse, siehe: http://www.c-plusplus.de/ ....... 3016-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: 14843
Beitrag Erhard Henkes Mitglied 23:59:19 24.02.2010   Titel:              Zitieren

Rev. 133:
http://prettyos.svn.sourc ....... 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++:
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: 14843
Beitrag Erhard Henkes Mitglied 19:31:46 25.02.2010   Titel:              Zitieren

Rev. 134:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 07:39:41 26.02.2010   Titel:              Zitieren

Rev. 135:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 21:07:07 26.02.2010   Titel:              Zitieren

Rev. 136:
http://prettyos.svn.sourc ....... view=rev&revision=136

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

Rev. 137:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 22:33:04 26.02.2010   Titel:              Zitieren

Rev. 138:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 22:59:03 26.02.2010   Titel:              Zitieren

Rev. 139:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 23:21:56 26.02.2010   Titel:              Zitieren

Rev. 140:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 23:42:28 26.02.2010   Titel:              Zitieren

Rev. 141
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 23:53:09 26.02.2010   Titel:              Zitieren

Rev. 142:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 02:56:50 27.02.2010   Titel:              Zitieren

Rev. 144:
http://prettyos.svn.sourc ....... view=rev&revision=144

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

pci.c, Zeilen 187/188:
C++:
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: 14843
Beitrag Erhard Henkes Mitglied 22:32:36 27.02.2010   Titel:              Zitieren

Rev. 145:
http://prettyos.svn.sourc ....... 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
Unregistrierter





Beitrag Unregistrierter 00:24:40 28.02.2010   Titel:              Zitieren

Erhard Henkes schrieb:
Rev. 145:
http://prettyos.svn.sourc ....... 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. ;)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1712
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? :-)
Unregistrierter





Beitrag Unregistrierter 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. ;)
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1712
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...
Unregistrierter





Beitrag Unregistrierter 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


Zuletzt bearbeitet von Unregistrierter am 01:40:52 28.02.2010, insgesamt 2-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14843
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++:
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: 14843
Beitrag Erhard Henkes Mitglied 12:36:39 28.02.2010   Titel:              Zitieren

Rev. 146:
http://prettyos.svn.sourc ....... 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: 1712
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.sourc ....... 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: 1712
Beitrag Mr X Mitglied 14:18:06 28.02.2010   Titel:              Zitieren

Rev. 148
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 15:30:09 28.02.2010   Titel:              Zitieren

Rev. 149
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 15:39:55 28.02.2010   Titel:              Zitieren

Rev. 150
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 16:40:25 28.02.2010   Titel:              Zitieren

Rev. 151:
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 20:12:45 28.02.2010   Titel:              Zitieren

Rev. 152:
http://prettyos.svn.sourc ....... 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: 4341
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: 14843
Beitrag Erhard Henkes Mitglied 21:24:40 28.02.2010   Titel:              Zitieren

Rev. 153:
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 22:12:23 28.02.2010   Titel:              Zitieren

Rev. 154:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 23:49:08 28.02.2010   Titel:              Zitieren

Rev. 155:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 01:15:06 01.03.2010   Titel:              Zitieren

Rev. 156:
http://prettyos.svn.sourc ....... 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.sourc ....... view=rev&revision=157
Zwischenschritt bei ehci.c

Rev. 158:
http://prettyos.svn.sourc ....... view=rev&revision=158
Zwischenschritt bei ehci.c

Rev. 159:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 01:47:25 02.03.2010   Titel:              Zitieren

Rev. 160:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 02:30:05 02.03.2010   Titel:              Zitieren

Rev. 161:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 10:48:57 02.03.2010   Titel:              Zitieren

Rev. 162:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 20:14:10 02.03.2010   Titel:              Zitieren

Rev. 163:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 21:41:27 02.03.2010   Titel:              Zitieren

Rev. 164:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 00:31:02 03.03.2010   Titel:              Zitieren

Rev. 165:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 01:20:20 03.03.2010   Titel:              Zitieren

Rev. 166:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 02:09:01 03.03.2010   Titel:              Zitieren

Rev. 167:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 02:37:30 03.03.2010   Titel:              Zitieren

Rev. 168:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 23:43:58 03.03.2010   Titel:              Zitieren

Rev. 169:
http://prettyos.svn.sourc ....... view=rev&revision=169

ehci.c

Ports: (zusätzlich: wait und set reset bit to 0)
C++:
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
Unregistrierter





Beitrag Unregistrierter 00:40:38 04.03.2010   Titel:              Zitieren

Erhard Henkes schrieb:

C++:
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++:
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++:
#define BIT0 (1<<1)
#define BIT1 (1<<2)
#define BIT2 (1<<3)
/* usw */


Zuletzt bearbeitet von Unregistrierter am 00:50:37 04.03.2010, insgesamt 2-mal bearbeitet
XanClic
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.10.2009
Beiträge: 98
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++:
#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++:
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: 1712
Beitrag Mr X Mitglied 19:12:00 04.03.2010   Titel:              Zitieren

Rev. 170:
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 20:40:32 04.03.2010   Titel:              Zitieren

Rev. 171:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 23:22:10 04.03.2010   Titel:              Zitieren

Rev. 172:
http://prettyos.svn.sourc ....... 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
Unregistrierter





Beitrag Unregistrierter 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++:
#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.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14843
Beitrag Erhard Henkes Mitglied 03:09:12 05.03.2010   Titel:              Zitieren

Rev. 173:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 04:04:33 05.03.2010   Titel:              Zitieren

Rev. 174:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 19:09:35 05.03.2010   Titel:              Zitieren

Rev. 175
http://prettyos.svn.sourc ....... 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/ ....... 0731-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: 14843
Beitrag Erhard Henkes Mitglied 21:08:03 05.03.2010   Titel:              Zitieren

Rev. 176
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 22:04:13 05.03.2010   Titel:              Zitieren

Rev. 177
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 22:23:08 05.03.2010   Titel:              Zitieren

Rev. 178
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 02:00:09 06.03.2010   Titel:              Zitieren

Rev. 179
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 17:22:51 06.03.2010   Titel:              Zitieren

Rev. 180
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 17:52:19 06.03.2010   Titel:              Zitieren

Rev. 181
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 18:36:58 06.03.2010   Titel:              Zitieren

Rev. 182
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 19:15:34 06.03.2010   Titel:              Zitieren

Rev. 183:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 19:43:43 06.03.2010   Titel:              Zitieren

Rev. 184:
http://prettyos.svn.sourc ....... 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/ ....... 0731-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++:
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: 1712
Beitrag Mr X Mitglied 22:51:26 06.03.2010   Titel:              Zitieren

Rev. 185:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 01:00:42 07.03.2010   Titel:              Zitieren

Rev. 186:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 03:15:58 07.03.2010   Titel:              Zitieren

Rev. 187:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 12:16:09 07.03.2010   Titel:              Zitieren

Rev. 188:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 16:08:35 07.03.2010   Titel:              Zitieren

Rev. 189:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 16:56:40 07.03.2010   Titel:              Zitieren

Rev. 190:
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 19:39:05 07.03.2010   Titel:              Zitieren

Rev. 191:
http://prettyos.svn.sourc ....... 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.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 21:11:44 07.03.2010   Titel:              Zitieren

Rev. 193:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 01:21:04 08.03.2010   Titel:              Zitieren

Rev. 194:
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 10:36:24 08.03.2010   Titel:              Zitieren

Rev. 195:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 19:26:29 08.03.2010   Titel:              Zitieren

Rev. 196:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 20:35:26 08.03.2010   Titel:              Zitieren

Rev. 197:
http://prettyos.svn.sourc ....... 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: 1712
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: 14843
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: 14843
Beitrag Erhard Henkes Mitglied 23:38:49 08.03.2010   Titel:              Zitieren

Rev. 198:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 00:15:01 09.03.2010   Titel:              Zitieren

Rev. 199:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 21:32:37 09.03.2010   Titel:              Zitieren

Rev. 200:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 00:45:11 10.03.2010   Titel:              Zitieren

Rev. 201:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 01:19:20 10.03.2010   Titel:              Zitieren

Rev. 202:
http://prettyos.svn.sourc ....... 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: 14843
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: 14843
Beitrag Erhard Henkes Mitglied 18:18:12 10.03.2010   Titel:              Zitieren

Rev. 204:
http://prettyos.svn.sourc ....... 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
Unregistrierter





Beitrag Unregistrierter 20:50:11 10.03.2010   Titel:              Zitieren

Du hast ja ziemliche Mühe damit. Hier mal ein Beispiel: http://research.microsoft ....... sb/master/ehci/ehci.c.htm
Mr X
Mitglied

Benutzerprofil
Anmeldungsdatum: 18.09.2007
Beiträge: 1712
Beitrag Mr X Mitglied 21:42:49 10.03.2010   Titel:              Zitieren

Rev. 205:
http://prettyos.svn.sourc ....... view=rev&revision=205

  • time.c: mehrfacher Code (5x fast identisch) in Funktion ausgelagert
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14843
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++:
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
Unregistrierter





Beitrag Unregistrierter 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. ;)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14843
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: 14843
Beitrag Erhard Henkes Mitglied 02:01:22 11.03.2010   Titel:              Zitieren

Rev. 206:
http://prettyos.svn.sourc ....... 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: 98
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: 14843
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: 14843
Beitrag Erhard Henkes Mitglied 19:11:09 11.03.2010   Titel:              Zitieren

Rev. 207:
http://prettyos.svn.sourc ....... 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: 1712
Beitrag Mr X Mitglied 19:54:07 11.03.2010   Titel:              Zitieren

Rev. 208:
http://prettyos.svn.sourc ....... view=rev&revision=208

  • Wochentage werden nun (aufgrund unterschiedlicher zählweisen unterschiedlicher cmos) berechnet statt ausgelesen.
Unregistrierter





Beitrag Unregistrierter 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.
XanClic
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.10.2009
Beiträge: 98
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/
Unregistrierter





Beitrag Unregistrierter 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.
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14843
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: 98
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/
Unregistrierter





Beitrag Unregistrierter 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.


Zuletzt bearbeitet von Unregistrierter am 23:53:08 11.03.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14843
Beitrag Erhard Henkes Mitglied 00:36:02 12.03.2010   Titel:              Zitieren

Rev. 209:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 00:48:19 12.03.2010   Titel:              Zitieren

Rev. 210:
http://prettyos.svn.sourc ....... 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: 14843
Beitrag Erhard Henkes Mitglied 18:06:32 12.03.2010   Titel:              Zitieren

Rev. 211:
http://prettyos.svn.sourc ....... 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: 1712
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: 14843
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: 14843
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: 14843
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: 14843
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: 4341
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: 14843
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/s ....... TION001221600000000000000

_________________
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: 4341
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: 14843
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/ ....... p-is-1868218.html#1868218
http://www.c-plusplus.de/ ....... 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: 4341
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: 14843
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: 4341
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: 14843
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: 4341
Beitrag Badestrand Mitglied 19:21:11 13.03.2010   Titel:              Zitieren

Rev. 223: Bug beim Linken gefixt, siehe http://c-plusplus.de/foru ....... 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: 14843
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: 1712
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: 14843
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: 14843
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: 14843
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: 14843
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: 14843
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: 14843
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: 1712
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: 14843
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: 1712
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: 1712
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: 14843
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++:
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: 14843
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.c ....... ops.special.keywords.html
http://dev.juokaz.com/php ....... ion-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: 973
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.c ....... ops.special.keywords.html
http://dev.juokaz.com/php ....... ion-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: 14843
Beitrag Erhard Henkes Mitglied 20:31:23 15.03.2010   Titel:              Zitieren

Rev. 240: kernel.bin: 57.856 Bytes
http://prettyos.svn.sourc ....... view=rev&revision=240

ehci.c: restart bei Host System Error (klappt endlich bei meinem störrischen PC!)

C++:
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: 14843
Beitrag Erhard Henkes Mitglied 23:36:30 15.03.2010   Titel:              Zitieren

Rev. 241:
http://prettyos.svn.sourc ....... 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: 1712
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: 1712
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: 14843
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: 14843
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: 1712
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: 14843
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: 14843
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: 14843
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: 14843
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: 14843
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++:
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: 14843
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: 14843
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: 14843
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: 14843
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
Unregistrierter





Beitrag Unregistrierter 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. ;)
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 14843
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: 14843
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: 14843
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: 14843
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: 14843
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: 14843
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++:
    // 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: 14843
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: 14843
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: 1712
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: 1712
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: 14843
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: 1712
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: 14843
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: 1712
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: 14843
Beitrag Erhard Henkes Mitglied 20:44:20 22.03.2010   Titel:              Zitieren

Rev. 270:

file.c: (floppy disk motor off)
C++:
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: 14843
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: 4341
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: 1712
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: 14843
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: 14843
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: 1712
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: 14843
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

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: 14843
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++:
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: 1712
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: 14843
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: 14843
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: 14843
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: 14843
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: 14843
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: 1712
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: 14843
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: 14843
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
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: 14843
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
$>   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: 1712
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: 1712
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: 1712
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: 1712
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: 14843
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: 1712
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: 1712
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: 14843
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: 14843
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: 14843
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++:
    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:
_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++:
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: 14843
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: 14843
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: 14843
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: 14843
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: 1366
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: 149
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: 14843
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.sour ....... 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: 14843
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: 149
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: 14843
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: 14843
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++:
struct oda
{
    //...
    uintptr_t curTask;           // Address of currentTask
    //...
}__attribute__((packed));


ckernel.c:
C++:
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++:
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++:
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: 14843
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++:
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++:
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++:
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: 14843
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++:
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: 14843
Beitrag Erhard Henkes Mitglied 11:39:26 03.04.2010   Titel:              Zitieren

Rev. 314:

CLTS implementiert:
http://www.c-plusplus.de/ ....... 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: 14843
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: 14843
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
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: 14843
Beitrag Erhard Henkes Mitglied 01:33:55 04.04.2010   Titel:              Zitieren

Rev. 317:

Funktion "scree