DAMASO D. ESTEVEZ ****************************************************************************** Amoric (v1.4a) (1/3) El primer emulador de ORIC-1/Atmos 48K para Amiga © Copyright 1995-96 Jean-François Fabre ****************************************************************************** 01.- Introducción 12.- Otras plataformas 02.- Requerimientos 13.- Modificaciones 03.- Características 14.- Errores 04.- Configuración 15.- Juegos probados 05.- Arranque 16.- Página WEB 06.- Los joysticks 17.- Aún pendiente 07.- Guardar en cinta 18.- Garantías 08.- El sonido 19.- Cómo registrarse 09.- El teclado 20.- Agradecimientos 10.- Sugerencias 21.- Historia 11.- Importar de cinta 22.- El autor 23.- Traducción al español de Dámaso D. Estévez ****************************************************************************** 1. Introducción ~~~~~~~~~~~~ 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 volver loco a cualquiera 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 puñet*r*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 un 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 rompiéndome la cabeza 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). ============================================================================== 2. Requerimientos ~~~~~~~~~~~~~~ 'Amoric' está escrito en ensamblador 680x0 y en C. Lo adapté de un emulador previo que había escrito totalmente en C para la plataforma UNIX/X-Window, (las estaciones UNIX tienen una mayor potencia de cálculo que un 68030/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, como puede ser 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 son muy útiles 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 adaptaciones. 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 hasta que un usuario con un 68000/28MHz me la pidió, y aquí está de nuevo, aunque ¡no espere milagros! [1]. 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 incrementa ligeramente su velocidad: Eric Totel (MUIBuilder) ha probado esta versión sobre su A1200/020/14MHz y el programa no iba tan lento. Ahora, con mi tarjeta 68030/45 MHz la velocidad varía entre un 90-120%, pero aún es necesario que optimice las siguientes versiones, aunque cada vez se vuelva más difícil el lograrlo: Fabrice Frances me ha dado una idea para mejorar la velocidad de nuevo 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 las preferencias o con las teclas [y] durante la emulación. La velocidad del Oric puede variar según la carga de trabajo derivada de la visualización: así durante los desplazamientos de pantalla ('scroll'), 'AmOric' irá algo más lento. Para hacer funcionar 'AmOric necesitará KickStart 2.0 o superior y además la biblioteca 'asl.library' para las peticiones. Ha sido probado con éxito con las siguientes configuraciones: 68030 KS 3.0 68020 KS 3.0 68000 KS 3.0 ---------------------- [1] Esta versión no corre en un 68020 debido a que la instrucción MOVESR es privilegiada a partir del 68010: justamente por ello, sintiéndolo mucho, 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 una versión específica. 3. Características técnicas del emulador ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ El emulador de Oric en esta versión permite: - Una emulación bastante fiel del procesador 6502. - Una emulación gráfica de los los modos 'HIRES' --alta resolución-- y 'TEXT' --texto-- que incluye los modos 'double height' --altura doble-- y 'flash' --parpadeo--. - Emulación del 6522 y 8912, incluyendo los temporizadores 1 y 2, el teclado y las palancas de control ('joysticks'). - Carga/grabación en disquette flexible/disco duro (más rápido que las cintas/K7, ¿no?). - Teclas de control para realizar diferentes operaciones (reinicio de su Oric virtual,...). - Sonido (aún no es perfecto, pero está bien...). - Carga/grabación de volcados/capturas de toda la memoria ('snapshots') a/desde disco/memoria. Evidentemente, AmOric no es un Oric real, lo que significa que con ciertos programas pueden surgir problemas. Consulte el capítulo errores para mayor información. Este emulador NO emula o no tiene en cuenta: - Los cambios de frecuencia 50/60Hz (habitualmente no utilizados), - El modo 'Half-TEXT/Half-HIRES' (Semi-Texto/Semi-AltaRes), que usan algunos juegos. - La mayor parte de las instrucciones no documentadas del 6502 (pero no es especialmente grave). ============================================================================== 4. Configuración: preferencias del usuario ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ El fichero 'oric.cfg' contenía en versiones anteriores las preferencias del usuario: hasta la versión 1.0 usted podía editar este fichero para modificarlo. Sin embargo, debido a razones de conveniencia, he cambiado tanto el formato del fichero, que ahora es binario, como su nombre, que ahora es 'Amoric.prefs'. El fichero contiene la siguiente información: Nombre de la ROM <--- define que ROM utilizará el emulador. Directorio de programas <--- define el directorio por defecto del que se cargarán los programas con 'CLOAD'. Directorio de volcados <--- lo mismo que en el caso anterior, pero para la grabación de programas en cinta (virtual) con 'CSAVE'. Sonido <--- (des)activar sonido. Parches ROM <--- parchea algunas rutinas de la ROM o no para ganar velocidad. Fotogramas por segundo <--- ó FPS, es la velocidad de refresco de la pantalla (de 1 a 50 en PAL). Código visual <--- defiene el modo de pantalla que el Amiga utilizará para la visualización del Oric. Joystick 1 y 2 <--- (des)activa los joysticks 1 o 2 Advertir antes de salir <--- pide confirmación al usuario antes de abandonar la ejecución definitivamente del emulador AmOric. Aplicar patrones <--- patrones/comodines por defecto para filtrar los ficheros que se mostrarán en las peticiones: #?.DAT para cintas (virtuales) y #?.ROM para los ficheros ROM. Política de refresco <--- tipo de refresco: puede elegir entre 5 tipos. Tipo de disco <--- puede elegir entre Microdisco, Jasmin o ninguno Video <--- le permite elegir diferentes gestores (drivers) de video. El más rápido es el de plano de 1 bit ('1 bitplane'). Puede modificar este fichero empleando la ventana de configuración que 'AmOric' le muestra al arrancar. Estos cambios pueden ser temporales (durante la sesión actual del programa) o también puede guardarlos para usar en posteriores sesiones (tenga en cuenta que ciertos modos de pantalla pueden no funcionar correctamente). Los tipos de refresco (opción 'Política de refresco') son: * Fastest: es el más rápido, pero el menos preciso. No toma en cuenta la redefinición dinámica de caracteres (igual refresco que la versión 1.1). * Fast: es el modo por defecto. Toma en cuenta la redefinición dinámica, pero sólo parcialmente. * Good: un poco más preciso que Fast para la redefinición dinámica. * Accurate: gran precisión para la redefinición dinámica (siempre es tenida en cuenta). * Total: refresco total. Es muy costoso para la CPU, pero el más próximo a un Oric original. La redefinición dinámica es a menudo utilizada (sólo en modo texto) para animar personajes u objetos. En modo 'HIRES', los refrescos Fastest, Fast, Good y Accurate son equivalentes. 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 cargadas en memoria por el emulador (cargador de cinta, otros parches...). Modificar estas rutinas supone arriesgarse a que el Oric se bloquee sin razón aparente. ============================================================================== 5. Arranque: ~~~~~~~~ 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 ROM que corresponda y el de configuración... 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 (reinicio,...) sobre la pantalla del Oric. La emulación en este momento se habrá detenido (no consumirá tiempo de CPU). Pulsando la tecla F10 abandonará la emulación y el programa. Para elegir una cinta '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...'), podría ser debido a que no ha seleccionado ninguna cinta de cassette (pulse nuevamente F3 como ya hemos indicado) o que ésta ha llegado al final (en este último caso pulse F7 para 'rebobinarla'). ============================================================================== 6. Joysticks ~~~~~~~~~ 'Amoric' 1.4a emula dos tipos de palancas de control (los conocidos 'joysticks'): los que utilizan la interfaz P.A.S.E y los programables. El joystick que utiliza la interfaz P.A.S.E. se conecta en el puerto de impresora del Oric: algunos juegos que los soportan son 'Ultima Zone', 'Pastablasta' o 'Lone Raider'. Pero también hay muchos otros que no lo utilizan lo cual es problemático, sobre todo con juegos que utilizan teclas que no se encuentran en la misma localización en el Amiga que en el Oric original (en 'Zorgon Revenge', en el nivel arcade, X sirve para subir y <- para bajar, pues estas teclas se encuentran una encima de la otra en el Oric-1). Existía igualmente otro tipo de interfaz conectada en el puerto de expansión. Permitía elegir las teclas que el joystick debía simular durante el juego. Esta interfaz es más flexible que la interfaz P.A.S.E. ya que permitía utilizar el joystick en juegos diseñados únicamente para ser manejados desde teclado. Sin embargo, tenía limitaciones: cuando presionaba fuego, otros movimientos del joystick se desconectaban; además, la interfaz era incapaz de reproducir ciertas teclas como Shift, Control y Funct. He probado a simular esta interfaz, pero con la posibilidad de desplazamiento diagonal, y sin interferencia entre el botón de fuego y los desplazamientos (si el juego permite mantener presionadas dos teclas simultáneamente). Es igualmente posible usar las teclas Shift, Control y Funct en los movimientos. Puede elegir las teclas de definición de los joysticks en la ventana de configuración, pinchando con el puntero sobre el botón 'Select...' ('Elegir...') en 'JoyType' ('Tipo de joystick'), y presionar el botón 'Define' sobre el joystick elegido (en modo 'Custom', o sea, 'Programable'). Siga a continuación las instrucciones. No podrá ver las teclas que actualmente están definidas (lo siento) y sólo podrá elegir teclas válidas del Oric (por ejemplo, la tecla Help será ignorada). Podrá guardar (y recuperar) de disco la configuración de los joysticks. ============================================================================== 7. Guardando en cinta con la función modificada 'CSAVE': Saving... GAME C ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Las rutinas 'CSAVE' y 'CLOAD' son modificadas por 'AmOric' para permitirle guardar/cargar ficheros desde disquette/disco duro. La carga es simple: elija una cinta de cassette virtual, 'Amoric' la cargará en memoria y cuando teclee 'CLOAD ""' desde el emulador, los bytes serán leídos desde la memoria y no desde el fichero en disco. El guardar los datos es más delicado, ya que 'AmOric' debe para ello abrir un fichero en modo de escritura y escribir sobre un disco, por lo que ha de ser prudente, pues todo fichero que no se haya vuelto a cerrar puede significar el forzar a validar el disco después de reiniciar su Amiga (problema harto conocido por todos los usuarios). Cuando usted teclea 'CSAVE "FOO"', un fichero FOO.DAT se crea en el directorio por defecto (de volcados) que se haya definido desde las preferencias. Si el fichero ya existe previamente, un mensaje se mostrará preguntando si se desea sobreescribir el fichero y si la respuesta es negativa 'CSAVE' no hará nada. Si teclea 'CSAVE""', un fichero _NONAME_.DAT se creará, pues no es posible crear un fichero sin nombre bajo AmigaDOS. Pero el nombre Oric quedará vacío (""). Si por cualquier razón el fichero no puede ser creado, 'AmOric' no escribirá nada y los datos no serán guardados (pero el mensaje 'Saving... FOO B' aparecerá igualmente). Es como si no hubiese cinta en el magnetófono o como si estuviese protegida la cinta contra escritura. El fichero no se cerrará hasta que: - intente grabar otra cinta, o, - pulse una tecla de función cualquiera (memorizar estado, ...). Es difícil decidir, en efecto, cuando la operación de grabación ha terminado para cerrar el fichero. Por lo tanto NO reinicie su Amiga mientras la emulación esté activa si está guardando datos en una cinta virtual y 'Amoric' no ha podido cerrar el fichero ya que esto le forzaría a validar su disco lo cual aunque no suele ser grave, no es nada divertido, además de llevar su tiempo. Si cierra el fichero mientras el emulador está guardando los datos (pulsando una tecla de función), esto tendrá el mismo efecto que detener el magnetofón. PS : Para acelerar el acceso, en la escritura se emplea una memoria temporal de 1 Kb.