Copy Link
Add to Bookmark
Report

Amoric (v1.4a) (2/3)

eZine's profile picture
Published in 
Amoric
 · 28 Sep 2019

 
DAMASO D. ESTEVEZ

ContinuaciÛn de Amoric (v1.4a) (2/3)

08. El sonido
~~~~~~~~~

He implementado yo mismo un mÛdulo de emulaciÛn del chip AY-3-8912; sÈ que
no es perfecto, pero es obra MIA ;-): no se trata de ninguna adaptaciÛn de
otro(s) programa(s) ya existente(s) (que conste que no estoy criticando a los
que prefieren utilizarlos en sus desarrollos... sencillamente tenÌa necesidad
de programarlo yo mismo, a pesar de que pueda ser menos fiel que otros).

Esta es la razÛn por la que a˙n no es perfecto. Desde la versiÛn 0.9
realmente no ha evolucionado, salvo en la reserva de canales de audio: si
est· escuchando un mÛdulo con 'DeliTracker' y ejecuta 'Amoric', el sonido en
la emulaciÛn no estar· disponible al no poder reservarse los canales de audio;
por contra, si usted ejecuta 'Amoric' antes de 'DeliTracker', Èste ˙ltimo no
podr· reproducir el mÛdulo ya que 'Amoric' habr· reservado para sÌ los
canales.

A pesar de lo indicado, la emulaciÛn de sonido a˙n se realiza accediendo de
forma directa a los chips a medida del Amiga y no a travÈs del dispositivo
'audio.device': muchos programas de sonido funcionan de esta manera y parece
no haber ning˙n problema.

Los ruidos a˙n no est·n implementados en la emulaciÛn, y a˙n aparecen a
veces sonidos indeseables con algunos programas (ZORGONS). Para suprimirlos,
pulse dos veces tecla F6 (desconectar sonido y volver a conectarlo).

==============================================================================

9. 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,

* F4 permite reconfigurar el emulador sin tener que abandonarlo y
volver a ejecutarlo nuevamente,

* F5 tiene el mismo efecto que apagar y volver a encender el Oric,

* F6 (des)conecta el sonido de la emulaciÛn,

* F7 rebobina la cinta de cassette virtual,

* F8 permite memorizar el estado actual del Oric
(memoria, registros...) en un ·rea temporal de memoria:
esta opciÛn sÛlo funciona si al arrancar el emulador
Èste ha podido reservar la memoria necesaria,

* F9 permite recuperar un estado anterior del Oric
previamente guardado con la tecla F8, y sÛlo funciona si se
ha pulsado F8 al menos una vez durante la emulaciÛn,

* 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),

* Caps Lock (retenciÛn de may˙sculas) tiene el mismo efecto
que CTRL+T en el intÈrprete de comandos.

* Las teclas NumL (bloqueo del teclado numÈrico ) y ScrL (bloqueo
del desplazamiento) situadas ambas en el teclado numÈrico
permiten incrementar/decrementar la frecuencia de refresco de la
visualizaciÛn durante la emulaciÛn: puede ser ˙til con algunos
juegos.

* PrtSc (volcar pantalla) le permite capturar la visualizaciÛn actual
de 'AmOric' y guardarla en formato IFF-ILBM. Si elige los colores
del Oric para el Workbench, podr· elaborar un mosaico con las
im·genes capturadas como fondo :-) (yo, personalmente, prefiero la
paleta de MagicWB).

Nota: Con algunos juegos, por ejemplo "Zorgon's Revenge", las teclas de
desplazamiento que usan pueden parecer ilÛgicas o extraÒas: es
debido a que la posiciÛn de algunas teclas en el Oric no es la
misma que en el Amiga. Lo siento muchÌsimo, pero °asÌ es la vida!.
Defina las teclas adecuadamente para el joystick programable y
juegue con Èste.

==============================================================================

10. Sugerencias
~~~~~~~~~~~

- Para mejorar la velocidad, active 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 de interrupciones (VBR) a memoria Fast, con
herramientas como TUDE de N.O.M.A.D., o SystemPrefs, para mejorar la
velocidad en el tratamiento de Èstas.

