DÁMASO D'ESTEVEZ Manual castellano del AMIRIC V0.9 - (1/2) **************************************************************************** Amoric (v0.9) El primer emulador de ORIC Atmos 48K para Amiga © Copyright 1995-96 Jean-François Fabre Traducción al español de Dámaso D. Estévez - (1/2) **************************************************************************** Introducción Requerimientos Características Configuración Arranque Teclado Sugerencias Importar de cinta Otras plataformas Modificaciones Errores Juegos probados Aún pendiente Garantías Cómo registrarse Agradecimientos El autor INTRODUCCION El Oric Atmos fue mi primer ordenador y no he podido olvidarlo jamás (¡ahhh, aquellos fantásticos juegos de 8 colores predefinidos!... el CD-ROM Multimedia no exitía en aquella época ;-)). Estos juegos no diferían en demasía de los juegos actuales en cuanto a calidad o interés, aunque sí adolecían, principalmente, de los siguientes problemas: - El tiempo de carga desde cassette podía desquiciar a un santo sobre todo si el programa después de la espera no funcionaba. Lo más habitual era que esto fuese debido al ajuste del volumen, o al de graves/agudos, o a la tensión/velocidad de la cinta, o al maldito frigorífico... - Las jod***s protecciones de dos tonos en los juegos obligaban a apagar y volver a encender el Oric, dañando los componentes electrónicos del equipo. - Su tardío renacimiento en 1995 para jugar por ejemplo a Zorgon, cuando ya disponíamos de una nueva generación de ordenadores en el trabajo o en casa... - Mientras existían emuladores de C64, Amstrad, ZX81, VIC20, BBC, Apple II para Amiga parecía no haber sitio para el Oric habiendo sido sin embargo el más popular en la Europa de la época (de hecho, ¡¡más que el Vic20 o el BBC Micro!!). Todo esto fue lo que me decidió a escribir 'Amoric'. Primero escribí la versión para UNIX/X-Windows (para ir 'comiéndome el coco' por anticipado) y a continuación quise adaptarlo a mi ordenador favorito: el Amiga . He esperado mucho tiempo a que otro programador realizase el emulador para Amiga pero al final ha sido en vano: creo que ¡¡soy el primero!! ;-) (de hecho, un poco como Guy Degrenne). ============================================================================= DETALLES TECNICOS DEL EMULADOR El emulador de Oric permite: - Una emulación (bastante) fiel del procesador 6502. - Emulación gráfica: modos HIRES --alta resolución-- y TEXT --texto-- incluyendo los modos de double height --altura doble-- y flash --parpadeo--. - Emulación 6522 y 8912 (¡ejem!), incluyendo Temporizadores 1 y 2, teclado y el joystick P.A.S.E. - Carga desde disquette/disco duro (más rápido que las cintas/K7, ¿no?). - Teclas de control para realizar diferentes operaciones (reset,...). - Primer intento de emular el sonido (aún no está en su punto, pero el intento es simpático). Evidentemente, no es un Oric real, lo que significa que con algún programa pueden surgir problemas. Consulte el capítulo errores para mayor informa- ción. Este emulador NO emula o no tiene en cuenta: - Los cambios de frecuencia 50/60Hz (se aceptan sugerencias¹) - El modo Half-TEXT/Half-HIRES (Semi-Texto/Semi-AltaResolución), que usan algunos juegos. - La mayor parte de las instrucciones no documentadas del 6502 (pero no es especialmente grave). ---------------------- ¹ Para más detalles, consulte los documentos en inglés y francés del programa. ============================================================================= PREFERENCIAS El fichero 'oric.cfg' contiene las preferencias del usuario. Puede modificarlo con cualquier editor ASCII. Para explicar cómo modificar la configuración del programa, veamos un ejemplo de dicho fichero²: --- Inicio del fichero oric.cfg : corte por aquí --- Atmos.ROM HOPPER.DAT /games /dumps 0 1 1 7 --- Fin del fichero oric.cfg: corte por aquí --- ¿Qué significa cada una de las líneas?... Veamos: Atmos.ROM <--- define que ROM utilizará el emulador. HOPPER.DAT <--- define la cinta de 'cassette virtual' insertada por defecto al inicializarse el emulador. /games <--- directorio por defecto en el que buscar las cintas de 'cassettes virtuales'. /dumps <--- lo mismo, pero para volcados hexadecimales (snapshots, memblocks): aún no implementado. 0 <--- sonido conectado/deconectado (1/0) 1 <--- parchea algunas rutinas de la ROM para mejorar la velocidad de la emulación, 0 desconecta esta opción. 7 <--- frecuencia de refresco de la pantalla en fotogramas por segundo (PAL). ATENCION: Puede usar los ficheros de la ROM del Oric-1 y del Oric Atmos, lo mismo que modificarlos pero sólo para su uso personal. Sin embargo, hay algunas localizaciones que han sido parcheadas después de ser cargados en memoria por el emulador (cargador de cinta, otros parches...). Modificar estas rutinas supone arriesgarse a que el Oric se cuelgue sin razón aparente. ---------------------- ² El formato del fichero ha cambiado a partir de la versión 0.8b. ============================================================================= REQUERIMIENTOS 'Amoric' está escrito en ensamblador 680x0 y en C. Lo adapté de un emulador previo que había escrito en C para la plataforma UNIX/X-Window, (las estaciones UNIX tienen una mayor potencia de cálculo que un 68030 o un 68040 y gracias a la arquitectura RISC, los programas en C son generalmente más rápidos que los escritos en ensamblador si se usa un buen compilador (gcc), además de permitir la portabilidad del código a otros procesadores). Mi emulador funciona sobre HP-PA1, Sun SPARC, Linux i80x86 (a pesar de todo), PowerPC y Silicon Graphics. Sin embargo en Amiga, es necesario programar en ensamblador para este tipo de aplicaciones pues la velocidad es crítica durante la simulación, y los célebres procesadores diseñados a medida para el Amiga (Paula, Denise, Gary...) no pueden ayudar en la emulación de la CPU 6502. Aún así, el 6502 y el 680x0 tienen gran cantidad de características comunes, y la idea fundamental es aprovecharlas (instrucciones similares, conversión directa de las banderas de estado CCR,...) con mínimas adapta- ciones. En principio, existían dos versiones: la correspondiente a equipos con una CPU 68000 y para una CPU 68020. Sin embargo, decidí abandonar el desarrollo de la primera por ser extremadamente lenta: al recibir gran cantidad de solicitudes, especialmente por un 'amiguero' que poseía un 68000/28 MHz, decidí volver a elaborar la versión para este procesador, aunque ¡no espere milagros!³. Supongo que no he de advertirle que 'Amoric' será lento en un A1200 básico y más aún en un A500. Pruebe en un equipo con Fast RAM real, y verá como mejora ligeramente su velocidad: lo probé (la versión anterior) en un A1200 pero con memoria FAST y funcionaba a una velocidad decente. Creo que la versión actual debe correr casi a la velocidad del Oric original. Ahora con la tarjeta 68030/40 MHz funciona algo más rápido (un 120%), pero aún es necesario que optimize las siguientes versiones, aunque cada vez se vuelve más difícil el lograrlo: Fabrice Frances me ha dado una idea para mejorar la velocidad y la implementaré próximamente. Si encuentra que la emulación no va suficientemente rápida, puede probar a modificar los valores de la frecuencia de refresco de la pantalla en el fichero oric.cfg . El programa debe poder ejecutarse con cualquier versión del KickStart aunque es recomendable la versión 2.0 y en este caso requiere, opcionalmente, la biblioteca 'asl.library' para mostrar las peticiones. Ha sido probado con éxito con las siguientes configuraciones: 68030 KS 1.3 68030 KS 3.0 68020 KS 3.0 68000 KS 1.2 ---------------------- ³ Esta versión no corre en un 68020 debido a que la instrucción MOVESR es privilegiada a partir del 68010: justamente por ello, los usuarios que tengan este último procesador no podran ejecutar ninguna de las dos versiones suministradas... si se encuentra en dicha situación, escríbame para pedir la específica. ============================================================================= COMO EJECUTAR 'AMORIC' Pinche con el puntero sobre el icono de 'Amoric' si desea ejecutarlo desde el WB o teclee Amoric en una ventana CLI/Shell: el programa cargará el fichero de configuración y el de la ROM que corresponda... si todo va bien, aparecerá la pantalla simulando la visualización del Oric. Si pulsa la tecla HELP en cualquier momento de la emulación, aparecerá un recordatorio de las teclas que permiten controlar la emulación (reset,...). Pulsando la tecla F10 abandonará la emulación y el programa. Para elegir una cinta de cassette 'virtual', pulse F3: aparecerá la pantalla del WorkBench y una petición de ficheros para que pueda elegir el fichero que desee. Después de esto, teclee como siempre CLOAD "" desde el emulador: si apareciese el mensaje 'Searching...' ('Buscando...'), sería debido a que no ha seleccionado ninguna cinta de cassette (pulse F3 como ya hemos indicado) o que ésta ha llegado al final (en este último caso pulse F7 para 'rebobinarla'). ============================================================================= TECLADO Hay un único mapa de teclado (distribución de las teclas fija), que no depende del definido por el usuario a través de las Preferencias del WorkBench pues se utilizan los códigos RAWKEY para interpretarlas (coincide con la distribución del teclado USA)... esto significa que algunas teclas estarán intercambiadas en el teclado francés (A y Q, M y ;...). Además, hay algunas teclas suplementarias que son utilizadas para controlar ciertos aspectos del emulador: * F1 obliga al emulador a saltar a la rutina NMI --interrupción no enmascarable-- del Oric (el botón negro inalcanzable que estaba bajo el ordenador), * F2 actualiza/refresca completamente la pantalla (útil si hay algún error en el refresco de los modos TEXT/HIRES...), * F3 le permite elegir/cambiar la actual cinta de cassette virtual, * F5 tiene el mismo efecto que apagar y volver a encender el Oric, * F6 conecta/desconecta el sonido de la emulación, * F7 rebobina la cinta de cassette virtual, * F10 le hace retornar al Workbench deteniendo la emulación y abandonando el programa, * la tecla 'Help' muestra una pantalla de ayuda recordándole las teclas que acabamos de mencionar, y además: * La tecla 'FUNCT' del Oric Atmos es emulada por 'AltDcha'. * La tecla 'Del' funciona de igual forma que '<-' ('Backspace'). * El teclado numérico separado puede emplearse sin ningún incoveniente, lo mismo que la tecla 'ENTER' en lugar de 'RETURN' (<-| o INTRO). Nota: Con algunos juegos, por ejemplo "Zorgon's Revenge", la tecla X y la flecha del cursor hacia abajo son empleadas para subir/bajar ya que las flechas de cursor del Oric no están en el mismo lugar que en el Amiga: lo siento muchísimo, pero ¡así es la vida!. ============================================================================= SUGERENCIAS (UTILES) AL USAR 'AMORIC' - He desactivado la multitarea durante la emulación debido a que accedo directamente al hardware (especialmente por la lectura del teclado): lo siento, pero como programador bajo Intuition no soy muy bueno, aunque prometo que eso va a cambiar (ya he detectado dos avisos de Enforcer y ya he programado una interrupción totalmente limpia para el refresco de la pantalla). De todas maneras, no se preocupe, 'Amoric' no fragmentará la memoria, pues libera toda la empleada antes de terminar. He visto la emulación de Mac en multitarea de 'A-Max' y me ha impresionado profundamente: si mi programa no le convence por no correr en multitarea siempre puede reformatear el disquette que lo contiene ;-). Procure que no se produzcan escrituras en el/los discos cuando emplee el emulador: si por cualquiera causa (aunque es improbable) se bloquease, su disco podría quedar invalidado. - Para mejorar la velocidad, debe activar los cachés y el modo burst del procesador (a partir de 68030+), lo mismo que el modo copyback (con 68040). No empleo las transferencias DMA ni código automodificable para que el caché de dispositivos funcione. Puede redireccionar la tabla de vectores (VBR) a memoria Fast, con herramientas como TUDE de N.O.M.A.D., o SystemPrefs, para mejorar la velocidad en el tratamiento de las interrupciones. - Como sólo tengo en cuenta los temporizadores del Oric (e ignoro los del Amiga) podría tener algún problema en la reacción del teclado en equipos lentos como el A1200 básico (el problema aparece si la tecla se liberase antes de que la rutina ROM del Oric la compruebe, perdiéndose algunas pulsaciones). La solución es mantener pulsada las teclas un tiempo mayor: en una futura versión probaré a usar un buffer para el acceso al teclado. ============================================================================= IMPORTANDO PROGRAMAS DESDE CINTAS DE CASSETTE PARA ORIC ESTA es una parte COMPLEJA: ¿cómo recuperar programas que originalmente se encuentran almacenados en cintas (cassettes) de audio? * En el Oric, el 6522 y la ROM se ocupan de enviar y recibir ese chirriante sonido (señal de 2.400 baudios). Esta puñet**a señal es el medio más fácil de interconectar los ordenadores de hoy y el Oric (leer los microdiscos del Oric es demasiado complejo de emular para mi y no entra en mis proyectos... ni siquiera tengo la Jasmin o una unidad de Microdiscos). Aunque no tengo nigún conocimiento de electrónica, lo que sí es obvio es que los discos del Oric originalmente son de 3" (aunque también se le pudiera conectar unidades de 3½") y no hay forma humanamente posible para que sean leidos por la unidades de discos de un Amiga o de un PC (3½" o 5¼"). Además tampoco hay demasiada documentación sobre su formato: las unidades de C64 están mejor documentadas por ello se ha desarrollado gran cantidad de interfaces para el Amiga (paquete A64,...). * Creo que el Oric posee una interface RS-232, pero no me voy a romper la cabeza programando un protocolo de transferencia Amiga-Oric (no tendría ni idea de por donde empezar): sería el método de transferir los datos más seguro, aunque tendría que llevar su Oric a todas partes (y no me parece muy conveniente). * Boris y yo, buscamos y hemos encontrado una salida mejor (nos concen- tramos en la grabación de cintas de audio): en cualquier ordenador, es fácil digitalizar/muestrear sonidos si dispone de sufiente memoria y/o espacio en el disco duro. Para esta operación, tiene que muestrear sus cintas de cassette a frecuencia elevada (22050 KHz o más) en formato .lo8 (sin cabecera, 8 bits sin signo: rango de 0 a 255). Después de esto utilice el programa 'Transf', escrito por Boris GRANVEAUD e incluido en este paquete (el programa no tiene una interface demasiado amigable ya que ha sido portado desde UNIX y seguramente no será utilizado muy a menudo): su sintaxis es... > transf fichero.lo8 GAME.DAT La frecuencia de muestreo le será pedida por el programa (éste muestra información sobre el fichero, como su nombre y longitud, y lee los datos). Debido a una diferencia en la temporización entre el Oric-1 y el Atmos, el programa salta algunos bytes en el fichero (tiempo en el que el Atmos muestra 'Saving... GAME OF THE DEATH C', mientras que el Oric-1 muestra simplemente el mensaje 'Saving...'). Si se produce un error, intente la transferencia de la forma siguiente: > transf fichero.lo8 GAME.DAT wretwr donde 'wretwr' puede ser 'eiruti' o 'uerhgiugh' (o incluso 'nbmnmbn'), ya que el test es realizado únicamente sobre el nº de argumentos suministrados al programa. En este caso, el programa no saltará bytes del fichero: por contra se debería (normalmente) producir un error en el primer byte... como me es difícil motivar a Boris para que corrija el programa, tome este error como una prestación adicional. 55 U Error found. New value: <- Aquí debe introducir el valor superior en hexadecirmal (en este caso 55) Si se produce otro error, tiene dos posibilidades: 1.- Su magnetofón o reproductor de cintas de cassette está RIP. 2.- La frecuencia de muestreo no es suficientemente alta. 3.- El volumen no está lo suficientemente alto. 4.- El programa no utiliza el mismo método para leer la cinta de cassette que el 6522, pues éste es un componente analógico que funciona por impulsos (frentes ascendientes, descendientes) y aquí trabajamos con datos numéricos. 5.- Simplemente que la unidad de cassette es para ZX-Spectrum. Bueno, en realidad son cinco posibilidades, pero no es grave. Si consigue cargar cintas en el Oric (siempre que su gato no se haya paseado por encima del teclado) pero no con el emulador, use un programa para copiar desde el Oric y envie directamente la salida de éste al digitalizador (el programa maneja perfectamente la señal directa del Oric). Si aún así no funciona o no quiere desplazar su Oric, grabe la señal en una nueva cinta de cassette: esto mejorará la señal. El chip 6522 del Oric es muy bueno leyendo las cintas y corrigiendo errores eventuales: basta tomar las rutinas de carga de la ROM del Oric como referencia... si el juego tiene varias partes, sálvelas separadamente, y luego únalas (cat o join)... a veces, necesitará introducir algunos bytes 0x16 entre ellas (no me pregunte el porqué) y ¡buena suerte!... yo lo he conseguido, entonces ¿porqué no usted? Para cuestiones técnicas, no dude en contactar conmigo . PS: Le proporciono el código fuente en C de 'transf'. Debe compilarlo sin modificaciones bajo estaciones UNIX y pC, si se encuentra con que le es más fácil digitalizar sonido en esas plataformas (el programa ha sido desarrollado bajo UNIX y utilizado en PC). De todas formas, puede obtener la mayor parte de los juegos existentes para Oric en la siguiente dirección ('http site'): http://arlesienne.ensica.fr/LOCAL/ORIC gestionada por Fabrice Frances y Olivier Balet. IMPORTANTE: Si Amoric rechaza cargar algún juego, es debido a que las marcas de sincronía de la cinta virtual son demasiado pequeñas: ¡¡¡es culpa mía!!! He probado juegos conseguidos de esta fuente ('http site') y me he encontrado con el mismo problema. Para remediarlo, emplee el programa TapeInfo que se proporciona con el paquete. ============================================================================= VERSION UNIX Como ya dije con anterioridad, mi primer intento de emulación del Oric fue bajo Unix. Distribuí por Internet una versión que emulaba los gráficos de manera imprecisa y limitada, contactando inmediatamente con Fabrice Frances, quien había escrito un emulador para PC (Euphoric), el cual me puso en contacto con Olivier Balet que ha mejorado mi versión Unix optimizando los gráficos (no la he visto funcionar pues se basa en prestaciones no presentes en todos los Unix) y que junto a Fabrice intenta lanzar una buena versión Unix... ¡traidores! :D. Puede que después saquen una versión XMotif (yo también trabajo en una versión OSF/Motif). VERSION PC Si tiene amigos usuarios de un PC y si desean una buena emulación, deberían probar Euphoric de Fabrice Frances. Fabrice es un asombroso programador y su emulador es realmente una joya en la jungla del soft para PC. Puede obtenerlo en ftp.ensica.fr o en la dirección mencionada más arriba. La página hmtl (WWW) Oric está muy bien surtida de programas e informaciones diversas sobre este ordenador, su historia, etc... A menudo he intercambiado ideas y sugerencias con Fabrice. Si es usted un deprimido usuario de pC, Euphoric debería subirle la moral: es rápido y emula el sonido, el Oric 1 y el Atmos, el Telestrat (!), los microdiscos de Oric, los discos virtuales, RS232 (Unix),... ¡prácticamente no se le echa nada en falta! VERSION ATARI-ST Olivier Galibert consiguió mi emulador para UNIX y por correo electrónico me envió un mensaje para informarme de un error y para comunicarme que iba a realizar una versión para el Atari ST (680x0). Me ha dado sugerencias muy buenas que me han permitido mejorar la emulación y su velocidad. Espero que su excelente conocimiento del procesador 680x0 le permita terminar su emulador dentro de poco, incluso aunque el Atari esté algo olvidado (recordad, el Amiga...) VERSION ORIC Muy fiel; ha sida desarrollada por Oric Systems (Reino Unido) en 1983. VERSION ZX-81 Lo siento, pero me parece que no hay versión para esta plataforma.