Produktion

QuickCMD

Herunterladen 2011_quickcmd.zip

Mitwirkende

Programm geschrieben von Arnaud Storq (www.norecess.net, 2011)
Mit der Hilfe von Kevin Thacker und Richard Wilson.

Vielen Dank an alle, die mir Probleme mit Version 1 gemeldet haben … Das hat wirklich sehr geholfen, für Version 2 eine bessere Umsetzung zu finden!

QuickCMD V2.3 — EINE NEUE SHELL FÜR DEN AMSTRAD CPC!

Einführung

QuickCMD ist eine neue shell-artige Bedienoberfläche für diskettenbasierte Amstrad CPC-Rechner.

Das ursprüngliche Ziel dieser Software ist es, einen schnelleren Weg zu bieten, den Disketteninhalt durchzusehen und Programme zu starten. Üblicherweise benutzt ein Amstrad-CPC-Anwender die BASIC-Eingabe, um zuerst den Disketteninhalt anzuzeigen und einen Dateinamen zu finden, und startet das Programm dann von Hand. Dieser Ablauf ist zwar in Ordnung und funktioniert, kann aber schnell lästig werden, wenn mehrere Disketten durchzusehen sind.

Zusätzlich bietet dieses Programm einige interessante Befehle zum Verwalten des Disketteninhalts, die von der BASIC-Eingabe aus normalerweise nicht erreichbar sind. Möglich wird das nur durch die hardwarenahe Verwaltung des Disketteninhalts, die Sektoren unmittelbar liest und schreibt, statt die von der Firmware bereitgestellten Funktionen zu benutzen. Viele Formate werden unterstützt, darunter DATA, SYSTEM und PARADOS. Dadurch laufen Diskettenoperationen schneller als jene, die vom BASIC aus erreichbar sind.

Und schließlich geht QuickCMD sehr respektvoll mit dem System um. Es hat einen sehr kleinen Speicherbedarf und lässt sich mit bereits vorhandenen RSXs (Resident System eXtension) leicht erweitern. Es bringt außerdem eine Routine zur Zeichenausgabe mit, die schneller ist als die der Firmware, sodass Befehle in der Regel flotter laufen als ihre Entsprechungen unter BASIC.

Installation

Dieses Programm setzt voraus:

  • einen Amstrad CPC 6128: sowohl klassische als auch Plus-Modelle werden unterstützt. Amstrad CPC 464 mit externem Diskettenlaufwerk werden derzeit nicht unterstützt.
  • eine ROM-Box: solche Geräte sind RAMCARD, MegaFlash, ROMBOX usw. Da QuickCMD als ROM ausgeliefert wird, müssen Sie Ihren CPC um eigene ROMs erweitern können. Mehr zu diesen Geräten finden Sie hier.

Sie können dieses ROM an jedem beliebigen Platz installieren. Achten Sie nur darauf, weder das installierte Vordergrund-ROM zu überschreiben (standardmäßig das BASIC-ROM auf ROM 0) noch das ROM, das die Laufwerksverwaltung übernimmt (standardmäßig das CPM-ROM auf ROM 7).

Einmal installiert, benutzt QuickCMD lediglich &6 Bytes im Speicher für dauerhafte ROM-Daten. Möglich ist das, weil QuickCMD als echtes ROM behandelt wird, der Code also aus dem ROM heraus ausgeführt und nicht bei der Initialisierung ins RAM zurückkopiert wird.

Beim Start belegt QuickCMD dynamisch &328 Bytes an Daten unterhalb der HIMEM-Adresse, die zur Laufzeit als Zwischenpuffer dienen. Nebenbei bemerkt ist es interessant, dass QuickCMD damit tatsächlich weniger Speicher braucht als der gewöhnliche CAT-Befehl des BASIC (der intern &800 Bytes für seinen Katalogpuffer unterhalb der HIMEM-Adresse belegt).

Befehle

Betritt der Anwender die Bedienoberfläche von QuickCMD, sieht er eine Kommandozeile. Wer mit DOS-artigen Systemen vertraut ist, wird den Ablauf wiedererkennen. Befehle müssen von Hand eingetippt werden, damit der Rechner sie ausführt. Bei Befehlen wird Groß- und Kleinschreibung nicht unterschieden.

