producción

QuickCMD

Descargar 2011_quickcmd.zip

Créditos

Programa escrito por Arnaud Storq (www.norecess.net, 2011)
Con la ayuda de Kevin Thacker y Richard Wilson.

Muchas gracias a todas las personas que me informaron de problemas con la versión 1… ¡Eso ayudó de verdad a hacer una implementación mejor en la versión 2!

QuickCMD V2.3 — ¡UN SHELL NUEVO PARA EL AMSTRAD CPC!

Introducción

QuickCMD es una interfaz nueva, a la manera de un shell, para los ordenadores Amstrad CPC con unidad de disquete.

El objetivo inicial de este software es ofrecer una forma más rápida de recorrer el contenido de un disquete y lanzar programas. Normalmente, el usuario de un Amstrad CPC recurre al prompt de BASIC para mostrar primero el contenido del disquete, sacar de ahí un nombre de archivo y lanzar después el programa a mano. El procedimiento funciona perfectamente, pero se vuelve pesado en cuanto hay que recorrer varios disquetes.

Además de eso, el programa trae algunos comandos interesantes para gestionar el contenido de un disquete a los que normalmente no se llega desde el prompt de BASIC. Solo es posible gracias a una gestión de bajo nivel del contenido del disquete, que lee y escribe sectores directamente en lugar de usar las funciones que trae el firmware por defecto. Admite muchos formatos, entre ellos DATA, SYSTEM y PARADOS. Por eso las operaciones de disco son más rápidas que las equivalentes desde BASIC.

Por último, QuickCMD es de veras respetuoso con el sistema. Su huella de memoria es muy pequeña y se amplía con facilidad mediante las RSX (Resident System eXtension) ya existentes. Incorpora además una rutina de impresión de caracteres más rápida que la estándar del firmware, de modo que los comandos suelen ir más rápido que sus equivalentes en BASIC.

Instalación

Este programa requiere:

  • un Amstrad CPC 6128: se admiten tanto los modelos clásicos como los Plus. Los Amstrad CPC 464 con unidad de disquete externa no están admitidos por ahora.
  • una caja de ROM: dispositivos como RAMCARD, MegaFlash, ROMBOX, etc. Como QuickCMD se entrega en forma de ROM, hace falta poder ampliar el CPC con ROMs propias. Hay más información sobre estos dispositivos aquí.

Esta ROM se puede instalar en cualquier posición. Solo hay que asegurarse de no sobrescribir la ROM de primer plano instalada (por defecto, la ROM de BASIC, en la rom 0) ni la ROM encargada de la gestión de unidades (por defecto, la ROM CPM, en la rom 7).

Una vez instalado, QuickCMD solo ocupa &6 bytes de memoria para sus datos persistentes de ROM. Es posible porque QuickCMD se trata como una ROM de verdad: el código se ejecuta desde la ROM y no se copia a la RAM al inicializarse.

Al lanzarse, QuickCMD reserva dinámicamente &328 bytes de datos por debajo de la dirección HIMEM, que sirven de búfer temporal durante la ejecución. Conviene mencionarlo, porque tiene su gracia: QuickCMD gasta en realidad menos memoria que el propio comando CAT de BASIC (que usa internamente &800 bytes de búfer de catálogo temporal por debajo de HIMEM).

Comandos

Al entrar en la interfaz de QuickCMD aparece un prompt de línea de comandos. Quien conozca los sistemas basados en DOS reconocerá la manera de trabajar: hay que teclear los comandos a mano para dar órdenes al ordenador. Los comandos no distinguen mayúsculas de minúsculas.

