home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ▀ █ ▀
- █▀▀▀▀▀▀▀▀▀ █ █▀▀▀▀▀▀▀▀█ █▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀█ █ █▀▀▀▀▀▀▀▀▀
- ▀▀▀▀▀▀▀▀▀█ █ █ █ █ █ █▀▀▀▀▀▀▀▀█ █ █
- ▀▀▀▀▀▀▀▀▀▀ ▀ ▀ ▀ ▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▀▀▀▀▀▀ ▀ ▀
- ZX Spectrum Simulador de Spectrum por Pedro Gimeno
-
-
- VERSION BETA 0.99A
-
- -------------------------------------------------------------------------------
- -------------------------------------------------------------------------------
-
-
-
-
- INDICE
- ------
-
- 1.- Introducción.
-
- 2.- Teclas y manejo.
-
- 3.- Posibilidades que incorpora.
-
- 4.- El cassette.
-
- 5.- Aspectos técnicos del emulador.
-
- Apéndices:
- A. Agradecimientos.
- B. Forma de contactar con el autor para el envío de sugerencias.
-
-
- 1.- INTRODUCCION
-
- Soy un "vicioso" del Spectrum. Tengo uno de 48K, de teclado de goma, y es
- a éste al que debo larguísimas horas de entretenimiento.
-
- Cuando adquirí el PC me planteé cómo mejorar el Spectrum dándole las
- prestaciones del PC (disco duro, teclado bueno, monitor claro, impresora
- rápida, etc.), pero no di con ninguna solución. Por otra parte, me atraía la
- pregunta de cuánto más podría ser el PC de rápido con respecto al Spectrum. Al
- fin, en primavera del 89 se me ocurrió la idea de un simulador. Había visto al-
- gún C64 con emulador de Spectrum, pero sólo a nivel BASIC. Pensé que no me era
- suficiente, pues no funcionarían ni el cinco por ciento de los programas. Te-
- nía, además, que simularlo a nivel de código máquina del Z-80.
-
- Empecé con un simulador de Z-80 en Pascal, pero la velocidad dependía de
- tantos factores que al fin me decidí a reescribirlo en ensamblador. Hice dos
- versiones, a cual más enrevesada. Al fin, me decidí por hacerlo "en plan sal-
- vaje": una rutina por cada instrucción, y todas en una tabla. Esto fue en ve-
- rano del 89.
-
- La primera versión de algo que tenía posibilidades de funcionar la tuve a
- punto en una semana. Pero me faltaba algo: la ROM del Spectrum. Quería que fue-
- ra una copia exacta de la existente en el ordenador, pero además echaba de me-
- nos el listado fuente. Al fin, me enteré de que un amigo tenía el libro "The
- Complete Spectrum ROM Disassembly", de Melbourne House, y se lo pedí.
-
- Dos semanas más me costó teclear todo el librito. Disponía de un ensam-
- blador cruzado de Z-80; lo ensamblé, lo comparé con el original, lo corregí, lo
- volví a ensamblar y lo probé con el emulador.
-
- ¡Sorpresa la mía! La primera versión hacía algo a la primera. No acababa
- de funcionar bien pero afortunadamente eran fallos leves. En poco tiempo estuvo
- a punto uno que me permitía ya teclear listados BASIC y demás.
-
- El problema surgió a continuación: ¿Cómo cargar de cassette? Suponía que
- dada la variación de velocidad entre PC's (8088, 8086, 80286, etc.) sería impo-
- sible siquiera plantearse que el emulador funcionara "de por sí" con cassette.
- Y además, ¿por dónde meterlo?
-
- Un amigo mío, que disponía de un osciloscopio, me ayudó a medir la fre-
- cuencia exacta y la tensión de mi reproductor de cassette. Resultó ser de unos
- cinco voltios a volumen máximo, lo que sugirió que usásemos el puerto paralelo,
- que reconocía esa misma señal. Puse a punto una rutina de carga compatible con
- las velocidades del Spectrum y modifiqué el emulador de manera que al llegar a
- la rutina de carga de la ROM entrase en la mía. Funcionó a la primera. Me fui
- corriendo en pos de mi copia del "Manic Miner" y lo cargué.
-
- Desde aquella época, el emulador ha sufrido bastantes modificaciones, to-
- das ellas para mejor. Y, actualmente, es lo que es. Se me propuso que lo ven-
- diera, con una apetitosa oferta. Al final, decidí lanzarlo al dominio público.
-
- Tengo en mente algunas mejoras adicionales, relativas algunas a la velo-
- cidad, otras al joystick y otras a una versión para 386 exclusivamente, que
- sacaría partido del mismo. Tal vez en una futura versión del emulador queden
- incorporadas.
-
-
- ** ADVERTENCIA **
-
- Circula una versión inválida e indocumentada del emulador, debida a una
- filtración por parte de alguien a quien creía mi amigo. Esa versión aún tiene
- por corregir un problema que el emulador manifestaba al salir al sistema, y que
- sobreescribe en la zona del D.O.S. pudiendo causar catástrofes imprevistas. Es
- aconsejable que deje de utilizarse por completo, en previsión de accidentes.
- Además, los ficheros que reconocía no son compatibles con el nuevo formato que
- utilizo, más avanzado.
-
-
-
- 2.- TECLAS Y MANEJO
-
- Se entra al programa escribiendo SPECTRUM y pulsando ENTER. Opcionalmente
- puede darse un nombre de un fichero a cargar de disco, con la extensión .SP por
- defecto.
-
- Nada más cargarse nos aparece el menú principal. Las opciones en este
- punto son:
-
- F1: Entrar en el emulador.
- F2: Grabar programa a disco.
- F3: Generar NMI.
- F4: Pausa.
- F9: Reset.
- F10: Salir del programa.
-
- Para poner en marcha el emulador, pulsar F1. Si se ha cargado un progra-
- ma, éste se pondrá en marcha; de lo contrario, arrancará el emulador normalmen-
- te. Si se pulsa F4 desde el menú, aparecerá la pantalla del programa cargado,
- pero con el emulador parado. Cuando se pulse F1 desde el modo de pausa, conti-
- nuará el programa normalmente. Esto está hecho para poder mirar la pantalla de
- presentación de algunos programas.
-
- Todas las teclas del menú continuarán activas durante la emulación, aun-
- que una tendrá un significado ligeramente diferente: F1 servirá para reinicia-
- lizar y redibujar la pantalla.
-
- Si se pulsa F2, se grabará el programa que haya actualmente en RAM a dis-
- co, con el nombre SNAPnnnn.SP (nnnn es un número de 0001 a 9999). Empieza en
- 0001, y si ya existía avanzará al 0002, y así sucesivamente hasta que haya uno
- que no exista. Así, la primera vez que pulsemos F2 se grabará con el nombre de
- SNAP0001.SP .
-
- Cuando invoquemos después al emulador con SPECTRUM SNAP0001 y Enter,
- arrancará en el punto en que estaba al pulsar F2.
-
- La tecla F3 tiene un propósito especial. Es más útil para programadores;
- las únicas esperanzas que puede tener un usuario respecto a esta tecla son que
- la tecla cause un RESET o que no haga nada en absoluto. Se ha incluído sólo por
- si alguien la encuentra útil. Consultar el apartado 4 (Aspectos técnicos del
- emulador) para más información.
-
- Cuando pulsemos F4, el programa que se esté ejecutando, sea cual sea, se
- detendrá.
-
- F9 sirve para "resetear" el Z-80; creo que todos sabemos para qué sirve.
-
- Y por último, F10 es para salirse al sistema en el momento que queramos.
-
- Los posibles mensajes de error que nos puede dar el emulador son:
-
- Programa a cargar inválido. Esto quiere decir que el fichero no existe,
- o que no se trata de un fichero adecuado para el emulador. El autor se reserva
- el derecho a cambiar el formato de los ficheros .SP en futuras versiones.
-
- Memoria insuficiente. Ocurrirá cuando el emulador no puede reservar los
- 64 K. que necesita para simular la zona de memoria del Z-80.
-
- Fichero SPECTRUM.ROM inválido o no encontrado. Este error se producirá si
- el emulador no encuentra el fichero SPECTRUM.ROM en el directorio actual, o
- bien si no tiene exactamente 16384 bytes.
-
-
- EL TECLADO.- El simulador está preparado para un teclado expandido espa-
- ñol. Si no se utiliza uno con estas características, es posible que algunas te-
- clas no se correspondan con su función.
-
- La tecla de Mayúsculas desempeña una función especial. Hace que las te-
- clas del teclado expandido se correspondan con los caracteres del PC. Así, Ma-
- yúsculas + 2 nos da las comillas ("), por ejemplo, y mayúsculas + letra nos da
- esa letra en mayúsculas, lógicamente. No es exactamente igual al CAPS SHIFT del
- Spectrum.
-
- La función de CAPS SHIFT la tiene la tecla CTRL del PC. Esta sí que se
- corresponde exactamente con la del Spectrum; así, CTRL + 2 nos pone en modo de
- CAPS LOCK, como si en el Spectrum hubiésemos pulsado CAPS SHIFT + 2.
-
- Y la función de SYMBOL SHIFT la da la tecla ALT. También se corresponde
- exactamente con la del Spectrum. Así, ALT + A nos da la palabra STOP. En este
- caso sirven igualmente el ALT normal y el ALT GRáfico.
-
- Actualmente, las teclas de cursor no tienen ningún efecto, aunque en el
- futuro pienso darles el significado que tiene el JOYSTICK tipo KEMPSTON.
-
- La tecla TAB sirve para activar el modo extendido (equivale a CAPS SHIFT
- + SYMBOL SHIFT).
-
- La tecla rotulada con (º) equivale a EDIT (CAPS SHIFT + 1).
-
- La tecla ESC nos lleva al menú de nuevo, por si queremos consultar las
- opciones de que disponemos.
-
- El resto de teclas son los caracteres que figuran en la tecla.
-
-
- 3.- POSIBILIDADES QUE INCORPORA
-
- - Manejo de cassette y simulación de impresora tipo ZX-PRINTER.
- - Correspondencia del teclado PC con el teclado Spectrum.
- - Posibilidad de grabar el programa en disco y volverlo a cargar poste-
- riormente.
- - Funciona con adaptadores EGA y VGA.
- - Posibilidad de ejecutar la mayoría de programas del ZX Spectrum.
- - Control de RESET y NMI del Z-80 mediante teclas de función.
-
-
-
- 4.- EL CASSETTE
-
- Para hacer el cable de cassette, se necesitan:
-
- - Un conector macho de 25 pines en D (el que tiene normalmente un cable
- paralelo por el lado que se conecta al PC).
- - Cable apantallado (malla y vivo).
- - Un conector JACK de 1.5 mm. (el que usamos para conectar al cassette).
- - Soldador y estaño.
-
- La malla del cable se debe soldar a una pata entre la 18 y la 25, y por
- el lado del JACK a la masa (parte grande). El vivo ha de soldarse a la pata 13,
- y por el lado del JACK al central (parte pequeña). He aquí un esquema (por el
- lado de las soldaduras) del conector paralelo:
- vivo
- ___│___________________________________________________
- 13 \ o . . . . . . . . . . . . / 1
- \ o . . . . . . . . . . . /
- 25 \__│______________________________________________/ 14
- │
- malla
-
-
- ******** IMPORTANTE ********
-
- Mi cassette da los 5 voltios casi exactos a máximo volumen. Por debajo de
- dicha tensión, el puerto paralelo también funciona. No creo recomendable utili-
- zar el cassette a máximo volumen, porque sería poner en peligro el interface
- paralelo del PC si da más de 5 voltios.
-
-
- 5.- ASPECTOS TECNICOS DEL EMULADOR
-
- Funcionará en tarjetas EGA 100% compatibles y en VGA. Si se utiliza con
- este último adaptador de video, los colores saldrán más naturales, pero el bor-
- de de la pantalla no se rellenará por completo.
-
- Mientras el emulador está en marcha, el reloj del PC no se actualiza. Al
- salir del emulador, éste lee la hora del reloj CMOS de tiempo real y la asigna
- como hora del sistema. Si el equipo es un PC-XT o inferior (?) la fecha y hora
- del sistema al salir se perderán.
-
- Para que el emulador vaya a una velocidad aceptable, debe correr en un
- PC-AT o compatible con procesador 80386 a 25 MHz con sistema caché, o bien a
- 33 MHz sin él. En un equipo 286, la velocidad no llega a ser la suficiente como
- para poder compararse a la del Spectrum.
-
- El cambio de color del borde provoca inevitablemente la aparición de una
- pequeña raya en la pantalla. Esto se debe a que se cambia de color mediante la
- actualización de la paleta de colores, y el controlador de vídeo y la CPU no
- pueden acceder simultáneamente a los registros de paleta. Este efecto se nota
- más durante la carga de un programa, o con juegos que hagan efectos con el bor-
- de.
-
- Puede que alguien se pregunte por qué entonces cuando cambia la paleta
- mediante las funciones al respecto, no aparece esa raya. La respuesta es que el
- BIOS del PC se espera a que la pantalla llegue a un retrazado vertical (Verti-
- cal Retrace) para actualizarlo, lo que supone un retardo que durante la emula-
- ción no se puede permitir.
-
- La rutina de carga de cassette es ligeramente diferente a la de un Spec-
- trum normal. Está preparada para que sea cual sea la velocidad del ordenador
- (la he probado incluso en un PC-XT a 4.77 MHz) funcione a 1500 baudios (un pul-
- so de 1000 Hz. para los bits 0 y de 2000 Hz. para los bits 1) con el tono guía
- de 800 Hz.
-
- Se nota la diferencia porque el borde, en lugar de parpadear, está sacan-
- do rayas como si se tratara del tono guía. En realidad, esas rayas no signifi-
- can que esté leyendo nada; cuando el tono guía empieza a sonar, las rayas salen
- un poco más estrechas.
-
- El puerto de E/S 254 (FEh) es, como cabe esperar en un Spectrum, el que
- se ocupa en escritura de actualizar el borde y el altavoz, y en lectura de leer
- el teclado y el puerto paralelo (cassette), si bien la rutina de carga que he
- preparado no efectúa una lectura por dicho puerto.
-
- El puerto 251 (FBh) actúa sobre la impresora. Si bien no lo hace de mane-
- ra idéntica a un Spectrum, sí es cierto que tal y como funciona la rutina ROM
- de impresora del mismo lo hace bien.
-
- Actualmente está preparado para funcionar con impresoras IBM y EPSON que
- permitan gráficos.
-
- Al menos en esta versión, ningún otro puerto E/S hace nada.
-
- El simulador de Z-80 hace lo que puede con las instrucciones no documen-
- tadas por Zilog. La instrucción SLL r (códigos de operación 203 48 a 203 55)
- hace lo mismo que la SLA r (códigos 203 32 a 203 39). Reconoce el IN fantasma
- con código 237 112 y actualiza los flags en consecuencia. Todas las instruc-
- ciones normales o con prefijo 203 (CBh) que tenían además el prefijo IX (221,
- DDh) ó IY (253, FDh) y que afectan al registro H o L, operan en su lugar con
- el byte alto o bajo de IX (XH ó XL) ó IY (YH ó YL).
-
- Si algún programa se vale del registro R de refresco con un fin que no
- sea obtener un número aleatorio, no conseguirá su propósito.
-
- El modo 0 de interrupciones (IM 0) no funciona. Sólo funcionan los modos
- 1 (RST 56) y 2 (llamada a la dirección dada por el registro I como byte alto y
- el valor 255 como byte bajo).
-
-
- APENDICE A. AGRADECIMIENTOS.
-
- Mi agradecimiento a Francisco Garrigues por prestarme el libro "The com-
- plete Spectrum ROM disassembly", de Melbourne House, por Ian Logan y Frank
- O'Hara.
-
- Estoy muy agradecido a Alejandro Valero por su contribución con ideas de
- cara a acelerar lo que antes era más lento todavía, sobre todo en el tema del
- vídeo.
-
- A Diego Hernández, por la ayuda técnica referente al interface con el
- cassette.
-
- Y a Sir Clive Sinclair, por haber creado una máquina tan divertida.
-
- APENDICE B. COMO CONTACTAR CON EL AUTOR.
-
- Por MODEM, a través de cualquier BBS perteneciente a la WWIV NET, en un
- mensaje dirigido al usuario #3 del nodo @32134 de la red ("Manivelo").
-
- Permitidme recordar que esta versión del emulador es una versión Beta (de
- pruebas, para comentar con los usuarios los posibles fallos). Ruego a todos que
- me hagáis saber de cualquier error ("bug") que encontréis en el emulador, así
- como cualquier sugerencia que se os ocurra hacerme al respecto.