BDOS V2.0

  • Ich mach wegen V2 mal ein neues Thema auf (wenns stört, bitte einfach verschieben) - sonst blickt keiner mehr so wirklich durch.


    Hier mal der aktuelle Stand:


    Das "IDE.DEVICE" ist eigentlich fertig. Ich muss es mit dem SF2 mal testen, und ggf. noch ein paar Zeilen Code einfügen, dann sollte es das gewesen sein. Der Treiber unterstützt in der gegenwärtigen Form nur Unit 0 (=Master) und LBA-fähige Geräte (28 Bit LBA).


    Der "FAT16.HANDLER" ist gerade in Arbeit - sitze gerade an der Init-Funktion. Nebenbei arbeite ich noch an den spezifikationen zu den handlern - bisher ist nur Init dokumentiert.


    Ach ja: Am Emulator wird das (zumindest vorerst) nicht lauffähig sein, da diese ja den Identify Drive-Befehl nicht unterstützen...

  • Hier mal die ersten Spezifikationen - Änderungen sind aber jederzeit möglich.


    Das Device


    Aufbau:


    Offset/Inhalt
    0 Version, Revision, Mark
    3 Zeiger auf Info-String, welcher mit &00 abgeschlossen sein muss, oder &0000, wenn nicht benutzt
    5 Device-Properties
    Bit 7: Read (Treiber kann von Gerät lesen)
    Bit 6: Write (Treiber kann auf Gerät schreibend zugreifen)
    Bit 5: Fixed (Medium bzw. Gerät kann nicht gewechselt werden)
    Bit 4: LBA (nur für HD&Co)
    Bit 3: Extented Device (für Spezielle Devices)
    Bit 2-0: Anzahl Units, die vom Device unterstützt werden


    ab 6 Jump-Tabelle (&C3 xx xx) für folgende funktionen:
    cmd_init -> Gerät wird initialisiert (z. B. Prüfen ob vorhanden)
    cmd_done -> Gerät abmelden
    cmd_release -> nur für Wechselmedien interessant
    cmd_abort -> Kritischer Fehler
    cmd_read -> Von einer Unit lesen
    cmd_write -> Auf eine Unit schreiben
    cmd_status -> Rückgabe Gerätestatus
    cmd_seek -> Positionieren des Kopfes (wenn vorhanden)


    Auf die genauen Parameter verzichte ich hier mal - das würde hier zu weit führen. Wer sich z. B fragt, was das mit den Eigenschaften soll (Read, Write,...), dem sei hier nur soviel gesagt: Es ist durchaus möglich, z. B. Drucker oder einen CPC-Booster (Serial-Port) als Laufwerk zu verwenden - wenn es denn ein Device (LowLevel-Ebene) bzw. einen Handler (FileSystem) dazu gibt. ;)

  • Ein Device kann folgende Fehlercodes zurückgeben:


    &00: Ok
    &01: Illegal Unit Number (die Einheit wird nicht unterstützt oder ist nicht vorhanden)
    &02: Device not Present (das Gerät ist nicht verfügbar)
    &03: Device not compatible (z. B. wird für das IDE.DEVICE eine LBA-fähige Festplatte erfordert, diese aber nicht gefunden)
    &04: Read error
    &05: Write error
    &06: Seek error
    &07: Cannot identify drive (Laufwerk unterstützt keine Identifizierung)
    &FF: Command not supported (CMD_xxx-Funktion nicht vorhanden oder von Hardware nicht unterstützt)


    Die nächst höhere Ebene ist der Handler - er kümmert sich quasi um das Dateisystem. Er greift auf ein Gerät (z. B. HD) durch ein "Device" zu. Der Aufbau ist ähnlich dem eines Devices.


    Ofs/Inhalt
    &00 Version, Revision, Mark
    &03 Zeiger auf Info-String (siehe oben)
    &05 Beginn der Jump-Tabelle


    io_open -> Datei öffnen
    io_close -> Datei schließen


    Speziell für den CPC:


    io_loadseg -> Speicherbereich einladen (LOAD)
    io_saveseg -> Speicherbereich schreiben (SAVE)
    io_getch -> Zeichen lesen (IN CHAR)
    io_putch -> Zeichen schreiben (OUT CHAR)
    io_putbkch -> Zeichen zurückstellen (CHAR RETURN)
    io_testeof -> Auf Dateiende testen
    io_catalog -> CAT


    und wieder allgemein:


    io_kill -> Löschen von Objekten
    io_examine -> Siehe aktuelles BDOS
    io_setatr -> Attribute setzen
    io_getatr -> Attribute holen
    io_chdir -> Pfad wechseln
    io_diskinfo -> Informationen über Medium abfragen
    io_rename -> Umbenennen von Objekten
    io_done -> Datenträger "abmelden"
    io_init -> Handler initialisieren
    io_release -> Nur für Wechselmedien interessant
    io_abort -> Kritischer Fehler
    io_rawread -> Lesen ohne CPC-Begrenzungen
    io_rawwrite -> Schreiben ohne CPC-Begrenzungen
    io_seek -> Positionieren innerhalb einer Datei
    io_mkdir -> Verzeichnis erstellen
    io_user -> User-Funktionen. Quasi alles, was sonst nicht genannt wurde. Abhängig von Handler.


    Soviel erstmal zum Aufbau. Mehr demnächst.

  • Sieht sehr gut aus!!


    Nur zwei Sachen:

    Zitat von "Brueggi"


    Bit 4: LBA (nur für HD&Co)
    [...]
    cmd_seek -> Positionieren des Kopfes (wenn vorhanden)


    Darauf würde ich komplett verzichten, das macht IMHO keinen Sinn.
    - warum sollte die Anwendung sich noch optional um die Kopfpositionierung kümmern?
    - der CHS Mode (FDC und sehr alten Platten) sollte nur vom Device-Treiber gehandelt werden. Die Anwendung bzw. das Filesystem sollten nur noch mit logischen und nicht mehr mit physikalischen Sektornummerm arbeiten. Ansonsten verlagerste Du eine Lowlevel-Sache in einen Bereich, wo er eigentlich nichts zu suchen hat und nur alles umständlicher macht.


    Sieht ja schon sehr cool aus :)


    CU,
    Prodatron

  • Haste natürlich recht :) Das Bitfeld ist auch eigentlich nur für den Programmierer gedacht - er bekommt es bei CMD_INIT zurück. Anwendungen können so gleich sehen, ob das "Device" überhaupt geeignet ist. Stimmt aber, dieses Bitfeld macht nicht 100% sinn. Vielleicht ändere ich es nochmal ab.


    Die Parameter (gerade für Read&Write) sind schon so ausgelegt, das in HLDE eine Sektornummer übergeben wird (ans Device) - was der Low-Leveltreiber wirklich daraus macht (z. B. Umrechnung nach CHS), das ist seine Sache. Der Programmierer sieht nur noch HLDE als Parameter (und eben z. B. noch die Unit).


    Das Seek war auch nur für Floppies gedacht (wenn man es denn braucht), habe es in letzter Sekunde noch reingenommen - man weiss ja nie, ob man es braucht ;) Ansonsten gibts halt nen &FF (Kommando nicht unterstützt) - bei Platten macht er eigentlich keinen Sinn.


    :D

  • Also, wenn das ganze erstmal läuft (wird wohl, wenn es weiter so zügig vorankommt, nicht lange bis zu einem ersten Release dauern), dann können wir nochmal über den Booster plaudern. Wenn Du das dann immernoch brauchst, besorg ich mir mal die Spezifikationen und versuch mich mal an nem Booster-Device ;) Auch eine Idee wäre ein FDISK.device mit FAT12.handler - dann wäre diese Seite auch abgedeckt :)

  • Hy, natürlich brauchts den Booster net, wär nur witzig, da man dann total faul alles immer zusammengestöpselt lassen kann. Dann muss ich nicht immer meine Platte ausbauen ;)
    Grad such ich aber verzweifelt mein MP2, da ich gerade mit dem alten 6128 was machen will, der aber die dummen 12V braucht :(
    Ich muß mich an der nase fassen und endlich mal meine 3" zum PC bringen, es geht zwar galub ich noch alles, aber die Zeit nagt halt doch arg an den Daten...
    Servus
    Tolkin

    Wie man in den Wald hineinschreit...

  • Und demnächst kommt nochwas raus. Nachdem ich mich so mit FAT16 (eher mit Windows als mit FAT16) rumschlage, und der PC sich weigert, eine 500 MB große Partition (die erste und einzige auf der HD) mit Fat16 zu formatieren, war ich etwas ungehalten.


    Also hab ich mal überlegt, wie man seine bisherigen Daten sichern kann bzw. Dateien mit dem PC austauschen kann. Ich hab mich daher nochmal etwas mit x86-Asm und dem BIOS beschäftigt. Herausgekommen ist


    [Blockierte Grafik: http://www.geocities.com/timo_brueggmann/bfs16.jpg]


    Mit Hilfe dieses Tools wird man demnächst schnell und einfach Daten austauschen können - zumindest beim Umsteigen von BDOS V1.6x nach V2.0 wird es ggf. zum Einsatz kommen ;)

  • So. Langsam wirds.


    Heute durchgeführt: Bugfix beim Umrechnen von CHS->LBA (der Compiler mag es nicht, das man LongInts Ergebnisse zuweist, die auf WordVar/ByteVars-Formeln basieren. Er meckert nicht, sondern kürzt die LongVar einfach auf Word-Größe... Was sagt man dazu...


    Desweiteren konfiguriert sich das Tool nun, bis auf die Harddisk-Unit, selbst. Allerdings kann es u. U. auf manchen PCs probleme damit geben, weil hier die verschiedenen BIOS-Versionen abweichen. Aber schauen wir mal ;)


    Weiter wurden hinzugefügt:
    UNIT x (wechseln der Harddisk)
    CD xxx (BDOS-Pfad ändern)
    MD xxx (BDOS-Verzeichnis erstellen)


    Jetzt kommt der interessante Teil - das Kopieren von Daten BFS16<->PC ;)

  • News: Hinzugefügt PUT - damit kann man Files von PC auf die CPC-Platte kopieren. Hat allerdings noch nen Bug bei manchen Files, den ich bisher noch nicht gefunden habe. Der Compiler treibt mich noch in den Wahnsinn - Teilweise liegts wohl auch an dem. Der kann wohl irgendwie nicht mit verschiedenen Variablen rechnen.


    So wird aus z.B.WordVar=ByteVar*5 einfach die WordVar als ByteVar gesehen und das Ergebnis stimmt nicht mehr. Muss wohl Programmteile nochmal machen :(


    Ansonsten hab ich durch Zufall entdeckt, das das BIOS bzw. Windows recht clever ist und externe (USB-) Datenträger als richtige HD angesehen werden. Somit dürfe es wohl auch mit Speicherkarten (falls man die am CPC betreibt) und externen Kartenlesern klappen.

  • So. Beschreiben und Formatieren einer BFS16-Partition nun möglich. Fehlt eigentlich nur noch das Auslesen. Demnächst gibts ne Testversion zum DL. Überarbeite nur grad die HP.

  • <!-- m --><a class="postlink" href="http://forum64.de/wbb2/thread.php?postid=164866#post164866">http://forum64.de/wbb2/thread.php?posti ... post164866</a><!-- m -->


    Dort gibts V0.4 zum download. Schreiben von PC->BFS16 möglich. Umgekehrt geht noch nicht.


    Bekannte Bugs: Eventuell kann ein Datenblock "verloren" gehen. Nach Löschen aller Dateien kam es bei mir einmal vor (am CPC), das ein Block nicht mehr genutzt werden konnte.

  • Ein paar Befehle:


    CD <name> wechselt das Verzeichnis auf der BDOS-Platte (es sind noch keine komplexen Pfad-Angaben erlaubt, nur ein Name, / oder :).


    LCD <name> wechselt das DOS-Verzeichnis (PC). Ohne Parameter wird er aktuelle Pfad angezeigt.


    PUT <files> kopiert Dateien von DOS auf BFS16. PArameter kann auch Universalzeichen enthalten. Achtung: Ein Schreibschutz der Dateien verhindert das Kopieren ("Error while opening").


    BPUT <files> - Wie Put, aber es wird nach Verzeichnissen gesucht - diese auf BFS16 erstellt und der Inhalt (bis jetzt ohne Sub-Dirs) kopiert.


    INIT - Formatiert die aktuelle BFS-Partition


    PART <nr> - Zeigt (kein Parameter) oder wechselt die Partition(en)


    DIR - Zeigt Inhalt der BFS16-Platte


    LDIR - Zeigt Inhalt (DOS). Als Parameter sind alle vom DOS-Befehl "DIR" bekannten PArameter erlaubt (z. B. LDIR *.BAT /W).


    EXIT - Beendet das Programm


    DEL <files> - Löscht Dateien (BFS16). Achung: Keine Rückfrage! Universalteichen erlaubt.


    MD/LMD name - Verzeichnisse erstellen (BFS16/DOS).


    RD name - Leere (!) Verzeichnisse löschen (BFs16)



    Das sollte erstmal reichen :)


    Nochmal: Es erscheinen (außer bei INIT) keine Rückfragen! Also immer sicher sein, was man tut ;)


    Ein versteckter Gruß ist auch drin. :D

  • Neuerung: Habe heute Noob Inc. aufgelöst. Da ich in letzter Zeit sowieso nur noch als "ein-mann-unternehmen" unterwegs war, ist eine Group sowieso überflüssig. Da sich mein PC immernoch weigert, FAT16 zu formatieren und ich keine Lust habe, die Platte(n) ständig hin- und herzubauen, habe ich mir eben gerade CF-Karten, Kartenleser (USB) und IDE-CF-Adapter für den CPC bestellt. Und wenn ich dann mal endlich wieder Lust habe, mach ich auch mal an V2.0 weiter. Allerdings: Das wird dann definitiv das letzte CPC-Projekt.

  • Hy, warum den immer letztes Projekt...
    lass sowas doch einfach offen, dann mußt du a) dich nicht immer selbst damit beschäftigen wie du dich selbst dir gegenüber verpflichtest. b) Wenn du glaubst damit kannst du dich vor CPCischen Einfluss, Meetings oder sonstwas drücken, kannste das vergessen, wir wissen wo du wohnst, und im schlimmsten Fall hohlen wir dich wenns auf ein Meeting geht. Wenn du dich dann versteckst, locken wir mit lecker Bier und anderen köstlichkeiten....
    Du kommst halt nicht aus ;)

    Wie man in den Wald hineinschreit...

  • LOL Nee, mit den Meetings is schon ok ;) Nur: Man merkt halt auch, wie man immer weniger Ausdauer hat ;) Deshalb halte ich das mal als letztes Projekt fest (unabhänging davon heißt das ja nicht, das jetzt komplett mit dem CPC schluss ist) :)

  • Zitat von &quot;Brueggi&quot;

    Ein versteckter Gruß ist auch drin. :D


    Thanx und zurück :) Schade, daß ich das mit meinem Notebook nicht benutzen kann. Wird echt Zeit, daß BDOS FAT kann, dann kann's hier richtig abgehen! :P


    CU,
    Prodatron

  • Jo, aber wenn das so weiter geht, dann mach ich echt nix mehr - das ist der helle wahnsinn mit der bürokratie hier... ich warte immernoch auf mein geld (du erinnerst dich?) und mittlerweile sind es schon 2 monate, die der staat mir ausbezahlen muss - dazu kommt noch, das mir der arbeitgeber, bei dem ich mir was dazuverdiene, auch schon einen monat schuldet (und das nach 2 monaten arbeit - sehr gut!) - alles in allem echt klasse, wenn man tankt, sich was zum essen kauft und das geld dann nicht mehr für die miete reicht :evil:
    Man wird also bestraft, wenn man was machen will.


    So.. jetzt hab ich mal etwas dampf abgelassen....



    Jo, aktuelle Windosen haben probleme mit dem LBA-BIOS - scheinbar "sperrt" Windows den Zugriff. Unter 98 gehts :D XP und Vista verweigern die LBA-Funktionen und tun so, als sei ein CHS-Only-BIOS verbaut :D

  • So. Nebenbei: Ich hab ja mal an einem Modul für den Plus gearbeitet (man sollte da mehrere Spieleroms usw. drauf machen können und per Menü auswählen) - wie aus so vielen Sachen is da natürlich nix mehr weiter gemacht worden :D Trotzdem: Für alle die nen Plus haben: Ich hab das Menü "extrahiert" und es HD-Tauglich gemacht. Das heißt: Bindet man das Menü z. B. per AutoBoot unter BDOS ein, kann man seine lieblingssoftware per Joystick auswählen und starten. Dabei wird im hintergrund ein Plus-Raster-Farbverlauf (beliebig überschreibbar mit eigenen Farben) und unten rechts ein 64*64 großes 16-farbiges Sprite-Bildchen (auch beliebig ersetzbar) dargestellt.


    Es lassen sich bis zu 22 Programme auswählen (bequem per BASIC-DATA-Zeilen er-/einsetzbar). Wenn ich meine Seite überarbeitet habe (vielleicht am WE wieder on), wird man sich das runterladen können.


    P.S.: Das Menü verriegelt den ASIC nach der Auswahl wieder!
    P.P.S.: Nachdem schon einige Spiele am Plus nicht liefen, erstelle ich gerade eine CPC Plus-KKompatibilitäts-Liste - wer also noch "Problemfälle" kennt, immer her damit - die werde ich in die Liste aufnehmen.

  • @Brueggi: Hoert sich super an :-)! Ist das fuer die Cartridge gewesen? Da gabs mal was von dem Autor des No$CPC Emulators. Mit dem Programm konnte man afaik DSK Images in ein Plus ROM bringen und dann im Emulator verwenden.


    @Prodi: Hmm, das ist mal eine interessante Frage. Im Notfall resetten ;-).

  • Ja, das sollte für Cartridge sein. :) Aber mehr als ein Menü is nicht rausgekommen.


    Der Plus lässt sich genauso verriegeln, wie man ihn entriegelt - nur eben das letzte byte der Unlock-Sequenz weglassen.

  • Hi,
    bisher hatte ich immer eine alte Festplatte mit Symbiface II am laufen unter BDOS. Nun habe ich mal versucht eine 8mb CF Karte dranzuklemmen mit dem passenden CF Karten Adapter. Leider hat BDOS probleme beim setup mit der Diskette A, es hört bei 36% auf während des setups und dann tut sich nichts mehr. Ich habe es auch mit einer 36mb Karte probiert war ebenfalls der gleiche Fehler nach wiederholten setup versuch ging es dann zwar, aber wenn ich versuche ein Spiel mit |dcopy,"*.* zu kopieren friert die Karte immer ein. Kann mir da jemand weiterhelfen? :roll: