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

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

Desconectado flacoclau

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1692
    • El Micro Reactor
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #225 en: 08 de Julio de 2008, 20:29:48 »
Flaco, me ganaste de mano.

No creo que emulemos completamente al Chip, si no que parte del sonido. Ahora si quieren emular completamente al chip, tendremos un clon de la commodore 64 (me gusta mucho la idea)

Bueno ya si quieren emular completo es otro cantar, quizás ahí sí necesiten los 64K...
Las personas con buena ortografía me atraen textualmente.

El Micro Reactor

Córdoba capital - Argentina.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #226 en: 09 de Julio de 2008, 08:27:23 »
Gente tiro otra opinión por si les sirve, quizás esté errado pero ¿64K es la memoria completa que tenía la Commodore? porque si es así no creo que utilicen toda esa memoria para el tema del sonido, recuerden que esta maquinita hacía todo con esa memoria, me refiero al SO en basic, video, periféricos y calculo que una porción no muy grande debe haber sido la dedicada al sonido, quizás esas memorias de 32k te recontrasobren Ariel, bueno es solo un punto de vista de alguien que no está muy compenetrado en el tema y ve todo desde la baranda  :D :D :D :D :D
saludos!!!!!

Hola flaco!
No pretendemos emular TODO un C64. Pero el problema , creo yo, es que necesitamos igual los 64Kb. En una zona estan las rutinas en ROM, que debe ser emuladas y puestas en las mismas direcciones, por que de antemano no sabemos cuales va a usar el programa que querramos correr (algunas podrian descartarse, como las que gestionan la cinta del grabador de audio, pero....0.

Y la zona de la RAM pasa lo mismo. El programador del tema musical a reproducir puede haber elegido cualquier parte para guardar una tabla  o algo asi....

En difinitiva, es casi como si emulasemos el C64 entero, sin la parte de video, teclado,etc. Estamos (intentando) emulando el micro y la memoria.

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: 3610
    • Impresiones en 3D
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #227 en: 09 de Julio de 2008, 09:13:16 »
Tienes razón Ariel, no había pensado en ello. Bueno, a darle memoria entónces.
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 #228 en: 09 de Julio de 2008, 09:27:59 »
Hola Leon!
Temprano por aqui para ser feriado! :) (yo trabajo igual, por que NeoTeo esta en España ;) )

Ojo: yo creo que con las EEPROM originales podemos trabajar MESES desarrollando el "interprete". Es un trabajo largo. anoche me lei la datasheet del 6502, y tiene 55 instrucciones a simular. 13 tipos de direccionamiento, un acumulador y dos registos, u un byte de estado donde cada bit es un flag que indica si hubo acarreo, etc. Todo eso va a ser un lindo ejercicio.

Cuando termine con las tareas del dia, voy a empezar a traducir eso, y ponerlo en algun lado (seguramente en el articulo del SID que tengo en ucontrol) para usarlo de referencia. Tambien tengo la tabla con los 255 opcodes del micro, que es lo que vamos a encontrar dentro de los archivos con la musica.

Esa table dice que "$AD" es el equivalente al mnemonico "ADD", por ejemplo. Entonces, si encontramos en el fichero "FE 0E AD", por ejemplo, puede que signifique "JMP $AD0E", por decir algo. Con esa tabla tenemos la equivalencia de casa cosa.

como puede verse, es un trabajo como minimo largo y tedioso. Que puede complicarse (por ejemplo, el 6502 soporta al menos un tipo de interrupcion, y hay que simularlas)....Tambien los tiempos son importantisimos. Nuestras instrucciones tienen que demorar exactamente lo mismo que en el 6502, si no todo va a ir mas lento o a mayor velocidad. hay MUCHO para discutir.

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: 3610
    • Impresiones en 3D
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #229 en: 09 de Julio de 2008, 09:40:39 »
Sip, mi hija me levantó temprano y una vez que no me tocó ir a trabajar un feriado pudiendo dormir  :8} , ¡¡pero son lindo a veces los bebes!!

Yo tengo ganas de hacer rutinas del 6505 par el PIC, pero he estado leyendo la hoja que pusiste y me pierdo, porque mi ingles no es muy bueno.

Lo bueno que si logro hacer algunas rutinas igual a una instrucción del 6505, luego será más fácil todo, también para pasarlo a CCS. Y si no, se deja en assembler y listo. Total una vez que se tenga por completo el programa escrito igual al original, tendremos al C64 completamente emulado, hasta con la generación de video y audio.

No queda otra que armarme de paciencia y listo.

Si te pacere bien, creo un tema en offtopic para ir tratando las instrucciones de C64. Ahí bamos poniendo los avances e instrucciones traducidas al PIC por medio de rutinas, tanto en assembler como en CCS.
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 #230 en: 09 de Julio de 2008, 09:55:14 »
¿Te parece que en OffTopic?
Me parece que, por ahora, este es el lugar adecuado, para tener todo junto.