Los comandos son:

  • A: o B:: tecleando A: o B: se selecciona la unidad correspondiente (unidad A o B). Todas las operaciones de disco posteriores usarán la unidad seleccionada.
  • ABOUT: da los créditos del programa. Informa también del uso de memoria (dirección y longitud) necesario para la ejecución de QuickCMD.
  • CAT: este comando se comporta exactamente igual que el CAT de BASIC. Existe por compatibilidad: otros programas, como BonnyDOS, se apoyan en él para mostrar el contenido de un disco duro. Los archivos ocultos del catálogo no se muestran. No se recomienda este comando para recorrer un disquete; usa DIR en su lugar.
  • CATART: se comporta exactamente igual que el CAT de BASIC, salvo que además devuelve la pantalla a la configuración de arranque por defecto (fondo azul con letras amarillas, en MODE 1 gráfico). Eso permite mostrar los «cat arts», esas pantallas gráficas que aparecen con el comando CAT. Una vez mostrada, basta pulsar una tecla para volver a la configuración de pantalla de QuickCMD. El comando DIR llama a este internamente cuando detecta un «cat art».
  • DEL: borra un archivo del disquete. ¡Cuidado, no se pide ninguna confirmación!
  • DELROM: este comando solo es compatible con los dispositivos RAMCARD y MEGAFLASH. Borra la memoria en el número de ROM indicado.
  • DIR: da la lista de archivos del disquete. Muestra únicamente los archivos del user actual. Informa también del espacio disponible en KB. Cuando la lista es larga y necesita varias páginas, el comando espera una pulsación de tecla en cada salto de página. No hay ordenación de nombres: los archivos aparecen en el orden en que se encuentran al analizar el catálogo. El comando trata los archivos de solo lectura y los ocultos; y merece la pena señalar que los archivos ocultos también se procesan y se muestran. Si el catálogo resulta ser un «cat art», el comando se redirige internamente a CATART.
  • DIRALL: funciona como DIR, salvo que lista los archivos de TODOS los users (del user 0 al 15). Resulta útil para encontrar archivos que no están en el user actual. El user del archivo se muestra como prefijo del nombre.
  • DIRDEL: funciona como DIR, salvo que lista los archivos borrados. Si un archivo se ha borrado hace poco y desde entonces no se ha escrito en el disquete, es posible recuperar su contenido original con el comando UNDEL.
  • DISCINFO: da información sobre el formato del disquete: el nombre del formato, su capacidad en KB, el número máximo de archivos que puede gestionar, si es de una o dos caras, y los identificadores de sectores y pistas. Admite muchos formatos, incluidos los que gestiona PARADOS.
  • HIDE: permite ocultar un archivo del catálogo. Por supuesto, seguirá visible en QuickCMD (marcado como archivo oculto). Con el comando CAT, ese archivo no se le comunica al usuario (es invisible). Los archivos ocultos se pueden devolver al catálogo con el comando SHOW.
  • INFO: da información sobre el archivo indicado. Informa de su tipo (BASIC, BASIC PROTEGIDO, BINARIO y ASCII). Si el tipo lo permite, informa también de la dirección de carga, la longitud del archivo y su dirección de ejecución.
  • PUTROM: este comando solo es compatible con los dispositivos RAMCARD y MEGAFLASH. El primer parámetro es el nombre del archivo de ROM; el segundo, el número de ROM donde escribir. El archivo indicado se coloca en la caja de ROM. Se te pedirá que acciones el interruptor DIP de escritura. Conviene usar ROMS antes de PUTROM para no sobrescribir una ROM ya instalada que quieras conservar.
  • REN: renombra un archivo. El primer parámetro es el nombre nuevo; el segundo, el nombre actual que se va a renombrar. ¡Atención! El comando REN de BASIC usa la convención inversa (el nombre antiguo antes del nuevo). Esta inversión está pensada para la compatibilidad con los usos de DOS.
  • READONLY: pone el atributo de solo lectura en el archivo indicado. Los archivos de solo lectura no se pueden borrar mientras no se quite ese atributo.
  • READWRITE: pone el atributo de lectura/escritura en el archivo indicado (que es el estado por defecto de un archivo). Los archivos de lectura/escritura se pueden borrar o sobrescribir.
  • ROMS: lista las ROMs instaladas en el sistema. En un CPC sin ampliaciones se listan por defecto la ROM 0 (BASIC) y la ROM 7 (ROM CPM). Resulta útil ejecutar este comando antes de meter una ROM en una caja, para saber qué número de rom usar. Para cada ROM instalada, el comando muestra su nombre interno, su versión y su tipo (primer plano, segundo plano o extensión).
  • RSX: permite ejecutar una RSX. El primer parámetro es el nombre de la RSX; los demás son parámetros opcionales que se le envían. Los parámetros opcionales se tratan siempre como cadenas de texto. Como QuickCMD permite ejecutar una RSX igual que un comando, este comando sirve para saltarse los comandos internos de QuickCMD. Un ejemplo para que quede claro: digamos que la ROM UTOPIA de Arnor tiene una RSX llamada HELP. En QuickCMD, si se teclea HELP se ejecuta el comando HELP interno de QuickCMD. Al teclear RSX HELP se salta el HELP de QuickCMD y se ejecuta la RSX HELP de UTOPIA. También se puede teclear RSX DAMS &4000 o RSX DAMS 16384. O bien RSX ERA “FILE .EXT” (todos los caracteres entre comillas se consideran un único parámetro de tipo cadena, aunque lleve espacios dentro).
  • RUN: permite ejecutar un archivo del disquete. Los tipos admitidos son BASIC, BASIC PROTEGIDO y BINARIO. Por dentro recurre al RUN de BASIC, así que es plenamente compatible con todos los programas existentes. Igual que con RSX, como QuickCMD permite teclear un nombre de archivo como un comando, este sirve para saltarse los comandos internos. Un ejemplo para que quede claro: digamos que en el disquete hay un archivo llamado HELP.BAS. En QuickCMD, si se teclea HELP se ejecuta el comando HELP interno. Al teclear RUN HELP se salta el HELP de QuickCMD y se ejecuta el archivo HELP.BAS que está en el disquete.
  • SETUSER: asigna un user al archivo indicado. El primer parámetro es el nombre del archivo; el segundo, el user.
  • SHOW: devuelve al catálogo (desoculta) un archivo. Los archivos mostrados se pueden volver a ocultar con el comando HIDE.
  • UNDEL: recupera un archivo borrado. Falla si se ha escrito en el disquete desde que se borró el archivo. Los archivos borrados se listan con el comando DIRDEL.
  • USER: cambia el user actual. El user por defecto es USER 0. Ten en cuenta que el user actual es también el que se usa en BASIC: si sales de QuickCMD hacia BASIC, el user actual sigue activo.

