Programando en C para Atari ST / STE

Avatar de Usuario
crashman
Mensajes: 134
Registrado: 27 Dic 2016 13:09
Agradecido : 140 veces
Agradecimiento recibido: 94 veces

Re: Programando en C para Atari ST / STE

Mensajepor crashman » 24 Abr 2019 13:40

Último mensaje de la página anterior:

No tengo ni idea de programar en C, bueno, ahora que lo digo... ni en C ni en nada... mis conocimientos de programación se fueron quedando en el camino de la vejez...
Pero lo que si me queda es conocimiento para agradecerte el trabajo que estás haciendo.
Muchas gràcias de parte de todos los Atarianos.

masteries
Mensajes: 207
Registrado: 30 May 2018 11:33
Ubicación: Espaciando
Agradecido : 16 veces
Agradecimiento recibido: 56 veces

Re: Programando en C para Atari ST / STE

Mensajepor masteries » 03 May 2019 12:45

Novedades de hoy:

-Adaptando el entorno de programación para que también funcione en Windows XP; funcionará desde Win XP hasta Win 10. El instalador que estoy preparando hará todas las partes complicadillas de la instalación por tí, para que sea sólo ejecutar el instalador y listo, a programar en C para tu Atari ST / STE

-El mezclador de sonido PCM soporta 3 voces a 12,5 KHz; lo he programado de tal forma que el código se ahorra 3000+ operaciones de comparación por cada frame de audio mezclado; ahora tengo que convertirlo de un código prototipo a algo serio e integrarlo en AGT

-Estoy trabajando con Douglas Little para que se pueda entender bien el concepto de dibujado entrelazado que ha utilizado para duplicar el número de colores, y que se puedan hacer mapeados de niveles en tus juegos sin necesidad de dedicarle media vida

-Ahora AGT dibuja a 50 Hz (como antes) pero internamente el juego puede ir a 50 Hz o a 25 Hz; así puedes hacer juegos más complejos sin que lastre la tasa de cuadros por segundo. Dependiendo del juego que estés haciendo puede no se necesario actualizar los sprites a 50 Hz, quizá el mapeado si te haga falta, pero un personaje puede bastarle con mucho menos. Ahora esto ya no es estricto
La maestría interior...

Se venden trapdoor de 512 KB para Amiga 500: viewtopic.php?f=71&t=200034052

Se venden trapdoor de 1 MB para Amiga 500 Plus: viewtopic.php?f=71&t=200034115

masteries
Mensajes: 207
Registrado: 30 May 2018 11:33
Ubicación: Espaciando
Agradecido : 16 veces
Agradecimiento recibido: 56 veces

Re: Programando en C para Atari ST / STE

Mensajepor masteries » 10 Jun 2019 14:50

Novedades de hoy:

-Ya tengo el mezclador de audio marchando, he tardado más de lo que había considerado porque he tenido que reprogramar una rutina de atención a interrupciones, y lo he tenido que hacer en ensamblador... sí ohh yeah!! y de ensamblador para 68000 yo estaba muy verde, ahora ya he adquirido otro color respecto a este tema del 68k :)

-Por otra parte, el pobre 68000 se las ve y se las desea para mantener el tipo a 12,5 KHz con 3 voces, voy a tener que bajar a 6,25 KHz para que sea factible utilizar sonidos .wav en un videojuego.

-En cuanto lo tenga más depurado, lo integramos en las Atari Game Tools
La maestría interior...

Se venden trapdoor de 512 KB para Amiga 500: viewtopic.php?f=71&t=200034052

Se venden trapdoor de 1 MB para Amiga 500 Plus: viewtopic.php?f=71&t=200034115

Avatar de Usuario
Estrayk
Mensajes: 707
Registrado: 05 Jun 2015 18:36
Ubicación: Valencia
Agradecido : 147 veces
Agradecimiento recibido: 449 veces

Re: Programando en C para Atari ST / STE

Mensajepor Estrayk » 10 Jun 2019 16:30

masteries escribió:-Por otra parte, el pobre 68000 se las ve y se las desea para mantener el tipo a 12,5 KHz con 3 voces, voy a tener que bajar a 6,25 KHz para que sea factible utilizar sonidos .wav en un videojuego.


