APPLICATIONSDIVERS ★ RSX MEMORY (AMSTRAD SEMANAL) ★

RSX Memory (Amstrad Semanal)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 ★ 

Para muchos, la principal diferencia entre el CPC 464 y el CPC 6128 es que este último posee una unidad de disco en lugar del cassette. Sin embargo, existe una diferencia más que parece haber sido olvidada: el CPC 6128 posee 128 K de memoria RAM, de los que 64 K se desaprovechan casi por completo. El siguiente programa permite utilizar la memoria alternativa del CPC 6128, o la de los modelos anteriores con la ampliación de memoria de Dk'Tronics.

Apesar de las enormes ventajas de que podría gozar el CPC 6128 por su memoria extra, en la práctica ésta no se utiliza más que en el CP/M PLUS y en algunos programas de utilidades. El presente programa permite, mediante la creación de tres comandos RSX utilizar, la memoria alternativa desde el Basic, o incluso desde Código Máquina, en este caso con llamadas directas a las rutinas que manejan la memoria.

Básicamente estos tres nuevos comandos utilizan la memoria alternativa en un solo bloque, y permiten salvar toda la memoria normal a la alternativa, cargar toda la memoria normal de la alternativa o intercambiar ambas memorias.

Para tener estos comandos RSX en memoria sólo es preciso ejecutar un corto bloque binario con autoejecución, que se encargará de reinicializar el ordenador con los comandos «escondidos» en una porción de memoria inaccesible para el sistema, y que como el disco, únicamente nos_quitará algo de memoria, pero sin ocasionar ningún problema con los programas que utilicemos. De esta manera, podremos estar tranquilos de que no «machacaremos», por accidente, las rutinas que manejan la memoria al cargar algún programa en Código Máquina en direcciones altas de memoria.

Este bloque binario es generado por el programa I, llamado Memory.Bin. Para tener los comandos RSX en memoria sólo hay que hacer RUN”MEMORY, o bien RUN” si se dispone de cassette. Es muy importante hacerlo antes de cargar otra cosa en memoria, porque al instalar los comandos se hace una inicialización completa del ordenador, por lo que cualquier cosa que tuviéramos, a no ser en la memoria alternativa, la perderíamos.
El que quiera teclear los programas en ensamblador y disponga del ensamblador del paquete Devpac de Hisoft deberá teclear el programa II, ensamblarlo con la opción 20 y salvar el código objeto. A continuación teclear el programa III y ensamblarlo con la opción 4. Una vez ensamblado, y con él en memoria (cuidado con el lugar de memoria donde coloquemos el ensamblador) salir al Basic y teclear de forma directa:

LOAD“BANK.BIN”,&5040

