★ APPLICATIONS ★ DIVERS ★ RSX MEMORY (AMSTRAD SEMANAL) ★![]() |
| RSX Memory (Amstrad Semanal) | Applications Divers |
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. 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 , nsiendo 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). |
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:
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:
Un programa cargador de todos los demás podría ser:
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.
| ![]() |
|