APPLICATIONSCREATION GRAPHIQUE ★ RSX CIRCULO (AMSTRAD USER) ★

RSX Circulo (Amstrad User)Applications Creation Graphique
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Si hay una capacidad de los Amstrad que resulte práctica para el programador y se trate con poca claridad en el manual del usuario, es la posibilidad de extender el sistema mediante RSX. ¿Qué son las RSX? Una pregunta muy interesante, que Angel Zarazoga se ocupa de contestar, con un ejemplo de gran utilidad: una rutina que dibuja círculos redondos.

Bromas aparte, RSX responde a las iniciales de las palabras inglesas Resident System Extensions (Extensiones Residentes del Sistema) y significa que nuestro Amstrad es capaz de admitir nuevos comandos BASIC además de los que tiene de fábrica. Dichos comandos deben residir en RAM que no esté paginada con ROM, es decir, entre las direcciones hexadecima-les 4000 y BFFF. En la práctica, el límite máximo lo establece el valor de la variable HIDEM.

Lo verdaderamente interesante de los RSX es que, una vez cargados en memoria, pueden ser utilizados en los programas exactamente igual que cualquier comando BASIC, excepto dos diferenciales en la sintaxis, que son:

a) El nombre del comando RSX debe ir precedido por el símbolo | (SHIFT + tecla a la derecha de [P]); si tiene parámetros, se separa de estos mediante UNA COMA, no mediante un espacio en blanco como es habitual en el BASIC; si no tiene parámetros, se introduce pulsando ENTER o RETURN.

b) El nombre del comando NO PUEDE incluir espacios en blanco ni caracteres cuyo código ASCII sea mayor que 127.

Elaboración

Para utilizar uno o varios comandos RSX debemos observar el siguiente proceso:

1. Crear la(s) rutina(s) en código máquina que efectuará(n) el trabajo encomendado al comando (los comandos). Hay que advertir que, si bien el BASIC se encarga de verificar la correcta sintaxis del nombre, no hace lo mismo con los parámetros, por lo cual nuestra rutina debe verificar que I se nos dan los adecuados. Cuando el BASIC llama a nuestro comando, le entrada en el registro A el número de parámetros y en el registro doble IX la dirección a partir de la cual se encentran los valores de éstos atendiendo a unas sencillas reglas: si se trata de un número entero o variable entera (p. e. —123, num(s)), entrega su valor expresado con un número de 16 bits en complemento a dos: si se trata de un número o variable real, entrega el resultado de forzar su valor a un número entero sin signo, también en 16 bits; si se trata de una variable precedida el el símbolo @, entrega la dirección en que se encuentre dicha variable; por último, si se trata de una variable de cadena, entrega la dirección en que se encuentra el descriptor de dicha cadena, el cual consta de tres bytes. El primero es la longitud de la cadena, y los otros dos la dirección en que se halla.

Hay que advertir que la tabla de parámetros es confeccionada por el BASIC de forma que el ULTIMO parámetro de nuestro comando es el PRIMERO de la tabla y viceversa.

De este modo, como podrán observar más adelante en el ejemplo, lo primero que hace el programa es una serie de comparaciones del registro A para ver si el número de comandos es correcto.

2. Una vez verificado el funcionamiento de la rutina, debemos informar al sistema operativo de su existencia.

Esto se consigue construyendo una tabla de saltos y utilizando una subruti-na del sistema operativo que le informa de todo lo necesario. La tabla de saltos está formada por dos subta-blas. En una de ellas están los nombres de los comandos escritos en códigos ASCII excepto la última letra de cada comando, a la cual se le suma 80 hexadecimal. Esto se hace para que el sistema operativo pueda reconocer el final de cada nombre. En la otra sub-tabla se hallan instrucciones de salto incondicional (C3XXXX) a las rutinas creadas por nosotros. Esta subtabla ha de ir necesariamente precedida de la dirección en que se halle la otra subtabla. Veamos un posible ejemplo:

DEFW tabnom; dirección de la tabla de nombres.
JP XXXX; salto a la primera rutina.
JP YYYY; salto a la segunda rutina.
... etcétera

tabnom:
DEFS 43, 49, 52, 43, 55, 4C, CF; "CIRCUL","0" + 80H”
DEFS (caracteres del nombre del segundo comando)
DEFS (caracteres del nombre del tercer comando).

Una vez desarrollada la tabla hay que cargar el registro doble BC con la dirección en que comienza la tabla (dirección de la línea marcada tabnom) y el registro doble HL con la dirección de 4 bytes de RAM no paginada con ROM para uso del sistema operativo, y efectuar una llamada a una rutina del S.O. denominada KL LOG EXT (&BCD1); esta rutina informa al sistema de la existencia de los RSX.

Y como muestra, un botón Desués de leer todo lo anterior, no hay nada como un ejemplo. Presentamos un programa que introduce un RSX (sí, sólo uno, pero ya vendrán otros) que permite dibujar círculos. La sintaxis de este comando es la siguiente:
|CIRCULO, (x,y), r, (p) [ENTER] donde los parámetros entre paréntesis son opcionales, y su significado es:

x: Coordenada x del centro del círculo.
y: coordenada y del centro del círculo.
r: radio del círculo,
p: pluma (color).

