lEn principio, este artículo parece uno de tantos que se limitan a ampliar el Basic del CPC recurriendo al abuso del Código Máquina, por obra y gracia de los misteriosos comandos RSX. No obstante, como adelanto, les podemos decir que nunca más les molestará un programa protegido escrito en Basic. En muchas ocasiones deseamos conocer el contenido de un disco o cassette. Para ello, nos valemos del comando CAT, que nos proporciona el nombre de los programas y su longitud. Pero realmente, en ciertos casos, esta información resulta verdaderamente escasa. Por eso, hemos preparado dos nuevos comandos RSX, que nos van a ser de gran utilidad. El primero de ellos nos va a proporcionar el contenido de los parámetros más importantes que se encuentran en la cabecera de cada programa. Es lo que podríamos llamar un lector de cabeceras. Este comando deberá ejecutarse de la forma que se indica a continuación: |CAT, “NOMBRE”o bien:|CAT,@A$donde la variable A$, deberá contener el nombre del programa del cual se desea obtener información. Una vez ejecutada dicha instrucción, nos aparecerán en pantalla los siguientes datos:Nombre Dirección inicial Longitud Tipo Dirección de ejecuciónDonde el nombre, nos indicará el programa introducido en el parámetro; dirección inicial, la posición de memoria a partir de la cual se cargará el programa en memoria; longitud, nos dará el número de bytes que contiene el programa; dirección de ejecución, la dirección donde se ejecuta el programa, si se ha especificado en el momento de salvarlo, de lo contrario, no existirá.Dentro de tipo, podremos encontrar cualquiera de las siguientes expresiones: Basic Basic P. (Basic protegido) Binario Binario P. (Binario protegido) Asciique corresponda al rango de valores 0-5, que son los que indican en la cabecera de cada programa el tipo al que pertenece dicho programa.Debemos tener en cuenta que, si lo ejecutamos, cuando se esté trabajando con disco, el nombre del programa se buscará en el disco. Asimismo, si lo hacemos con la cinta, el nombre del programa se intentará obtener de ella. Así pues, para cambiar de un sistema a otro, deberemos utilizar los comandos de todos conocidos de cambio de periférico, como son: |DISC y |TAPE. Cuando ejecutemos este comando con un nombre de programa que no se encuentra en el disco, aparecerá el mensaje típico que nos proporciona el disco de fichero no encontrado y, además, aparecerá la información que nos proporciona nuestro comando RSX, aunque en este caso no servirá para nada, ya que el programa no se ha podido leer en el disco. Además de éste, hemos preparado otro nuevo comando RSX que, igual que el anterior, nos puede ser de gran utilidad. Dicho comando deberá ejecutarse de la forma que se indica a continuación: |LOADP, “NOMBRE”o bien:
|LOADP,@A$donde la variable A$ deberá contener el nombre del programa que se desea cargar.Como su nombre indica, nos servirá para cargar en memoria programas que se hayan salvado de forma protegida, con la particularidad de que una vez cargados, podremos visualizarlos, y salvarlos de nuevo de forma normal. Así pues, diríamos que dicho comando nos permitirá desproteger programas Basic que se hayan salvado de la forma siguiente: SAVE “nombre”,P Para la realización de dichos comandos, se han utilizado varias rutinas del firmware, aparte de las necesidades para inicializar comandos RSX. A continuación veremos cuáles son y la forma en que actúa cada una de ellas. #BC77. Prepara para leer un fichero Abre el canal para cargar el primer bloque de un programa. Condiciones de entrada: B.—Contiene la longitud del nombre del programa. HL.—Contiene la dirección del nombre. DE.—Contiene la dirección del buffer de carga de 2 K. Condiciones de salida: En caso de que no exista ningún error: — Carry verdadero. — El flag de cero falso. — HL contiene la dirección del buffer que contiene la cabecera. — DE contiene la dirección inicial del programa. — BC contiene la longitud. — A contiene el tipo de programa. Si ya se había abierto dicho canal: — Carry falso. — Flag de cero falso. — A, BC, HL y DE de corrompen. Si se ha pulsado la tecla 'ESC': — Carry falso. — Flag de cero verdadero. — A, BC, DE y HL se corrompen. En cualquier caso: — Se corrompe el registro IX y los demás flags. #BC7A. Cierra el canal para la carga No necesita condiciones de entrada. A la salida nos da el carry verdadero, si el canal ya estaba cerrado. El carry falso, si dicho canal no se había abierto. En cualquier caso, se corrompen los registros A, BC, HL y DE y todos los flags. Las rutinas anteriores se han utilizado tanto para confeccionar el primer comando RSX, como para el segundo, aunque en este último, además, se ha recurrido a la que se indica a continuación. #BC83. Carga el programa en la memoria Condiciones de entrada: El registro HL deberá contener la dirección donde debe ser colocado el programa en la RAM. Condiciones de salida: Si el fichero se ha cargado correctamente: — Carry verdadero. — Flag de cero falso. — HL contiene la dirección inicial. Si el canal no estaba abierto: — Flag de carry y cero falsos. — HL se corrompe. En cualquier caso: — Se corrompen los registros A, BC, DE, e IX y todos los flags. Por último, diremos que estos nuevos comandos funcionan correctamente en un Amstrad CPC 6128 y 664, pero aquellos que posean un 464, deberán tener en cuenta las correcciones que se indican a continuación. En el listado ensamblador, se deberán cambiar las siguientes líneas: 1750 LD (#AE83), HL 1760 LD (#AE85), HL 1770 LD (#AE87), HL 1780 LD (#AE89), HLPara los que utilicen el programa cargador, los cambios deberán ser en las siguientes líneas:820 DATA 193,33,112,1,9,34,131 830 DATA 174,34,133,174,34,135,174 840 DATA 34,137,174,201,33,45,146Para disponer de estos dos nuevos comandos, únicamente se deberá copiar el listado ensamblador que aparece a continuación, o bien el programa cargador Basic. Para inicializar dichos comandos, deberemos hacer una llamada a la dirección #9000. (CALL &9000).SA
| ★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.732-desktop/c Page créée en 679 millisecondes et consultée 797 foisL'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |
|
|