sábado, 17 de septiembre de 2011

Programando con SDCC. Funciones y retornos.

A la hora de programar con SDCC me he encontrado con algunos problemas, que francamente no se si están descritos en alguna parte, pero quiero compartirlos por si alguien se anima a programar con este compilador cruzado y se encuentra que no le funcionan sus programas.

En este post, voy ha hablar de dos casos relacionados con la creación de funciones.

El primero se da en funciones que no devuelven datos (void). Lo normal es que no se incluya la sentencia "RETURN" y por lo general funcionara correctamente, pero me he encontrado con casos en los que me ha dado un error al compilar (cuando compila el código ensamblador que genera a partir del fuente C). La causa la desconozco pero si no recuerdo mal en todos los casos finalizaba la función con una condición de tipo "IF" o "SWITCH CASE". Se soluciona incorporando siempre un retorno.

El segundo caso, es cuando realizamos una función en ensamblador dentro de nuestro fuente en C, y queremos que en un determinado momento salga con un "ret". Las funciones en ensamblador cuando se compilan, añade un retorno automáticamente al final de esta, pero en el caso de que la función le pasemos datos, el compilador añade un "push IX" al inicio y por consiguiente al final añade un "pop IX". En estos casos si ponemos un retorno se colgará nuestro programa al ejecutarlo. Para solucionarlo, antes tendremos que añadir un "pop IX".

Ejemplo:
void IniciaDatos(char valor)
{
valor;
__asm
ld HL,#DATA

ld A,4(IX)
cp #0
jr Z,COPY

ld B,#0
ld C,A

sla C ; multiplico por 8
sla C
sla C

ADD HL,BC

COPY:
ld DE,#BUFFER
ld BC,#8

ldir

pop IX ; IMPORTANTE! solo en funciones con entrada de datos
ret

DATA:
.db 0x00,0x02,0x06,0x0E,0x1E,0x3E,0x7E,0x00
.db 0x38,0x44,0x82,0x82,0x82,0x44,0x38,0x00
.db 0xFF,0xE7,0xC3,0x81,0x00,0x18,0x3C,0x7E
.db 0xF0,0xF0,0xF0,0xF0,0x0F,0x0F,0x0F,0x0F

__endasm;
}

miércoles, 13 de julio de 2011

Nace el proyecto grooveSX live


Como avanzaba en el anterior post, he iniciado un nuevo proyecto de una aplicación musical. Estará orientada a la creación de temás y la reproducción en vivo, con funciones para el lanzamiento independiente de patrones y la posibilidad de jugar con la activación/desactivación de los canales.

Para esta nueva aplicación he querido centrarme en la funcionalidad y la interfaz gráfica, que es mi fuerte, mientras que para el player he buscado uno de los que podemos encontrar para MSX. He de ser realista, programar uno de cero me llevaría mucho tiempo, no me motiva y no creo que pudiera conseguir el nivel de los ya existentes.

Para el chip AY, conozco los players: Vortex, el Arkos, el ZMA y el WYZ y el que más se ajusta a las necesidades del proyecto es el WYZ. He escuchado la música del autor, en muchos sitios pero no conocía las posibilidades del player, hasta que hace poco probé el tracker para PC y me gusto por que tiene muchas de las características que busco, como el uso del efecto de la envolvente (utilizado como un instrumento de bajo) y el canal de FX que permite realizar sonidos para percusión. Además esta preparado para aprovechar el MegaFlashROM SCC+, obteniendo 2 AY + 1 SCC.

Así que me puse en contacto con WYZ. Le ha gustado la idea y ya nos hemos puesto a trabajar en la aplicación.
En la pasada chiptune stage 3 organizada por el ClubSprite, mostré una demo de la parte de reproducción (modo live), que utiliza solo un AY pero suena increíble!


Podéis seguir la evolución del proyecto en este mismo blog.

Más información sobre el WYZ player.

PSGed V2 parado!

He parado el proyecto del PSGed V2.
La idea era de hacer una aplicación musical, evolucionando la primera versión del PSGed. Aunque mi propósito inicial siempre ha sido el de meterme en algo más complejo como un tracker, he querido probar en un proyecto intermedio para ir aprendiendo y por esa razón programé un player en assembler basado en estados de los registros del AY por pasos de la secuencia, pero sin soporte de instrumentos. El problema lo encontré una vez creada la interfaz gráfica, ya que esta forma de trabajar se convertía en una tarea incomoda y compleja, a pesar de mis esfuerzos añadiendo funcionalidades para agilizar su uso.
Por esta razón he decidido iniciar un nuevo proyecto utilizando un player que cumpla con los requisitos que necesito para hacer la aplicación que busco.
De todas formas, la experiencia ha sido muy positiva. He aprendido bastante de C, Asm y del hardware del MSX. Internamente el código es mucho más optimo que la primera versión del PSGed.
Es posible que arregle algunos temas y la publique para que podáis probarla.

lunes, 7 de marzo de 2011

Tablas de registros del AY-3-8910

He añadido un enlace a la lista de "Documentación" a una página donde muestran varias tablas, con los registros del AY-3-8910 y de las envolventes. Me ha gustado mucho por lo compactas y completas que son estas tablas. La parte de programación especifica, no hacer caso, ya que esta relacionada al ordenador Mattel Aquarius.

viernes, 4 de marzo de 2011

PSGed v2.01alfa Prueba de sonido

Prueba con una versión alfa del PSGed V2. Usa dos canales. El canal A, utiliza una envolvente cíclica y solo varia la frecuencia de esta, generando un tono (sin usar frecuencia de tono!!). En el canal B, utiliza una nota como bassdrum y ruido como hi-hat.
Test with an alpha version of PSGed V2. Uses two channels. The channel A, using a cyclic envelope and only varies the frequency of generating a tone (tone frequency unused!). On channel B, using a tone as bassdrum and noise for hi-hat.


Forma de onda, obtenida con la envolvente, sin tono.
Waveform obtained with the envelope, without tone.


PSGed v2.01alfa test00 by aorante

NOTA: Test realizado en el emulador BlueMSX. Pendiente de probar en un MSX real.

sábado, 5 de febrero de 2011

PSGed V2, programando!

Después de parar unas semanas para dedicarme a otro proyecto, he reanudado esta nueva versión del PSGed. Ya tengo prácticamente acabado la gestión del interfaz y el acceso a los datos. He podido trabajar de una forma diferente con los datos, optimizando bastante el código, gracias a la ayuda que he recibido de Avelino Herrera. Esto me puede ayudar mucho en próximos proyectos, donde el volumen de datos puede crecer (ejem. SCC). La próxima semana me dedicaré a terminar lo que me falta y ya podré empezar a programar el player utilizando assembler.

After stopping a few weeks to devote to another project, I restarted this new version of PSGed. Since I have almost finished the interface management and access to data. I could work differently with the data, optimizing the code pretty, thanks to the help I received from Avelino Herrera. This can help me a lot in future projects where it can grow the volume of data (eg SCC). Next week I will dedicate myself to finish some functionality and I want to program the player using assembler.

miércoles, 5 de enero de 2011

Trabajando en la v2


Mientras me ayudan en el desarrollo del controlador de pots, he empezado bastante ilusionado una nueva versión del PSGed, con más posibilidades para la elaboración musical. En estos momentos estoy trabajando en el diseño y funcionamiento de la interfaz.

While helping me with the pots driver development, I have started a new version of PSGed. This will have more features for music creation. I am currently working on the design and operation of the interface.