APPLICATIONSDIVERS ★ OTRO CAMINO HACIA LA COMPATIBILIDAD (AMSTRAD USER) ★

Otro camino hacia la compatibilidad (Amstrad User)Applications Divers
★ 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 ★ 

Posiblemente se haya preguntado alguna vez en que consiste la tan nombrada incompata-bilidad entre los tres primeros modelos de AMSTRAD, a saber: el CPC-464, el CPC-664 y el CPC-6128. Trataremos aquí de aclarar este tema, y además propondremos una solución para aquellos usuarios del 464 que se sientan en inferioridad de condiciones.

Tal incompatibilidad existe, si bien se reduce sólo a ciertos aspectos. Podemos distinguir cuatro motivos: En primer lugar, los modelos 664 y 6128 poseen una serie de comandos BASIC (tales como FILL, FRAME , PLOT y DRAW con cuatro parámetros, COPYCHR$ y algunos otros) que no se encuentran en el 464. Así, un programa BASIC para 6128 que utilice estos comandos no funcionará en un 464, si bien un programa que no los utilice sí que funcionará.

Este caso se puede solucionar de varias formas. Una de ellas es suplir la acción que ejecutan estos comandos por rutinas en BASIC. Otra posibilidad es utilizar comandos residentes, por ejemplo, los que proponemos en este artículo.

En segundo lugar, existe en el 6128 una serie de comandos re-sidentes (|BANKREAD, |BANKWRITE, |SCREENSWAP y otros) cuya misión es manejar el segundo bloque de memoria de 64K RAM. Dado que el 464 y el 664 no tienen dicho segundo bloque, no hay posibilidad de evitar esta incompatibilidad, salvo escribir programas para el 6128 que no utilicen la memoria secundaria.

Otra causa es que los modelos que tienen disco incorporado utilizan parte de la memoria RAM para uso del operativo de disco, por lo cual un programa (BASIC o código máquina) que utilice toda la memoria en el 464 no funcionará normalmente en el 664 o el 6128. Sin embargo, en el número 1 de nuestra revista ofrecimos un sencillo truco que permite anular la unidad de disco y disponer de toda la memoria.

Por último, el caso del bloque de saltos. Este es el motivo por el que algunos juegos que sí funcionan en el 464, no lo hacen en el 664 o el 6128, y consiste en lo siguiente: el sistema operativo de los ordenadores AMSTRAD está en un chip de ROM cuyas direcciones abarcan desde 0000 hasta 3FFF hexadecimal. Para utilizar las rutinas que se encuentran en dicha ROM existe un bloque de instrucciones de salto que se extiende desde B900 hasta BDF1 (algo más en el 664 y el 6128), si bien existe también la posibilidad de llamarlas directamente a la dirección en que se hallan, realizando primero la conmutación de la ROM y la RAM inferiores. Sin embargo, las direcciones reales de las rutinas del sistema operativo son distintas para un 464 y un 6128, por ejemplo. Por ello, si se llama a una rutina directamente en un programa pensado para el 464, este programa probablemente no funcione en el 6128.

La solución para esto sería rescribir el programa evitando estas llamadas directas, trabajo extremadamente complejo.

Como ya hemos anticipado, vamos a enfrentarnos con el primer caso, ofreciendo a nuestros sufridos lectores los siguientes comandos: |EXTRAS, |CLEARINPUT, |COPYCHR, |FILL, |FRAME, |GRAPHICSPAPER y |GRAPHICSPEN.

Comenzando por el principio, vamos a explicar a los poseedores del 464 para qué sirven estos comandos, cómo se los encontrarán en los listados para 664 y 6128, y cómo adaptarlos para usar los suyos.

El primer comando, |EXTRAS, es difícil que lo encuentren en ningún listado, ya que tampoco lo tienen el 664 ni el 6128. La función de este comando es decirnos los nombres de los comandos residentes (RSX) que tenemos funcionando. Su sintaxis es sencilla: basta escribirlo tal cual (por supuesto, con la barra «|» delante) para obtener su respuesta.

El comando |CLEARINPUT borra el buffer de teclado. La forma en que se encontrará en los listados es CLEAR INPUT, separadas las dos palabras. Sin embargo nosotros deberemos escribirlo todo junto, |CLEARINPUT. Para que comprendan mejor el efecto de este comando, ahí va un ejemplo.

10 CLS
20 PRINT «Teclee letras ahora!»
30 FOR T=1 TO 3000
40 NEXT
50 |CLEARINPUT

Ejecute este programa (por supuesto, después de ejecutar el cargador del listado 1) con y sin la línea 50, y fíjese en la diferencia.