Die Befehle sind:

  • A: oder B:: Mit A: oder B: wählt der Anwender das entsprechende Laufwerk (Laufwerk A oder B). Alle folgenden Diskettenoperationen benutzen das gewählte Laufwerk.
  • ABOUT: Nennt die Mitwirkenden des Programms. Meldet außerdem den Speicherverbrauch (Adresse und Länge), den die Ausführung von QuickCMD erfordert.
  • CAT: Dieser Befehl verhält sich genau wie der gewöhnliche CAT-Befehl unter BASIC. Er dient der Kompatibilität; andere Programme wie BonnyDOS stützen sich darauf, um den Festplatteninhalt anzuzeigen. Versteckte Dateien werden im Katalog nicht angezeigt. Zum Durchsehen einer Diskette ist dieser Befehl nicht zu empfehlen, nehmen Sie stattdessen DIR.
  • CATART: Dieser Befehl verhält sich genau wie der gewöhnliche CAT-Befehl unter BASIC, setzt den Bildschirm aber zusätzlich auf den Startzustand zurück (blauer Hintergrund mit gelben Buchstaben, im Grafikmodus 1). So lassen sich „Cat Arts“ anzeigen, also Grafikbildschirme, die mit dem CAT-Befehl erscheinen. Nach der Anzeige genügt ein Tastendruck, um zur Standardeinstellung von QuickCMD zurückzukehren. Der DIR-Befehl ruft diesen Befehl intern auf, wenn er ein „Cat Art“ erkennt.
  • DEL: Dieser Befehl löscht eine Datei auf der Diskette. Achtung, es wird keine Bestätigung verlangt!
  • DELROM: Dieser Befehl ist nur mit RAMCARD- und MEGAFLASH-Geräten verträglich. Er leert den Speicher an der angegebenen ROM-Nummer.
  • DIR: Dieser Befehl gibt die Liste der Dateien auf der Diskette aus. Er zeigt nur Dateien des aktuellen Benutzers. Der verfügbare Platz in KB wird ebenfalls gemeldet. Braucht der Befehl für eine lange Dateiliste mehrere Seiten, verlangt er bei jedem Seitenwechsel einen Tastendruck. Es wird nicht nach Dateinamen sortiert; die Dateien erscheinen in der Reihenfolge, in der sie beim Durchgehen der Katalogdaten auftauchen. Der Befehl unterstützt schreibgeschützte und versteckte Dateien. Interessant ist, dass auch versteckte Dateien behandelt und angezeigt werden. Erweist sich der Katalog als „Cat Art“, wird dieser Befehl intern an CATART weitergereicht.
  • DIRALL: Dieser Befehl verhält sich wie DIR, listet aber Dateien ALLER Benutzer auf (von Benutzer 0 bis 15). Das ist nützlich, um Dateien zu finden, die nicht dem aktuellen Benutzer gehören. Der Benutzer einer Datei wird dem Dateinamen vorangestellt.
  • DIRDEL: Dieser Befehl verhält sich wie DIR, listet aber gelöschte Dateien auf. Wurde eine Datei erst kürzlich gelöscht und seither nicht auf die Diskette geschrieben, lässt sich ihr ursprünglicher Inhalt mit dem Befehl UNDEL wiederherstellen.
  • DISCINFO: Gibt Auskunft über das Diskettenformat. Gemeldet werden der Name des Formats, seine Kapazität in KB, die Höchstzahl verwaltbarer Dateien, ob ein- oder doppelseitig sowie die Kennungen von Sektoren und Spuren. Viele Formate werden unterstützt, auch die von PARADOS verwalteten.
  • HIDE: Mit diesem Befehl lässt sich eine Datei im Katalog verstecken. Unter QuickCMD wird sie natürlich weiterhin angezeigt (als versteckte Datei gekennzeichnet). Beim CAT-Befehl wird sie dem Anwender nicht gemeldet (unsichtbar). Versteckte Dateien lassen sich mit dem Befehl SHOW wieder im Katalog sichtbar machen.
  • INFO: Gibt Auskunft über die angegebene Datei. Gemeldet wird ihr Typ (BASIC, PROTECTED BASIC, BINARY und ASCII). Sofern der Typ es zulässt, werden auch die Ladeadresse, die Länge der Datei und ihre Ausführungsadresse gemeldet.
  • PUTROM: Dieser Befehl ist nur mit RAMCARD- und MEGAFLASH-Geräten verträglich. Der erste Parameter ist der Dateiname des ROMs, der zweite die ROM-Nummer, auf die geschrieben werden soll. Die angegebene Datei wird in die ROM-Box geschrieben. Der Anwender wird aufgefordert, den Schreibschalter (DIP) ein- und auszuschalten. Es empfiehlt sich, vor PUTROM den Befehl ROMS zu benutzen, um nicht ein gewünschtes, bereits installiertes ROM zu überschreiben.
  • REN: Mit diesem Befehl wird eine Datei umbenannt. Der erste Parameter ist der neue Dateiname, der zweite der aktuelle Dateiname. Achtung! Der REN-Befehl unter BASIC benutzt die umgekehrte Reihenfolge (alter Name vor neuem). Diese Umkehrung dient der DOS-artigen Kompatibilität.
  • READONLY: Mit diesem Befehl wird einer angegebenen Datei das Schreibschutz-Attribut gesetzt. Als schreibgeschützt markierte Dateien lassen sich nicht löschen, solange das Attribut nicht entfernt ist.
  • READWRITE: Mit diesem Befehl wird einer angegebenen Datei das Attribut Lesen/Schreiben gesetzt (der Standard für eine Datei). So markierte Dateien lassen sich löschen oder überschreiben.
  • ROMS: Listet die im System installierten ROMs auf. Auf einem nicht erweiterten CPC werden standardmäßig ROM 0 (BASIC) und ROM 7 (CPM-ROM) aufgeführt. Es ist nützlich, diesen Befehl auszuführen, bevor man ein ROM in eine ROM-Box schreibt, um zu wissen, welche ROM-Nummer zu benutzen ist. Der Befehl zeigt zu jedem installierten ROM seinen internen Namen, seine Version und seinen Typ (Vordergrund, Hintergrund oder Erweiterung).
  • RSX: Dieser Befehl erlaubt die Ausführung eines RSX. Der erste Parameter ist der Name des RSX, weitere Parameter sind optionale Parameter, die an das RSX gehen. Optionale Parameter werden stets als Zeichenketten behandelt. QuickCMD bietet die Möglichkeit, ein RSX als Befehl auszuführen, weshalb dieser Befehl dazu dient, die internen Befehle von QuickCMD zu übergehen. Ein Beispiel zur Verdeutlichung: Nehmen wir an, das UTOPIA-ROM von Arnor hat ein RSX namens HELP. Tippt der Anwender in QuickCMD HELP, wird der interne HELP-Befehl von QuickCMD ausgeführt. Tippt er RSX HELP, wird der HELP-Befehl von QuickCMD übergangen und das HELP-RSX von Arnors UTOPIA ausgeführt. Ebenso lässt sich RSX DAMS &4000 oder RSX DAMS 16384 eintippen. Und ebenso RSX ERA “FILE .EXT” (alle Zeichen zwischen den Anführungszeichen gelten als ein einziger Zeichenkettenparameter, auch wenn Leerzeichen darin vorkommen).
  • RUN: Dieser Befehl erlaubt die Ausführung einer Datei auf der Diskette. Unterstützte Dateitypen sind BASIC, PROTECTED BASIC und BINARY. Intern greift er auf den RUN-Befehl des BASIC zurück und ist damit zu allen vorhandenen Programmen voll verträglich. Wie beim RSX-Befehl bietet QuickCMD die Möglichkeit, einen Dateinamen als Befehl einzutippen, weshalb dieser Befehl dazu dient, die internen Befehle von QuickCMD zu übergehen. Ein Beispiel zur Verdeutlichung: Nehmen wir an, auf der Diskette liegt eine Datei namens HELP.BAS. Tippt der Anwender in QuickCMD HELP, wird der interne HELP-Befehl von QuickCMD ausgeführt. Tippt er RUN HELP, wird der HELP-Befehl von QuickCMD übergangen und die Datei HELP.BAS von der Diskette ausgeführt.
  • SETUSER: Mit diesem Befehl wird der Benutzer für eine angegebene Datei gesetzt. Der erste Parameter ist der Dateiname, der zweite der Benutzer.
  • SHOW: Mit diesem Befehl wird eine Datei im Katalog wieder sichtbar gemacht. Sichtbare Dateien lassen sich mit dem Befehl HIDE wieder verstecken.
  • UNDEL: Mit diesem Befehl wird eine Datei wiederhergestellt. Der Befehl schlägt fehl, wenn seit dem Löschen der Datei auf die Diskette geschrieben wurde. Gelöschte Dateien lassen sich mit dem Befehl DIRDEL anzeigen.
  • USER: Mit diesem Befehl wird der aktuelle Benutzer gewechselt. Standard ist USER 0. Beachten Sie, dass der aktuelle Benutzer auch im BASIC gilt: Verlassen Sie QuickCMD Richtung BASIC, bleibt der aktuelle Benutzer aktiv.

