Autor Tema: SID6581 (sintetizador de audio del Commodore 64)  (Leído 72165 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #15 en: 20 de Mayo de 2008, 08:08:11 »
Teoricamente, si fuesemos capaces de escarbar en nuestra memoria y comprender que hace ese codigo ASM con los datos, tendriamos el problema resuelto. :-)

El SID se programa simplemente "volcando" los datos en su registro, por lo que nuestro PIC deberia hacer lo mismo a partir de la parte de datos de ese ejemplo (previamente guardados en una EEPROM)....

No estamos cerca de lograrlo, pero me da la sensacion de que no es imposible. Tengo que dejar por un rato (y dejar descansar el culo), pero en unas horas vuelvo a seguir con esto :)
Estuve revolviendo y encontre varios manuales originales de Commodore (si, en PAPEL!!), pero son de BASIC.... Grrrr!  :?

Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #16 en: 20 de Mayo de 2008, 08:38:59 »
Más documentación sobre el funcionamiento del SID: http://unusedino.de/ec64/technical/misc/sid6581/index.html

Conexión de un SID a un ATMEL con indicaciones sobre las precauciones eléctricas: http://www.synthdiy.com/show/?id=1041

Un PIC enganchado a un SID: http://hct.ece.ubc.ca/research/sidgroove/indexold.html#schematics

Otro tipo embarcado en nuestra misma empresa pero con un ATMEL: http://www.mikekohn.net/micro/sid_player.php

Entender ese código implicaría emular el 6502... ¿a nadie se le habrá ocurrido crear una herramienta que extraiga directamente de los archivos PSID los estados que deben tener en cada instante los registros del SID? Sigo buscando... agotaré todas las posibilidades antes de pensar que la única solución es emular el 6502.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #17 en: 20 de Mayo de 2008, 08:46:23 »
Hola juanfe!
No se trataria de emular al 6502....

Yo creo que tendriamos que hacer un software para la PC que a partir de un *.SID generase una tabla que luego cargariamos en la EEPROM para que el PIC la vuelque al SID

No he tenido tiempo de analizar la rutina contenida dentro del archivo que postee antes, pero es muy posible que sea poco mas que un bucle que recorre los datos enviandolos al SID. Una especie de....player.

No necesitamos que el PIC sea capaz de correr ESE codigo. Solo que entienda los datos contenidos en el fichero...

Sigamos buscando, que el programa que mencionas ya lo tiene que haber hecho alguien antes! Tengo que darle un vistazo a la pagina que pusiste con el ATMel que emula el SID..ese si que es un proyectazo!

Saludos.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #18 en: 20 de Mayo de 2008, 12:34:43 »
He acabado de leerme la hoja de datos del SID6581 y es un texto ameno y muy instructivo, una maravilla. Creo que lo vamos a conseguir.

Por lo poco que recuerdo del 6502 no creo que sea tan sencillo aitopes, pero tienes razón en que habrá que investigarlo...

Entretanto, una buena opción es el programa siddump, que no da precisamente el contenido que deben tener los registros del SID en cada frame ¿pero, a qué se refieren con frame? ¿serán frames del sistema PAL?

Transmitir los datos al SID tampoco va a ser fácil, pues usa un sistema bastante curioso.

De acuerdo a un añadido de la hoja de datos, los condensadores que has puesto  de 2200pF deberían ser en realidad de 1000pF.

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #19 en: 20 de Mayo de 2008, 13:00:38 »
Pues sí, según este documento http://www.ucapps.de/howto_sid_wavetables_1_es.html, cada frame corresponde a un campo PAL, es decir 20ms (50Hz). Estamos cerca, muuuuuuuuuy cerca,...

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #20 en: 20 de Mayo de 2008, 13:38:55 »
Yo también tengo un manual de la commodore que también está en basic (esa no la tiré y la tengo guardadita  :wink: ) por lo que voy a leerlo haber si logro entender esto y poder ayudarlos.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #21 en: 20 de Mayo de 2008, 13:46:07 »
Pues sí, según este documento http://www.ucapps.de/howto_sid_wavetables_1_es.html, cada frame corresponde a un campo PAL, es decir 20ms (50Hz). Estamos cerca, muuuuuuuuuy cerca,...

Si señor!
Eso es lo que puede deducirse del documento. Es curioso que se haya adoptado un valor fijo para esto, es como si el sonido estuviese..."cuantificado", es decir, no puede empezar y terminar en cualquier momento, si no que lo hace en posiciones de la linea de tiempo que son multiplos de 20ms (me parece que la explicacion quedo engorrosa)

Pero viendo este pedacito del documento se puede entender mejor:

Aquí finalmente una vista de la base de tambores emulada, que empieza en  0:38, canal #2:


Tenemos las siguientes partes:

    * empieza con una onda triangular, que se mantiene activa durante 20 mS
    * luego hay una parte corta de ruido durante 20 mS
    * acaba con una onda de pulso, la frecuencia y la amplitud se hacen más bajas
« Última modificación: 20 de Mayo de 2008, 13:51:10 por aitopes »
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #22 en: 21 de Mayo de 2008, 06:06:50 »
Hola Aitopes, respecto a tu esquema, cada vez compruebo en más sitios que prefieren utilizar un pin PWM como reloj para el SID, pues parece ser que han encontrado problemas con otras configuraciones.

También me ha sorprendido en algunos casos que utilizan registros de desplazamiento para enviar datos al SID en lugar de hacerlo pin a pin con el PIC.

Otro señor que conectó un sid a un pic: http://emptybits.com/sidemin

