Crédits
Programme écrit par Arnaud Storq (www.norecess.net, 2011)
Avec l’aide de Kevin Thacker et de Richard Wilson.
Un grand merci à toutes les personnes qui m’ont signalé des problèmes avec la version 1… Cela a vraiment beaucoup aidé à mieux implémenter la version 2 !
QuickCMD V2.3 — UN NOUVEAU SHELL POUR L’AMSTRAD CPC !
Introduction
QuickCMD est une nouvelle interface, à la manière d’un shell, pour les ordinateurs Amstrad CPC équipés d’un lecteur de disquettes.
Le but premier de ce logiciel est d’offrir une façon plus rapide de parcourir le contenu d’une disquette et de lancer des programmes. D’ordinaire, l’utilisateur d’un Amstrad CPC passe par l’invite BASIC pour afficher d’abord le contenu de la disquette, y relever un nom de fichier, puis lancer le programme à la main. Le procédé fonctionne très bien, mais il devient vite fastidieux quand il faut parcourir plusieurs disquettes.
En plus de cela, le programme propose des commandes intéressantes pour gérer le contenu d’une disquette, habituellement inaccessibles depuis l’invite BASIC. Ce n’est possible que grâce à une gestion bas niveau du contenu de la disquette, qui lit et écrit directement les secteurs au lieu de passer par les fonctions fournies par défaut avec le firmware. De nombreux formats sont pris en charge, dont DATA, SYSTEM et PARADOS. De ce fait, les opérations disque sont plus rapides que leurs équivalentes accessibles depuis le BASIC.
Enfin, QuickCMD est vraiment respectueux du système. Son empreinte mémoire est très faible, et il s’étend facilement avec les RSX (Resident System eXtension) existantes. Il embarque aussi une routine d’affichage de caractères plus rapide que celle du firmware, si bien que les commandes s’exécutent généralement plus vite que leurs équivalentes sous BASIC.