con 6Khz - 8Khz , vamos sobrados. Para explosiones, saltos, lasers y demás efectos FX sobra. créeme. ¿Pero hablamos del DAC PCM del STe o con el Yamaha 2149F del STfm?
-j4tar1 ・Falcon 060 ・・MegaSTE ・・STe ・
-coam1・v600 ・A1260・CD32・G5 MorphOS・
MISTMiSTer・Acorn Archimedes A3010・Mac Performa 040/40・Mac 4400 ・PowerMac G4 MDD・

masteries
Mensajes: 207
Registrado: 30 May 2018 11:33
Ubicación: Espaciando
Agradecido : 16 veces
Agradecimiento recibido: 56 veces

Re: Programando en C para Atari ST / STE

Mensajepor masteries » 10 Jun 2019 21:14

Estrayk escribió:
masteries escribió:-Por otra parte, el pobre 68000 se las ve y se las desea para mantener el tipo a 12,5 KHz con 3 voces, voy a tener que bajar a 6,25 KHz para que sea factible utilizar sonidos .wav en un videojuego.


con 6Khz - 8Khz , vamos sobrados. Para explosiones, saltos, lasers y demás efectos FX sobra. créeme. ¿Pero hablamos del DAC PCM del STe o con el Yamaha 2149F del STfm?



Estamos hablando del DAC PCM de STe, una vez hecha 1/50 de mezcla de los .wav, se envía a través del canal DMA

El Yamaha sigue quedando libre, para usarlo para música o lo que sea,
La maestría interior...

Se venden trapdoor de 512 KB para Amiga 500: viewtopic.php?f=71&t=200034052

Se venden trapdoor de 1 MB para Amiga 500 Plus: viewtopic.php?f=71&t=200034115

Avatar de Usuario
explorer
Mensajes: 263
Registrado: 10 Ene 2016 18:43
Ubicación: Valladolid, España
Agradecido : 7 veces
Agradecimiento recibido: 239 veces
Contactar:

Re: Programando en C para Atari ST / STE

Mensajepor explorer » 10 Jun 2019 23:50

Pero, ¿cómo es posible? Mi player de mod era capaz de componer música en estéreo a 50 Khz, más un scrolltext y un par de vúmetros en tiempo real. Y a los samples se les aplicaba vibrato, cambio de volumen, fade-in, fade-out, etc.

¿Cómo es posible que te obligue a bajar a 6.25 Khz? ¿Es muy compleja la transformación desde un wav?

masteries
Mensajes: 207
Registrado: 30 May 2018 11:33
Ubicación: Espaciando
Agradecido : 16 veces
Agradecimiento recibido: 56 veces

Re: Programando en C para Atari ST / STE

Mensajepor masteries » 11 Jun 2019 09:36

explorer escribió:Pero, ¿cómo es posible? Mi player de mod era capaz de componer música en estéreo a 50 Khz, más un scrolltext y un par de vúmetros en tiempo real. Y a los samples se les aplicaba vibrato, cambio de volumen, fade-in, fade-out, etc.

¿Cómo es posible que te obligue a bajar a 6.25 Khz? ¿Es muy compleja la transformación desde un wav?


Muy compleja no es, se trata de sumar los valores uno a uno; y por lo que he visto una vez compilado, la CPU accede a la primera posición del array, la copia en un registro, accede a la segunda e igual, los mismo con la tercera voz... a continuación suma el resultado de las dos primeras voces, lo lleva a un registro, suma el tercero lo lleva a otro registro y de ahí lo lleva a la posición del array "mezclado".

Cada paso como el párrafo anterior está contenido en un bucle "for", podría sacarlo del bucle, para eliminar las instrucciones de comparación del "for"; porque consumir unos KB más de código en lugar de utilizar un "for" va a ser más beneficioso; pero si lo piensas son bastantes instrucciones.

Por eso me llama la atención lo del reproductor mod; ¿reproduce sólo .mod? ¿O también juega con samples .wav? ¿La salida es a través del chip Yamaha o del PCM del STe? ¿Está el reproductor mod y su código accesibles? Hay que darle duro a esto...
La maestría interior...

