Sourcecode Fortschritt
-
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 ongoingVersion 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
-
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
-
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 )
-
Sorry, bei mir Gewohnheit. Merke das manchmal garnicht mehr. Hier ist übrigens Englisch und Deutsch akzeptiert.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-252232.html
Sprachen in diesem Subforum: Deutsch und Englisch
Languages at this sub-forum: German and English
-
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
-
Version 32:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=32- getCurrentSeconds() eingebaut: liefert Zeit in Sekunden seit PrettyOS-Start (allerdings ticks-abhängig, funktioniert nicht zwischen cli/sti)
- Statusleiste (status bar) implementiert; Scrolling, Cursor- und Tasksteuerung angepasst
- Floppy-Treiber beim Warten auf Interrupt und auf Read/Write-Transfer um einen Timeout (5 sec) erweitert, damit Kernel hier nicht mehr dauerhaft bei ausbleibendem Interrupt o.ä. hängen bleibt (auf 2 von 3 PCs wird das root directory mit fdir gelesen, ansonsten geht es nach 5 sec weiter im Code mit Fehlermeldung "timeout"). VirtualPC bleibt jetzt auch nicht mehr hängen, funktioniert aber noch nicht richtig bezüglich root dir Ausgabe.
Auf VMWare läuft PrettyOS auch (Aussage Cuervo).
-
Version 33:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=33Auf 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.
-
Version 34:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=34- time.h/time.c ergänzt, Datum/Zeit aus cmos.h/c in dieses Modul überführt
- Statusleiste: Datum und Zeit, zusätzlich vergangene Sekunden seit dem Start
- aktuelles FloppyImage.bin
- einiges wurde ausgeblendet (Ausdruck nach 'Diagnose' verlagert)FloppyImage (im Verzeichnis 'kernel') wurde mitgeliefert, damit man die neuesten Features sofort ansehen kann, z.B. mit Qemu (batch-Datei für Windows):
qemu-system-x86_64.exe -usbdevice mouse -fda FloppyImage.bin -boot a -localtime
-
Version 35:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=35- NULL als (void*) 0 redefiniert, wie in C üblich (vorher nur 0)
- NULL in paging.c ausgetauscht gegen 0 (wegen error: cast pointer to integer)
- itoa und reverse von K&R (siehe wikipedia), strcpy von wikipedia
- Rotierender ASCII Stern wurde umgefärbt und nach unten rechts in Statusleiste verschoben
- 2-Klausel-BSD-Lizenz und Disclaimer in os.h und ckernel.c für weitere Diskussionen erstmalig eingefügt, aber ganz unten wie abgesprochen (einmalig!)Offenes Problem:
In char* getCurrentDateAndTime(char* pStr) muss wie folgtint 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.
-
Version 36:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=36- Kleiner Bug beim Auslesen von Root Dir behoben (Punkt zwischen Name und Extension wurde immer beim ersten Mal nicht gesetzt, jetzt dann, wenn Eintrag nicht Volume Label ist)
Lob an unseren Chef-Tester Cuervo, dem aufgefallen ist, dass da BOOT2SYS steht anstelle BOOT2.SYS, wenn das Label leer war
Screenshot: http://www.henkessoft.de/OS_Dev/Bilder/PrettyOS_rev36.PNG
-
Version 37:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=37- Fehlerhaftes strcat ausgetauscht gegen Variante aus wikipedia, die strcpy und strlen einsetzt. Nun kann die for-Schleife am Anfang von getCurrentDateAndTime entfallen, die den ganzen String auf 0 setzte.
-
Version 38:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=38Heute 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
#include "os.h" #include "gags.h" // Zug als Beispiel übernommen aus // http://de.wikipedia.org/wiki/ASCII-Art#Allgemeine_Beispiele // TODO: eigene ASCII-Art erzeugen char* line1 = " _______ _______ <>_<> " ; char* line2 = " (_______) |_|_|_|_|_|_|| [] [] | .---|'\"`|---. " ; char* line3 = "`-oo---oo-'`-oo-----oo-'`-o---o-'`o\"O-OO-OO-O\"o' " ; void showTrain(int8_t val) { int i; char temp1,temp2,temp3; switch(val) { case 1: temp1 = line1[79]; temp2 = line2[79]; temp3 = line3[79]; for(i=79;i>0;--i) { line1[i] = line1[i-1]; line2[i] = line2[i-1]; line3[i] = line3[i-1]; } line1[0] = temp1; line2[0] = temp2; line3[0] = temp3; k_printf(line1,46,0xE); k_printf(line2,47,0xE); k_printf(line3,48,0xE); break; default: break; } }
-----------------------------------------------
Version 39:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=39
- Laufband ("fahrender Zug") im Kernel aus Effizienzgründen entfernt (auskommentiert) :xmas1:
// showTrain(1); // TODO: transfer to user space as elf exec format; k_printf as syscall
-----------------------------------------------
Version 40:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=40
- gags.h/c im Kernel entfernt
- syscalls ergänzt
- showInfo(val) testweise im User-Bereich eingebaut; Laufband-Funktion noch nicht vorhanden (TODO: separate Task)
- makefile korrigiert im User-Bereich
-
Der Zug ist mega cool!
Version 41: Unterstriche in den Ordnernamen und das Präfix "k_" in Funktionsnamen entfernt.
-
Version 42:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=42- getCurrentSeconds() in userlib.h/c nachgerüstet (program.c wird jetzt kompiliert) <--- Dank an Cuervo für das Auffinden dieses Fehlers
- gags.h/c im Kernel gelöscht (Funktion ist in program.c)Der Zug ist mega cool!
Thanks!
-
Version 43:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=43- In start.asm aus user/user_program_c das Ausnullen der BSS entfernt, ist afaik sowieso schon auf 0 und ergab bei mir wegen Integer-Underflow in ecx 'nen fiesen Fehler.
- Noch zwei oder drei Funktionen mit "k_"-Präfix gefunden und korrigiert.
- kernel/gdt.inc gelöscht, da anscheinend ungenutzt (dann auch stage2_bootloader/gdt2.inc wieder in gdt.inc umbenannt)
- mingw32-make.exe, nasmw.exe, CreateFloppyImage.exe, BootDisk2BootStick.exe, dd.exe und bochs.bxrc in Ordner "tools"
- Das Erstellen des Images, Entfernen aller .o-Dateien jetzt in globalem makefile
- Aufrufen von Bochs, Qemu oder das Bauen der Diskette in Batch-File. Die Batch-Datei kann "einfach so" aufgerufen werden, dann kompiliert alles. Wird als Parameter "bochs" übergeben, wird das Image in Bochs ausgeführt. Wird (evtl zusätzlich) "disc" übergeben, wird alles auf die Diskette geschrieben. Für Qemu und anderes können wir auch noch was basteln. Und das ganze noch als Shellskript für die Linuxer schreiben, ist bisher nur als Stub vorhanden.
TODO:
Der Stack der User-Prozesse muss vom Kernel gesetzt werden, jeder braucht auch seinen eigenen Stack. In unserem User-Programm zumindest wird der Stack händisch auf 0x60000 gesetzt. Erhard, du kennst dich in dem Tasking-Modul doch aus, magst du mal probieren, jedem Prozess seinen eigenen Stack zu geben? Irgendwo unter 0xC0000000 oder so..@Erhard: Wird "quickformat_Floppy_A.bat" noch gebraucht?
-
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.
-
Version 45 baut so nicht auf:
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 -1Wenn 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:
boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc) $(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE2DIR)/boot2.bin
boot.asm, Zeile 264:
ImageName db "BOOT2 BIN"
boot.asm, Zeile 268:
msgFailure db 0x0D, 0x0A, "BOOT2.BIN MISSING", 0x0D, 0x0A, 0
boot2.asm, Zeile 26:
msgFailure db 0x0D, 0x0A, "Missing KERNEL.BIN", 0x0D, 0x0A, 0x0A, 0
Dann startet aber der Kernel immer noch nicht!
-
Version 46:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=46Die neuen Bezeichnungen boot2.bin und kernel.bin wurden überall eingebaut und der Fehler im Makefile behoben.
Der Kernel wird aber noch nicht gestartet!
-
Version 47:
http://prettyos.svn.sourceforge.net/viewvc/prettyos?view=rev&revision=47Nun ü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 assembliertNun gibt es einen ASSERTION Fehler:
ASSERTION FAILED((const void*)(header->entry) == USERCODE_VADDR) at kernel/elf.c
:153OPERATING SYSTEM HALTED
-
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