Parameterabfrage in CP/M...

  • Hallo.


    Meine Diskettenformatierroutine hab ich in mein Monitorprogramm im Eprom integriert. Um sie auf zu rufen, muß ich nur die Laufwerksnummer (0-3) in das Register c schreiben, dann die Routine aufrufen und schon wird am gewünschten Laufwerk die Diskette formatiert.


    Ich will es jetzt etwas komfortabler umsetzen, wie zB bei MS-DOS. Wie frage ich zb. das "A:" bei "FORMAT A:" ab ? Also mit anderen Worten, wie frage ich einen Parameter direkt schon beim Aufruf des Programmes ab ? Wo liegt dieser Buffer im CP/M-80 ?


    Ich stelle mir das in etwas so vor:



    Ich hab es jetzt stark vereinfacht dargestellt in dem Code. Da käme natürlich noch eine Sicherheitsabfrage und eine Trackanzeige rein. Außerdem würde es erst abfragen, ob nach dem Parameter bzw in dem Byte danach ein ":" ist und ob der Parameter gültig ist und dementsprechend einen Fehler ausspucken, wenn dem nicht so wäre.

    Mein einziges Problem ist die Parameterabfrage aus der Kommandozeile..

    Vielleicht hat da jemand eine Idee ?


    Vielen Dank


    Gruß Jan

    3 Mal editiert, zuletzt von Jan1980 ()

  • Zitat

    Aufgrund einer technischen Störung sind leider alle Postings zwischen dem 16.11. und 23.11. verloren gegangen.

    Deshalb stelle ich den Beitrag nochmals rein:


    Zitat von Jan1980

    Mein einziges Problem ist die Parameterabfrage aus der Kommandozeile..

    Vielleicht hat da jemand eine Idee ?


    Auszug aus einer CP/M-Doku:


    Übergabe von Parametern an CP/M-Programme


    Den schon mit dem CP/M-Betriebssystem mitgelieferten COM-Programmen können Sie Parameter übergeben, indem Sie hinter dem Programmnamen noch weitere Worte eintippen. Bei Ihren selbstprogrammierten COM-Programmen ist das ebenfalls möglich.


    Der Standard – Datenpuffer


    Der Console-Command-Processor wandelt die Zeichen, die hinter dem Programmnamen eingegeben wurden, zunächst in Großbuchstaben um. Diese werden dann ohne weitere Veränderung im Speicherbereich ab der Adresse 0081h abgelegt. Danach folgt ein Byte mit dem Wert Null. Der Wert der zwischen dem Ende der Eingabe und der Adresse 0100h liegenden Bytes ist undefiniert. In die Adresse 0080h wird die Länge der Eingabezeichenkette geschrieben. Nach dem Aufruf eines COM-Programmes steht die Eingabezeile immer noch in diesem Speicherbereich. Das COM-Programm kann also bedenkenlos darauf zugreifen.


    Wenn Sie also etwa 'test paraml param2' eingeben, wird das Programm TEST.COM gestartet. Es findet dann im Speicher folgende Werte:


    Inhalt

    14  ’ ’ ’P’ ’A’ ’R’ ’A’ ’M’ ’1’ ’ ’ ’P’ ’A’ ’R’ ’A’ ’M’ ’2’ 0

    80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh 8Eh 8Fh

    Adresse


    Die Zahl 14 gibt die Anzahl der ab der Adresse 81h stehenden Zeichen an - wortwörtlich die Eingabe. Die danach folgenden Bytes haben undefinierte Werte. Beachten Sie, dass der Speicherbereich ab der Adresse 80h gleichzeitig

    der Standard-Datenpuffer für die Disketten-Ein-/Ausgabe ist. Wenn Sie die Eingabe noch verwenden wollen, muss vor dem ersten Diskettenzugriff also entweder die Eingabe in einen sicheren Bereich kopiert oder der Datenpuffer in einen anderen Bereich gelegt werden. Da die letzten 2 Bytes des Datenpuffers zur internen Verarbeitung der Zeile benötigt werden darf die Eingabe die Länge von 125 Zeichen nicht überschreiten.


    Grüße, PAW

  • Hier eins meiner Lieblingsbücher :)


    CP/M 2.2 Assembler-Listing 1.Auflage 1985.


    Das vorliegende Buch bietet nun erstmals einen Einblick in die inneren Ablaeufe des CP/M 2.2 und beschreibt ausfuehrlich die Arbeitsweise dieses Betriebssystems. Neben einer Beschreibung der internen Datenformate und der Diskettenparameter wird jede BDOS-Funktion in ihrem Ablauf dokumentiert. Daran schliessen sich die kommentierten Source-Listings der beiden CP/M-Teile CCP und BDOS an. Fuer diejenigen Anwender, die sich ein CP/M-BIOS selber schreiben wollen, werden noch Tips und Tricks zur Verbesserung des CP/M 2.2 gegeben.

    Mit freundlichen Grüßen


    fritz

    • Offizieller Beitrag

    Und den Link noch zur Vollstaendigkeit:


    http://www.ndr-nkc.de/download/anl/CPM22_ANL.PDF

    • Offizieller Beitrag

    Gibt es denn an der Stelle Unterschiede zwischen CPM 2.2 und 3 ?

  • Gibt es denn an der Stelle Unterschiede zwischen CPM 2.2 und 3 ?

    Ja.... Banking, Multisector, mehr BIOS Funktionen, Begrenzung der Harddisk auf 8MB entfallen, verbesserter Sector Blocking/Deblocking Algorythmus,

    der CCP ist ein eigenständiges Programm, kein CTRL-C bei Diskettenwechsel notwendig....


    Ich muss mal nach einer Gegenüberstellung suchen., aber CP/M+ ist auf jeden Fall wenn möglich Vorzuziehen


    siehe c't 7/85 - 2/86



    http://www.homecomputerworld.at/literatur/cpc-bücher/CPM-Plus.pdf

    • Offizieller Beitrag

    Ja.... Banking, Multisector, mehr BIOS Funktionen, Begrenzung der Harddisk auf 8MB entfallen, verbesserter Sector Blocking/Deblocking Algorythmus,

    der CCP ist ein eigenständiges Programm, kein CTRL-C bei Diskettenwechsel notwendig....

    Das ist klar.


    Ich meinte mehr aus der Anwendungsprogrammierung. Z.B. die Parameteruebergabe.

  • Um den Thread wieder zu komplettieren. Letzten Endes hatte ich eine funktionierende Routine geschrieben. Ein paar kleine Fehler waren am Anfang noch drin, mit Funkenzupfer´s Hilfe konnte ich alles lösen.

    Die Routine schreibt 0 für Laufwerk A: bzw. 1 für Laufwerk B: in das C-Register und ruft dann die Formatierroutine fmtdsk im Eprom auf.

    Nachdem man im CP/M "format a:" bzw. "format b:" eingibt, kommt eine Sicherheitsabfrage und dann wird je nach Auswahl formatiert. Fehlt der Parameter oder es steht da ein falscher Parameter, kommt ein Fehlertext.



    Gruß Jan