Se venden trapdoor de 512 KB para Amiga 500: viewtopic.php?f=71&t=200034052

Se venden trapdoor de 1 MB para Amiga 500 Plus: viewtopic.php?f=71&t=200034115

Avatar de Usuario
explorer
Mensajes: 263
Registrado: 10 Ene 2016 18:43
Ubicación: Valladolid, España
Agradecido : 7 veces
Agradecimiento recibido: 239 veces
Contactar:

Re: Programando en C para Atari ST / STE

Mensajepor explorer » 12 Jun 2019 05:40

He publicado el código en mi github: https://github.com/joaquinferrero/explo ... explorer.s

No es una versión que se pueda ensamblar, es la versión de desarrollo para Falcon, y está en pañales. Pero es la única que tengo a mano. Está codificada en el código de letras original del ST (parecido al CP437).

La idea es la siguiente: si estamos reproduciendo a 50 Khz, y tenemos un búfer para 1000 muestras, necesitamos rellenar ese búfer 50 veces por segundo. O si tenemos espacio para 2000 muestras, 25 veces por segundo. Etcétera.

Como el TimerA está asociado a la finalización de reproducción del búfer de sonido, solo tenemos que configurarlo en modo contador, con un valor de conteo igual a 1. De esa manera, el chip DMA de sonido disparará una interrupción cuando termine de reproducir el búfer.

En ese momento, le indicamos al chip las nuevas direcciones de inicio y fin del siguiente búfer que debe tocar. El DMA empieza a reproducir inmediatamente. Mientras tanto, ejecutamos la parte de composición del reproductor de MOD sobre el búfer que el DMA terminó de reproducir (o sea, es lo mismo que la técnica de doble búfer de pantalla: componemos la música en un búfer mientras que el DMA reproduce lo que hay en el otro).

masteries
Mensajes: 207
Registrado: 30 May 2018 11:33
Ubicación: Espaciando
Agradecido : 16 veces
Agradecimiento recibido: 56 veces

Re: Programando en C para Atari ST / STE

Mensajepor masteries » 12 Jun 2019 12:54

explorer escribió:He publicado el código en mi github: https://github.com/joaquinferrero/explo ... explorer.s

No es una versión que se pueda ensamblar, es la versión de desarrollo para Falcon, y está en pañales. Pero es la única que tengo a mano. Está codificada en el código de letras original del ST (parecido al CP437).

La idea es la siguiente: si estamos reproduciendo a 50 Khz, y tenemos un búfer para 1000 muestras, necesitamos rellenar ese búfer 50 veces por segundo. O si tenemos espacio para 2000 muestras, 25 veces por segundo. Etcétera.

Como el TimerA está asociado a la finalización de reproducción del búfer de sonido, solo tenemos que configurarlo en modo contador, con un valor de conteo igual a 1. De esa manera, el chip DMA de sonido disparará una interrupción cuando termine de reproducir el búfer.

En ese momento, le indicamos al chip las nuevas direcciones de inicio y fin del siguiente búfer que debe tocar. El DMA empieza a reproducir inmediatamente. Mientras tanto, ejecutamos la parte de composición del reproductor de MOD sobre el búfer que el DMA terminó de reproducir (o sea, es lo mismo que la técnica de doble búfer de pantalla: componemos la música en un búfer mientras que el DMA reproduce lo que hay en el otro).


Es exactamente como lo tengo programado, la IRQ del TimerA en modo contador está asociado a la finalización del DMA; se le pasan las direcciones start y end de la siguiente trama y pone a 1 la variable que indica que hay que realizar una nueva mezcla. En el programa principal se ve esa variable puesta a 1 y realiza la mezcla de 3 voces; pueden ser sonidos de verdad, o sonidos dummy si ya no hay nada que mezclar.

Para optimizar más, los .wav se cargan en memoria con padding de ceros al final, debido a que los sonidos siempre han de tener longitudes iguales a tramas de mezcla, de esta forma evito tener que estar comparando constantemente cuando llego al final del .wav . En la función de mezclado, se resta 1 a la longitud de trama de ese .wav y cuando llegue a ser cero, la longitud de trama será 1 y el puntero apuntará a un .wav dummy (todo ceros).