Tipps & Kniffe

QuickCMD bietet außerdem einige zusätzliche Funktionen, die die Arbeit erleichtern.

TASTENKÜRZEL
Um den Arbeitsablauf möglichst flott zu machen, gibt es einige Kürzel, die die Produktivität steigern:

  • ENTER: Drücken Sie ENTER, während die Eingabezeile leer ist, wird der Bildschirm gelöscht.
  • TAB: Das ist wohl eine der interessantesten Funktionen von QuickCMD. Wenn Sie einen Dateinamen zu tippen beginnen und dann TAB drücken, geht QuickCMD den Katalog durch und versucht, den Dateinamen zu vervollständigen.
  • TAB: Wird TAB gedrückt, während die Eingabezeile leer ist, wird der DIR-Befehl automatisch eingetippt (und ausgeführt).
  • ESC: Wird ESC gedrückt, wird der Inhalt der Eingabezeile gelöscht.
  • ESC oder CTRL+TAB: Werden ESC oder CTRL+TAB gedrückt, verlässt QuickCMD sich Richtung BASIC.
  • Tasten HOCH und RUNTER: Damit bewegen Sie sich durch die Befehlshistorie!

ERWARTETE ARBEITSABLÄUFE
Die obigen Kürzel zeichnen bereits nach, was zu den häufigsten Anwendungen von QuickCMD gehören dürfte. Besonders für Neulinge sollte das interessant sein. Wenn Sie für sich einen üblichen Ablauf finden, der hier nicht aufgeführt ist, melden Sie ihn gern dem Autor dieses Programms!

  • Das „schnelle DIR“: Ist der Amstrad CPC hochgefahren, genügt CTRL+TAB, um QuickCMD zu betreten. Dann führt TAB den DIR-Befehl aus. Hat man eine Datei zum Ausführen gewählt, tippt man die ersten Zeichen des Dateinamens und lässt ihn mit TAB vervollständigen. Zum Schluss ENTER drücken, um die Datei auszuführen. Dieser Ablauf ist ultraschnell; an das Schema CTRL+TAB und dann TAB gewöhnt man sich rasch! Deutlich schneller, als unter BASIC CAT einzutippen, dann mit SHIFT und Pfeiltasten einen Dateinamen auszuwählen, ihn mit COPY zu kopieren, CTRL+Pfeil links zu drücken und schließlich mit CTRL+ENTER die Datei per RUN” zu starten.
  • BASIC ist weiterhin Ihr Freund: QuickCMD ist kein Ersatz für BASIC. BASIC hat wichtige Funktionen, die QuickCMD nicht unterstützt, und umgekehrt. Der schnelle Wechsel von BASIC zu QuickCMD (und von QuickCMD zu BASIC) mit CTRL+TAB wurde bewusst leicht gemacht. Da QuickCMD ein ROM ist, können Sie mit großen BASIC-Programmen oder mit Daten in BÄNKEN arbeiten, ohne dass etwas verändert wird.
  • Empfohlene Fremd-ROMs zur Verwendung mit QuickCMD: QuickCMD fügt sich sehr gut in die ROMs von Arnor ein. Brauchen Sie einen Sektoreditor, nehmen Sie den Befehl DEDIT von UTOPIA. Für einen Speichereditor nehmen Sie MEDIT von UTOPIA. Nehmen Sie PROTEXT, um Ihre Quelldateien zu bearbeiten. Nehmen Sie MAXAM, um Ihre Assembler-Quelltexte zu programmieren. Wenn Sie all diese mächtigen Werkzeuge zusammen benutzen, haben Sie einen wirkungsvollen Weg, mit Ihrem CPC kreativ zu sein. Der Ablauf ist völlig sicher; während der Umsetzung von QuickCMD wurde ausgiebig getestet, um sicherzustellen, dass bei unterschiedlicher Nutzung von HIMEM kein Speicher überschrieben wird.
  • Entdecken Sie Ihre Sammlung neu!: Eine der offensichtlichen Stärken von QuickCMD ist die Fähigkeit, versteckte Dateien auf der Diskette anzuzeigen und schnell Informationen über eine Datei oder ein Diskettenformat zu bekommen. Aus Entwicklersicht macht es Spaß, neugierig darauf zu sein, wie „ordentlich“ ein Programm ist — besteht es aus einer oder zwei Dateien, oder aus vielen kleinen versteckten? Und so weiter. Solche Dinge zeigt der gewöhnliche CAT-Befehl in der Regel nicht.

