APPLICATIONSDIVERS ★ ¿FUNCIONA TU JOYSTICK? ★

Multi-Programa (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 ★ 

Los ordenadores AMSTRAD utilizan la técnica de «Paginación de memoria». Esto quiere decir que parte de las direcciones de memoria que puede decodificar la CPU (El circuito Z80) están compartidas por distintos circuitos de memoria, los cuales son activados según las necesidades del aparato. En el 464, los primeros 16K están compartidos por un bloque de RAM y otro de ROM, al igual que los dieceséis últimos. En el 464 con unidda de disco, y en el 664, los últimos 16K pueden activar también u segundo bloque de ROM, que contiene el Sistema Operativo de disco. En el 6128 hay, además, 4 bloques de 16K de RAM que pueden compartir las direcciones del segundo bloque de 16K de la memoria principal.

La ventaja de utilizar esta técnica es que se puede disponer, con una CPU que sólo trabaja con 64K de direcciones, de más de 64K de memoria. En el caso de los AMSTRAD esto se traduce en la disponibilidad de alrededor de 43K de RAM para programas. Una gran capacidad de memoria que, en muchas ocasiones, se desperdicia, ya que son pocos los programas que hacen un uso pleno de ella.

Por este motivo publicamos esta utilidad que hemos denominado «Multi-Programa», ya que su principal función es esa: permitir que coexistan en la memoria de nuestro AMSTRAD varios programas BASIC a la vez, y poder pasar de uno a otro sin que se borren los que no estemos utilizando. Sin embargo, hay que advertir que no nos será posible pasar de un programa a otro durante la ejecución, sino que el paso ha de hacerse «a programa parado».

El número de programas que pueden convivir en memoria depende de la longitud de cada uno de ellos. Por otro lado, es preciso tener cuidado de no sobreescribir un programa con otro. Para ello, debemos consultar cuál es la dirección más baja que se puede utilizar por medio del comando |BUSCA.MINIMO.

Para que comprendáis mejor la posible utilidad de todo esto y cómo cargar los programas en memoria, vamos a poneros un ejemplo:

Supongamos que ya habéis tecleado el cargador BASIC (listado 1) y que funciona sin errores, y que lo tenéis salvado en cinta/disco. Si lo ejecutáis con RUN, aparecerá el mensaje indicando que ya están activados los comandos residentes. Si escribía |IMP.COMIENZO el ordenador contestará &016F, que es la dirección donde normalmente comienza el BASIC.

Es el momento de cargar un programa en memoria. Este puede ser, por ejemplo, un monitor, que os permita inspeccionar los códigos de los programas que carguéis para ver cómo se almacena en memoria una línea BASIC.

Una vez cargado el programa, escribid a%=0:|BUSCA.FINAL, a%:PRINT a% y el ordenador os dirá en qué dirección termina el programa que habéis cargado. No obstante, por encima de esa dirección se almacenarán las variables. Si ahora tecleáis |BUSCA.MINIMO, a%:PRINT a%, sabréis cuál es la dirección más baja en que podéis cargar el siguiente programa. Sin embargo, esta dirección es válida si el primer programa no lo vais a ejecutar. Si lo ejecutáis, las variables que utilice dicho primer programa ocuparán espacio inmediatamente detrás de él, por lo que el valor MINIMO cambiará. Probad a ejecutarlo y detenerlo, y pedidle otra vez |BUSCA.MINIMO.

Para cargar un segundo programa, debéis primero cambiar la dirección de comienzo a una mayor que MINIMO. Por ejemplo, si |BUSCA.MINIMO devolció el valor 3406, podéis introducir |FIJA.COMIENZO,3500. Si ahora introducís |IMP.COMIENZO os dirá 3500, y si le peddía el listado no aparecerá nada. Ya podéis cargar el segundo programa.

Una vez cargado, podéis volver al primero tecleando |FIJA.COMIENZO,&016F. Para comprobar que sigue ahí, pedid al ordenador un listado.

Hay que hacer notar que, al cambiar de un programa a otro, las variables se pierden (es decir, que el primer programa no puede utilizar las del segundo y viceversa) ya que cada uno utiliza su propia área de variables.

El BASIC de los ordenadores AMSTRAD marca el final del programa mediante dos bytes cero consecutivos. Por tanto, el método que utiliza nuestra utilidad para averiguar dónde termina el programa (comando |BUSCA.FI-NAL) consiste simplemente en buscar dos ceros consecutivos. Sin embargo, para evitar que unos datos accidentalmente sean interpretados como programa sin serlo, se verifica en cada línea que su longitud no sea mayor de 255. Si aparece una línea de más de 255 bytes, se ejecuta el comando |BORRA.PROGRAMA para eliminar esos datos, ya que evidentemente son falsos.

Los comandos RSX de que disponéis son los siguientes:

|IMP.COMIENZO: Imprime la dirección de comienzo del programa.

|BUSCA.COMIENZO, variable%: Similar al anterior, pero en lugar de imprimir la dirección, la introduce en la variable. Dicha variable debe previamente tener asignado algún valor, pues sino la función variable% producirá un error.

|FIJA.COMIENZO,entero: Fija la dirección de comienzo de un programa. Es la instrucción a utilizar antes de cargar un programa y para moverse de un programa a otro. Es interesante no confiar en nuestra memoria y anotar las direcciones en las que cargamos los programas, o bien, si la longitud de éstos lo permite, utilizar direcciones «redondas» (por ejemplo, %1000, &3000, &5000, &7000, etc.).

|BUSCA.FINAL, va-riable%: Introduce en la variable el valor de la última dirección utilizada por el programa que estamos considerando. Tras esta dirección se almacenan las variables.

|BUSCA.MINIMO, va-riable%: Introduce en la variable la primera dirección utilizable por un nuevo programa detrás de la zona de variables del que estamos considerando.

|BORRA.PROGRAMA: Borra el programa que estamos considerando, sin afectar a los demás. Si se utiliza la instrucción habitual de BASIC, NEW, se borrarán todos los programas.

El programa, tal y como se presenta, es totalmente compatible con 464/664/6128, ya que la principio, a la vez que inicializa los comandos residentes, averigua en qué versión de BASIC está trabajando (1.0 para el 464 y 1.1d para el 664 y 6128), y se auto-modifica en consecuencia.

La dirección de carga del código máquina es &A000. Si se desea ubicar el programa en otra dirección, será necesario utilizar el listado 2 con un programa ensamblador cambiando el valor del origen (ORG), ya que el programa incluye direcciona-mientos absolutos, y por tanto no es relocalizable.

Amstrad User

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



★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Multi-Programa    (Amstrad  User)    SPANISH    LISTINGDATE: 2022-03-08
DL: 251
TYPE: PDF
SiZE: 1046Ko
NOTE: 6 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.732-desktop/c
Page créée en 194 millisecondes et consultée 840 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.