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

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

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #30 en: 22 de Mayo de 2008, 21:58:17 »
Hola Leon!

Gracias por la ayuda!
Efectivamente, todo en una C64 puede (y a veces debe) hacerse con POKE. De hecho, lo unico que hace es colocar un valor en una posicion de memoria, mientras que PEEK lee el contenido de una de ellas.

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 #31 en: 23 de Mayo de 2008, 05:13:49 »
Generar sonidos con el SID parece realmente sencillo, pero yo creo que lo interesante es poder aprovechar los archivos PSID existentes, especialmente porque como no se pase por aquí Modulay y nos componga las melodías, no cuenten conmigo, que tengo un oído pésimo.

El problema es que los PSID están en ensamblador. Ya estudié el desemsamblado que publicó aitopes anteriormente, y aunque no me acuerdo de todo, sí he visto que no sería fácil extraer de ahí los valores de los registros, pero que sería incluso más difícil saber cuándo debemos grabar esos valores en los registros. No descarto esta vía porque me parece la más desafiante...

Pero me temo que no hay más narices que emular el 6502 completito y, para eso, comenzaré con alguno de los emuladores ya existentes en forma de librería (para C o Java) e intentaré modificarlo para que nos dé el valor de los registros del SID y, sobre todo, cuándo deben adquirir esos valores.

De momento, lo que más me preocupa es cómo saber cuándo escribir en el SID. Sólo se puede escribir en el semiciclo positivo del reloj, que dura, 0.5us, de modo que se me ocurren tres posibilidades a priori:

1. Utilizar un timer del PIC para provocar una interrupción cuando se producen los semiciclos positivos y escribir los registros en ese momento. En lugar habría que detectar el flanco de bajada para preparar los datos...
2. Conectar el reloj del SID a una patilla del PIC con interrupción de cambio de estado, o a una de interrupción externa para saber el estado del ciclo en todo momento.
3. Olvidarnos de cómo esté el reloj y mantener los datos en el búffer de escritura durante al menos 2us, para tener la certeza de que solapamos completamente una ventana de semiciclo positivo de reloj, aunque esto es lo que menos me convence...

Perdón por el follón... son sólo notas que me escribo para que luego no se me olviden  :mrgreen:

Por cierto, va a hacer falta mucha ayuda de Leon para que explique cómo se hacía en el MPlab para saber cuándo tiempo consumía un programa/instrucción.


Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #32 en: 23 de Mayo de 2008, 06:45:06 »
En esta revista anual hay bastante información técnica: http://digilander.libero.it/ice00/tsid/sidin/

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #33 en: 23 de Mayo de 2008, 07:07:04 »
Creo que he encontrado el alivio a una de mis pesadillas: http://home.arcor.de/ms2002sep/bak/SID2MIDIw.exe

Es como el siddump pero no está limitado a 3000 frames (el siddump tampoco está limitado, pero hace falta configurar una opcioncilla), además de proporcionarnos los valores de todos los registros (excepto la frecuencia) en un formato más apropiado.

Por cierto, la documentación del programa está aquí (ojo que el programa que se incluye aquí está restringido; utilizar el del enlace anterior): http://home.arcor.de/ms2002sep/bak/s2mwr17.zip
« Última modificación: 23 de Mayo de 2008, 07:12:41 por jfmateos2 »

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #34 en: 23 de Mayo de 2008, 10:32:59 »
Otra observación sobre memoria:

El SID usa 29 registros, cada uno de un byte, y se actualizan cada frame (0.020s), es decir, 1450 bytes por segundo, de modo que un minuto de música requeriría aprox 85KBytes. La memoria que puso aitopes en el esquema creo recordar que era de 32KBytes... quizás se quede un poco corta.

Podríamos ahorrar teniendo en cuenta que no todos los registros se actualizan en todos los frames, pero aún así quizás deberíamos pensar en algún sistema de compresión.

Por ejemplo, una canción media en PSID ocupa 10KB y a nosotros nos ocuparía casi 20 veces más.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #35 en: 23 de Mayo de 2008, 10:40:14 »
Hola amigo!
Si, podemos usar una memoria mayor.

Pero es muy poco probable que siempre haya cambios cada 20ms...Asi que si lograsemos armar una especie de "tabla" que tenga una columna con el tiempo y otra con el estado de los registros, con una fila por cada cambio, el archivo seria muy pequeño.