Trucos y consejos

QuickCMD ofrece además algunas funciones que facilitan el trabajo.

ATAJOS
Para agilizar al máximo el trabajo, hay algunos atajos:

  • ENTER: si pulsas ENTER con la línea de comandos vacía, se borra la pantalla.
  • TAB: probablemente una de las funciones más interesantes de QuickCMD. Cuando empiezas a teclear un nombre de archivo, al pulsar TAB QuickCMD analiza el catálogo e intenta completarlo automáticamente.
  • TAB: si se pulsa TAB con la línea de comandos vacía, se teclea automáticamente el comando DIR (y se ejecuta).
  • ESC: al pulsar ESC se borra el contenido de la línea de comandos.
  • ESC o CTRL+TAB: al pulsar ESC o CTRL+TAB, QuickCMD se cierra y se vuelve a BASIC.
  • Teclas ARRIBA y ABAJO: ¡sirven para moverse por el historial de comandos!

MANERAS DE TRABAJAR
Los atajos de arriba dibujan en realidad lo que debería ser uno de los usos principales de QuickCMD. Resulta especialmente útil para quien llega nuevo. Si encuentras una manera de trabajar habitual que no esté aquí, ¡no dudes en comentársela al autor del programa!

  • El «DIR rápido»: al arrancar el Amstrad CPC basta pulsar CTRL+TAB para entrar en QuickCMD. Después, la tecla TAB ejecuta el comando DIR. Una vez elegido el archivo que se quiere ejecutar, se teclean los primeros caracteres de su nombre y se completa el resto con TAB. Solo queda pulsar ENTER para ejecutarlo. Esta manera de trabajar es ultrarrápida, y uno se acostumbra enseguida a la secuencia CTRL+TAB y luego TAB. ¡Mucho más rápido que teclear CAT en BASIC, seleccionar un nombre con SHIFT y las teclas de flecha, pulsar COPY para copiarlo, pulsar CTRL+flecha izquierda y pulsar CTRL+ENTER para hacer RUN” del archivo!
  • BASIC sigue siendo tu amigo: QuickCMD no sustituye a BASIC. BASIC tiene funciones importantes que QuickCMD no cubre, y al contrario. Se ha hecho fácil pasar rápidamente de BASIC a QuickCMD (y de QuickCMD a BASIC) con CTRL+TAB. Como QuickCMD es una ROM, puedes trabajar con programas BASIC grandes o con datos guardados en BANKs sin alteración de ningún tipo.
  • ROMs de terceros recomendadas con QuickCMD: QuickCMD se integra muy bien con las ROMs de Arnor. Si necesitas un editor de sectores, usa el comando DEDIT de UTOPIA. Para un editor de memoria, el comando MEDIT de UTOPIA. PROTEXT para editar tus archivos fuente. MAXAM para programar en ensamblador. Usando todas estas herramientas potentes en conjunto, tendrás una forma eficaz de ser creativo con tu CPC. Es una manera de trabajar completamente segura: durante la implementación de QuickCMD se hicieron muchas pruebas para asegurarse de que la memoria no se sobrescribía, según los distintos usos de HIMEM.
  • ¡Redescubre tu ludoteca!: una de las virtudes evidentes de QuickCMD es poder mostrar los archivos ocultos de un disquete, y también obtener rápidamente información sobre un archivo o sobre un formato. Desde el punto de vista de quien programa, tiene su gracia curiosear en lo «limpio» que es un programa: ¿está hecho de uno o dos archivos, o de un montón de archivitos ocultos?, etc. Cosas que normalmente no se ven con el comando CAT de siempre.