Installation
Ce programme demande :
- un Amstrad CPC 6128 : les modèles classiques comme les Plus sont pris en charge. Les Amstrad CPC 464 équipés d’un lecteur de disquettes externe ne le sont pas pour l’instant.
- un boîtier à ROM : de type RAMCARD, MegaFlash, ROMBOX, etc. QuickCMD étant fourni sous forme de ROM, il faut pouvoir étendre son CPC avec des ROMs personnalisées. Plus d’informations sur ces périphériques ici.
Cette ROM peut être installée n’importe où. Veillez simplement à ne pas écraser la ROM de premier plan installée (par défaut, la ROM BASIC, en rom 0) ni la ROM chargée de la gestion des lecteurs (par défaut, la ROM CPM, en rom 7).
Une fois installé, QuickCMD n’occupe que &6 octets en mémoire pour ses données persistantes de ROM. C’est possible parce que QuickCMD est traité comme une vraie ROM : le code est exécuté depuis la ROM, et non recopié en RAM à l’initialisation.
Au lancement, QuickCMD alloue dynamiquement &328 octets de données sous l’adresse HIMEM, qui servent de tampon temporaire pendant l’exécution. À noter, et c’est amusant : QuickCMD prend en réalité moins de mémoire que la commande CAT du BASIC (qui utilise en interne &800 octets de tampon de catalogue temporaire sous l’adresse HIMEM).
Commandes
Quand on entre dans l’interface de QuickCMD, une invite de commande apparaît. Ceux qui connaissent les systèmes à base de DOS reconnaîtront la façon de faire : il faut taper les commandes à la main pour donner ses ordres à l’ordinateur. Les commandes ne tiennent pas compte de la casse.
Les commandes sont les suivantes :
- A: ou B: : en tapant A: ou B:, on sélectionne le lecteur correspondant (lecteur A ou B). Toutes les opérations disque suivantes se feront sur le lecteur sélectionné.
- ABOUT : donne les crédits du programme. Indique aussi l’occupation mémoire (adresse et longueur) nécessaire à l’exécution de QuickCMD.
- CAT : cette commande se comporte exactement comme la commande CAT du BASIC. Elle existe pour la compatibilité : d’autres programmes, comme BonnyDOS, s’appuient dessus pour afficher le contenu d’un disque dur. Les fichiers cachés du catalogue ne sont pas affichés. Cette commande n’est pas recommandée pour parcourir une disquette, préférez DIR.
- CATART : se comporte exactement comme la commande CAT du BASIC, à ceci près qu’elle réinitialise l’écran dans sa configuration de démarrage (fond bleu, lettres jaunes, MODE 1 graphique). Cela permet d’afficher les « cat arts », ces écrans graphiques qui apparaissent avec la commande CAT. Une fois l’écran affiché, une touche suffit à revenir à la configuration d’écran de QuickCMD. Cette commande est appelée en interne par DIR lorsqu’un « cat art » est détecté automatiquement.
- DEL : supprime un fichier sur la disquette. Attention, aucune confirmation n’est demandée !
- DELROM : cette commande n’est compatible qu’avec les périphériques RAMCARD et MEGAFLASH. Elle efface la mémoire au numéro de ROM indiqué.
- DIR : donne la liste des fichiers de la disquette. Elle ne montre que les fichiers du user courant. La place disponible en Ko est également indiquée. Quand la liste est longue et demande plusieurs pages, la commande attend un appui sur une touche à chaque page. Il n’y a pas de tri des noms : les fichiers apparaissent dans l’ordre où ils sont rencontrés lors de l’analyse du catalogue. La commande gère les fichiers en lecture seule et les fichiers cachés — il est d’ailleurs intéressant de noter que les fichiers cachés sont eux aussi traités et affichés. Si le catalogue s’avère être un « cat art », la commande est redirigée en interne vers CATART.
- DIRALL : fonctionne comme DIR, à ceci près qu’elle liste les fichiers de TOUS les users (du user 0 au user 15). Pratique pour retrouver des fichiers rangés ailleurs que dans le user courant. Le user du fichier est affiché en préfixe du nom.
- DIRDEL : fonctionne comme DIR, à ceci près qu’elle liste les fichiers supprimés. Si un fichier vient d’être supprimé et qu’aucun accès en écriture n’a eu lieu sur la disquette depuis, il est possible de récupérer son contenu d’origine avec la commande UNDEL.
- DISCINFO : donne des informations sur le format de la disquette : le nom du format, sa capacité en Ko, le nombre maximum de fichiers gérés, l’information simple ou double face, ainsi que les identifiants de secteurs et de pistes. De nombreux formats sont pris en charge, dont ceux gérés par PARADOS.
- HIDE : permet de masquer un fichier du catalogue. Il reste bien sûr visible sous QuickCMD (signalé comme fichier caché). Avec la commande CAT, ce fichier n’est pas rapporté à l’utilisateur (il est invisible). Les fichiers masqués peuvent réapparaître au catalogue avec la commande SHOW.
- INFO : donne des informations sur le fichier indiqué. Elle en rapporte le type (BASIC, BASIC PROTÉGÉ, BINAIRE et ASCII). Si le type le permet, elle indique aussi l’adresse de chargement, la longueur du fichier et son adresse d’exécution.
- PUTROM : cette commande n’est compatible qu’avec les périphériques RAMCARD et MEGAFLASH. Le premier paramètre est le nom du fichier ROM, le second le numéro de ROM où écrire. Le fichier indiqué est placé dans le boîtier à ROM. Il vous sera demandé de basculer l’interrupteur DIP d’écriture. Il est conseillé de lancer ROMS avant PUTROM, pour être sûr de ne pas écraser une ROM déjà installée à laquelle vous tenez.
- REN : renomme un fichier. Le premier paramètre est le nouveau nom, le second le nom actuel à renommer. Attention ! Sous BASIC, la commande REN emploie la convention inverse (l’ancien nom avant le nouveau). Cette inversion est là pour la compatibilité avec les usages DOS.
- READONLY : place l’attribut lecture seule sur le fichier indiqué. Les fichiers en lecture seule ne peuvent pas être supprimés tant que cet attribut n’est pas retiré.
- READWRITE : place l’attribut lecture/écriture sur le fichier indiqué (c’est l’état par défaut d’un fichier). Les fichiers en lecture/écriture peuvent être supprimés ou écrasés.
- ROMS : liste les ROMs installées dans le système. Sur un CPC non étendu, la ROM 0 (BASIC) et la ROM 7 (ROM CPM) sont listées par défaut. Il est utile de lancer cette commande avant de placer une ROM dans un boîtier, pour savoir quel numéro employer. Pour chaque ROM installée, la commande affiche son nom interne, sa version et son type (premier plan, arrière-plan ou extension).
- RSX : permet l’exécution d’une RSX. Le premier paramètre est le nom de la RSX, les suivants sont des paramètres facultatifs à lui transmettre. Les paramètres facultatifs sont toujours traités comme des chaînes de caractères. QuickCMD permettant d’exécuter une RSX comme une commande, celle-ci sert à court-circuiter les commandes internes de QuickCMD. Un exemple pour être clair : supposons que la ROM UTOPIA d’Arnor propose une RSX nommée HELP. Sous QuickCMD, si l’on tape HELP, c’est la commande HELP interne de QuickCMD qui s’exécute. En tapant RSX HELP, on contourne la commande HELP de QuickCMD et l’on exécute la RSX HELP d’UTOPIA. On peut aussi taper RSX DAMS &4000 ou RSX DAMS 16384. Ou encore RSX ERA “FILE .EXT” (tous les caractères entre guillemets sont considérés comme un unique paramètre de type chaîne, même s’il contient des espaces).
- RUN : permet l’exécution d’un fichier de la disquette. Les types pris en charge sont BASIC, BASIC PROTÉGÉ et BINAIRE. La commande s’appuie en interne sur le RUN du BASIC, elle est donc pleinement compatible avec tous les programmes existants. Comme pour RSX, QuickCMD permettant de taper un nom de fichier comme une commande, celle-ci sert à court-circuiter les commandes internes. Un exemple pour être clair : supposons qu’il y ait sur la disquette un fichier nommé HELP.BAS. Sous QuickCMD, si l’on tape HELP, c’est la commande HELP interne qui s’exécute. En tapant RUN HELP, on contourne la commande HELP de QuickCMD et l’on exécute le fichier HELP.BAS présent sur la disquette.
- SETUSER : affecte un user au fichier indiqué. Le premier paramètre est le nom du fichier, le second le user.
- SHOW : fait réapparaître (démasque) un fichier au catalogue. Les fichiers réaffichés peuvent être masqués de nouveau avec la commande HIDE.
- UNDEL : récupère un fichier supprimé. Elle échoue si un accès en écriture a eu lieu sur la disquette depuis la suppression. Les fichiers supprimés se listent avec la commande DIRDEL.
- USER : change le user courant. Le user par défaut est USER 0. À noter que le user courant est aussi celui utilisé sous BASIC : si vous quittez QuickCMD pour revenir au BASIC, le user courant reste actif.