(suponiendo que el código objeto generado al ensamblar el programa II se haya llamado bank.bin.

SAVE“MEMORY.BIN”,b,&5000,&280,&5000

(suponiendo que quiera llamar al bloque binario que instala los comandos RSX, memory.bin).

Estos son los comandos RSX que se emplean para el manejo de la memoria alternativa: lMsave: permite salvar toda la memoria normal a la alternativa. También se conserva la pantalla, el modo, las tintas, etc. La ventaja consiste en que al reinicializar el ordenador, la memoria alternativa no se pierde y puede ser recuperada con el comando Mload.

|Mload: permite cargar toda la memoria normal de la alternativa, quedando el ordenador exactamente igual a como estaba en el momento de salvar toda la memoria.

|Mexch: intercambia ambas memorias, normal y alternativa. Al utilizarse se carga la memoria alternativa en la normal, y al mismo tiempo se salva la memoria normal en la alternativa. Su ejecución es algo más lenta que la de los comandos anteriores debido a que ambas memorias tienen que ser intercambiadas byte a byte.

Para los afortunados poseedores de una ampliación de memoria de Dk'Tronics además de un CPC 6128, o bien para los que posean un CPC 464 o un CPC 664 y la ampliación de memoria de 256 K, los comandos permiten la utilización de un parámetro opcional. Este parámetro es el número de página de 64 K a la que se desea salvar, de la que se desea cargar, o con la que se desea intercambiar. En el caso de que sea O, puede omitirse. De esta forma los comandos quedan como:

|MSAVE , n
|MLOAD , n
|MEXCH , n

siendo n el número de página de 64 K. Este n puede valer hasta 4, en el caso de un CPC 6128 y una ampliación de memoria de 256 K (320 K en total).

Los comandos Msave y Mload fueron pensados sobre todo como ayuda a los sufridos programadores de Código Máquina, que con gran facilidad —habla la voz de la experiencia— pierden toda la memoria en un «cuelgue» irrecuperable. En condiciones normales se almacena en disco o en cinta todo lo que se quiere volver a recuperar y se prueba el programa o rutina en Código Máquina. En caso de que algo falle hay que reinicializar el ordenador, recuperar todo otra vez y analizar las causas del fallo. Con la utilización conjunta de estos dos comandos podemos salvar toda la memoria (MSA VE) en la alternativa justo antes de hacer la prueba. En caso de que el ordenador se «cuelgue», o de que no estemos seguros de que la rutina no haya llenado de «basura» la memoria, podemos reinicializar el ordenador (pulsando simultáneamente Ctrl, Shift y Esc) y cargar de nuevo toda la memoria (MLOAD) con sólo ejecutar el bloque binario que instala los comandos RSX en la memoria con RUN”MEMORY (o como lo hayamos llamado) y utilizar el comando MLOAD. Como el bloque binario es muy corto, en unos pocos segundos estaremos en las mismas condiciones que antes del accidente.

Existe, sin embargo, un pequeño inconveniente que se puede paliar fácilmente. Si el «cuelgue», por alguna razón, desactiva las interrupciones, no podremos reinicializar el ordenador pulsando las teclas Ctrl, Shift y Esc. La única forma de reinicialización es apagar y volver a encender el ordenador. Esto último sí destruirá todo lo que tengamos en la memoria alternativa: la memoria alternativa no se modifica en una inicialización, pero sí al apagar el ordenador. La forma de evitarlo es instalando en el ordenador un botón de Reset, que se puede hacer muy fácilmente. Para su instalación basta con seguir las instrucciones del cuadro 1.

Cuando tengamos instalado el botón de Reset, podremos reinicializar el ordenador sin cortar la corriente y, por tanto, sin perder los contenidos de las direcciones de memoria alternativas.

Existe además una pequeñísima posibilidad de que el «cuelgue» modifique las ocho primeras direcciones de la Ram y en este caso no se podría reinicializar ni siquiera con el botón de Reset, a no ser que la Rom inferior estuviera paginada, o que el botón de Reset paginara la Rom inferior también. Esto se puede hacer por hardware, pero su complicación es bastante mayor que la instalación de un botón de Reset, que es tan sólo un pulsador que hace un puente entre la patilla Reset del Z80 y una de las conexiones a masa del bus de expansión. Su desarrollo queda fuera de los objetivos de este artículo.

CUADRO 1

Esquema para la elaboración de un RESET Hay que colocar un pulsador que, al oprimirse, conecte la patilla RESET del Z80 a masa, o bien hacer el puente directamente.

En el bus de expansión visto por detrás:

Este conector, junto con todas y cada una de sus propias conexiones, se encuentra descrito en el manual.

El comando Mexch fue pensado para poder tener dos programas simultáneamente en memoria, con su parte en Basic, rutinas en Código Máquina, ficheros de cinta o de disco abiertos, información en pantalla, variables, etc., y pasar de uno a otro en muy poco tiempo (unos tres segundos).

De esta forma, podemos estar procesando un texto sobre la lista de acreedores, y tener una base de datos con la lista de acreedores en la memoria alternativa. Para cualquier consulta sólo tenemos que intercambiar las memorias, ver lo que nos interese y volver a intercambiarlas.

La ejecución de estos tres comandos es tan potente, que se puede emplear el comando Msave, por ejemplo, desde un programa Basic que se está ejecutando, y al utilizar el comando Mload, la ejecución continuará desde la instrucción siguiente al comando Msave que se empleó para salvar toda la memoria.

Esto no está sólo limitado al Basic, sino que también es aplicable al Código Máquina.

Podemos llamar a la rutina que salva la memoria mediante Call, y después recuperarlo todo también desde Código Máquina, a través de Cali, a la rutina que carga. Incluso se puede hacer de forma mixta entre Basic y Código Máquina: salvar el programa desde Código Máquina y cargarlo desde Basic o viceversa.

Las direcciones de las tres rutinas, así como las condiciones de entrada y de salida se pueden encontrar en la tabla II.

TABLA II

Tabla de entradas directas desde código máquina. En todos los casos:

condiciones de entrada: Acumulador. Número de página de 64K (0-4).

condiciones de salida: AF, BC, DE y HL modificados.El resto de los registros se preservan. Direcciones de entrada:

MSAVE: &0AA76 (MS_E2)

MLOAD: &AAE2 (ML_E2)

MEXCH: &0AB4F (ME_E2)

Todas las direcciones son fijas.

Como ejemplo cargue el bloque binario y escriba algo en la pantalla, introduzca algunas líneas de Basic o cargue un programa Basic corto. A continuación ejecute IMsave. No se asuste si la pantalla se borra o se llena de «cosas raras», simplemente es debido a que la rutina que ejecuta el comando Msave utiliza la pantalla para agilizar el proceso. Ahora reinicialice el ordenador pulsando simultáneamente Ctrl, Shift y Esc. Vuelva a cargar el bloque binario y ejecute el comando I Mload. En un momento volverá a tener en memoria todo lo que tuviera antes.

Introduzca ahora el siguiente programa:

10 PRINT“PROGRAMA 1 EN EJECUCION”
20 PRINT"PULSE ‘C' PARA CAMBIAR DE PROGRAMA"
30 IF INKEY$ = "c" OR INKEY$ = "C" THEN |MEXCH
40 PRINT: GOTO 10

Ejecute el comando |Msave y modifique la línea 10 de manera que diga “PROGRAMA 2 EN EJECUCION”. Ejecútelo. Pulse ahora la tecla C y tendrá en memoria el programa cuya línea 10 dice “PROGRAMA 1 EN EJECUCION”. (Una vez más se podrá extrañar de los efectos que produce en pantalla; no se preocupe, que también es normal.) Ejecute este programa también. Pulse C unas cuantas veces para cambiar de un programa a otro. Podrá comprobar lo sencillo que es tener dos programas en memoria y lo sencillo que es el cambio de uno a otro.

En la práctica, lo que debe hacer para tener dos programas en memoria que se puedan llamar el uno al otro es lo siguiente:

— Inicialice el ordenador, cargue el bloque binario (RUN“MEMORY) y ejecute |Msave (esto último es muy importante, pues de lo contrario al ejecutar el comando Mexch o Mload y no haber nada en la memoria alternativa, el «cuelgue» estaría asegurado).

— Cargue el primer programa y ejecútelo. El programa deberá contener alguna opción para ejecutar la orden Mexcho bien forma de salir al Basic para hacer esto directamente.

— Una vez hecho esto cargue el segundo programa y ejecútelo también (este segundo programa también debe tener alguna opción para ejecutar el comando Mexch o forma de salir al Basic). Ahora puede trabajar con él, y en cuanto desee pasar al otro programa utilice la opción de Mexch o salga al Basic y hágalo directamente. En unos tres segundos estará en condiciones de utilizar el otro programa tal y como lo dejó.

Si desea evitar el que durante el cambio aparezcan «cosas extrañas» en pantalla —todo es acostumbrarse— puede poner todas las tintas a cero mediante la instrucción Ink n,0 dentro de un bucle y volverlas a poner a sus valores correctos después del cambio. Esto debe hacerse en los dos programas: ambos deberán poner las tintas a cero antes del cambio y luego restablecerlas después del cambio. Esto no fue añadido directamente al programa para evitar que su longitud aumentara, ya que no es realmente indispensable.

Por supuesto, se pueden utilizar programas comerciales siempre que permitan salir al Basic o se puedan modificar y no utilicen la memoria alternativa para algo. Por ejemplo el programa Tasword 128 utiliza la memoria alternativa para almacenar en ella el texto, por lo que destrozará el programa que allí tengamos. Tampoco podemos usar el CP/M PLUS.

En el caso de que dispongamos de más de 64 K de memoria alternativa, podemos utilizar alguno de los bancos de 64 K superiores (distintos del 0), sin tener siquiera que preocuparnos de esto último.

Ni que decir tiene que todos aquellos que posean más memoria tienen abierto una amplia gama de posibilidades. Estos pueden, por ejemplo, tener tres o más programas que se llamen unos a otros el mismo programa salvado en diversas fases de ejecución, etc. Incluso podrían crear un macroprograma con el menú e instrucciones completas en un bloque, y las diversas opciones en varios bloques distintos; quizá algunas de ellas compartiendo el mismo bloque. En el caso de que quisiéramos cargar todos los bloques seguidos, cosa que no se puede hacer desde el mismo programa, podríamos programar una tecla con toda la lista de instrucciones necesarias para la carga, como por ejemplo:

KEY 0, “LOAD” + CHR$ (34) + “BLOQUE1” + CHR$ (13) + “|MSAVE” + CHR$ (13) + “LOAD” + CHR$ (34) + “BLOQUE2” + CHR$(13) + “|MSAVE,1” + CHR$ (13) + “RUN”+ CHR$ (34) + “MENÚ” + CHR$ (13)

Bastará entonces con que pulsemos 0 en el keypad numérico para que se introduzca el programa Bloque! en el primer bloque, el Bloque2 en el segundo bloque, y se ejecute el programa Menú. Desde éste, cuando llamemos a uno de los otros programas (intercambiando el bloque en el que se encuentre con el actual) nos dejará en el Basic con el programa al que hemos llamado en memoria y sólo tendremos que pulsar Run la primera vez; a partir de entonces, cuando lo volvamos a llamar continuará su ejecución a partir de la instrucción siguiente al Mexch, que deberá ser Run o Goto al principio del programa. Este Mexch debe hacerse con el número de bloque en el que esté el mismo programa, para poder volver el menú.

Un programa cargador de todos los demás podría ser:

10 KEY 0, CHR$ (31) + “LOAD” + CHR$ (34) + “BLOQUE1” + CHR$ (13) + “|MSAVE” + CHR$ (13) + “LOAD” + CHR$ (34) + “BLOQUE2” + CHR$ (13) + “|MSAVE,1” + CHR$ (13) + “RUN” + CHR$ (34) + “MENÚ” + CHR$ (13)
20 PRINT: PRINT“CARGADOR DEL PROGRAMA X”
30 PRINT: PRINT“PULSE 'O' EN EL KEYPARD NUMÉRICO”
40 WHILE INKEY$ < >CHR$ (31): WEND

con la inclusión de un carácter inicial CHR$ (31) en la instrucción Key, que sirve para asegurarnos de que se pulsará 0 en el keypad numérico y no cualquier otra tecla.

Podrá comprobar como al pulsar 0 en el keypad numérico, tecla que es definida previamente mediante la instrucción Key 0 , ... se consigue ejecutar toda la lista de instrucciones que se han definido en esa tecla como si realmente se hubieran tecleado directamente. Sólo hay que tener cuidado con las comillas, que deben introducirse separadas como CHR$ (34) como bien puede apreciarse en los dos ejemplos anteriores.

AS

★ PUBLISHERS: Hobby Press , Amstrad Semanal
★ YEAR: 1987
★ CONFIG: 128K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD SEMANAL 1987
★ AUTHOR: Javier Elices
 



★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
 » Memory    (Amstrad  Semanal)    SPANISH    LISTINGDATE: 2026-07-05
DL: 2
TYPE: PDF
SiZE: 1098Ko
NOTE: Supplied by archive.org ; 2 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 382 millisecondes et consultée 36 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.