- Como no tengo en cuenta los temporizadores del Oric (no 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.

- No promocione la pantalla del Oric con NewMode: utilice el propio
emulador para elegir el modo de pantalla. El uso de Newmode puede
producir bloqueos en algunos casos.

- Si dispone de un monitor multisync, puede emplear un modo de pantalla
como el DoblePAL en baja resoluciÛn. Se mejorar· el refresco de
pantalla y como efecto secundario (aunque parezca extraÒo) el sonido
mejorar· en los tonos agudos, debido a un acoplamiento entre el audio y
el video DMA.

- Con el fin de no dejar ficheros abiertos en modo escritura demasiado
tiempo, cuando vea que el Oric ha terminado dicha operaciÛn de
escritura, pulse simplemente una de las teclas de funciÛn (incluso la
tecla HELP): Èsto cerrar· el fichero (pero no lo haga mientras estÈ
guardando datos, ya que esto detendr· el magnetofÛn... virtual).

- No elija como teclas de activaciÛn para sus comodidades, una secuencia
como Ctrl+T o Ctrl+C. 'Amoric' no recibirÌa estos cÛdigos y no podrÌa
usted disponer de las funciones Break (detener el programa) o CAPS
ON/OFF (activar/desactivar may˙sculas).

11. Importando programas desde cinta
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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 maldita 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, no entra en mis planes y adem·s no
tengo ni una Jasmin ni 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 y 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: 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 soluciÛn mejor (nos
concentramos en la grabaciÛn de cintas de audio): en cualquier ordenador, es
f·cil digitalizar/muestrear sonidos si dispone de suficiente memoria y/o
espacio en el disco duro (para est operaciÛn los necesitar·). En primer
lugar, tiene que muestrear sus cintas de cassette a frecuencia elevada (22050
KHz al menos) 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 interfaz
demasiado elaborada ya que ha sido portado directamente 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, mostrando a
continuaciÛn el programa informaciÛn sobre el fichero, como su nombre y
longitud, y procediendo a leer los datos. Debido a una diferencia en la
temporizaciÛn entre el Oric-1 y el Atmos, antes de leer los datos 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 hexadecimal (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 el fin del mundo.

Si consigue cargar cintas en el Oric (siempre que su gato no se haya
paseado por encima del teclado) pero no con este emulador, use un programa
copiador con 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,
gu·rdelas 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 en
su p·gina Web.

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 p·gina Web y me he encontrado con el
mismo problema. Para remediarlo, emplee el programa
TapeInfo que se proporciona con el paquete.

==============================================================================

12. Otras plataformas
~~~~~~~~~~~~~~~~~

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 con Fabrice Frances inmediata- mente,
que habÌa escrito un emulador para PC (Euphoric), el cual me presentÛ a
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). Junto a Fabrice intenta lanzar una buena versiÛn Unix (°traidores!
:D; yo tambiÈn trabajo en una versiÛn OSF/Motif).


VERSION PC

Si tiene amigos usuarios de un PC y si desean un buen emulador, deberÌan
probar Euphoric ('Euforia') de Fabrice Frances.

Fabrice es un programador asombroso y su emulador es realmente una joya en
la jungla del soft para PC. Puede obtenerlo en ftp.ensica.fr o aquÌ.

A menudo hemos intercambiado ideas y sugerencias con Fabrice. Si es usted
un desafortunado usuario de pC, Euphoric (versiÛn 0.9) deberÌa subirle la
moral: es r·pido, emula el sonido, el Oric 1 y el Atmos, el Telestrat (!),
los microdiscos de Oric, Jasmin, los discos virtuales, RS232 (Unix...). La
compatibilidad con el Oric es casi total y pr·cticamente no se le echa nada en
falta (los joysticks).


VERSION ATARI-ST

Olivier Galibert consiguiÛ mi emulador para UNIX y me enviÛ un mensaje por
correo electrÛnico (e-mail) 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 no parece existir versiÛn para esta plataforma.

==============================================================================

13. Cambios desde la versiÛn anterior
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Amoric ya se encuentra en la versiÛn 1.4a: se han corregido errores y
nuevas prestaciones se han incorporado...

***** AÒadido en la versiÛn 1.4 *****

* Numerosas posibilidades de configuraciÛn.

* Ahora es posible cargar/guardar la configuaciÛn de los joysticks.

* TambiÈn es posible guardar volcados de memoria en disco.

* Es posible capturar la pantalla de la emulaciÛn y guardarla
como un fichero IFF-ILBM.

* Todos los modos de pantalla de Amiga est·n disponibles.

* Mejor emulaciÛn 6522 (ahora casi perfecta).

* Refresco de video ligeramente m·s r·pido.

* Ligera mejora del cÛdigo.

***** AÒadido en la versiÛn 1.4a *****

* La rutina de visualizaciÛn y la emulaciÛn de la CPU
soligeramente m·s r·pidas.

* Se ha aÒadido la opciÛn de (des)activar
la redefiniciÛn la barra espaciadora
(desconectada en versiones anteriores).

* Guardar una pantalla monocroma ahora funciona correctamente.

==============================================================================


14. Errores y problemas
~~~~~~~~~~~~~~~~~~~

Los errores m·s importantes son debidos a las dificultades de emular
correctamente al Oric original.

He tenido problemas para que algunos juegos funcionasen. De hecho, algunos
de estos errores detectados me han enseÒado mucho sobre la estructura interna
del Oric y me han permitido mejorar enormemente la emulaciÛn: personalmente,
considero absolutamente imprescindible probar al menos 10 o 20 juegos cuando
se programa un emulador (y digo juegos, porque es la principal utilidad que le
encuentro a una emulaciÛn de un ordenador de 8 bits).

* En primer lugar, no he implementado las instrucciones no documentadas
(y hay un buen montÛn) como tales, sino que las emulo en forma de
instrucciones NOP con saltos de contador de instrucciones. Al
contrario que los programadores de Apple II y C64 se emplean poco en el
Oric, y asÌ por desgracia es frecuente por ejemplo el error cometido
por los programadores con la instrucciÛn BRK, que al retornar al
programa deja el contador de instrucciones (PC) incrementado en dos
unidades y no una como debiera.

Si no me cree, pruebe esto en su Oric:


DOKE #400,#6000 -> BRK
-> RTS
POKE #402,#4C -> JMP $FAE1 (ZAP)
DOKE #403,#E1FAL01

Si ejecuta CALL #400 oir· un ZAP, que querr· decir que la
instrucciÛn RTS ha sido saltada sin ser ejecutada.

Nota: En el C64 y el Apple II, las instrucciones no documentadas
son encontradas muy convenientes por algunos
programadores alocados y usadas sin ning˙n pudor.

Actualmente, 'Amoric' maneja las instrucciones no documentadas
avanzando el contador de instrucciones (PC) el mismo n∫ de bytes que lo
harÌa un 6502 real, pero sin realizar ninguna operaciÛn (utilizando
instrucciones NOP). 'Amoric' sÛlo falla (lo que le obliga a terminar y
a salir a usted del emulador) si se encuentra alguna de las
instrucciones que originalmente en un Oric harÌan que se bloquease
(como las de la familia $x2), proponiÈndole al usuario un reinicio
total (como si apagase y encendiese su Oric) o salir del emulador.

* En segundo lugar, no he implementado un sistema de refresco de pantalla
de manera demasiado natural por razones de velocidad. Justamente por
ello algunos errores pueden producirse cuando se produce un cambio
'HIRES'/'TEXT', o si se usa, como en algunos juegos, el modo de vÌdeo
mixto 'Half-TEXT/Half-HIRES' (DOGGY, FIRE FLASH, STYX...) pues este
modo es bastante difÌcil de reproducir con mi tÈcnica de refresco
actual. Estos modos no son emulados, pero ya he prometido en la
documentaciÛn de la versiÛn 0.8 que lo serÌan en la prÛxima versiÛn
(supongo que es ahora justamente cuando se percata de que he
mentido ;-). A˙n asÌ, prometo que harÈ lo posible para implementarlo:
mis ˙ltimas pruebas han sido infructuosas... en este momento, podrÌa
incorporarlo pero supondrÌa ralentizar la emulaciÛn considerablemente,
asÌ que busco alguna soluciÛn ingeniosa para solucionarlo. Un
simp·tico usuario me ha sugerido un truquillo, e intentarÈ probarlo.

* En tercer lugar, el chip VIA 6522, utilizado para gestionar las
entradas y salidas (teclado, sonido) y las interrupciones del reloj, es
bastante complejo de emular. MejorarÈ esta parte del cÛdigo sin cesar,
ya que siempre surjen pequeÒos problemas.

* Por ˙ltimo, cuando se conmuta entre el modo 'TEXT' y el modo 'HIRES',
la pantalla no se refresca completamente y algunos errores pueden
aparecer en la visualizaciÛn. Para eliminarlos, simplemente presione
la tecla F2 (refresco de pantalla).

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT