ZXM de Betasoft para CPC A modo de introduccion... Ya que he tratado sobre BASITO un Basic compatible Locomotive para el Spectrum, he decidido hacer la inversa, ver el ZXM, es decir ZX por ZX Spectrum y M por eMulator, lo cual me ha llevado a averiguar todo lo que se pueda acerca de este programita tan singular. Y para ello he buscado en internet y reunido unos cuantos extractos de los pocos textos diversos que hablan al respecto. El primero es un texto de un foro en turco. Seguido de un blog en ingles, la CPCwiki y por ultimo el articulo de Amstrad Action mismo que lo inicio todo. Y tras decir eso, empiezo con... I- ZXM (Spectrum Emulator) - Retrojen.org "No hay mucha información detallada sobre ZXM, podemos decir que es un emulador de ZX Spectrum para el Amstrad CPC. Fue hecha por BetaSoft, el creador del Beta Basic. Se cree que lo hizo Andy Wright mismo. También hemos examinado la review que le hizo la revista Amstrad Action." "Supongo que no era un emulador completo, pero hay un Basic Sinclair que se ejecuta en el C=64 . Me pregunto si este si es un emulador completo. ¿Cómo es su velocidad?" "Lo he probado, resulta ser algo muy básico. La pantalla esta en píxeles y se ubica en la dir. 50000. (¿El búfer de display original de Amstrad esta en esaa área?) Obtuve unos resultados más extraños, las rutinas en el sistema emulado cambia. (Ver POKE 23609,128 o Poke 23606,8) He encontrado los puertos de E/S, que también se emulan. El puerto 254 no reacciona. Asi, todo es como una estructura, la ULA ha sido emulada con el display de visualización. Pero el reloj es más rápido en Z80 de Amstrad. Los comandos como SAVE y LOAD son redirigidos al disco. Los otros comandos que en el Basic ZX son usados solo por los Microdrives tambien son redirigidos, asi CAT (sin parametros a lo CPC) da el catálogo de la unidad de disco de CPC. Me pregunto en qué modo grafico esta? El número de colores otorgado es más de 4, pero la relación de aspecto de píxeles es otra. ** Edit1: ya no preguntare por el color. Me apresure un poco al decir que se pueden mostrar más de 4 colores. Este emulador es practicamente en blanco y negro, eso significa que esta en el modo 1. Bueno, si hay más de 4 colores, basta con probar con BORDER 1, 2, o 3 y si se emula BORDER. Pero el papel y la tinta siempre son blanco y negro :D. ** Edit2: No conozco el mapa de Memoria del Amstrad, pero tengo la respuesta a mis preguntas. ZXM puede imprimir directamente en la pantalla de CPC. Solo examinando con: 10 FOR F = 50000 TO 51000: POKE F, RND * 255: NEXT F." II- GameHammer Classic Gaming "The Retro Gaming Electronic Magazine El Amstrad CPC tenia emulador de Spectrum? En los ultimos dias del Amstrad CPC, una interesante utilidad aparecio en las paginas de Amstrad Action. Esta utilidad clamaba ser capaz de emular un ZX Spectrum 16k, y por un largo tiempo la comunidad CPC lo considero un mito. Pero no es asi, es real! La CPC Wiki, piedra angular de la moderna comunidad CPC, cree que el programa fue escrito por el Dr Andy Wright de BetaSoft (pues BetaSoft era la empresa de un solo hombre, y ya que el Dr Wright se dedicaba mucho al software para Spectrum, eso parece logico) pero el unico review en el nro. 96 de Amstrad Action, no menciona el nombre del autor. Cuando lo lei por primera vez se me cayo la mandibula. Mi CPC puede emular al ZX Spectrum de mi primo? Era como un sueño hecho realidad! ZXM, el eMulador de ZX Spectrum, venia en un disco de 3-pulgadas y requiere de la descarga adicional de la ROM de un ZX Spectrum en la memoria (del CPC) para que funcione. El disco no venia con la ROM pero habian instrucciones de como copiar la ROM a un cassette para luego poderlo cargar en el CPC. En ese entonces se debia al problema de las licensias (Amstrad poseia el Spectrum y no ofrecia la ROM mientras el sistema le fuese aun de interes) pero ahora Amstrad ya permite el uso de las ROMs del Spectrum y CPC para los usuarios caseros, sin propositos comerciales en mente (asi es como las comunidades del Speccy y CPC estan tan revitalisadas hoy) – asi que esa es una victoria para el mundo moderno. El emulador corre sorprendentemente bien ... no debia sorprendernos ya que no tiene que emular al Z80, pues el CPC usa esa misma CPU, solo lo hace con aquellas partes que son unicas del Speccy. Hay problemas de compatibilidad que eran de esperarse siendo honestos. Los sprites no trabajan tan bien gracias al chip grafico del CPC y al modo como los monitores del CPC funcionan – el emulador no lo puede corregir todo – y eso limita su rapidez, ya que su modo de solventar ese dilema toma unos pocos ciclos del procesador. Al no poder manejar el acceso directo a los puertos, muchos juegos simplemente no funcionan (para mi desilucion, ya que realmente queria jugar esos clasicos del Speccy que nunca fueron portados al CPC) quedandote limitado a tipear en BASIC. ... si el ZXM hubiese aparecido unos pocos años mas antes, facilmente hubiesemos visto (luego) una ZXM 2 o algun programa rival que corrigiese todos los fallos que esta utilidad tiene. Hubiese sido increible poder usar todo el software clasico del Speccy en un CPC aun si este ya tiene como mas de 5 a 6 mil titulos en su enorme libreria de programas" III - CPC wiki "Una Mac emulando una CPC emulando a un Spectrum ZXM es un emulador del Sinclair ZX Spectrum que corre en un Amstrad CPC. Revisado por Amstrad Action, por largo tiempo se creia que no existio - pero una copia fue subsecuentemente encontrada por Brian Watson y publicada en Internet. Se cree que fue escrito por el Dr Andy Wright de Betasoft, un muy respetado autor de software para el Spectrum. Ningun contacto detallado fue provisto en la review de AA por lo que es dificil de confirmar. Informacion Technica El programa usa una ROM parchada del ZX Spectrum, colocada en las direcciones &0000-&3fff de la RAM del CPC, y que llaman a unas funciones ubicadas en &a000-&a700 para redirigir dichas funciones al hardware del CPC. Las funciones de visualizacion de caracteres en la pantalla son redirecionadas, asi cuando un caracter es impreso, el resultado es que dicho caracter es dibujado directamente en la pantalla del CPC. FLASH no es soportado, debido a eso los caracteres o la pantalla entera necesitan ser redibujados cada 'frame'. Load usa el firmware del CPC: CAS IN OPEN, CAS IN DIRECT y CAS CLOSE para cargar los ficheros desde el disco. Limitaciones - No hay atributos de parpadeo (flash) - No corre juegos de ZX Spectrum que requieren directamente del hardware. - Solo ejecuta programas en BASIC puro." IV- Amstrad Action 96, p.10 "UTILIDAD ZXM - Emulador de Spectrum Simon tenia un Speccy, como ya saben. Y muy recientemente obtuvo otro, en la forma de un disco de 3 pulgadas... Fue un dia muy triste cuando mi pobre Speccy finalmente ya no dio mas hace años. Y me consegui un CPC-464 nuevo un par de dias despues. Lo recuerdo claramente, fue la semana que salio el #10 de AA. Fue el primer numero que me compre y me engancho. El recuerdo de mi Spectrum fue relegado a un oscuro rincon de mi mente. Pero muy recientemente volvio a mi, debido a que alguien me envio un speccy de 16K por el correo, en la forma de un disco de 3 pulgadas. Un emulador del Spetrum. Un emulador es un programa que hace que tu computadora (en este caso un CPC) imite a otras maquinas (en mi caso al Sinclair Spectrum}. Basicamente eso es todo. Asi que cargue el ZXM para ver que tan buena impresion podia darme. El primer problema con el que te topas cuando compras el producto, es que la unica cosa que Betasoft no puede proveernos es con la copia de la ROM del Spectrum (te puedes imaginar metiendote en una disputa legal por motivos de copyright con los de Amstrad?), asi que eso tendras que conseguirlo por tu propia cuenta. Solo encuentra alguien con un Speccy. Salva una copia de su ROM a una cinta mediante los comandos indicados en el manual y lo cargas en el ZXM (pero hazlo con cuidado). Una vez que que has hecho la secuencia de arranque (la cual solo tienes que hacerla una vez - no cada vez que cargas el ZXM), veras aparecer en la pantalla el mensaje de inicio del Speccy. Aaah- la nostalgia. Hay solamente dos inconvenientes: * La memoria de pantalla - si bien la pantalla del Spectrum es mantenida intacta, obviamente los programas que usen rutinas de sprites y accedan a la memoria de la pantalla no se veran en el CPC (ya que el sistema lo usa pero no es compatible con la del Spectrum). Este problema ha sido superado mediante un comando que ofrece el emulador, el cual te permite acceder a la pantalla del Speccy del modo normal. Si bien soluciona el problema, tambien lo vuelve un poco mas lento. * Los puertos - siempre te vas a encontrar con algun programador que escribe su software para que accese a los puertos directamente. Eso causa problemas similares al caso de la compatibilad del Plus de la que tanto hemos oido en el mundo del CPC. Para ver que tan bien el ZXM puede personificar al Speccy, he decidido verlo en dos areas principales: - Uso simple -- en otras palabras, como hace ZXM cuando pretende ser un Speccy que alguien usa solo para escribir simples programas en BASIC ademas de ejecutar simples labores. Por ejemplo, rutinas para efectuar calculos complejos y operaciones recursivas, o programas BASIC algo mas avanzados y que no requieran de funciones especiales aparte de las instrucciones estandar del BASIC. ZXM lleva a cabo tales funciones perfectamente. La copia de ROM usada es, tal como el termino sugiere, una copia exacta, de modo que no deberia darnos problemas por ese lado. - Funciones avanzadas -- en este caso me refiero a trucos de programacion que usan puertos que aceleran areas operativas en juegos de arcade. Aqui es donde puedes esperar problemas, pero resulta que no. Vera, si bien sufrimos muchos problemas de compatibilidad en el PLUS en lo que a soft ware para CPC nos referimos, la verdad uno no ve demasiada programacion ociosa en lo que al Spectrum se refiere. El por que, no estoy seguro, pero tal se deba (ambas son maquinas con Z80) a que la arquitectura del sistema del Spectrum es ,muy distinta a la del CPC. En cuanto a las limitaciones de memoria tal vez tengamos dificultad para hallar el software adecuado para el ZXM, pero una vez superado esto, deberiamos tener exito a la hora de usar unos cuantos viejos juegos de Speccy. Con todo esto, hay que decir que si tuviste una vez un Speccy o siempre quisiste ver como era, este es el programa para ti. El Speccy fue uno de los primeros micros en el mercado (junto con su predecesor el ZX81) y si nunca lo usaste al menos una vez, te has perdido un gran trozo de la historia de los micro ordenadores. Simon, AA" El articulo incluye un pequeño listado ejemplo para hacer un circulo, una advertencia sobre usar la ROM que esta bajo licencia de Amstrad y la direccion de Betasoft para los que deseen consultar o comprar el ZXM. V- En español... En castellano solamente he encontrado dos paginas web que mencionan al ZXM: los del foro RetroWiki & Cacharreo [RW] postearon al respecto bajo el titulo: "Spectrumiza tu Amstrad CPC (al menos un poco)" el cual tradujo tambien el texto de la CPC wiki, pero parece que no lograron avanzar demasiado con el ZXM. Es mencionado tambien en AUA bajo el articulo llamado "Emuladores en Amstrad CPC", incluye un enlace a CPCRulez (en frances), el cual reproduce el articulo en ingles de AA 96 integramente. Y hasta aqui todo cuanto he podido hallar en la WEB sobre el ZXM. VI- Asi que para cerrar... Esto es lo que obtuve experimentando por mi cuenta: Primero me descargo el programa y elijo WINAPE para emular al CPC. Una vez puesto el disco en la unidad A, tipeo CAT y veo el archivo ZXM. Para ejecutarlo puedo elegir entre RUN "zxm" o hacer LOAD primero y enseguida RUN. Aparece el copyright de Sinclair y paso a tipear algo. Eso significa que esta copia incluye la ZX ROM a diferencia del original de Betasoft. Al pulsar la barra espaciadora, el cursor K se vuelve L como en Beta Basic. O sea que puedo tipear los comandos letra a letra. Tipeo cat y accedo al catalogo del disco del CPC: el A por defecto. No encuentro el modo de cambiar a la otra unidad B. Esto opera con un solo disco. Pruebo clear 60000 y me da RAMTOP no buena. Tipeo PRINT USR "u"+8 y obtengo 40992. Pruebo ahora 65536-usr 7962. En un 16k real me da 8705 (8k + algo) y en un 48k me devuelve 41473 (menos de 41k). Aqui me muestra 16929. Eso equivale a tener 24k de RAM pero dejando 16k libres. Paso a probar SAVE "algo" y ZXM lo salva al disco. Algunos comandos como SAVE no admiten funciones letra a letra tras las "...". Por ejemplo 'LOAD "algo" code' no es admitido pero si 'LOAD ... CODE' en modo E. Creo una matriz a$ y la salvo con SAVE...DATA. Pero LOAD...DATA da error. Dibujo un circulo y pruebo con SAVE ... SCREEN$. Crea un fichero de 7k en el disco. Pruebo a recuperarlo con LOAD ... SCREEN$ y no aparece nada en pantalla. Nada. CODE 16384 tampoco tiene ningun efecto. El area del fichero de presentacion visual y atributos no imprime nada en pantalla. Al menos el area de las variables del sistema si existe donde uno espera que este. Debido al mapeado extraño de la RAM y E/S no permite correr juegos comerciales. No solamente eso, no es posible leer el teclado con IN, menos aun un joystick. USR 0 no resetea el sistema. Da un mensaje raro y eso es todo. Al menos BEEP funciona, lo que significa que si hay sonido por lo menos. Mediante prueba y error descubri la existencia de los sigtes comandos: |TAPE selecciona el casete haciendo que SAVE, LOAD o MERGE operen solamente con cintas |DISC hace lo mismo pero seleccionando el disco A solamente |KEYS 0/1 selecciona tipear letra a letra (1) o entrar las instrucciones directamente al estilo del Spectrum (0) |OPEN"B/T" parece que selecciona como acceder a la impresora: en modo bits (B) o texto (T) |GRAB 0-56 aparte de su sintaxis no se que es lo que hace exactamente este comando |C... empieza con C, parece continuar con O y P. Pero su ultima letra, sintaxis real y su uso me son desconocidos. Si añado Y, se vuelve "COPY" y ya no lo acepta. Si a "copy" le añado mas letras me responde con el error 2 de variable no hallada. Probando con otro emulador NO$cpc, COPY y LPRINT o PRINT#3 si envian a la impresora que este conectada al CPC. Pero eso no me dice si el bufer de impresion esta en la misma direccion que en el Spectrum o si por otro lado ha sido cambiado. El teclado: a prueba y error descubri que TAB es EDIT, ESC es BREAK, CONTROL es SYMBOL SHIFT, COPY es modo E, el ENTER del teclado numerico es modo G, CLR es un segundo DELETE, SHIFT es CAPS y CAPS LOCK es el modo mayusculas. Lo que no hay en cambio son: INV.VIDEO ni TRUE VIDEO (bueno ya no me asombra puesto que no existe INVERSE 1 ni FLASH, BRIGHT, INK o PAPER y tampoco OVER!). En suma... lo unico que puedo hacer en el estado actual del emulador es: leer el teclado con INKEY$ y eso, trabajar sin colores y salvar las matrices y graficos con el mismo programa, ya que LOAD DATA y SCREEN$ no me funcionan como se esperaria que lo hagan. Al menos SAVE CODE y LOAD CODE funcionan al igual que ERASE. Los errores de disco dan los mensajes que el Beta Basic asociaba al Microdrive. Intento intercambiar datos entre +3 y ZXM mediante discos pero nada. Solo es posible mediante cintas. El review de AA nos menciona que el ZXM incluye una instruccion para solucionar el problema de compatibilidad de los modos graficos entre el CPC y el Spectrum, pero no nos dice cual es. Acaso se asocia con |GRAB cuyo uso desconozco, o con |COP cuya sintaxis real me es dificil de descubrir, o se trata de alguna rutina del tipo 'USR 6 mil algo' de la cual nada sabemos? El Dr. Andy Wright siempre añadia un manual de instrucciones bastante claro sobre las sentencias y comandos utiles para todos sus programas y precisamente eso es lo que falta: el manual. Sin ello, no hay mas avances posibles para hacer. Asi que lo dejo ahi. (c)2022 zx_if1@hotmail.com