Suche CP/M 2.2-Tool zum sektorweisen Lesen/Dumpen von Disketten via BIOS

  • Quote from gpospi

    Seid Ihr denn sicher, dass es ein Fluxcopy Software-Problem und kein Hardware-Problem (ungleiche Spurlage der Laufwerke, fehlerhaftes Medium) ist?

    Aquarius hat schon mehrere Laufwerke versucht. Liegt nicht an Spurlage. Ob er nur mit Eigenbau Disketten getestet hat, weiß ich nicht. Der Test erfolgt mittels Kopieren der Disk auf dem Zielsystem auf ein anderes Laufwerk.


    Das Problem scheint bei der Precompensation zu liegen. Questar verwendet ja MFM. Die Precomp beginnt offenbar schon ab Track 25. Wenn man die Fluxlängen analysiert, fällt auf, dass es beim Einlesen der Originaldisk (testen meist mit CP/M) starke Längenverschiebungen bei den höheren Tracks existieren, so wie man sie beim Schreiben erwarten würde. Beim Lesen sollten sie bereits kompensiert sein, was aber hier nicht der Fall ist. Als ob sie überkompensiert wären. Die mit FLUXCOPY neu geschriebenen verhalten sich eher wie zu erwarten wäre, also beim Lesen gibt es Fluxlängen die dem Standard entsprechen (4-6-8µsec). Das macht aber offenbar am Originalsystem Probleme. Deshalb versuchen wir herauszubekommen, bei welchen Fluxkombinationen die Probleme auftreten.


    Grüße, PAW

  • Hallo kkaempf,


    hier mein Testergebnis: Die Ausgabe ist durch den Patch unbenutzbar geworden.


    Der Versatz in den Zeilenumbrüchen ist immer noch drin. Jetzt löscht er den Bildschirminhalt aber nicht mehr und schreibt alles ineinander.


    Vielleicht muss es erst schlechter werden, um dann zum Ziel zu kommen?::ghost::


    Ich habe Fotos gemacht und lade diese hoch, falls nötig. Ich schreibe dir eine PM, da das Thema hier Offtopic ist.

  • Quote

    218-aaccc077ffbd16980040e2cffbccc4c3bf48ab27.jpg

    Zitat von helwie44

    ... muss man sich sicher dann ein "WUNSCH_PROGRAMM" sowas selber bauen.


    PAW: Das "WUNSCH_PROGRAMM" wollte ich mir ersparen.

    Da die anderen Möglichkeiten (z.B. DPATCH) nicht zum Ziel führten, habe ich mein kleines "WUNSCH_PROGRAMM" zusammengebaut.


    Besten Dank auch an @kkaempf für das von ihm beigesteuerte Tool!


    Hier ist das kleine Tool, mit dem man unter CP/M 2.2 das Memory und Disksektoren dumpen kann. Die Floppy-Zugriffe (nur lesend) erfolgen über das BIOS (welches auch von CP/M verwendet wird). Es können die Laufwerke A. bis D: angesprochen werden. Das Tool ist für Floppy entwickelt worden. Ob es auch mit einer Harddisk funktioniert, habe ich nicht probiert.


    DDUMP040.zip



    Hier eine kurze Beschreibung der Möglichkeiten:


    DDUMP.COM wurde mit TURBO PASCAL 3.0 entwickelt. Es ist unter CP/M 2.2 lauffähig.

    Es verwendet nur ganz wenige Bildschirm Steuerzeichen, wie CR, LF, und BS und sollte daher für die meisten Systeme verwendbar sein!


    M)em fragt nach Adresse und dumpt 8 Zeilen zu je 16 Bytes. Schaltet auf Memorymodus um.


    0)1..4 speichert eine Memoryadresse in Speicher 1 bis 4. Aufruf mit 0 und dann 1 bis 4 zur Auswahl. Wird keine Adresse angegeben, dann speichert die aktuelle Memoryadresse.


    1)..4 ruft Memoydump mit der jeweilig gespeicherten Adresse 1 bis 4 auf. Sonst wie Mem


    A)..D) selektiert jeweiliges Laufwerk und schaltet auf Diskmodus um


    T)rack selektiert einen Track (vorher Laufwerk selektieren, geht nur im Diskmodus) ACHTUNG! Prüft nicht auf gültigen Track!


    S)ec wählt einen Sektor aus (vorher Laufwerk und Track selektieren, geht nur im Diskmodus) ACHTUNG! Prüft nicht auf gültigen Sektor!


    I)niCheck führt ein paar Initial Checks aus (optional) Zeigt, ob das BIOS richtig aufgerufen wird.


    R)ead im Memorymodus ... dumpt aktuellen Record

    R)ead im Diskmodus ... dumpt aktuellen Sektor


    N)ext im Memorymodus ... dumpt nächsten Record, stellt Memoryadresse weiter

    N)ext im Diskmodus ... dumpt nächsten Sektor, stellt Sektoradresse weiter


    P)rev im Memorymodus ... dumpt vorigen Record, stellt Memoryadresse zurück

    P)rev im Diskmodus ... dumpt vorigen Sektor, stellt Sektoradresse zurück

    + im Memorymodus ... dumpt ab zweiter Zeile, stellt Memoryadresse weiter (scroll up)

    + im Diskmodus ... stellt auf nächsten Track


    - im Memorymodus ... dumpt ab voriger Zeile, stellt Memoryadresse zurück (scroll down)

    - im Diskmodus ... stellt auf vorigen Track


    Z)ero füllt einen Speicherbereich mit einem Füllbyte. Es wird nach der Startadresse, Anzahl Bytes, sowie nach dem Füllzeichencode gefragt. Wurden die 3 Werte schon einmal eingegeben, dann kann die Füllung mit den gleichen Parametern wiederholt werden, ohne diese nochmal eingeben zu müssen. VORSICHT! Es erfolgt keine Prüfung, ob der Bereich geändert werden darf oder nicht. Kann das System zum Absturz bringen!


    F)ind hier kann eine Suchsequenz eingegeben werden, nach der im Speicher gesucht wird. Es können 1 bis 16 Bytes als Hexcode spezifiziert werden. Wurde noch kein Suchcode eingegeben (oder wurde gelöscht), dann wird als Defaultwert der Anfang des DDUMP-Diskettenpuffers (bei Lesen mit Read) vorgeschlagen. Der Wert kann mit der BS-Taste (Backspace) zeichenweise gelöscht werden. Auf manchen Systemen kann mit der ESC-Taste der komplette String gelöscht werden. Die Suche beginnt bei der aktuellen Memoryadresse+1. Wird der Wert gefunden, dann wird ab dieser Adresse gedumpt. HINWEIS: es kann vorkommen, das der gesuchte String mehrmals im Speicher vorkommt. Die Programme übergeben manchmal Parameter am Stack, wo die Daten dann stehen bleiben, oder sind in diversen Variablen abgelegt, etc.


    >)FindNext sucht das nächste Vorkommen des Suchstrings, sonst wie Find.


    Q)uit beenden des DDUMP-Programms



    Hinweis: Im CP/M 2.2 sind die Records/Sektoren immer 128 Byte lang. Die physischen Sektoren auf den Disketten können auch andere Größen haben! (z.B.: 256, 512, 1024 Bytes). In diesem Fall greift das BIOS nur einmal zu und liefert dann die Daten (ohne weiteren Zugriff) bis andere Daten benötigt werden, die noch nicht im BIOS-internen Puffer abgelegt sind. Den BIOS-internen Puffer kann man mit der Find-Funktion suchen und anzeigen lassen. Dazu einen Sektor lesen und dann mit F die Hexfolge suchen. Diese kann dann mehrmals im Speicher stehen (einmal im DDUMP-Diskettenpuffers und im BIOS-Puffer). Mit > kann man das nächste Vorkommen im Speicher suchen. Der DDUMP-Diskettenpuffers hat immer 128 Byte, der BIOS-Puffer entspricht meist der physischen Sektorlänge.




    Möglicher Verwendungszweck: Fehleranalyse bei FLUXCOPY-Dateien


    Um die genaue Fehlerposition innnerhalb eines, dem Inhalt nach bekannten Sektors, feststellen zu können, war es nötig, die gelesenen Daten anzeigen zu können, auch wenn ein CRC-Fehler auftrat. Da oft keine Daten angezeigt werden (nur Fehlermeldung), wenn ein CRC-Fehler auftritt, war unklar, wo der Fehler lag.


    Hier der erwartete Inhalt:



    Das ist der tatsächlich gelesene Inhalt (hier auf einer PHILIPS P2500, MFM-Formatierung):


    Der Unterschied liegt nur in einem Byte (gelber Kreis).


    Um diesen Fehler zu provozieren, wurden im FLUX-File zwei aufeinanderfolgende Fluxintervalle vertauscht (kurz, mittel wurden auf mittel, kurz verdreht). Dadurch stimmt der CRC nicht mehr.



    Wie immer: die Verwendung des Tools erfolgt auf eigene Gefahr!



    Grüße


    PAW

  • Nicht unter 8080/8085 Chip cp/m Maschinen


    Dein „Wunsch_Programm“ habe ich mal auf einer TA alphaTronic P2U, klar für 100h TPA versucht zu starten.

    In deinem PASCAL-Programm habe ich schnell Z80 Instruktionen mit dem SID.COM gesehen.

    Hier ist zudem noch ein 8085 verbaut. Es sind ja 12 CODE in der CODEMATRIX beim 8080

    als NOP.


    Der 8085 benutzt die 12 anders mit undokumentierte Intel-Instruktionen!!


    DAHER SCHADE nur dein Programm unter einer Z80 - klar ablauffähig!


    Erst wenn ich ziemlich an den Anfang der Beiträge blätterte „zeigt …. PASCAL Z80 … die Bestätigung.


    Zusatz FRAGE:

    Haste du die Speicherlage des cp/m Bios-Vektor dynamisch beim Startvorgang geholt und verwendet? Dann sollte das Programm ja unter jedem cp/m aber mit einem Z80 verbaut ablaufen.

  • Experiment mit READ-TRACK Floppydisk


    Da hier offenbar fehlerhafte SECTOREN CRC-Fehler gesucht und gedumpt PAW werden sollen -

    habe ich vor einiger Zeit in einem


    thread "Triumph Adler" einiges über den Bereich:


    READ TRACK (Assembler-Eben) bearbeitet;

    Eine Spur (alle Rohdaten mit sync, gap, cmd, data usw. mit dem CRC je SECTOR..) in den Speicher zu lesen.

    Auch eigene Assemblerroutinen zur Nachrechung aus richtigen Rohdaten entsprechend ein 16 Bit CRC


    Generatorpolynom:
    Aus den Datenblätter vom 1791Cpip steht das folgende Polynom.

    CRC-CCITT (CRC-16) für Disketten G(x):: = X16 + X12 + X5 +1;


    selbst zu berechnen / nach zu rechnen.

  • Quote from helwie44

    In deinem PASCAL-Programm habe ich schnell Z80 Instruktionen mit dem SID.COM gesehen.

    Ich weiß nicht, ob TURBO PASCAL 3.0 auch auf 8080 lauffähig ist. Sollte das der Fall sein, könnte man DDUMP eventuell modifizieren. Ich habe in einigen Inline-Befehlen Z80-Befehle verwendet. Die könnte man vermutlich durch 8080-Befehle ersetzen.


    Quote from helwie44

    Zusatz FRAGE:

    Haste du die Speicherlage des cp/m Bios-Vektor dynamisch beim Startvorgang geholt und verwendet? Dann sollte das Programm ja unter jedem cp/m aber mit einem Z80 verbaut ablaufen.

    Die Adresse BIOS Vektor Tabelle wird aus Speicherplatz 01 und 02 geholt und sollte somit flexibel sein. Die Adresse der jeweiligen Funktion (FuncAd) wird wie folgt ermittelt:


    Quote from helwie44

    Da hier offenbar fehlerhafte SECTOREN CRC-Fehler gesucht und gedumpt PAW werden sollen -

    habe ich vor einiger Zeit in einem

    Aquarius und ich haben das Tool für Tests mit dem BULL Questar in Verbindung mit FLUXCOPY-Disketten benötigt. Dabei ging es nicht um die CRC-Berechnung (bei Questar gibt es keinen CRC, sondern zwei 8-Bit Checksummen). Es ging darum Sektoren auf kopierten Disketten auf dem Questar zu finden, die fehlerhaft gelesen werden, also die Checksumme nicht stimmt. Die Berechnung der Checksumme und Fehlererkennung überließen wir dem BIOS von Questar. Für uns war es interessant, an welcher Stelle im Bitstrom ein Fehler auftritt. Daraus kann man Rückschlüsse auf problematische Bitkombinationen ziehen. Bestimmte Bit-Kombinationen benötigen bei MFM-Formaten eine Write Precompensation. Wir wollten wissen, wo das Problem liegt.


    Mit dem Tool DDUMP kann man sektorweise durch den Track blättern. Tritt ein Fehler auf, dann biept das Programm und man kann den Sektor näher ansehen. Da wir die kopierten Disketten untersuchten, wussten wir ja wie der Inhalt auszusehen hat und konnten so Vergleiche anstellen.


    PAW

  • Weil es für meinen Boss mit 8085 Prozessor auch interessant wäre, habe ich mal recherchiert. Die Turbo Pascal Versionen 1 und 2 waren auch nicht für die alten Intel Prozessoren entwickelt worden. Gerüchteweise gab es eine spezielle Version.

  • Der gute alte MI-C Compiler begnügt sich mit einem 8080. Leider habe ich kein echtes CP/M-System. Sonst wäre die Motivation sicher groß genug, das mal in C zu implementieren. ;)

    i-Telex 211230 dege d

    http://www.marburger-stammtisch.de


    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."

  • Leider habe ich kein echtes CP/M-System

    Was bedeutet das bei dir?



    Ich habe im Datenpool (Sysquest - Platten) einen ATZTEC - 8080 C-Compiler und mit allen Quellen um jedes Element der C-Biblothek ansehen/anpassen und mehr. Die Elemente sind Teile in Assembler und selbst in C. DAS ist optimal zu einer Hardwareanpassung.

    (Nur der C-Compiler ist für eine TPA 100h als .COM File vorhanden)


    Als vorgemerkte BAUSTELLE:

    Für z.B. eine alphaTronic P2 werde ich eine C-BIB zur Ausführung von C-Programmen auf eine TPA 4200h zu benutzen. Leider ginge es nur ein C-Programm unter dem ATZTEC-compiler für ein TPA100 cp/m System.


    Der ATZTEC-C 8080 erzeugt ein .ASM oder .MAC . Früher habe ich sehr viele Anwendungen mit dem C-Compiler erarbeitet.

  • Leider habe ich kein echtes CP/M-System

    Was bedeutet das bei dir?

    Ein historisches System mit echten Laufwerken. Also keine Emulation auf moderner Hardware.

    Ich will damit Emulationen nicht abwerten. Das ist bei mir einfach eine Frage der Priorisierung. Ich habe soviele Projekte auf dem Tisch, dass ich mich mit C-Programmierung unter CP/M im Moment nur dann beschäftigen würde, wenn ich mich dabei mit realer Hardware beschäftigen könnte. Im Moment sind jetzt hier aber erstmal die PCs dran.


    Mit Aztec-C habe ich früher auch mal gearbeitet. Aber ich glaube, das war schon unter MS-DOS. Falls es eine MS-DOS-Version gab. :grübel:

    i-Telex 211230 dege d

    http://www.marburger-stammtisch.de


    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."

  • Weil es für meinen Boss mit 8085 Prozessor auch interessant wäre, habe ich mal recherchiert. Die Turbo Pascal Versionen 1 und 2 waren auch nicht für die alten Intel Prozessoren entwickelt worden. Gerüchteweise gab es eine spezielle Version.

    Das wäre eventuell eine Möglichkeit:

    Pascal/MT+ 5.x (CPM)

    Pascal/MT+ is an ISO 7185 compatible Pascal compiler sold by Digital Research as part of their CP/M product line.

    Minimum CPU
    8080
  • Pascal/MT klingt nicht so, als ob da hinterher ein handliches Tool draus wird. ;)

    Sorry, ich kann mich da an diese p-Code interpretierenden Ungetüme erinnern, die man maximal für Schulungszwecke einsetzen konnte.

    Aber vielleicht ist das bei Pascal/MT ja besser.


    Sind denn damit BIOS-Aufrufe möglich? Ich sehe nur BDOS.

    i-Telex 211230 dege d

    http://www.marburger-stammtisch.de


    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."

    Edited once, last by detlef ().

  • Quote from detlef

    Sind denn damit BIOS-Aufrufe möglich? Ich sehe nur BDOS.

    nicht direkt, aber mittels INLINE-Assembler.


    Ich habe einige Stunden damit verbracht das TURBO PASCAL Programm auf MT+ 5.5 zu portieren. Leider sind die Unterschiede (im Detail) sehr groß. Z.B. keine Strings als Rückgabewert von Funktionen, kein XOR, diverse Shiftbefehle (SHR, SHL) nur als extra Funktionen, etc.

    Des Weiteren kommt die Meldung, dass die Prozedur oder der Programmbody zu groß ist. Das hat das Fass zum Überlaufen gebracht. Ich werde daran vermutlich nicht mehr weiter arbeiten.


    PAW

  • Das bestätigt meine Erinnerung, dass diese Programmierumgebungen nur akademische Bedeutung hatten. Wirklich produktiv arbeiten konnte man damit nicht.

    i-Telex 211230 dege d

    http://www.marburger-stammtisch.de


    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."

  • Wobei es ja nicht an Pascal als Sprache lag. Das hat ja Borland mit dann Turbo Pascal und später Delphi bewiesen. Es braucht eben eine praxistaugliche Entwicklungsumgebung und einen guten Compiler.

    i-Telex 211230 dege d

    http://www.marburger-stammtisch.de


    Douglas Adams: "Everything, that is invented and exists at the time of your birth, is natural. Everything that is invented until you´re 35 is interesting, exciting and you can possibly make a career in it. Everything that is invented after you´re 35 is against the law of nature. Apply this list to movies, rock music, word processors and mobile phones to work out how old you are."

  • Wobei zu DDR-Zeiten recht viel unter SCP in TurboPascal gemacht wurde. Das Handbuch gab es auch als Elektronisches Dokument für WordStar. In der MP gab es auch richtige Lehrgänge für TP und ebenso C (CPM, also auch SCP).

  • DDUMP.COM for 8080 and Z80 CP/M 2.2

    „Und ist der Compiler nicht willig, so brauch ich ... ASSEMBLER“ Frei nach Goethe


    Da wie schon erwähnt, das TURBO PASCAL Programm auf MT+ 5.5 zu Portieren, gescheitert ist, habe ich das Programm komplett neu in Assembler geschrieben und dabei nur 8080 Befehle verwendet.


    DDUMP Vers. 050 for CPM 2.2 - 8080 and Z80.zip


    DDUMP.COM Vers. 050 sollte unter CP/M 2.2 auf 8080 und Z80 lauffähig sein.


    Da ich keine Testmöglichkeiten auf 8080 habe, konnte ich es nur mit Z80 ausprobieren (Philips P2500, CP/M 2.2, Z80).


    helwie44, Aquarius vielleicht könntet ihr das Programm mal auf einem 8080 System testen.


    Das Kommandomenü sieht wie folgt aus:


    M)em, <MXXX0, 0)1..4, 1)..4, DiskA)..D), T)rack, +/- next/prev, Z)ero, I)niChk
    S)ec, R)ead, N)ext, P)rev, E)rrSec, F)ind, >FindNext, Q)uit


    Die Kommandos sind fast identisch mit der PASCAL-Version 040, siehe: KOMMANDOS


    Neue Kommandos:


    < setzt das letzte Hexdigit der Mem-Adresse auf 0

    E liest alle Sektoren auf einem Track, beginnen bei 1, bis ein Fehler auftritt



    Änderungen:


    Bei Eingaben kann mit der ESC-Taste, wie bisher, der komplette String gelöscht werden. Wird bei gelöschtem String die ESC-Taste nochmals gedrückt, wird der String wieder angezeigt, mit letztem Inhalt, aber in der maximal eingegebenen Länge.



    Wie immer: die Verwendung des Tools erfolgt auf eigene Gefahr!



    Grüße


    PAW

  • Hallo PAW,


    ich habe gerade kein Glück mit meinen Olympia Boss...die 8085 Maschine lässt sich nicht starten. :( Als ich sie das letzte Mal genutzt habe, lief sie einwandfrei. Das war aber im Winter und nicht bei so hohen Temperaturen.


    Vielleicht finde ich den Fehler und es ist nur ein Kontaktproblem oder so.


    Wenn sie läuft und ich das erste Mal darauf CPM starte, sollte einem Test von DDump nichts mehr im Wege stehen.


    Gruß Aquarius

  • Hallo PAW - dein DDUMP050.COM erster TEST:


    Bei der TA- alphaTronic unter dem cp/m startet alles normal (als 8080 CODE), ok.


    Offenbar wird immer in jedem TRACK der 1.ter Teil vom HostBUF also 128 nicht als 1 Sector (cp/m) von deimem Programm gedumpt - sondern der zweiter Teil - 128 Byte vom HostBUF als 1 Sector angezeigt (gedumpt)!

    DAS TA alphaTronic P2U physikalisches Diskettenformat ist 256 Byte je 16 Sectoren, Track von 0 bis 39 und zweiseitig.


    Muss ich evtl. etwas anderes einstellen - oder?


    Zum VERGLEICH habe ich den Anfang physikalisch

    Track 0 und Sektor 1 mit dem standard DU.COM (cp/m Disk Utility) gedumpt:

    Mit dem DU Prog. arbeite ich intiutiv - sonst noch mit dem ? werden help - Infos angezeigt!

    Zusatz ist in (runden Klammern) als Erklärungen von mir zugefügt.

    Ich mache also eine weitere Sitzung mit dem DDUMP050.COM - soweit identisch den DATEN-DUMP-Bereich wie zuvor durch zu führen. mombi....

  • So sollte der DUMP bei meiner TA-alphaTronic P2U in der richtiger Sektorfolge zeigen:

    Der BEITRAG zuvor vom DU.COM standard cp/m dump ansehen.



    HIER:

    Nun das PAW Programm als Display-Protokoll als .txt File hier zu sehen und zum VERGLEICH:

    (auch einige Bemerkungen **** helwie in runden Klammern)

    Offenbar ist der 1.er 128 Teil (record sec=1 ) nicht sondern mit dem 2.ten Bereich also als sec=1 angezeigt - oder?

    Wie du genau vorgegangen bist - hast du sicher das DU.COM im weiten WEB - um mal bei die ruhig mit einem Z80 Chip zu testen.

  • Hallo helwie44


    vielen Dank für den ausführlichen Test!


    Die Daten stimmen ja so weit überein. DDUMP050 zeigt nur nicht den ersten physischen Sektor an.


    Ich werde das nochmal am Z80 ausprobieren. Eventuell muss nur die Eingabe für die Sektornummer angepasst werden, damit auch Sektor 0 möglich ist.


    PAW

  • Hallo helwie44


    habe jetzt DDUMP050 nochmal auf der P2500/Z80 CP/M 2.2 ausprobiert.

    Dort liefert Sektornummer 1 den ersten verfügbaren Sektor.

    Es ist bei DDUMP050 möglich bei direkter Eingabe (Befehl S) auch Sektornummer 0 anzugeben. In diesem Fall bringt die P2500 einen ERROR.

    Vielleicht könntest du nocheinmal DDUMP050 ausprobieren und Sektor 0 eingeben. Wäre interessant, ob dann richtig liest, oder ob auch Fehler bringt.


    Welches CP/M läuft auf deiner Maschine?

    PAW