Así, por ejemplo, |círculo, 319,199, 100, 1 dibuja un círculo con centro en el punto 319,199, de radio = 100 con la tinta asignada a la pluma 1; j círculo, 75 dibuja un círculo con centro en la posición actual del cursor de gráficos (que depende del último comando plot, draw o move que se haya ejecutado), con radio = 75 y con la pluma que se haya utilizado anteriormente. La barra (|) que aparece delante de la palabra círculo se obtiene pulsando [SHIFT] y la tecla situada a la derecha de [P]. Una vez dibujado el círculo, el cursor gráficos queda situado en el centro de éste.

Para cargar el programa debe seguir los siguentes pasos:

1 Prepare la cinta/disco donde vaya a grabarlo.

2. Teclee el programa número 1, repáselo para comprobar que no tenga errores y grábelo.

3. Sin quitar la cinta ni rebobinarla, teclee el programa número 2, pero NO LO GRABE EN LA CINTA; una vez comprobado que está correcto, ejecútelo. Si hay error en las datas, el programa se lo dirá. Si no lo hay, le avisará para que coloque la cinta/disco. Supuesto que ya está puesta, pulse cualquier tecla y quedará grabado en la cinta el fichero binario, que constituye el programa en sí.

4. El programa ya está listo. Retroceda la cinta al principio del programa 1, restaure el ordenador pulsando simultáneamente [CONTROL], [SHIFT] y [ESC], pulse PLAY (si utiliza un cassette) y escriba RUN «Círculo» [ENTER], El programa se carga, ejecuta y autodestruye automáticamente. Cuando aparezca el mensaje READY, dispone usted ya del comando CIRCULO en memoria.

5. Una vez grabado el programa y probado, pueden suprimirse las líneas 40-100 del programa 1, disminuyendo así el tiempo de carga y el de ejecución.

ANALISIS. El programa 1 es un cargador/reubicador preparado en concreto para este comando. En primer lugar, reserva espacio en la memoria para el fichero binario (líneas 10-20); luego lo carga de la cinta (línea 30) y entra en el reubicador. Este prueba primero que las líneas DATA estén correctas (40-100). Si no es así, envía a la pantalla un mensaje de error y detiene el programa. Si todo está correcto, efectúa los pokes necesarios (110-160) y pasa a ejecutar el fichero binario (línea 170). Con esto, el comando residente queda inicializado, y se puede utilizar como otro comando cualquiera. Por último se borra el programa cargador, dejando libre el espacio ocupado por éste (línea 180).

El programa 2 es simplemente un cargador de código máquina. Primero reserva espacio en la memoria y prepara una matriz con datos para el comprobador de DATA (líneas 10-30). Las líneas 220-240 deben ser comprobadas antes de ejecutar el programa. A continuación, comprueba que las líneas data 1000-1830 estén bien (40-110), y si lo están, introduce el código en memoria (120-180) y lo salva a cinta/disco (190-200).

Si desea incorporar este comando a sus programas sin necesidad de cargarlo cada vez, haga lo siguiente: grabe en una cinta/disco aparte el cargador (programa 2); escriba el programa 1 omitiendo la línea 180 y continúe escribiendo el programa donde desea utilizar el comando. Una vez completo el programa, grábelo en cinta/disco. No retroceda la cinta y cargue el programa 2. Vuelva a colocar la cinta/disco de su programa y ejecute el cargador. De esta forma, lo primero que hará su programa al ser ejecutado es cargar el comando círculo.

Para los amantes del ensamblador, ofrecemos el listado en este lenguaje a partir del cual se obtuvo el fichero binario.

Hay que hacer notar que los valores de la tabla de senos están desplazados un bit a la derecha, de forma que el primer bit por la izquierda representa las unidades, y los demás los decimales; por eso es necesario al final de la rutina de multiplicación desplazar el resultado a la izquierda. Advertir también que la rutina de multiplicación devuelve en el registro [DE] la parte ENTERA del producto radio x seno.

Por último, he aquí un breve programa en BASIC, ejemplo de cómo usar este comando. Una vez que tenga el comando! CIRCULO grabado y funcionando, ejecútelo y escriba a continuación el programa 3. Una vez escrito y revisado, teclee RUN y [ENTER]. Cuando se canse de él, pulse [ESC] dos veces.

10 MODE 0:BORDER 8
20 x=50:y=50
30 |CIRCULO,x,y,60,1

Amstrad User #4

★ PUBLISHER: Amstrad User
★ YEARS: 1985 , 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ AUTHOR: Ángel Zarazaga
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-Circulo    (Amstrad  User)    SPANISH    LISTINGDATE: 2022-03-05
DL: 126
TYPE: PDF
SiZE: 1283Ko
NOTE: 5 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » RSX - Circle
» Applications » Jetzt geht's rund (CIRCLE Basic-Routine)
» Applications » RSX Turbo-Circle (Schneider Aktiv)
» Applications » RSX Circle (CPC Magazin)
» Applications » RSX - Circle (Computing With the Amstrad)
» Applications » Circuitos Electricos (G.T.S. Editorial)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 600 millisecondes et consultée 591 fois

L'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.