El segundo comando es ICOPYCHR. La función que desempeña es copiar un carácter de la pantalla en la posición en que se encuentre el cursor de texto. En los listados lo encontrará de la siguiente manera: variable$ =COPYCHR$ (#n) donde variable$ es una variable de cadena en la cual se almacena el caracter leído, y n es el número de ventana de la cual se lee el carácter. Por ejemplo, a$=COPYCHR$ (#3) hace que a$ sea igual al carácter que se encuentre en la posición actual del cursor de texto de la ventana 3. La sintaxis de nuestro comando será algo di-ferente. El mismo ejemplo se escribiría a$ = ” ”:|COPYCHR, #a$, 3. Sí, está bien, sin el signo «$1. Para un mejor ejemplo, con-sulte el programa DEMO (listado 2) al final del artículo.

Otro comando: |FILL. Su función es rellenar una superficie de la pantalla del color especificado por el parámetro que le acompaña. La rutina rellenador se debe al programador Paco Suárez, de Indescomp, y como podrán ver es excelente, y capaz de rellenar las superficies más complejas.

El rellenado de la pantalla se comienza en la posición en que se encuentre el cursor
de gráficos, posición que no queda alterada después de ejecutarlo. Igualmente no se altera el color actual de gráficos, aunque sea distinto del que elegimos en el parámetro. En los listados lo encontrarán como FILL n, donde n es el número de pluma entre 0 y 15 (p.e. FILL 2). Nuestra forma de escribirlo será |FILL, 2. Atención a la coma, que es importante. Más ejemplos en la DEMO (listado 2).

El comando |FRAME espera a que se produzca el retorno vertical del trazo del Tubo de Rayos Catódicos. Es útil para mover figuras por la pantalla y que no aparezcan deformadas. En los listados aparece sencillamente FRAME, y nosotros escribiremos |FRAME. En el programa DEMO lo hemos utilizado para conseguir un retardo de un segundo, ya que el retorno del trazo vertical se produce cada 1/50 segundos. Por eso os damos un ejemplo más adecuado de su uso habitual:

10 MODE 0
20 PRINT "FRAME OFF"
30 TAG
40 MOVE 0,200
50 FOR X = 0 TO 600 STEP 4: MOVE X, 200: PRINT ”;CHR$ (143); :NEXT
60 TAGOFF
70 CLS
80 PRINT "FRAME ON"
90 TAG
100 MOVE 0,200
110 FOR X=0 TO 600 STEP 4: |FRAME:MOVE X, 200:PRINT” ”;CHR$(143);: NEXT
120 TAGOFF:RUN

El comando |GRAPHICSPAPER es totalmente equivalente al del 664 y 6128 GRAPHICS PAPER. Sólo admite un parámetro, que indica el color del papel para gráficos. Ejemplo: |GRAPHICSPAPER, 2.

El comando |GRAPHICSPEN admite en cambio dos parámetros. El primero determina el color de la pluma para gráficos. El segundo determina el modo de impresión de fondo (0: fondo transparente 1: fondo opaco). Por ejemplo, |GRAPHICSPEN, 2,0 hace que las órdenes DRAW, PLOT y PRINT combinado con TAG dibujen con la pluma 2 sobre fondo transparente. Ahí va el ejemplo:

10 MODE 1
20 CLG 2
30 |GRAPHICSPEN, 1,0
40 MOVE 0,200
50 DRAWR 640,0
60 MOVE 0,208
70 |GRAPHICSPEN, 3,0
80 DRAWR 640,0
90 MOVE 0,216
100 IF a=1 THEN f=0 ELSE f=1
110 |GRAPHICSPEN, 0, f
120 TAG
130 FOR x=0 TO 500 STEP 2: MOVE x,216:|FRAME:PRINT” ”; CHR$(251);: NEXT
140 TAGOFF
150 IF a=0 THEN a=1 ELSE a=0
160 LOCATE 1 ,1 :PRINT ”Pulse una tecla.”
170 WHILE INKEY$=” ”: WEND
180 GOTO 10

Esperamos que estos comandos os sean útiles. Para cargarlos en memoria, es necesario cargar y ejecutar el cargador de DATAS del Listado 1. Si se ha producido algún error en los DATAS el programa le avisará. Si no, aparecerá un mensaje indicando que el código máquina está cargado y los comandos están inicializados. Ahora ya dispone de ellos y los puede utilizar como cualquier otro comando BASIC, respetando la sintaxis arriba indicada. Es el momento de introducir el listado 2 y ver la DEMO.

Antes de finalizar, hemos de avisar a los lectores que este programa está diseñado para los usuarios del CPC 464. Si se desea utilizar estos RSX en un 664 o un 6128 hay que cambiar la línea 350 del listado 1, de modo que en lugar de:

350 DATA 53, 50, 45, CE, 00, 2A, A6, B1, 823

deberá escribir:

350 DATA 53, 50, 45, CE, 00, 2A, D3, B8, 875

Amstrad User #7

★ PUBLISHER: Amstrad User
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: ???
★ AUTHOR(S): ???
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-Otro  camino  hacia  la  compatibilidad    (Amstrad  User)    SPANISH    LISTINGDATE: 2022-03-05
DL: 135
TYPE: PDF
SiZE: 1499Ko
NOTE: 5 pages/PDFlib v1.6

Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» 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/c
Page créée en 658 millisecondes et consultée 1205 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.