Las "rutinas" me parecen casi triviales....dale un vistazo al post donde explicaba como emular, el que juanfe contesto en que estaba "100% de acuerdo", y verás que cada rutina solo tendria un par de instucciones.

el lio empieza con las interrupciones, CREO :)

Me "borro" un par de horas, sino me entusiasmo con esto y no avanzo nada en el trabajo! :)
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: 3610
    • Impresiones en 3D
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #231 en: 09 de Julio de 2008, 10:16:52 »
Bueno, puedo ponerlo en el foro técnico, junto con este.

Para mí, el lío también está en las interrupciones. Ya que son distintas de un micro a otro. Pero se nos va hacer mas fácil tener el equivalente de las instrucciones para el pic, para luego encarar las interrupciones.

Voy a tratar de hacerme un lugar hoy a la tarde, para empezar a traducir las intrucciones, asi, avanzamos en algo y no nos quedamos estancados.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #232 en: 09 de Julio de 2008, 10:34:38 »
Estoy en el "dique seco" por cuestiones de salud (problemillas de espalda ¿será por el puñetero programador que me obliga a meterme debajo de la mesa?  :mrgreen:)... pero les sigo en lo que puedo.

En los cuatro primeros números de esta publicación viene un tutorial de lenguaje ensamblador para C64: http://www.ffd2.com/fridge/chacking/

Respecto a la memoria RAM, encontrar una barata y fácilmente accesible creo que va a resultar difícil. ¿Qué les parecería ésta de 128kbytes si pudiéramos conseguirla: http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2664? Yo tampoco descartaría la opción de usar los 8 chips 4164 que trae originalmente el C64, son fáciles de conseguir aunque no baratos...


Las EEPROM que tenemos en el diseño actual aguantan 1.000.000 de ciclos lectura/escritura.
« Última modificación: 09 de Julio de 2008, 10:58:27 por jfmateos2 »

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #233 en: 09 de Julio de 2008, 11:02:59 »
Estoy en el "dique seco" por cuestiones de salud (problemillas de espalda ¿será por el puñetero programador que me obliga a meterme debajo de la mesa?  :mrgreen:)... pero les sigo en lo que puedo.

Juanfe!! Eso no, tenes que poner como excusa que el "exceso de sexo me deterioro la salud", o algo asi! :)

Respecto a la memoria RAM, encontrar una barata y fácilmente accesible creo que va a resultar difícil. ¿Qué les parecería ésta de 128kbytes si pudiéramos conseguirla: http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2664? Yo tampoco descartaría la opción de usar los 8 chips 4164 que trae originalmente el C64, son fáciles de conseguir aunque no baratos...
Esa tiene buena pinta!
1.000.000 parece mucho, y lo es. Yo creo que podemos arrancar como estamos. Pero a la larga, y con tiempo, debermos migrar a una RAM, por que si un bucle "se ensaña" con alguna posicion de memoria, nos va a durar poco. :)

Esta misma tarde empiezo una "traduccion" de los aspectos mas interesantes de la datasheet, y la pongo en uControl para que la tengamos a mano.
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 aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #234 en: 09 de Julio de 2008, 13:56:31 »
He comenzado a darle forma "legible", ordenada y en español a la informacion disponible sobre el micro 6510 (hemos hablado del mismo como 6502, pero el 6510 es el usado en las C64) en este espacio.

No hay demasiado por ahora, pero con el correr de las horas voy a ir traduciendo y dibujando mas cosas. Voy a ir priorizando lo que se necesite para la emulacion en si misma.

Al final del articulo voy a reunir los links utiles.

(como pueden ver, es un proyecto, junto al de la maquina SIMPLE de videojuegos, que se me esta convirtiendo en un verdadero vicio).  :mrgreen:
« Última modificación: 09 de Julio de 2008, 13:59:29 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 #235 en: 09 de Julio de 2008, 16:50:23 »
Muy buena la información sobre el 6510 aitopes.

Aitopes y Leon PIC, cuenten con una DS1245AB (en paquete DIP ancho de 32 pines, parecido al SID) para cada uno que acabo de conseguir.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #236 en: 09 de Julio de 2008, 16:58:24 »
Juanfe,....¿tienes algun parentesco con los Reyes Magos?

Gracias!!
Espero poder devolverte las atenciones alguna vez. (personalmente, si fuese posible!)
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 aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #237 en: 09 de Julio de 2008, 17:44:37 »
Ufffffffffff!
Dado que en Argentina es feriado, me estoy dando una panzada de lectura sobre el tema en cuestion.
Tanto, que ya un solo articulo en ucontrol parece ser insuficiente. Por un lado pondré la info del SID, por otro la del 6510, por otro el mapa de memoria del C64, etc.