El programa del pic deberia ir incrementando un contador del tiempo trancurrido, y cuando su valor coincide con una fila de la tabla (ordenada por tiempo para facilitar las cosas) cargaria los registros del SID.

Creo que asi el archivo seria mas pequeño.

Igual, la memoria debe ser mayor. Yo puse esa por que era el unico modelo que tenia en mi cajon de componentes, pero no debemos quedarnos cortos. :)

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 #36 en: 23 de Mayo de 2008, 11:11:10 »
Pues por lo que yo he visto hasta ahora, casi siempre hay cambios en cada frame (cada 20ms), aunque no siempre se actualizan todos los registros.

Me sigue preocupando cómo va a saber el PIC cuando puede escribir, es decir, cuándo está en el semiciclo positivo la señal del reloj del SID.

Voy a intentar modificar el código de siddump y recompilarlo para que muestre los datos de un modo más apropiado a nuestros intereses.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #37 en: 23 de Mayo de 2008, 11:19:02 »
Me sigue preocupando cómo va a saber el PIC cuando puede escribir, es decir, cuándo está en el semiciclo positivo la señal del reloj del SID.

Quizas tus opciones 1 y 3 sean las mas adecuadas. La 3 parece mas facil de implementar, y la 1 un poco mas elegante y "segura" :)



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 #38 en: 23 de Mayo de 2008, 11:22:28 »
Los esquemas del C64, pueden venir bien para ver cómo lo conectaron ellos (condensadores y amplificador de salida): http://www.zimmers.net/anonftp/pub/cbm/schematics/computers/c64/
« Última modificación: 23 de Mayo de 2008, 16:17:37 por jfmateos2 »

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3484
    • Mensajes de la Virgen María
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #39 en: 23 de Mayo de 2008, 11:35:52 »
Que bien, Yo estaba buscando el esquemático pero no lograba encontrarlo. Ver como maneja el procesador al SID, va hacer más facil su comprensión


Mientras buscaba información, me enteré que el procesador corría a menos de 1MHZ y hoy los PIC más modestos, trabajan hasta 4 veces más rápido. La razón por lo que menciono esto, es porque en un hilo intentan hacer imágenes para la TV a color con un pic, y digeron que no es posible.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

-Mi propio Foro de Meteorología
www.meteorologiafacil.com.ar/foros/index.php

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #40 en: 23 de Mayo de 2008, 11:39:18 »
Hola Leon!
En muchos casos, el micro no se dedica directamente a dibujar el video...

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 Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3484
    • Mensajes de la Virgen María
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #41 en: 23 de Mayo de 2008, 11:46:13 »
Entónces se puede hacer lo mismo con los pic (talvéz para mucho es ovbio, pero para mi, es terreno que estoy descrubiendo)



Bueno, no desvío más el tema. Perdón
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

-Mi propio Foro de Meteorología
www.meteorologiafacil.com.ar/foros/index.php

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3484
    • Mensajes de la Virgen María
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #42 en: 23 de Mayo de 2008, 11:52:15 »
Acabo de encontrar algo muy interesante

h t t p://unusedino.de/ec64/technical1.html Fíjencen en dónde dice 6581, hay varias páginas, a partir de la 3 es interesante.
También mas abajo, hay mas documentación sobre el mismo, es lo siguiente: h t t p://unusedino.de/ec64/technical/misc/sid6581/index.html
« Última modificación: 23 de Mayo de 2008, 11:54:21 por Leon Pic »
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

-Mi propio Foro de Meteorología
www.meteorologiafacil.com.ar/foros/index.php

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #43 en: 23 de Mayo de 2008, 11:58:07 »
Esta bueno! Es basicamente la hoja de datos trancripta. Eso mismo es lo que he puesto en uControl, en español.

Es una buena base para entender como trabaja el SID.

El reto, como dice Juanfe, es poder "traducir" los ficheros de musica existentes para no tener que ponerse a componer (algo que yo no podria hacer, claro! :) )
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 Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3484
    • Mensajes de la Virgen María
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #44 en: 23 de Mayo de 2008, 12:04:30 »
Si, mientras lo estaba leyendo me di cuenta  :oops: y yo que pensaba que habia puesto la piedra angular
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

-Mi propio Foro de Meteorología
www.meteorologiafacil.com.ar/foros/index.php


 

anything