home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / emulator / spectrum / spectrum.doc < prev    next >
Encoding:
Text File  |  1991-08-07  |  15.2 KB  |  350 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.                     ▀                       █            ▀
  17.          █▀▀▀▀▀▀▀▀▀ █ █▀▀▀▀▀▀▀▀█ █▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀█ █ █▀▀▀▀▀▀▀▀▀
  18.          ▀▀▀▀▀▀▀▀▀█ █ █        █ █          █ █▀▀▀▀▀▀▀▀█ █ █
  19.          ▀▀▀▀▀▀▀▀▀▀ ▀ ▀        ▀ ▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▀▀▀▀▀▀ ▀ ▀
  20.          ZX Spectrum           Simulador de Spectrum por Pedro Gimeno
  21.  
  22.  
  23.                             VERSION BETA 0.99A
  24.  
  25. -------------------------------------------------------------------------------
  26. -------------------------------------------------------------------------------
  27.  
  28.  
  29.  
  30.  
  31.                                     INDICE
  32.                                     ------
  33.  
  34.     1.- Introducción.
  35.  
  36.     2.- Teclas y manejo.
  37.  
  38.     3.- Posibilidades que incorpora.
  39.  
  40.     4.- El cassette.
  41.  
  42.     5.- Aspectos técnicos del emulador.
  43.  
  44.     Apéndices:
  45.     A.  Agradecimientos.
  46.     B.  Forma de contactar con el autor para el envío de sugerencias.
  47.  
  48.  
  49. 1.- INTRODUCCION
  50.  
  51.       Soy un "vicioso" del Spectrum. Tengo uno de 48K, de teclado de goma, y es
  52. a éste al que debo larguísimas horas de entretenimiento.
  53.  
  54.       Cuando adquirí el PC me planteé cómo mejorar el Spectrum dándole las
  55. prestaciones del PC (disco duro, teclado bueno, monitor claro, impresora
  56. rápida, etc.), pero no di con ninguna solución. Por otra parte, me atraía la
  57. pregunta de cuánto más podría ser el PC de rápido con respecto al Spectrum. Al
  58. fin, en primavera del 89 se me ocurrió la idea de un simulador. Había visto al-
  59. gún C64 con emulador de Spectrum, pero sólo a nivel BASIC. Pensé que no me era
  60. suficiente, pues no funcionarían ni el cinco por ciento de los programas. Te-
  61. nía, además, que simularlo a nivel de código máquina del Z-80.
  62.  
  63.       Empecé con un simulador de Z-80 en Pascal, pero la velocidad dependía de
  64. tantos factores que al fin me decidí a reescribirlo en ensamblador. Hice dos
  65. versiones, a cual más enrevesada. Al fin, me decidí por hacerlo "en plan sal-
  66. vaje": una rutina por cada instrucción, y todas en una tabla. Esto fue en ve-
  67. rano del 89.
  68.  
  69.       La primera versión de algo que tenía posibilidades de funcionar la tuve a
  70. punto en una semana. Pero me faltaba algo: la ROM del Spectrum. Quería que fue-
  71. ra una copia exacta de la existente en el ordenador, pero además echaba de me-
  72. nos el listado fuente. Al fin, me enteré de que un amigo tenía el libro "The
  73. Complete Spectrum ROM Disassembly", de Melbourne House, y se lo pedí.
  74.  
  75.       Dos semanas más me costó teclear todo el librito. Disponía de un ensam-
  76. blador cruzado de Z-80; lo ensamblé, lo comparé con el original, lo corregí, lo
  77. volví a ensamblar y lo probé con el emulador.
  78.  
  79.       ¡Sorpresa la mía! La primera versión hacía algo a la primera. No acababa
  80. de funcionar bien pero afortunadamente eran fallos leves. En poco tiempo estuvo
  81. a punto uno que me permitía ya teclear listados BASIC y demás.
  82.  
  83.       El problema surgió a continuación: ¿Cómo cargar de cassette? Suponía que
  84. dada la variación de velocidad entre PC's (8088, 8086, 80286, etc.) sería impo-
  85. sible siquiera plantearse que el emulador funcionara "de por sí" con cassette.
  86. Y además, ¿por dónde meterlo?
  87.  
  88.       Un amigo mío, que disponía de un osciloscopio, me ayudó a medir la fre-
  89. cuencia exacta y la tensión de mi reproductor de cassette. Resultó ser de unos
  90. cinco voltios a volumen máximo, lo que sugirió que usásemos el puerto paralelo,
  91. que reconocía esa misma señal. Puse a punto una rutina de carga compatible con
  92. las velocidades del Spectrum y modifiqué el emulador de manera que al llegar a
  93. la rutina de carga de la ROM entrase en la mía. Funcionó a la primera. Me fui
  94. corriendo en pos de mi copia del "Manic Miner" y lo cargué.
  95.  
  96.       Desde aquella época, el emulador ha sufrido bastantes modificaciones, to-
  97. das ellas para mejor. Y, actualmente, es lo que es. Se me propuso que lo ven-
  98. diera, con una apetitosa oferta. Al final, decidí lanzarlo al dominio público.
  99.  
  100.       Tengo en mente algunas mejoras adicionales, relativas algunas a la velo-
  101. cidad, otras al joystick y otras a una versión para 386 exclusivamente, que
  102. sacaría partido del mismo. Tal vez en una futura versión del emulador queden
  103. incorporadas.
  104.  
  105.  
  106.                               ** ADVERTENCIA **
  107.  
  108.       Circula una versión inválida e indocumentada del emulador, debida a una
  109. filtración por parte de alguien a quien creía mi amigo. Esa versión aún tiene
  110. por corregir un problema que el emulador manifestaba al salir al sistema, y que
  111. sobreescribe en la zona del D.O.S. pudiendo causar catástrofes imprevistas. Es
  112. aconsejable que deje de utilizarse por completo, en previsión de accidentes.
  113. Además, los ficheros que reconocía no son compatibles con el nuevo formato que
  114. utilizo, más avanzado.
  115.  
  116.  
  117.  
  118. 2.- TECLAS Y MANEJO
  119.  
  120.       Se entra al programa escribiendo SPECTRUM y pulsando ENTER. Opcionalmente
  121. puede darse un nombre de un fichero a cargar de disco, con la extensión .SP por
  122. defecto.
  123.  
  124.       Nada más cargarse nos aparece el menú principal. Las opciones en este
  125. punto son:
  126.  
  127.       F1: Entrar en el emulador.
  128.       F2: Grabar programa a disco.
  129.       F3: Generar NMI.
  130.       F4: Pausa.
  131.       F9: Reset.
  132.       F10: Salir del programa.
  133.  
  134.       Para poner en marcha el emulador, pulsar F1. Si se ha cargado un progra-
  135. ma, éste se pondrá en marcha; de lo contrario, arrancará el emulador normalmen-
  136. te. Si se pulsa F4 desde el menú, aparecerá la pantalla del programa cargado,
  137. pero con el emulador parado. Cuando se pulse F1 desde el modo de pausa, conti-
  138. nuará el programa normalmente. Esto está hecho para poder mirar la pantalla de
  139. presentación de algunos programas.
  140.  
  141.       Todas las teclas del menú continuarán activas durante la emulación, aun-
  142. que una tendrá un significado ligeramente diferente: F1 servirá para reinicia-
  143. lizar y redibujar la pantalla.
  144.  
  145.       Si se pulsa F2, se grabará el programa que haya actualmente en RAM a dis-
  146. co, con el nombre SNAPnnnn.SP (nnnn es un número de 0001 a 9999). Empieza en
  147. 0001, y si ya existía avanzará al 0002, y así sucesivamente hasta que haya uno
  148. que no exista. Así, la primera vez que pulsemos F2 se grabará con el nombre de
  149. SNAP0001.SP .
  150.  
  151.       Cuando invoquemos después al emulador con SPECTRUM SNAP0001 y Enter,
  152. arrancará en el punto en que estaba al pulsar F2.
  153.  
  154.       La tecla F3 tiene un propósito especial. Es más útil para programadores;
  155. las únicas esperanzas que puede tener un usuario respecto a esta tecla son que
  156. la tecla cause un RESET o que no haga nada en absoluto. Se ha incluído sólo por
  157. si alguien la encuentra útil. Consultar el apartado 4 (Aspectos técnicos del
  158. emulador) para más información.
  159.  
  160.       Cuando pulsemos F4, el programa que se esté ejecutando, sea cual sea, se
  161. detendrá.
  162.  
  163.       F9 sirve para "resetear" el Z-80; creo que todos sabemos para qué sirve.
  164.  
  165.       Y por último, F10 es para salirse al sistema en el momento que queramos.
  166.  
  167.       Los posibles mensajes de error que nos puede dar el emulador son:
  168.  
  169.       Programa a cargar inválido. Esto quiere decir que el fichero no existe,
  170. o que no se trata de un fichero adecuado para el emulador. El autor se reserva
  171. el derecho a cambiar el formato de los ficheros .SP en futuras versiones.
  172.  
  173.       Memoria insuficiente. Ocurrirá cuando el emulador no puede reservar los
  174. 64 K. que necesita para simular la zona de memoria del Z-80.
  175.  
  176.       Fichero SPECTRUM.ROM inválido o no encontrado. Este error se producirá si
  177. el emulador no encuentra el fichero SPECTRUM.ROM en el directorio actual, o
  178. bien si no tiene exactamente 16384 bytes.
  179.  
  180.  
  181.       EL TECLADO.- El simulador está preparado para un teclado expandido espa-
  182. ñol. Si no se utiliza uno con estas características, es posible que algunas te-
  183. clas no se correspondan con su función.
  184.  
  185.       La tecla de Mayúsculas desempeña una función especial. Hace que las te-
  186. clas del teclado expandido se correspondan con los caracteres del PC. Así, Ma-
  187. yúsculas + 2 nos da las comillas ("), por ejemplo, y mayúsculas + letra nos da
  188. esa letra en mayúsculas, lógicamente. No es exactamente igual al CAPS SHIFT del
  189. Spectrum.
  190.  
  191.       La función de CAPS SHIFT la tiene la tecla CTRL del PC. Esta sí que se
  192. corresponde exactamente con la del Spectrum; así, CTRL + 2 nos pone en modo de
  193. CAPS LOCK, como si en el Spectrum hubiésemos pulsado CAPS SHIFT + 2.
  194.  
  195.       Y la función de SYMBOL SHIFT la da la tecla ALT. También se corresponde
  196. exactamente con la del Spectrum. Así, ALT + A nos da la palabra STOP. En este
  197. caso sirven igualmente el ALT normal y el ALT GRáfico.
  198.  
  199.       Actualmente, las teclas de cursor no tienen ningún efecto, aunque en el
  200. futuro pienso darles el significado que tiene el JOYSTICK tipo KEMPSTON.
  201.  
  202.       La tecla TAB sirve para activar el modo extendido (equivale a CAPS SHIFT
  203. + SYMBOL SHIFT).
  204.  
  205.       La tecla rotulada con (º) equivale a EDIT (CAPS SHIFT + 1).
  206.  
  207.       La tecla ESC nos lleva al menú de nuevo, por si queremos consultar las
  208. opciones de que disponemos.
  209.  
  210.       El resto de teclas son los caracteres que figuran en la tecla.
  211.  
  212.  
  213. 3.- POSIBILIDADES QUE INCORPORA
  214.  
  215.       - Manejo de cassette y simulación de impresora tipo ZX-PRINTER.
  216.       - Correspondencia del teclado PC con el teclado Spectrum.
  217.       - Posibilidad de grabar el programa en disco y volverlo a cargar poste-
  218. riormente.
  219.       - Funciona con adaptadores EGA y VGA.
  220.       - Posibilidad de ejecutar la mayoría de programas del ZX Spectrum.
  221.       - Control de RESET y NMI del Z-80 mediante teclas de función.
  222.  
  223.  
  224.  
  225. 4.- EL CASSETTE
  226.  
  227.       Para hacer el cable de cassette, se necesitan:
  228.  
  229.       - Un conector macho de 25 pines en D (el que tiene normalmente un cable
  230. paralelo por el lado que se conecta al PC).
  231.       - Cable apantallado (malla y vivo).
  232.       - Un conector JACK de 1.5 mm. (el que usamos para conectar al cassette).
  233.       - Soldador y estaño.
  234.  
  235.       La malla del cable se debe soldar a una pata entre la 18 y la 25, y por
  236. el lado del JACK a la masa (parte grande). El vivo ha de soldarse a la pata 13,
  237. y por el lado del JACK al central (parte pequeña). He aquí un esquema (por el
  238. lado de las soldaduras) del conector paralelo:
  239.         vivo
  240.       ___│___________________________________________________
  241.   13  \  o   .   .   .   .   .   .   .   .   .   .   .   .  / 1
  242.        \   o   .   .   .   .   .   .   .   .   .   .   .   /
  243.      25 \__│______________________________________________/ 14
  244.            │
  245.          malla
  246.  
  247.  
  248.                         ******** IMPORTANTE ********
  249.  
  250.       Mi cassette da los 5 voltios casi exactos a máximo volumen. Por debajo de
  251. dicha tensión, el puerto paralelo también funciona. No creo recomendable utili-
  252. zar el cassette a máximo volumen, porque sería poner en peligro el interface
  253. paralelo del PC si da más de 5 voltios.
  254.  
  255.  
  256. 5.- ASPECTOS TECNICOS DEL EMULADOR
  257.  
  258.       Funcionará en tarjetas EGA 100% compatibles y en VGA. Si se utiliza con
  259. este último adaptador de video, los colores saldrán más naturales, pero el bor-
  260. de de la pantalla no se rellenará por completo.
  261.  
  262.       Mientras el emulador está en marcha, el reloj del PC no se actualiza. Al
  263. salir del emulador, éste lee la hora del reloj CMOS de tiempo real y la asigna
  264. como hora del sistema. Si el equipo es un PC-XT o inferior (?) la fecha y hora
  265. del sistema al salir se perderán.
  266.  
  267.       Para que el emulador vaya a una velocidad aceptable, debe correr en un
  268. PC-AT o compatible con procesador 80386 a 25 MHz con sistema caché, o bien a
  269. 33 MHz sin él. En un equipo 286, la velocidad no llega a ser la suficiente como
  270. para poder compararse a la del Spectrum.
  271.  
  272.       El cambio de color del borde provoca inevitablemente la aparición de una
  273. pequeña raya en la pantalla. Esto se debe a que se cambia de color mediante la
  274. actualización de la paleta de colores, y el controlador de vídeo y la CPU no
  275. pueden acceder simultáneamente a los registros de paleta. Este efecto se nota
  276. más durante la carga de un programa, o con juegos que hagan efectos con el bor-
  277. de.
  278.  
  279.       Puede que alguien se pregunte por qué entonces cuando cambia la paleta
  280. mediante las funciones al respecto, no aparece esa raya. La respuesta es que el
  281. BIOS del PC se espera a que la pantalla llegue a un retrazado vertical (Verti-
  282. cal Retrace) para actualizarlo, lo que supone un retardo que durante la emula-
  283. ción no se puede permitir.
  284.  
  285.       La rutina de carga de cassette es ligeramente diferente a la de un Spec-
  286. trum normal. Está preparada para que sea cual sea la velocidad del ordenador
  287. (la he probado incluso en un PC-XT a 4.77 MHz) funcione a 1500 baudios (un pul-
  288. so de 1000 Hz. para los bits 0 y de 2000 Hz. para los bits 1) con el tono guía
  289. de 800 Hz.
  290.  
  291.       Se nota la diferencia porque el borde, en lugar de parpadear, está sacan-
  292. do rayas como si se tratara del tono guía. En realidad, esas rayas no signifi-
  293. can que esté leyendo nada; cuando el tono guía empieza a sonar, las rayas salen
  294. un poco más estrechas.
  295.  
  296.       El puerto de E/S 254 (FEh) es, como cabe esperar en un Spectrum, el que
  297. se ocupa en escritura de actualizar el borde y el altavoz, y en lectura de leer
  298. el teclado y el puerto paralelo (cassette), si bien la rutina de carga que he
  299. preparado no efectúa una lectura por dicho puerto.
  300.  
  301.       El puerto 251 (FBh) actúa sobre la impresora. Si bien no lo hace de mane-
  302. ra idéntica a un Spectrum, sí es cierto que tal y como funciona la rutina ROM
  303. de impresora del mismo lo hace bien.
  304.  
  305.       Actualmente está preparado para funcionar con impresoras IBM y EPSON que
  306. permitan gráficos.
  307.  
  308.       Al menos en esta versión, ningún otro puerto E/S hace nada.
  309.  
  310.       El simulador de Z-80 hace lo que puede con las instrucciones no documen-
  311. tadas por Zilog. La instrucción SLL r (códigos de operación 203 48 a 203 55)
  312. hace lo mismo que la SLA r (códigos 203 32 a 203 39). Reconoce el IN fantasma
  313. con código 237 112 y actualiza los flags en consecuencia. Todas las instruc-
  314. ciones normales o con prefijo 203 (CBh) que tenían además el prefijo IX (221,
  315. DDh) ó IY (253, FDh) y que afectan al registro H o L, operan en su lugar con
  316. el byte alto o bajo de IX (XH ó XL) ó IY (YH ó YL).
  317.  
  318.       Si algún programa se vale del registro R de refresco con un fin que no
  319. sea obtener un número aleatorio, no conseguirá su propósito.
  320.  
  321.       El modo 0 de interrupciones (IM 0) no funciona. Sólo funcionan los modos
  322. 1 (RST 56) y 2 (llamada a la dirección dada por el registro I como byte alto y
  323. el valor 255 como byte bajo).
  324.  
  325.  
  326. APENDICE A. AGRADECIMIENTOS.
  327.  
  328.       Mi agradecimiento a Francisco Garrigues por prestarme el libro "The com-
  329. plete Spectrum ROM disassembly", de Melbourne House, por Ian Logan y Frank
  330. O'Hara.
  331.  
  332.       Estoy muy agradecido a Alejandro Valero por su contribución con ideas de
  333. cara a acelerar lo que antes era más lento todavía, sobre todo en el tema del
  334. vídeo.
  335.  
  336.       A Diego Hernández, por la ayuda técnica referente al interface con el
  337. cassette.
  338.  
  339.       Y a Sir Clive Sinclair, por haber creado una máquina tan divertida.
  340.  
  341. APENDICE B. COMO CONTACTAR CON EL AUTOR.
  342.  
  343.       Por MODEM, a través de cualquier BBS perteneciente a la WWIV NET, en un
  344. mensaje dirigido al usuario #3 del nodo @32134 de la red ("Manivelo").
  345.  
  346.       Permitidme recordar que esta versión del emulador es una versión Beta (de
  347. pruebas, para comentar con los usuarios los posibles fallos). Ruego a todos que
  348. me hagáis saber de cualquier error ("bug") que encontréis en el emulador, así
  349. como cualquier sugerencia que se os ocurra hacerme al respecto.
  350.