Astuces et tours de main
QuickCMD offre aussi quelques fonctions supplémentaires qui facilitent le travail.
RACCOURCIS
Pour fluidifier au maximum le travail, des raccourcis sont proposés :
- ENTRÉE : si vous appuyez sur ENTRÉE alors que la ligne de commande est vide, l’écran est effacé.
- TAB : c’est probablement l’une des fonctions les plus intéressantes de QuickCMD. Quand vous commencez à taper un nom de fichier, un appui sur TAB fait analyser le catalogue par QuickCMD, qui tente de compléter le nom automatiquement.
- TAB : si TAB est pressée alors que la ligne de commande est vide, la commande DIR est tapée automatiquement (et exécutée).
- ESC : un appui sur ESC efface le contenu de la ligne de commande.
- ESC ou CTRL+TAB : un appui sur ESC ou sur CTRL+TAB fait quitter QuickCMD pour revenir au BASIC.
- Touches HAUT et BAS : servent à parcourir l’historique des commandes !
FAÇONS DE TRAVAILLER
Les raccourcis ci-dessus dessinent en réalité ce qui devrait être l’un des usages principaux de QuickCMD. C’est particulièrement utile aux nouveaux venus. Si vous trouvez une façon de travailler courante qui n’est pas listée ici, n’hésitez pas à la signaler à l’auteur du programme !
- Le « DIR rapide » : au démarrage de l’Amstrad CPC, il suffit d’appuyer sur CTRL+TAB pour entrer dans QuickCMD. Ensuite, la touche TAB exécute la commande DIR. Une fois le fichier à exécuter choisi, on peut taper les premiers caractères de son nom, puis compléter le nom automatiquement avec TAB. Il ne reste plus qu’à appuyer sur ENTRÉE pour l’exécuter. Cette façon de faire est ultra-rapide, et l’on s’habitue vite à l’enchaînement CTRL+TAB puis TAB ! Bien plus rapide que de taper CAT sous BASIC, puis de sélectionner un nom avec SHIFT et les touches fléchées, puis d’appuyer sur COPY pour le copier, puis sur CTRL+flèche gauche, puis sur CTRL+ENTRÉE pour faire un RUN” du fichier.
- Le BASIC reste votre ami : QuickCMD ne remplace pas le BASIC. Le BASIC a des fonctions importantes que QuickCMD ne gère pas, et réciproquement. Il a été fait en sorte que l’on puisse passer rapidement du BASIC à QuickCMD (et de QuickCMD au BASIC) avec CTRL+TAB. QuickCMD étant une ROM, vous pouvez travailler sur de gros programmes BASIC ou sur des données rangées en BANK sans la moindre altération.
- ROMs tierces recommandées avec QuickCMD : QuickCMD s’intègre très bien avec les ROMs d’Arnor. Si vous avez besoin d’un éditeur de secteurs, utilisez la commande DEDIT d’UTOPIA. Pour un éditeur de mémoire, la commande MEDIT d’UTOPIA. PROTEXT pour éditer vos fichiers sources. MAXAM pour programmer en assembleur. En employant tous ces outils puissants ensemble, vous disposerez d’une manière efficace d’être créatif avec votre CPC. C’est une façon de travailler parfaitement sûre : de nombreux tests ont été menés pendant l’implémentation de QuickCMD pour s’assurer que la mémoire n’était pas écrasée, selon les différents usages de HIMEM.
- Redécouvrez votre logithèque ! : l’un des atouts évidents de QuickCMD est de pouvoir montrer les fichiers cachés d’une disquette, mais aussi d’obtenir rapidement des informations sur un fichier ou sur un format. Du point de vue d’un développeur, il est amusant d’aller voir à quel point un programme est « propre » : est-il fait d’un ou deux fichiers, ou d’une multitude de petits fichiers cachés ? etc. Autant de choses qui n’apparaissent généralement pas avec la commande CAT ordinaire.
Historique des versions
Version 2.3 :
- ajout de l’historique des commandes
- commande ROMS : correction d’un plantage lors du listage de ROMs aux noms corrompus
- correction d’un autre problème critique (de stabilité) lié à l’analyse directe du lecteur
- RSX renommée en |Q (pour passer encore plus vite du BASIC à QuickCMD)
Version 2.2 :
- prise en charge de la MegaFlash de Bryce
- commandes RO et RW renommées en READONLY et READWRITE
- suppression de la commande CRTC
- réinitialisation de l’écran dans la configuration par défaut de QuickCMD si une RSX externe a changé le mode vidéo
- DELROM efface désormais une rom avec la valeur &FF (elle employait &00)
- correction : le premier octet après HIMEM était écrasé
- correction : la zone Amsdos n’est plus supposée toujours se trouver en &A700
Version 2.1 :
- l’absence de disquette dans le lecteur est correctement gérée pour toutes les commandes
- la commande PUTROM vérifie désormais que le fichier est de type BINAIRE et affiche des informations sur le fichier à placer sur la RAMCARD
- ajout de la commande DELROM pour effacer un emplacement de ROM
- DIR (et ses dérivées) rapporte désormais correctement la taille des fichiers pour les formats double face (Parados 80, etc.)
- la commande RSX accepte désormais des valeurs entières (décimales et hexadécimales)
- la commande RSX accepte désormais les guillemets ” ” pour les valeurs de type chaîne (ce qui permet par exemple d’y placer des espaces)
- refonte interne du code pour réduire l’empreinte mémoire
Version 2.0 :
Cette version est une réécriture complète de la version 1.0. La version initiale portait déjà les concepts intéressants que l’on retrouve en version 2.0, mais elle présentait aussi des points négatifs :
- trop gros pour ce qu’il fait : l’essentiel du programme était écrit en C. Plus productif à écrire, certes, mais le programme prenait trop de mémoire.
- une ROM qui n’était pas une ROM : le programme était rangé dans une ROM. À l’exécution, le contenu de la ROM était en réalité recopié en RAM pour pouvoir utiliser de la mémoire dynamique (impossible d’écrire dans une ROM). C’était assez fâcheux, le programme étant lancé depuis la BANK &C7 et occupant aussi des zones de mémoire à l’adresse fixe &8000.
- implémentation médiocre : les performances n’étaient pas bonnes. La plupart des opérations disque reposaient sur CAS CATALOG (la commande CAT), qui est lente et demande un tampon mémoire de 2 Ko.
- jeu de caractères propre : le programme employait un jeu de caractères intégré. La routine d’affichage était efficace, mais prenait beaucoup de place en mémoire.
- et le reste… : une foule de petits détails qui polluaient aussi la base de code.
Plutôt que de maintenir un programme aux nombreux manques, la décision a été prise de le réécrire entièrement avec une autre approche. Voici les points les plus intéressants :
- de l’asm contenant du C : au lieu d’écrire un programme C avec un peu d’assembleur dedans, il a été plus efficace d’écrire toute l’application en assembleur et d’implémenter certaines parties de haut niveau en C. Le meilleur exemple est l’analyse des secteurs, qui emploie une struct C pour parcourir les entrées de fichiers.
- une ROM qui est une ROM : écrire une vraie ROM a obligé à gérer la mémoire dynamiquement. La technique était intéressante à mettre en œuvre, mais le point le plus remarquable est que la gestion mémoire de QuickCMD s’est trouvée optimisée au maximum : la liste des variables dynamiques doit rester aussi courte que possible.
- et le reste… : une foule de petits détails qui, écrits une seconde fois, deviennent d’un coup plus clairs et bien plus faciles à maintenir.
Version 1.0 :
Version initiale. Preuve de concept. Accueil mitigé. :)