ÄNDERUNGEN & Geschichte

Version 2.3:

  • Befehlshistorie ergänzt
  • Befehl ROMS: Absturz beim Auflisten von ROMs mit beschädigten Namen behoben
  • Ein weiteres kritisches Problem (die Stabilität betreffend) beim direkten Auslesen des Laufwerks behoben
  • RSX in |Q umbenannt (für einen noch schnelleren Wechsel zwischen BASIC und QuickCMD)

Version 2.2:

  • Unterstützung für Bryce’s MegaFlash ergänzt
  • Befehle RO und RW in READONLY und READWRITE umbenannt
  • Befehl CRTC entfernt
  • Bildschirm auf QuickCMDs Standard zurückgesetzt, wenn ein externes RSX den Videomodus geändert hat
  • DELROM leert ein ROM nun mit dem Wert &FF (zuvor &00)
  • Behoben: Das erste Byte nach HIMEM wurde überschrieben
  • Behoben: Es wird nicht mehr angenommen, dass der Amsdos-Bereich immer bei &A700 liegt

Version 2.1:

  • Behandelt bei allen Befehlen eine fehlende Diskette im Laufwerk korrekt
  • Der Befehl PUTROM prüft nun auf den Dateityp BINARY und zeigt Informationen zu der Datei an, die auf die RAMCARD geschrieben werden soll
  • Der Befehl DELROM wurde ergänzt, um einen ROM-Platz zu leeren
  • DIR (und Verwandte) melden nun bei doppelseitigen Formaten (Parados 80 usw.) die Dateigrößen korrekt
  • Der Befehl RSX nimmt nun ganzzahlige Werte an (dezimal und hexadezimal)
  • Der Befehl RSX nimmt für Zeichenkettenwerte nun Anführungszeichen ” ” an (damit lassen sich zum Beispiel Leerzeichen in Zeichenketten unterbringen)
  • Interne Überarbeitung des Codes für einen kleineren Speicherbedarf