Y toooodo junto, accesible desde aquí.

Creo que es mas ordenado.
Encaro primero los temas que supongo tenemos que ver primero. Pero si tienen sujerencias, no se corten!

Saludos!
« Última modificación: 09 de Julio de 2008, 17:46:49 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 aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #238 en: 09 de Julio de 2008, 18:18:13 »
Hola Leon!

Recuerdo que tenias ganas de comenzar a codificar cada instruccion del 6510 en CCS....Pues no te apures!

Mira esto:

Citar
//****************************************************************************
//
// Process the "STA" instruction
//
//****************************************************************************
void ProcessSTA_C_85( void ){
   uint32     zpage;

   zpage=(uint32) GETABYTE();
   Poke(zpage,_A);       
   Cycles=3;
}
//----------------------------------------------------------------------------
void ProcessSTA_C_95( void ){
   uint32     zpage;

   zpage=(uint32) (GETABYTE()+_X);
   zpage&=255;
   Poke(zpage,_A);     
   Cycles=4;
}
//----------------------------------------------------------------------------

void ProcessSTA_C_8d( void ){
   uint32     address;

   address=(uint32) GETAWORD();
   Poke(address,_A);   
   Cycles=4;
}
//----------------------------------------------------------------------------

void ProcessSTA_C_9d( void ){
   uint32     address;

   address=(uint32) (GETAWORD()+_X);
   Poke(address,_A);
   Cycles=5;
}
//----------------------------------------------------------------------------
void ProcessSTA_C_99( void ){
   uint32     address;
   byte     zpage;

   address=(uint32) (GETAWORD()+_Y);
   Poke(address,_A);
   Cycles=5;
}

//----------------------------------------------------------------------------
void ProcessSTA_C_81( void ){
   uint32     address;
   uint32     zpage;

   zpage=(uint32) (GETABYTE()+_X);
   zpage&=255;
   address=Deek( zpage );
   Poke(address,_A);
   Cycles=6;
}

//----------------------------------------------------------------------------
void ProcessSTA_C_91( void ){
   uint32     address;
   uint32     zpage;

   zpage=(uint32) GETABYTE();
   address=(uint32) (Deek(zpage)+_Y);
   Poke(address,_A);
   Cycles=6;
}

//----------------------------------------------------------------------------

void ProcessSTA_C( void ){

   word     address;
   byte     zpage;

   switch (opcode) {
      case 0x85   :   zpage=GETABYTE(); Poke(zpage,_A);        Cycles=3; break;
      case 0x95   :   zpage=GETABYTE(); Poke((zpage+_X)&255,_A);     Cycles=4; break;
      case 0x8D   :   address=GETAWORD(); Poke(address,_A);    Cycles=4; break;
      case 0x9D   :   address=GETAWORD(); Poke(address+_X,_A); Cycles=5; break;
      case 0x99   :   address=GETAWORD(); Poke(address+_Y,_A); Cycles=5; break;
      case 0x81   :   zpage=GETABYTE(); address=Deek((zpage+_X)&255); Poke(address,_A);    Cycles=6; break;
      case 0x91   :   zpage=GETABYTE(); address=Deek(zpage); Cycles=6; Poke(address+_Y,_A); break;
   }
}

Forma parte de un emulador de la C64 para Pc, cuyo codigo fuente está liberado al publico y para que se lo modifique, siempre que se publiquen los resultados de la misma manera (cosa que a mi me gustaría hacer...no vale de nada tomarse todo este trabajo para luego esconderlo debajo de la cama).

El paquete de emulador + fuentes esta aqui.

Saludos!

EDITO: si analizas ese trozo de código, veras que hay varias funciones para la misma STA. Eso es por que hay varios opcodes que hace "casi lo mismo" dentro del 6510. Aun no tengo claras las diferencias entre una y otra, pero el emulador las tiene que simular a todas. Los opcodes ya están en uControl.
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: 3610
    • Impresiones en 3D
Re: SID6581 (sintetizador de audio del Commodore 64)
« Respuesta #239 en: 09 de Julio de 2008, 23:52:11 »
Juan, muchiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisimas graaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacias  :-/ :-/ :-/ :-/ :-/ :-/

Haber, corríganmen si estoy equivocado, pero estás instrucciones, no la maneja el PIC, ya que el C de la PC, no es lo mismo que el C para el PIC.

De todas maneras, tendremos que traducir estas instruciones de C al CCS del PIC. Ya aca no me animo, porque de C no C nada  :mrgreen: En realidad se poco y no me acostumbro a utilizar el CCS. Por alguna extraña razón, le escapo.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.