Este programa también nos permitiría extraer el estado de los registros del SID en cada frame, y además funciona directamente en el C64 (o en un emulador): http://www.ffd2.com/fridge/ransid/

Esta gente (http://www.c64.no/nanosidplay/) utiliza nuestro mismo planteamiento (evitar emular el 6502 y extraer del PSID directamente los valores de los registros del SID):
Citar
--------------------
NanoSIDplay released
--------------------

A new SID player, NanoSIDPlay, was released recently.  Here's
what was announced about it:

There is a new sid-music player available, named NanoSIDPlay,
developed by Tom Roger Skauen (that well-known C64 composer)
and Laurent Ovaert. Instead of emulating the Sound Interface
Device chip along with the whole environment (which is the
way SIDPlay2/w does it), it simply reads values that a tune
writes into the SID registers. Of course, it has to use format
totally different from PSID/RSID. So, a new format is
introduced - called ZSID (after Zipped SID, most probably).
ZSID stores values from SID registers (also tune length/loop
data and precise, almost cycle-exact information about ADSR
changes) in compressed format. Of course, it has its
disadvantages - for example it cannot store multiple subtunes
in a file. All in all, very much alike YM format, commonly
used to play Atari ST music. There exists a PSID->ZSID
converter, but it is unfinished and unavailable at
the moment. NanoSIDPlay developers have a plan to convert
the whole HVSCinto the ZSID format, so it could be played
on NanoSIDPlay.  NanoSIDPlay is not trying to compete with
SIDPlay2/w in terms of sound fidelity etc. (but it isn't bad
compared to STSound for example, try it yourself!), it has
just one advantage - runs C64 tunes smoothly even on a 386
class CPU.

If you have a low spec PC, why not check it out?

http://www.sid6581.org/NanoSID/

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #23 en: 22 de Mayo de 2008, 15:42:02 »
Hay una cosa que no me cuadra después de leer con detenimiento el datasheet

¿sólo se puede escribir un registro cada 20ms? ¿o existe alguna forma de escribir varios registros en la ventana de tiempo durante la que está en alto el clock?

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #24 en: 22 de Mayo de 2008, 15:46:51 »
No parece haber informacion sobre ello en la hoja de datos, ni en uno ni en otro sentido.

Si no se te ocurren otros cambios en el circuito posteado mas arriba, quizas vaya siendo hora de dibujarle un PCB y armarlo, como para hacer alguna prueba. No digo tocar una melodia, pero al menos hacerlo hacer "Tuuuuuuttttttttt" :)

Por lo pronto, he estado jugando con Visual Studio para aprender a abrir y escribir ficheros de texto, y la cosa funciona. Por supuesto, falta saber "que" hacer con lo leido :)

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #25 en: 22 de Mayo de 2008, 15:49:10 »
Aitopes, no he tenido tiempo de estudiar con detalle tu esquema, pero cada vez estoy más seguro de que usaría una salida PWM del PIC para el clock del SID. Lo demás me parece bien, aunque no tendré tiempo de verlo con detalle hasta el fin de semana.

Yo lo probaría primero en un protoboard antes de hacer el PCB.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #26 en: 22 de Mayo de 2008, 15:52:36 »
Ok. Me parece bien eliminar el integrado que divide la frecuencia.

Lo he simulado (a esa parte) y funciona, pero si lo evitamos es algo menos para tener en cuenta. Busquemos un pin libre, y lo hacemos por PWM.

Respecto del PSB, casi casi que me resulta mas rapido y facil hacer un diseño que renegar con un protoboard, pero eso es por bruto que soy nomas :)

Espermos al lunes, asi el fin de semana le damos el ultimo vistazo al esquema.

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #27 en: 22 de Mayo de 2008, 17:26:48 »
OK. aitopes, este finde lo miro con detenimiento y te cuento el lunes.

En mi pregunta de antes me he liado:
Citar
¿sólo se puede escribir un registro cada 20ms?
Obviamente la respuesta es NO. Creo que sólo se puede escribir un registro por cada ciclo de reloj, es decir, un registro cada 1us (si funciona a 1MHz).

Lo que debe ocurrir internamente es que el SID sólo actualiza los registros al cambiar de frame (es decir cada 20ms), o a lo mejor los actualiza en cada ciclo de reloj. Ésta es la verdadera duda, y no lo veo en el datasheet, aunque también es cierto que el datasheet es una fotocopia del año catapún y hay párrafos enteros que están velados.

Sigo investigando...

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #28 en: 22 de Mayo de 2008, 20:53:11 »
Offtopic: No quiero desviar el tema central del tema, por lo que seré breve.

Estube estudiando el manual de la commodore 64 para generar sonido. Al parecer es muy facil, con solo 7 instrucciones (y menos también) en basic, se puede generar un sonido o un efecto sonoro.

Las istrucciones son POKE; FORT; FORL que les sigue una serie de números en el que se selecciona el tipo de onda, el volumen, el sostenimiento/relajación, ataque/decaimiento.

Como mencioné es en basic, y no se si estas instrucciones están en el basic para los PIC, presumo que no, por lo que habría que averiguar como trabajan estas instrucciones. Voy a tratar de buscar información al respecto.


Cuando llegue el momento, postearé la tabla completa y algunos ejemplos para generar sonido, o cuando me lo soliciten. Se que ahora están con el tema de la conección y comunicación con el PIC.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #29 en: 22 de Mayo de 2008, 20:59:48 »
Bueno, fue más facil de lo que pensaba. Aunque por ahora no es muy completo, porteo lo que encontré:

POKE

Por ahora eso solo
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.


 

anything