JASPE (L‚eme 010118asp) Versi¢n 010118 Novedades desde la £ltima versi¢n (000115) - Mejora gr fica de la interfaz de usuario. - Varios bugs corregidos. - A¤adido selector de ficheros para carga de programas. - Soporte de emulaci¢n parcial del AY. - Cambios internos menores. Por motivos personales este £ltimo a¤o no he trabajado mucho sobre el emulador. Tampoco he recibido comentarios acerca de ‚l y los errores que pueda presentar, por lo que ruego de nuevo que os pong is en contacto conmigo ante cualquier problema o fallo que le encontr‚is, si hay alg£n programa que no funciona intentar‚ solucionarlo, os lo agradecer¡a mucho y me ayudar¡a en mejorar el emulador. S‚ que hay muchos emuladores mejores que el m¡o, este no deja de ser un reto personal p£blicamente disponible. Fallos conocidos - Todav¡a no he conseguido una emulaci¢n decente del efecto 'ruido' del AY. - Bajo Windows y con algunos drivers de SoundBlaster la emulaci¢n del AY se interrumpe si se vuelve desde la emulaci¢n a la pantalla principal; al parecer la generaci¢n del sonido FM por la tarjeta se interrumpe con estos drivers al cabo de unos segundos por motivos que todav¡a desconozco. - La emulaci¢n de efectos ULA no es completa, fen¢menos como memoria en conflicto todav¡a no han sido resueltos, por lo que en demos y programas que juegan con dichos efectos no se aprecian fielmente. Contenido 0. Salvaguarda legal El autor no se hace responsable de cualquier da¤o que pueda derivarse del uso de este programa. Asimismo tambien declina toda responsabilidad ante el uso fraudulento que se pueda hacer del mismo con software de terceros, incluidos derechos y copyrights. Este programa es freeware, entendiendo tal t‚rmino como que es de libre distribuci¢n, con la £nica restricci¢n de que junto a los ejecutables es obligado acompa¤ar el presente fichero. No est  permitida su distribuci¢n s¢lo o acompa¤ado de otros elementos sujetos a inter‚s comercial sin previa consulta. En cualquier caso en lo posible me gustar¡a que junto al mismo figure el cr‚dito correspondiente de alguna manera: Julio Fern ndez - Lugo/Galicia/Espa¤a E-mail: ucldb@wanadoo.es Homepage: http://perso.wanadoo.es/ucldb 1.Presentaci¢n En la versi¢n actual, JASPE emula el Spectrum 48, y el 128. En primer lugar, JASPE viene por Just Another SPectrum Emulator, simplemente quise darle un doble significado, el jaspe es una piedra semipreciosa, o eso creo, y no es que esto pretenda ser nada del otro mundo, por ah¡ hay muchos y mejores emuladores. Es importante que fije exactamente qu‚ pretende ser este proyecto: a ra¡z de la aparici¢n del fen¢meno de la emulaci¢n, por lo menos para m¡, hace unos cuantos a¤os, a nivel de arcade y de ordenadores, me plante‚ el intentar la emulaci¢n del Z80, y como soporte de desarrollo el Spectrum, como el mejor representante de lo que yo llamo la "Edad de Oro" de la inform tica, a nada ser  como entonces. La emulaci¢n est  programada en ensamblador (MASM), y as¡ estoy aprovechando para aprender un poquito m s de la arquitectura x86 y PC. El soporte externo est  escrito en C (Borland Turbo C 2.0), tras unos primeros desarrollos que eran integramente en ensamblador. Los objetivos iniciales que me plante‚ fueron los siguientes: - Modularidad: un n£cleo que emule cualquier n£mero de Z80 simult neamente. - Fidelidad: que la emulaci¢n del Z80 fuera lo m s cercana posible a la realidad. - Prestaciones: obtener la mayor velocidad de emulaci¢n. Como dije antes el hardware soporte que eleg¡ fue el Spectrum, mi primer ordenador, al que luego siguieron alguno m s, por lo que colateralmente y poco a poco estoy intentando mejorar la emulaci¢n de este apartado tambi‚n, aparte del objetivo principal que es el Z80. De hecho me fije dos pruebas para verificar los objetivos: conseguir que funcionase en mi viejo XT (un 8088), y poder ver en pantalla correr 4 emulaciones simult neamente. Ambos est n conseguidos, con versiones ligeramente modificadas (en el XT a pesar de todo y como pod‚is imaginar la velocidad que se obtiene deja bastante que desear, pero funciona). ¨Adonde quiero ir a parar con este rollo?, pues a que esto no es una emulaci¢n de Spectrum perfecta, salta a la vista, sobre todo en una serie de puntos en los que si me es posible y el tiempo me lo permite intentar‚ mejorar. As¡ que os agradecer¡a no os pusieses en contacto conmigo para insultar o decir tonter¡as, y s¡ en cambio para decir 'esto se puede mejorar de tal o cual forma, no funciona este programa, he encontrado un fallo ...', o simplemente para hacer cualquier comentario o charlar conmigo. Puntos fuertes (en mi opini¢n, comentadme cualquier incidencia): - Emulaci¢n completa de Z80, registro R, intrucciones y flag no documentados. - Permite emular cualquier n£mero de maquinas simult neamente, aunque en esta versi¢n s¢lo uno se ejecuta a un tiempo. - Depurador integrado, permite cambios de registros, breakpoints, watch memoria, breakpoint sobre cambio de contenido, pokes, ejecuci¢n paso a paso y desensamblado en PC, posici¢n de memoria y log de 16 £ltimas instrucciones. - Interfaz muy personalizable, soporte para cualquier idioma. Puntos d‚biles (y los que se os ocurran,cualquier ayuda para solventarlos es bien recibida). - Sonido, de alg£n modo se debe poder conseguir un mejor sonido (v¡a altavoz), la programaci¢n de sonido y SoundBlaster se me resiste. - Temporizaci¢n, siempre es mejorable y es fundamental. Puntos que me planteo (son muchos porque no acabo con unos y ya se me ocurren otros ...): - Obviamente superar los puntos d‚biles. - Completar soporte para el AY (principalmente a¤adir ruido). - Completar la interfaz que estaba pensada para incorporar el uso de rat¢n. - Emular nuevo hardware ... y arcades basados en Z80. - Soporte de nuevos formatos, cinta, estoy probando realizar un programa aparte que se pueda ejecutar por s¡ solo como conversor o a partir del propio emulador como extractor. - Emulaci¢n completa de la ULA para obtener los efectos. Tengo una versi¢n preeliminar, pero no ser  exacta hasta conseguir un buen m‚todo de tratar accesos a memoria en conflicto. - Nuevo n£cleo de Z80, en vez de emular a nivel instrucci¢n emular a nivel de ciclo de reloj, basada en una descomposici¢n en microc¢digo de cada instrucci¢n, o incluso a nivel de unidad de control, ¨por qu‚ no?. - Desarrollo para un sistema operativo que merezca la pena ... LINUX. Todo el proyecto esta construido de forma modular por lo que en teor¡a s¢lo habr¡a que reprogramar los elementos mas relacionados con E/S y gesti¢n de memoria. - ... ma¤ana se me habr n ocurrido m s. 2. Requisitos, instalaci¢n y funcionamiento En principio el emulador puede correr bajo DOS, o WindowsXX. Debido a la utilizaci¢n de un modo de video no VESA no s‚ si funcionar  bajo OS/2 o LINUX (Dosemu). Por favor, reportad cualquier incidencia. En cuanto a hardware, posiblemente no necesite los 640K de memoria principal. Requiere memoria XMS, tarjeta de video con soporte VESA para el modo 640x480x256 y tarjeta de sonido con OPL-3 (cualquier compatible Soundblaster, ojal  dispusiera de alguna GUS ...). Para instalar, seg£n os haya llegado ZIPeado o como sea, as¡ proceder‚is, la £nica restricci¢n para ejecutar el programa es que junto al ejecutable est‚ el binario de las ROM, bajo el nombre SPECTRUM.ROM, SPECT128.ROM y los ficheros de soporte del interfaz: JASPETXT.JSP - Mensajes y textos. JASPEFNT.JSP - Fuente de caracteres. JASPEPAL.JSP - Paleta de colores. JASPECST.JSP - Colores de los objetos del interfaz. JASPEBMP.JSP - Gr ficos e iconos. Todos estos ficheros son modificables: El primero es un fichero de texto plano que contiene los mensajes y textos de opciones, por lo que se pueden traducir a distintos idiomas, as¡ como las teclas (hotkey) que establecen cada opci¢n en los men£s. El segundo contiene la fuente de caracteres, en principio utilizo un programa propio que a partir del BMP con los caracteres lo genera, pero todav¡a es poco 'usable', no obstante si a alguien le interesa que me lo comunique, y generar‚ el juego de caracteres correspondiente. El tercero contiene la paleta de colores en formato binario, 256 entradas de bytes R,G y B por lo que os puede resultar f cil generar vosotros mismo alguno, pero tened en cuenta que las 16 primeras entradas se corresponden con los colores originales del Spectrum. El cuarto contiene los ¡ndices sobre la paleta de colores de cada objeto de la interfaz de usuario. En pr¢ximas ediciones se podr n generar desde el interfaz, pero de momento utilizo algunos programas por separado para obtenerlos. Es un binario, por secuencia cada byte corresponde a una caracter¡stica, si alguien quiere personalizar los colores de la interfaz que me lo indique e incorporar‚ a la documentaci¢n un TXT que indique la correspondencia entre cada byte y el atributo de interfaz correspondiente. El quinto y £ltimo, nuevo a partir de esta versi¢n contiene los gr ficos de la interfaz en un formato propio comprimido. Igualmente si alguien quiere enviar algunos iconos o gr ficos alternativos que se ponga en contacto y estudiar‚ la posibilidad de generar el fichero correspondiente. Como veis la interfaz es muy flexible, aunque tengo que plantearme seriamente integrar los programas que tengo aparte para generarlos en el emulador y asi poder personalizarlo desde dentro. Adicionalmente podr‚is encontrar en la distribuci¢n archivos de interfaz alternativos a los anteriores; para utilizarlos en lugar de los iniciales simplemente ten‚is que renombrar o borrar el correspondiente JASPExxx.JSP y luego renombrar o copiar el alternativo JASPExxx.yyy como JASPExxx.JSP. Bueno, y ahora el funcionamiento: (nota previa, los colores que indico son con la interfaz est ndar que suministro, evidentemente con cualquier personalizaci¢n de la misma que hag is esto podr¡a variar). Simplemente JASPE, no hay INI ni switches ni par metros en l¡nea de comando. Existen cuatro unidades disponibles de emulaci¢n; el fondo rojo y el logo 'JASPE' indican que la unidad no est  inicializada es decir sin contenido, cuando la unidad est  inicializada o se ha cargado algun programa el fondo pasa a ser verde y el logo se sustituye por el icono de un Spectrum 48K o 128K seg£n corresponda; un subfondo interior amarillo indica qu‚ unidad es aquella sobre la cual se operan los distintos comandos del men£ (unidad activa). Para elegir cualquiera de ellas como activa pulsad el n£mero que corresponda (no en teclado num‚rico). Men£ principal: (se aplican sobre la unidad activa) Para seleccionar cualquier comando pulsad la tecla correspondiente (hotkey), que es aquella que figura en azul resaltando del texto en amarillo, o bien pod‚is moveros a trav‚s de las opciones con los cursores y teclas inicio y fin (la opci¢n actual es aquella enmarcada en por cuadro de l¡nea punteada) y seleccionarla con espacio o intro. Inicializar una unidad: conduce a un submenu en donde puedes elegir el hardware que deseas emular en esa unidad (48 o 128), es la forma de acceder a un Spectrum 'limpio' es decir reci‚n encendido. Inicializa ciertos datos y carga la ROM seleccionada. Para poder trabajar con una unidad es preciso inicializarla (salvo si se carga un programa directamente, proceso en el cual la unidad se inicializa autom ticamente con el hardware correspondiente). Una unidad inicializada pasa a mostrarse en color verde. Cargar un programa: abre un selector de ficheros en el cual figuran las unidades (drives) en amarillo, directorios en naranja y ficheros en azul o verde, en este £ltimo caso indicando que es un fichero cuyo formato puede ser cargado. Estos formatos son actualmente SNA y Z80 y el emulador los reconoce por la extensi¢n del nombre. Puedes utilizar los cursores para moverte y el intro para seleccionar. Si la carga es satisfactoria la unidad se inicializa autom ticamente. Guardar programa: se abre un di logo en el cual debes indicar el nombre y extensi¢n, actualmente s¢lo se genera en formato SNA. En general en cualquier di logo de entrada de texto puedes desplazarte en el texto con los cursores, inicio, fin, asi como variar de modo inserci¢n a sobreescritura con la tecla insert, inicialmente el modo es inserci¢n y el cambio de modo se acompa¤a con la variaci¢n de tama¤o del cursor. Copiar unidad: realiza una copia exacta de una unidad sobre otra. Se solicita que indiques la unidad de destino, que debera estar previamente inicializada. Aquellos que han jugado juegos de plataformas por ejemplo sabr n valorar esta opci¢n antes de realizar un 'salto'. Preferencias: se accede al men£ de de preferencias. Cada unidad tiene sus propias preferencias es decir no son globales. Al inicializar una unidad (o cargar un nuevo programa) las preferencias se inicializan tambi‚n. Las opciones que se pueden modificar son: Issue: respuesta de teclado en modo 2 o 3. Velocidad de emulaci¢n: acelera o retarda la emulaci¢n (teclas + y -). Emulaci¢n de la ULA (en pruebas): emulaci¢n parcial de efectos ULA. Ver pantalla: simplemente visualiza la pantalla de la unidad activa. Ejecutar emulaci¢n: procede con emulaci¢n, si se est  en modo depuraci¢n con el modo traza activado se ejecuta una instrucci¢n y se accede al men£ de depuraci¢n. Para volver al men£ principal durante la emulaci¢n pulsad escape. Salir: finalizar JASPE. Ejecutar la emulaci¢n en depuraci¢n: se accede al menu de depuraci¢n y se activa el modo de traza. Men£ depuraci¢n: Se entra por la opci¢n de depuraci¢n en el men£ principal o bien cuando durante de la emulaci¢n se produce alg£n breakpoint o estamos en modo traza. Muestra: Juego de registros principal y secundario. Flags, en fondo rojo si estan desactivados (0) o verde si est n activados (1). Desensamblado, por pr¢xima instrucci¢n, posici¢n de memoria o log de £ltimas instrucciones ejecutadas. En blanco se indica la pr¢xima instrucci¢n a ejecutar o la £ltima ejecutada seg£n el tipo de listado elegido. Pila (8 bytes). Memoria (32 bytes), en el caso de emulaci¢n del 128 se indican tambi‚n los n£meros de p gina actualmente seleccionados. Comandos depuraci¢n: En aquellos comandos en los que se abre un di logo de texto para solicitar informaci¢n si se debe introducir un n£mero, ‚ste ser  considerado como hexadecimal si y s¢lo si comienza por '0' y decimal en caso contrario. Los datos num‚ricos en pantalla se presentan siempre en hexadecimal. Indicar tambien que los casos en los que se requieren pares de datos, por ejemplo direcci¢n y contenido o registro y valor, etc, estos valores se han de introducir separados por coma. Registros: modifica registros, aquellos que forman par no se pueden actualizar por separado. Flag: modifica una bandera por separado, tambi‚n se modifican si vari is el contenido de los registros F. Poke: permite modificar el contenido de cualquier posici¢n de memoria, ROM incluida, en el caso de memoria paginada (128) se modifican las p ginas actualmente seleccionadas. Interrupt: opciones de interrupci¢n, se abre un di logo de texto en el que se pueden introducir las siguiente ¢rdenes: EI, habilita INT's, DI deshabilita INT's, BRQ petici¢n de bus, INT solicita interrupci¢n enmascarable, NMI solicita interrupci¢n no enmascarable, CLRQ desactiva solicitudes realizadas. Ver pantalla: visualiza la pantalla de la unidad bajo depuraci¢n. Trazar: activa y desactiva el modo traza que permite la ejecuci¢n instrucci¢n a instrucci¢n. Listado fuente: sirve para establecer la base para el listado de c¢digo desensamblado, si se produce a partir del PC, log de 16 £ltimas instrucciones ejecutadas o posici¢n de memoria. Posici¢n de memoria: fija la direcci¢n de memoria para ver contenido 32 bytes o desensamblar por posici¢n de memoria. Breakpoint: establece un punto de ruptura incondicional cuando sea alcanzado por el PC (si en el cuadro de di logo no se introduce ning£n valor se desactiva cualquier breakpoint incondicional anterior). Breakpoint por cambio de contenido: establece un punto de ruptura condicionado al cambio del valor contenido de una posici¢n de memoria (si en el cuadro de di logo no se introduce ning£n valor se desactiva cualquier breakpoint por cambio de contenido anterior). Escape: retorna al men£ principal. JASPE: prosigue la emulaci¢n (si estamos en modo trazar ejecutara s¢lo una instrucci¢n y volver  a entrar a pantalla de depuraci¢n). Consideraciones adicionales: Emulaci¢n de teclado: en principio no hay atajos de teclado entre PC y Spectrum, es decir, la tecla de borrado del PC no est  remapeada al SHIFT-0 del Spectrum. Las teclas CAPS-SHIFT y SYMBOL-SHIFT del Spectrum se corresponden con los SHIFT izquierdo y derecho del PC respectivamente.