Sourcecode Fortschritt
-
Revision 508:
- Floppytreiber objektorientierter gemacht, basiert auf floppy_t
- flpydsk_refreshVolumeNames statt flpydsk_get_volumeName
- diskType_t mit Funktionspointern für Sector-Read/-Write für Abstraktion
- Vereinfachungen im Code
-
Revision 509:
Revision 510:Fehlerkorrekturen
- pointer cast
- partitionszeiger floppy
-
Revision 511:
- Laden von Floppy mit Devicemanager möglich
- floppy_load ausgebaut (file.c), syscall freigegeben
- Kleinigkeiten, BugfixesDer fat12-Treiber in fat.c ist schneller als der in fat12.c -> doppelt erfolgreich
-
Rev. 512:
Formale Kleinigkeiten:
- Abschließende '\0' hinter Floppy Dev 1 bzw. Floppy Dev 2 eingefügt
- Eine Zeile Abstand hinter "This is a volume formated with FAT12."PrettyOS "denkt" mit:
- Gibt man ttt.elf ein, so will man vielleicht wie bisher (.elf sollte sein) vereinfacht auf die Floppy zugreifen. Wir bauen bei Vorhandensein eines FDD1 den Pfad "1:/" probeweise davor und rufen rekursiv erneut execute(newPath) auf.$> ttt.elf <-- file is being searched... No valid path for partition found! Floppy found! PrettyOS now tries 1:/ttt.elf buffer: C0002000h type: 1 SecPerClus: 1 maxroot: 224 fatsize: 9 fatcopy: 2 firsts: 0 fat: 1 root: 19 data: 33 maxcls: 4294967263 mount: 1 serial #: 50h 52h 45h 54h - - - - - - - - - - - press key - - - - - - - - - - -
void execute(const char* path) { partition_t* part = getPartition(path); if(part == NULL) { textColor(0x0C); printf("\nNo valid path for partition found!\n"); textColor(0x0F); if ((cmos_read(0x10)>>4) == 4 ) // first FDD implemented { if (path[0] == '1' && path[1]==':') { // do nothing } else { char newPath[40]; strcpy(newPath,"1:/"); strcat(newPath,path); textColor(0x0E); printf("\nFloppy found! PrettyOS now tries %s\n",newPath); textColor(0x0F); execute(newPath); } } return; } while(*path != '/' && *path != '|' && *path != '\\') { path++; if(*path == 0) { return; } } path++; loadFile(path, part); }
maxcls: 4294967263 <--- etwas hoch
-
Rev. 513:
Zwei nicht mehr benötigte Funktionen zum Laden von Floppy in file.h/c entfernt
So stellt sich das momentan in VBox mit zwei Floppy Disk Devices dar:
Available ports: Type Number Name Inserted disk ---------------------------------------------------------------------- FDD A Floppy Dev 1 PRETTYOS FDD B Floppy Dev 2 RAM C RAM RAMDisk ---------------------------------------------------------------------- Attached disks: Type Number Name Part. Serial ---------------------------------------------------------------------- Floppy 1 PRETTYOS 0 PRETTYOS RAMdisk 3 RAMDisk 0 786436 ----------------------------------------------------------------------
-
Rev. 514:
Verbesserung der Darstellung der FAT-Descriptor-Daten in loadFile
-
Revision 515:
- Fehlerbehandlung von execute jetzt in shell.c
- execute und loadFile geben nun FS_ERROR zurück
- Disk zählt noch zu lesende Sektoren -> Möglichst seltenes an/aus des Motors bei "beweglichen" Medien wie Floppys, HDDs und CDs
- Syscall-Definition von execute repariert
- Kleinigkeiten
-
Revision 516:
- (jetzt hoffentlich funktionierende) Floppy-Motor-Steuerung
- Zahlreiche Funktionen aus fat12.c entfernt
-
Rev. 517:
Es gibt nach Umbauarbeiten (dank an MrX) überraschende Probleme auf real PC mit der Floppy:
Bei mir hört es in der ports-liste nach FDD auf, nur noch read error
daher cross-check, bitte testen.Mit den nachgereichten Versionen für die Motorsteuerung geht es ebenfalls nicht!
http://codepad.org/oZCtQChr
http://codepad.org/kaH3aG1q
http://codepad.org/MJDdABeh ("mal eine ältere Version")sag mir, ob es a) geht und wenn nicht b) zuletzt "off" angezeigt wird
a) es geht nicht (zwei PC mit echter Floppy, zwei Disketten)
b) "on" steht vorne nach Finden der FDD; "off" kommt nicht, nur der read error mit Lampe aus (bei beiden PCs and der exakt gleichen Stelle).MrX: bitte checke mal die Rev. 517, ob die wirklich so auf real PC bei dir läuft. Vielleicht hast du lokal eine andere Version.
VMWare läuft mit rev. 517 korrekt, aber lädt viel zu lahm.
Gibt man nur "ttt.elf" ein, so wird "Trying now on 1:/." angezeigt, aber korrekt geladen.VBox klappt gut mit zwei Floppys, lädt schnell.
Qemu läuft analog VBox.Nachdem ich auch noch auf meinem Entwicklungs-PC das gleiche negative Ergebnis erhielt:
Bei manchen PCs muss man zwei mal laden, bis es klappt (DMA-Init-Problematik, muss noch im geänderten Code untersucht werden), also erstes mal read error, dann beim zweiten mal Erfolg. Wenn wir aber Sektoren zählen und entsprechend bei null abschalten, könnte dies genau vor dem erfolgreichen Lesen erfolgen.
Nur so eine Idee. Spricht nur dagegen, dass das "off" bei dem einen Test nicht kam. Also könnte es auch sein, dass dieser Lesevorgang zur Detektion des Partitionsnamens in einer Fehlerschleife hängen bleibt.Ein Test auf einem vierten PC: ebenfalls nicht ok. Nach ENTER drücken gings weiter, aber ständig read error und Festhängen an diesem Punkt. ttt.elf wurde nicht geladen, als es endlich gelang dies einzutippen.
Irgendetwas ist in Rev. 517 gegenüber früheren Versionen massiv gestört im Lesevorgang.
Bitte gegen den Ablauf im alten Code checken.Cuervo: bitte ebenfalls prüfen.
-
Danke für die Umfangreichen Tests, Erhard.
(dank an MrX)
Danke, das ichs zerschossen hab?
Naja, ab und zu muss man mal was kaputt kriegen, ums wieder zusammensetzen zu "dürfen"
-
Rev. 518: Vorbereitungen FAT-Modul: Schreiben (Ablösung file.c und weitgehend fat12.c)
-
Revision 519:
- Floppyproblem behoben. Ich hatte nicht bedacht, das flpydsk_enable_controller den Motor abschaltet. Daher wichen CurrentDisk->motor und Realität vonnander ab
- Shell gibt nun Dateinamen statt "1:/" bei retry an.
- Kleinigkeiten
-
Rev. 520:
Vorbereitung fat-modul für Schreiben
-
Revision 521:
- flpydsk_writeSector gebaut und in devicemanager.c genutzt
- Fat-Treiber verbessert (Kürzungen, Scope von Variablen, seltsame return-Konstruktionen; 100 Zeilen gespart bei mehr Funktionen (singleSectorWrite))
-
Revision 522:
boot2.asm: wurde erneut gehotfixt, indem der stack von 1FFFFh nach 3FFFFh geschoben wurde
Nun hat Kernel.bin im RM Platz zwischen 3000h und ca. 40000h (Stack), also knapp 250000 bytes.makefile: der kernel wird bewusst mit -O3 gebildet, um erstens einen größeren Kernel mit ca. 130K zu erhalten und zweitens Fehlermöglichkeiten mit O3 zu testen.
-
Rev. 523:
Vorbereitung für verbessertes file read/write in fat.h/c (fopen ausgetauscht, fopenFileName und Helper-Fkt. ergänzt)
-
Rev. 524:
strchr war bereits vorhanden in der userlib, nun auch in util.h/.c (kernel)
-
Revision 525:
- Screenshot wird (fehlerhaft) mit fat.c erzeugt
- fopenFileName erkennt nun Partition
- boot2.map wieder entfernt
- Zahlreiche Formatierungen und kleinere Änderungen/Optimierungen
-
rev. 526 (noch fehlerhaft in fat.c):
Am Ende von fopenFileName ist ein Fehler versteckt, der zu einem #PF führt.
Bitte um Hilfe bei der Fehlersuche. Die eingebauten printf helfen mir nicht weiter, weil es bei realPC und verschiedenen Sims ganz anders reagiert. Bei qemu kommt reboot. VMWare und VBox zeigen den Fileptr im Heap.Nach dem #PF kann man mittels Strg+s bei manchen Simulationen weiter machen. Einmal existiert screen.txt offenbar bereits und einmal nicht.
Man kann auf real PC auch ENTER eingeben und z.B. ttt.elf laden. Die shell ist nicht sofort kaputt. Erst wenn man zurück kommt von ttt.elf geht nichts mehr.
Man startet einen Thread aus dem Keyboard-Treiber, also Interrupt, dann Fehler, schon wieder "Interrupt", dann erneut Strg+s ...
:schland:
-
Rev. 527:
kleine verbesserung durch globales fileTemp in fat.c für fopenFileName
Wenn man bei realPC vorher die Floppy quick-formatiert, damit das screen.txt wirklich neu ins Verzeichnis geschrieben wird, dann läuft es fehlerfrei durch. Die Datei hat aber trotz Anzeige des Sektor-Schreibens noch keinen Inhalt.