Version 2.0:

Diese Fassung ist eine vollständige Neufassung von Version 1.0. Die ursprüngliche Fassung enthielt zwar bereits die interessanten Konzepte, die dann in Version 2.0 zu finden waren, offenbarte aber auch einige Schwächen:

  • zu groß für das, was es tut: Der größte Teil des Programms war in C geschrieben. Das war zwar produktiver, aber das Programm belegte dadurch zu viel Speicher.
  • ein ROM, das keines ist: Das Programm lag in einem ROM. Bei der Ausführung wurde der Inhalt des ROMs tatsächlich ins RAM kopiert, um dynamischen Speicher benutzen zu können (in ein ROM lässt sich nicht schreiben). Das war ziemlich schlecht, denn das Programm wurde aus BANK &C7 heraus gestartet und benutzte zudem Speicherbereiche ab der festen Adresse &8000.
  • schwache Umsetzung: Das Programm war langsam. Die meisten Diskettenoperationen beruhten auf CAS CATALOG (dem CAT-Befehl), was langsam ist und einen 2-KB-Puffer erfordert.
  • eigener Zeichensatz: Das Programm benutzte einen eigenen eingebauten Zeichensatz. Die Routine zur Zeichenausgabe war effizient, belegte aber viel Speicherplatz.
  • und mehr …: viele kleine Einzelheiten, die die Codebasis ebenfalls verunreinigten.

Statt ein Programm mit so vielen Schwächen weiterzupflegen, fiel die Entscheidung, es mit einem anderen Ansatz vollständig neu zu schreiben. Hier die interessantesten Punkte:

  • Assembler mit C darin: Statt ein C-Programm mit etwas Assembler darin zu schreiben, war es wirkungsvoller, die ganze Anwendung in Assembler zu schreiben und einige höhere Teile in C umzusetzen. Eines der besten Beispiele dafür ist das Auslesen der Sektoren, das mit einem C-struct durch die Dateieinträge geht.
  • ein ROM, das ein ROM ist: Ein echtes ROM zu schreiben erzwang eine dynamische Speicherverwaltung. Diese Technik umzusetzen war zwar interessant, das Bemerkenswerteste daran ist aber, dass die Speicherverwaltung von QuickCMD dadurch bis zum Äußersten optimiert wurde. Die Liste der dynamischen Variablen muss so klein wie möglich bleiben.
  • und mehr …: viele kleine Einzelheiten, die beim zweiten Schreiben plötzlich klarer und weit besser zu pflegen sind.

Version 1.0:

Erste Fassung. Machbarkeitsnachweis. Verhaltene Aufnahme. :)