Historial de versiones

Versión 2.3:

  • añadido el historial de comandos
  • comando ROMS: corregido un cuelgue al listar ROMs con nombres corruptos
  • corregido otro problema crítico (de estabilidad) en el análisis directo de la unidad
  • RSX renombrada a |Q (para cambiar aún más rápido entre BASIC y QuickCMD)

Versión 2.2:

  • soporte para la MegaFlash de Bryce
  • comandos RO y RW renombrados a READONLY y READWRITE
  • eliminado el comando CRTC
  • la pantalla vuelve a la configuración por defecto de QuickCMD si una RSX externa ha cambiado el modo de vídeo
  • DELROM borra ahora una rom con el valor &FF (antes usaba &00)
  • corregido: se sobrescribía el primer byte después de HIMEM
  • corregido: ya no se da por supuesto que el área de Amsdos esté siempre en &A700

Versión 2.1:

  • la falta de disquete en la unidad se gestiona correctamente en todos los comandos
  • el comando PUTROM comprueba ahora que el archivo sea de tipo BINARIO y muestra información sobre el archivo que se va a poner en la RAMCARD
  • añadido el comando DELROM para borrar una posición de ROM
  • DIR (y sus derivados) informa ya correctamente del tamaño de los archivos en los formatos de doble cara (Parados 80, etc.)
  • el comando RSX acepta ya valores enteros (decimales y hexadecimales)
  • el comando RSX acepta ya las comillas ” ” para los valores de tipo cadena (lo que permite, por ejemplo, meter espacios en las cadenas)
  • refactorización interna del código para reducir la huella de memoria

Versión 2.0:

Esta versión es una reescritura completa de la 1.0. La versión inicial ya traía los conceptos interesantes que se ven en la 2.0, pero dejaba también algunos puntos flojos:

  • demasiado grande para lo que hace: casi todo el programa estaba escrito en C. Se avanzaba más rápido así, pero el programa ocupaba demasiada memoria.
  • una ROM que no era una ROM: el programa se guardaba en una ROM. Al ejecutarse, el contenido de la ROM se copiaba en realidad a la RAM para poder usar memoria dinámica (en una ROM no se puede escribir). Eso estaba bastante mal, porque el programa se lanzaba desde la BANK &C7 y ocupaba además zonas de memoria en la dirección fija &8000.
  • implementación pobre: el rendimiento no era bueno. La mayoría de las operaciones de disco se basaban en CAS CATALOG (el comando CAT), que es lento y necesita un búfer de 2 KB.
  • juego de caracteres propio: el programa usaba un juego de caracteres integrado. La rutina de impresión era eficaz, pero ocupaba mucha memoria.
  • y más…: un montón de detalles pequeños que ensuciaban también la base de código.

En lugar de mantener un programa con tantas carencias, se decidió reescribirlo por completo con otro enfoque. Estos son los puntos más interesantes:

  • asm con C dentro: en vez de escribir un programa en C con algo de ensamblador dentro, resultó más eficaz escribir toda la aplicación en ensamblador e implementar algunas partes de alto nivel en C. El mejor ejemplo es el análisis de sectores, que usa una struct de C para recorrer las entradas de archivos.
  • una ROM que sí es una ROM: escribir una ROM de verdad obligó a gestionar la memoria de forma dinámica. La técnica era interesante de implementar, pero lo más destacable es que la gestión de memoria de QuickCMD quedó optimizada al máximo: la lista de variables dinámicas hay que mantenerla lo más corta posible.
  • y más…: un montón de detalles pequeños que, escritos por segunda vez, se vuelven de pronto más claros y mucho más fáciles de mantener.

Versión 1.0:

Versión inicial. Prueba de concepto. Acogida tibia. :)