★ APPLICATIONS ★ DIVERS ★ EMULADOR 664/6128 PARA AMSTRAD CPC 464 (AMSTRAD USER) ★![]() |
| Emulador 664/6128 para Amstrad CPC 464 (Amstrad User) | Applications Divers |
Año nuevo, BASIC nuevo Se trata de una gran noticia, no sólo para los poseedores de un CPC 464, sino también para los que posean un 664 o un 6128, ya que podrán utilizar todas las capacidades del BASIC 1.1 de su aparato sin preocuparse de la compatibilidad de su programa con el «hermano pequeño». El primer listado se encarga de instalar en el CPC 464 la ampliación del BASIC 1.1. De momento, teclee este programa cargador: y sálvelo a cinta o cassette. A continuación teclee el programa BASIC (listado 5) generador del programa binario EMULADOR.BIN. Como pueden comprobar, está formado principalmente por líneas de DATAS, y dada su longitud, para evitar posibles errores al teolearlo, hemos incluido controles de error a tres niveles. En primer lugar, se verifica cada uno de los dos caracteres que forman un by-te para asegurarse de que no se ha introducido ningún carácter no hexadecimal (letra O en lugar del número cero, letra l en lugar del número 1, etc.). Por otra parte se realiza una suma de control por bloques, y además se realiza otra suma de control para cada línea. Es muy importante, para mayor seguridad, salvarlo a cinta/disco antes de ejecutarlo. Este listado 5 genera, como ya hemos comentado, un programa en código máquina llamado «EMULADOR.BIN», el cuál, en el caso de que utilicemos cassette, deberá quedar situado en la misma cinta que el listado 1, y justo detrás de él. Como pueden ver, el programa es notablemente corto, ya que no ocupa más que un solo bloque en cinta de cassette, por lo cual se tarda muy poco en cargarlo. |
| PRINT e INKEY$ | INPUT | |
| CURSOR 0,0: | desactivado | desactivado |
| CURSOR 0,1: | desactivado | activado |
| CURSOR 1,0: | desactivado | desactivado |
| CURSOR 1,1: | activado | activado |
Esta función ya existe en realidad en el CPC 464. Sin embargo, no aparece en el manual, ya que debido a un error en el intérprete BASIC es necesario utilizar siempre al principio dos paréntesis abiertos para evitar un error de sintaxis. Sin embargo, con el emulador sí funciona todo correctamente. La cadena de formato es una cadena de caracteres semejante a la utilizada en PRINT USING, y la expresión numérica queda convertida en una cadena de caracteres con el formato indicado.
FILL color
Anteriormente ya presentamos una rutina FILL para el CPC 464. La versión 664/6128 presenta algunos pequeños problemas: como límite para el rellenado de color sólo considera la pluma gráfica actual o el color con el que queremos rellenar.
El rellenado comienza siempre en la posición actual del cursor gráfico, el cual debe ser situado previamente con el comando MOVE x,y dentro de la superficie a rellenar.
FRAME
Esta instrucción sincroniza la imagen de pantalla con el retorno del trazo del tubo de rayos catódicos, lo cual nos permite mejorar el movimiento de las imágenes.
GRAPHIS PAPER color
Determina el color de fondo tanto en el modo gráfico como al imprimir caracteres en la posición del cursor gráfico utilizando la instrucción TAG. También fija el color de fondo cuando usamos la instrucción MASK.
GRAPHICS PEN color,fondo
Elije el color para escribir y el modo gráfico del fondo. El segundo parámetro tiene este significado:
0: Sobreescritura normal
1: Transparente
Casi siempre podemos omitir uno de los dos parámetros cuando no queremos cambiar su valor. El efecto en el 464, que no posee el modo transparente, queda demostrado con este ejemplo:
Una máscara de bit es valor numérico entre 0 y 255 que determina ocho puntos consecutivos cuando dibujamos una línea. Con este comando podemos crear a nuestro gusto líneas de trazos y puntos.
Los espacios quedarán rellenados con el color determinado por GRAPHICS PAPER, a no ser que hayamos elegido el modo transparente, en cuyo caso quedarán del color que hubiera antes.
Este comando hemos de aplicarlo con cuidado, pues evita que podamos interrumpir el programa, y un ON BREAK STOP anula el efecto de ON BREAK CONT.
PEN #ventana, color, fondo
Funciona igual que en el CPC 464, si bien, a través del último parámetro, podemos elegir el modo de fondo para el texto (0: normal, 1: transparente). De nuevo podemos omitir los dos últimos valores o uno de ellos, como por ejemplo PEN #1„0.
MERGE y CHAIN MERGE "nombre"
Estos comandos trabajan ahora perfectamente con disco. El indeseable mensaje de error “EOF met” lo intercepta el emulador.
Transmisión de parámetros en CALL y RSX_
Con el emulador podemos pasar directamente cadenas de caracteres a la instrucción CALL y a cualquier comando residente (RSX), como por ejemplo,
Todos los comandos gráficos quedan ampliados del modo siguiente:
| PARAMETRO | FUNCION |
| 0 | Sobreescritura normal |
| 1 | Modo XOR |
| 2 | Modo AND |
| 3 | Modo OR |
La función lógica correspondiente opera con el número del color de pluma y el del fondo.
Conclusiones
Como ya hemos mencionado al hablar de CLEAR INPUT, no podemos conseguir una compatibilidad completa entre los distintos modelos de CPC, pues algunas de las diferencias están grabadas profundamente en la ROM.
No hemos encontrado ninguna posibilidad para instalar la función DERR. El emulador la acepta, pero sólo devuelve el valor cero. Si a algún lector se le ocurre la solución, que nos la cuente: se necesita una rutina que devuelva el número de error en el acumulador.
El CPC 664/6128 permite en el comando MASK un parámetro más, que determina si junto al dibujo de líneas hay que imprimir o no el primer punto, lo que puede ser útil en el modo XOR. El emulador acepta el parámetro adicional sin producir un error, pero no ejecuta su función, ya que el esfuerzo de programación que supone conseguirlo es desproporcionado en relación al resultado obtenido.
No hemos podido instalar los vectores adicionales del sistema (por ejemplo, GRA FILL) del 664/ 6128, ya que en esa zona de la memoria están los vectores aritméticos del CPC 464. Por tanto, no se puede garantizar una total compatibilidad con la totalidad de las máquinas de la serie CPC.
El programador de 664/6128 que espera la ayuda del emulador en los problemas de compatibilidad y quiera instalar las rutinas de ensamblador en su programa debería tener en cuenta los siguientes factores:
| ![]() |
|