Gracias por el código, voy a estuadiarlo ahora mismo,
La maestría interior...

Se venden trapdoor de 512 KB para Amiga 500: viewtopic.php?f=71&t=200034052

Se venden trapdoor de 1 MB para Amiga 500 Plus: viewtopic.php?f=71&t=200034115

masteries
Mensajes: 207
Registrado: 30 May 2018 11:33
Ubicación: Espaciando
Agradecido : 16 veces
Agradecimiento recibido: 56 veces

Re: Programando en C para Atari ST / STE

Mensajepor masteries » 14 Jun 2019 14:06

Depurando mi código, encontré un problema por el que la IRQ del DMA saltaba a una frecuencia mucho mayor que 50 Hz, lo he estado corrigiendo y parece que ahora salta a un ritmo normal,

A depurar un porquito más este finde , a ver si saco el mezclador en breves,
La maestría interior...

Se venden trapdoor de 512 KB para Amiga 500: viewtopic.php?f=71&t=200034052

Se venden trapdoor de 1 MB para Amiga 500 Plus: viewtopic.php?f=71&t=200034115

masteries
Mensajes: 207
Registrado: 30 May 2018 11:33
Ubicación: Espaciando
Agradecido : 16 veces
Agradecimiento recibido: 56 veces

Re: Programando en C para Atari ST / STE

Mensajepor masteries » 20 Jun 2019 14:05

Por fin he sacado el tiempo que hacía falta,

Adjunto una prueba del mezclador de audio funcionando; es un .tos de los que compilo directamente con las herramientas;
lo he probado con el emulador Steem

De lo que he notado, es que los sonidos habrá que normalizarlos, porque hay dos samples hard-codeados en el código del ejecutable; y uno de ellos tiene los niveles más altos y se "come" al otro sample.

Por otra parte, tengo que reescribir la parte del código que mezcla el sonido (estoy por escribirla en ensamblador), porque está dentro de un bucle for y hay al menos dos instrucciones adicionales por cada mezcla, si se hace un unroll del bucle for, ocupará algunos KB más de memoria pero te quitas de encima unas 25000 instrucciones por segundo (que a buen seguro te harán falta para otras cosas en tu videojuego, y el 68000 se sentirá más aliviado -grin ); la instrucción que compara si ya ha mezclado 250 muestras (250 muestras * 50 Hz = 12,5 KHz) y la instrucción de salto al principio del bucle.

Todo esto se ha realizado sin tocar para nada el chip Yamaha, que estaría disponible para reproducir música, ya que la salida del Yamaha y del PCM DMA se mezcla por hardware antes de salir del Atari STE

Estrayk escribió:
masteries escribió:-Por otra parte, el pobre 68000 se las ve y se las desea para mantener el tipo a 12,5 KHz con 3 voces, voy a tener que bajar a 6,25 KHz para que sea factible utilizar sonidos .wav en un videojuego.


con 6Khz - 8Khz , vamos sobrados. Para explosiones, saltos, lasers y demás efectos FX sobra. créeme. ¿Pero hablamos del DAC PCM del STe o con el Yamaha 2149F del STfm?


crashman escribió:mostro interés...


explorer escribió:le interesa...


minter escribió:le interesa...


ron escribió:convocando...


kikems escribió:otro más...


eldelcairo escribió:ya están todos convocados,


Publicado ejecutable de muestra del mezclador de audio, a buen seguro te interesará.
Es un .tos, lo ejecutas directamente haciendo doble click con el ratón.

Hay que pulsar la tecla espacio para que empiece a funcionar,
Adjuntos
PCM_mixer_test.rar
Ejecutable con prueba del mezclador de audio, PCM 12,5 KHz por DMA, para Atari STE
(64.97 KiB) Descargado 6 veces
La maestría interior...

Se venden trapdoor de 512 KB para Amiga 500: viewtopic.php?f=71&t=200034052

Se venden trapdoor de 1 MB para Amiga 500 Plus: viewtopic.php?f=71&t=200034115


Volver a “Software ST”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado