MIDI addon

Todo aquello que acompaña a la placa del ZX-Uno (carcasas, alimentadores, pegatinas para el teclado, etc) / Everything that goes with the ZX-Uno board (cases, AC adapters, stickers for keyboard, etc)
Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

MIDI addon

Mensaje por mcleod_ideafix » 04 Oct 2019, 00:52

(english version below)

¿Qué es?
Es un addon para ZXUNO que se enchufa en el conector de expansión de 36 pines presente en el ZXUNO v4.1 y compatibles. Implementa un sintetizador MIDI de 64 voces, con 128 instrumentos y varios sets de percusión. La salida de audio de este sintetizador se mezcla con el resto de fuentes de audio del ZXUNO para poder ser escuchado a través de la salida de sonido que se esté usando. Está diseñado para ser usado como si fuera un sintetizador conectado al conector MIDI/RS232 del ZX Spectrum 128K y superior.

¿Qué necesita para funcionar?
El core EXP27 de ZX Spectrum o superior. El binario del core se encuentra en el repositorio, en
http://svn.zxuno.com/svn/zxuno/cores/sp ... /zxuno_v4/
Usuario: guest
Password: zxuno
También necesita una BIOS que sea compatible con EXP27. La versión de BIOS 0.71 o superior. La última versión de la BIOS se puede obtener desde:
https://github.com/zxdos/zxuno/tree/mas ... RMWARE.ZX1
El software que he escrito o adaptado para este addon se encuentra también en el repositorio, en
http://svn.zxuno.com/svn/zxuno/software/midi/

¿Qué software es compatible?
Poco, que yo sepa. El intérprete de BASIC 128K lo soporta a través del comando PLAY. Además de esto, hay disponible un programa para ESXDOS, el comando playmid, con el que se puede reproducir un fichero MIDI tipo 0 desde la tarjeta SD. Hay algún software, como la colección Bach 8 bit de Neil Parsons que he adaptado para salir por la interfaz MIDI en lugar de por el chip de sonido interno. En este momento desconozco si se llegó a escribir algún software que usara la interfaz MIDI durante la época comercial del Spectrum.

¿Qué hardware es compatible?
Cualquier dispositivo con un conector de 12x3 compatible con el ZXUNO v4.1, con el mismo pineado y para el que haya una versión del core EXP27 disponible. En cuanto a addons, puede coexistir con el modulo wifi ESP8266 y el módulo VGA 18 bits. Lamentablemente, el conector del ZXUNO sólo está preparado para un addon a la vez, con lo que si se quisieran usar alguno de estos al mismo tiempo, habría que disponerlos en una suerte de "placas apiladas" estilo a lo que se hace con los shields de Arduino.

¿Qué señales usa el addon del conector de expansión del ZXUNO?
En total 4 señales: MIDI IN (del ZXUNO al addon), y CLBD, DATABD0, WSBD (interfaz I2S, del addon al ZXUNO). Además de por supuesto, alimentación de 5V y GND. El pineado es el siguiente:
pines_addon_midi.png
Hay un componente que falta, marcado como DS2431 y una señal ID que va al ZXUNO que no se ha mencionado. ¿Falta algo?
En realidad, no. La inclusión del DS2431 es un proyecto que persigue que los addon se "presenten" ellos mismos al ZXUNO. Es algo que Antonio y yo aún estamos en fase de discursión. Previendo que nos hará falta un pin para este componente, hemos decidido reservarlo cautelarmente (señal ID). En estos momentos, dicha señal no hace absolutamente nada en el core.

¿Es compatible con las carcasas de ZXUNO?
Si es una carcasa adaptada de Raspberry Pi, debería caber. Para otro tipo de carcasas, me temo que no tengo respuesta porque no las he probado.

¿Cómo se instala?
1. Asegúrate de tener la última versión de BIOS y core EXP27 en tu ZXUNO. Comprueba que todo sigue funcionando correctamente.
2. Con el ZXUNO apagado, conecta el addon MIDI al ZXUNO
3. Vuelve a encender el ZXUNO. Observarás que uno de los leds se enciende y se queda encendido. Es el led RUN, que indica que el chip sintetizador se ha inicializado correctamente. El otro led, MIDI, puede que se quede encendido o apagado.

Una vez instalado, ¿cómo lo puedo probar?
Hay varias formas. Quizás la más rápida, si has arrancado con DivMMC y ESXDOS, sea usar el nuevo comando playmid con alguno de los ficheros MID que ofrezco en el repositorio, y que ya está convertidos a tipo 0.
Otra forma de probarlo es desde el BASIC de 128K (para ello, DivMMC debe estar inactivo), usando el comando PLAY. Por ejemplo:

Código: Seleccionar todo

PLAY "T160","","","Y1Z192Z0V15O5cdefgabC"
Que toca una escala musical con el sonido de un piano.
Si cambias el 0 en Z0 por otro número, de 0 a 127, podrás escuchar la escala con otro instrumento.

El led de MIDI se queda todo el rato encendido y aunque el addon funciona, no lo veo realmente parpadear. ¿Ocurre algo malo con mi addon?
No, en abosluto. La señal MIDI cuando está inactiva se queda a nivel alto, y sólo baja durante las transiciones en las que se envía un 0. Esto ocurre en pocos microsegundos, con lo que, salvo que se estén recibiendo muchos eventos MIDI, la señal estará mucho más tiempo a nivel alto (inactiva) que a nivel bajo.
He hecho una modificación en el esquema electrónico de la interfaz, de forma que futuras versiones de este addon tendrán un comportamiento opuesto: el led MIDI estará normalmente apagado, y sólo se encenderá brevemente durante el envío de eventos.

¿Dónde puedo encontrar más información sobre las capacidades MIDI de este addon?
La información de referencia es el datasheet del chip sintetizador, el SAM9773, que encontrarás en el repositorio, en el apartado que hemos dedicado al software de este addon. Allí podras encontrar, entre otras cosas, la lista de instrumentos, sets de percusión y efectos MIDI soportados.

¿Podría usar este addon de forma independiente del ZXUNO?
Sí. Necesitas un decodificador I2S que se conectará a la señal CLBD (reloj I2S), WSBD (selector izquierda/derecha I2S) y DATABD0 (datos I2S) para desde él obtener la salida estéreo analógica. La entrada MIDI IN habrá que adaptarla usando un circuito con un optoacoplador, diodo externo y resistencia. Además se necesitará alimentar a la placa con 5V. Con este montaje, es posible conectar un controlador MIDI y así conseguir que el addon funcione como sintetizador MIDI obedeciendo los comandos MIDI que se le envíen.

playmid reproduce algunos ficheros MIDI un poco más lento o con la velocidad de reproducción distorsionada, ¿se puede remediar?
La reproducción de un fichero MIDI implica, de vez en cuando, realizar cálculos en 32 bits, que son costosos en el Z80. Por otra parte, la resolución de un fichero MIDI puede llegar a ser de muy pocos milisegundos entre eventos. En el Spectrum la granularidad de que disponemos para contar el tiempo es de aproximadamente 20 milisegundos (un retrazo vertical), por lo que varios eventos que se producen con pocos milisegundos de diferencia en el MIDI original, en el Spectrum se reciben y deben emitirse uno detrás de otro sin retardo. A esto hay además que añadir que el Spectrum no tiene una UART real para enviar eventos MIDI, sino que se usa un bit de uno de los puertos de E/S del AY-3-8912 controlando desde software su estado (bit banging) por lo que el acto de enviar un evento MIDI ocupa el 100% del procesador. Todo esto puede llegar a ser demasiado para la CPU y resentirse la reproducción de algunos ficheros si estos lanzan muchos eventos MIDI. Para paliarlo, se puede cambiar la velocidad de la CPU del ZXUNO con el comando zxunocfg -sVELOCIDAD (con VELOCIDAD de 0 a 3, donde 3 es la más rápida) antes de usar playmid, para tener más potencia de CPU para procesar el fichero MIDI.

¿Hay algún límite en el tamaño de un fichero MIDI que se puede reproducir con playmid?
No por parte del programa. Si hay alguna limitación, sólamente puede venir o bien de parte de ESXDOS que no sea capaz de manejar ficheros grandes, o bien por las limitaciones propias del formato FAT o FAT32 que se use en la tarjeta SD.

¿Cómo se para la reproducción de un fichero MIDI en playmid?
Pulsa SPACE o BREAK. El envío de eventos se detendrá, pero no el sintetizador, con lo que la parada es "limpia" (como si los músicos dejaran de tocar)

ENGLISH VERSION (hopefully, better than the automated Google one)

What is it?
It's an addon for the ZXUNO, which is connected in the 36 pin expansion connector available in the ZXUNO v4.1 and compatible boards. It features a MIDI synthesizer with 64 voices, 128 instruments and several drum sets. The digital audio output from this synthesizer is mixed along the rest of audio sources of the ZXUNO so it can be listened through the audio output that the user is using. It is designed as if it were an external synthesizer connected to the MIDI/RS232 connector of a Spectrum 128K.

What do I need to get this working?
ZX Spectrum core EXP27 or higher. Ready to flash binaries can be found at the repository:
http://svn.zxuno.com/svn/zxuno/cores/sp ... /zxuno_v4/
User: guest
Password: zxuno
It also needs a compatible BIOS. Any version from 0.71 onwards should fit. Last BIOS version can be downloaded from here:
https://github.com/zxdos/zxuno/tree/mas ... RMWARE.ZX1
There is some software I have written or adapted, which you can find here:
http://svn.zxuno.com/svn/zxuno/software/midi/

Which software is compatible?
Little that I know. The 128K BASIC interpreter supports it through the PLAY command. Besides, there is a ESXDOS dot command, playmid, which allows you to play a MIDI format 0 file from the SD card. There is some software such as the 8-bit Bach Collection, from Neil Parsons, which I have adapted to play through the MIDI output. Up to date, I have no knowledge of any other software which would have been released during the comercial life of the ZX Spectrum.

Which hardware is compatible?
Any FPGA device with a 12x3 female header connector with the pin arrangement of the ZXUNO v4.1, and for which a version of the EXP27 core is available. As for other addons compatibility, the MIDI addon can coexist with the ESP8266 wifi addon and the VGA-18 bits addon. Sadly, the ZXUNO connector is designed to accept only one addon at a time, and the addons themselves are not designed to be stacked one on another, as female headers have not been fitted at the top of each one.

Which signals are used from the ZXUNO expansion connector
A total of 4 signals: MIDI IN (from ZXUNO to the addon), and CLBD, DATABD0, WSBD (I2S interface, from the addon to ZXUNO). Of course, 5V power supply and GND. Pin mapping is as follows:
pines_addon_midi.png
There is a component footprint labeled DS2431 and an ID signal going to the ZXUNO which has not been mentioned. Is there something missing?
Actually, no. The DS2431 thing is an ongoing project by Antonio Villena and I, whose goal is to provide a means of addons to be able to introduce themselves to the ZXUNO so the core is aware that a certain addon has been connected. As the DS2431 needs to communicate to the FPGA with one signal, we thought it would be wise to reserve a pin as early as possible to avoid future developments to take over it (ID signal as seen in the pin mapping picture). Presently, this signal is not implemented in the ZX Spectrum core.

Is it compatible with ZXUNO cases?
For Raspberry Pi adapted cases, it should fit. For other custom cases, I'm afraid I have no answer 'cause I haven't tried them.

How do I install it?
1. Check that you have EXP27 core and a compatible BIOS and that everything performs as usual.
2. Power off the ZXUNO and connect the MIDI addon
3. Power on the ZXUNO. A led labelled as RUN will light steady. This means the MIDI synthesizer has passed its initialization sequence. There is another led labelled MIDI, which may stay on or off after a power on.

Once installed, how can I test it?
Several ways. Quicker one, if you have booted with DivMMC and ESXDOS support is to use the new command playmid along with any of the MID files I provide at the repository.
Another way to test it is to boot into a 128K machine without DivMMC so 128K BASIC is available. Then, you can use the PLAY command, for example:

Código: Seleccionar todo

PLAY "T160","","","Y1Z192Z0V15O5cdefgabC"
Which plays a scale with the sound of a piano.
Changing 0 in Z0 for another number in the range 0 to 127 will make the scale to play with the sound of another instrument (search for a list of standard MIDI instruments).

(sorry I have to pause my translation here. english version to be continued...)

El led de MIDI se queda todo el rato encendido y aunque el addon funciona, no lo veo realmente parpadear. ¿Ocurre algo malo con mi addon?
No, en abosluto. La señal MIDI cuando está inactiva se queda a nivel alto, y sólo baja durante las transiciones en las que se envía un 0. Esto ocurre en pocos microsegundos, con lo que, salvo que se estén recibiendo muchos eventos MIDI, la señal estará mucho más tiempo a nivel alto (inactiva) que a nivel bajo.
He hecho una modificación en el esquema electrónico de la interfaz, de forma que futuras versiones de este addon tendrán un comportamiento opuesto: el led MIDI estará normalmente apagado, y sólo se encenderá brevemente durante el envío de eventos.

¿Dónde puedo encontrar más información sobre las capacidades MIDI de este addon?
La información de referencia es el datasheet del chip sintetizador, el SAM9773, que encontrarás en el repositorio, en el apartado que hemos dedicado al software de este addon. Allí podras encontrar, entre otras cosas, la lista de instrumentos, sets de percusión y efectos MIDI soportados.

¿Podría usar este addon de forma independiente del ZXUNO?
Sí. Necesitas un decodificador I2S que se conectará a la señal CLBD (reloj I2S), WSBD (selector izquierda/derecha I2S) y DATABD0 (datos I2S) para desde él obtener la salida estéreo analógica. La entrada MIDI IN habrá que adaptarla usando un circuito con un optoacoplador, diodo externo y resistencia. Además se necesitará alimentar a la placa con 5V. Con este montaje, es posible conectar un controlador MIDI y así conseguir que el addon funcione como sintetizador MIDI obedeciendo los comandos MIDI que se le envíen.

playmid reproduce algunos ficheros MIDI un poco más lento o con la velocidad de reproducción distorsionada, ¿se puede remediar?
La reproducción de un fichero MIDI implica, de vez en cuando, realizar cálculos en 32 bits, que son costosos en el Z80. Por otra parte, la resolución de un fichero MIDI puede llegar a ser de muy pocos milisegundos entre eventos. En el Spectrum la granularidad de que disponemos para contar el tiempo es de aproximadamente 20 milisegundos (un retrazo vertical), por lo que varios eventos que se producen con pocos milisegundos de diferencia en el MIDI original, en el Spectrum se reciben y deben emitirse uno detrás de otro sin retardo. A esto hay además que añadir que el Spectrum no tiene una UART real para enviar eventos MIDI, sino que se usa un bit de uno de los puertos de E/S del AY-3-8912 controlando desde software su estado (bit banging) por lo que el acto de enviar un evento MIDI ocupa el 100% del procesador. Todo esto puede llegar a ser demasiado para la CPU y resentirse la reproducción de algunos ficheros si estos lanzan muchos eventos MIDI. Para paliarlo, se puede cambiar la velocidad de la CPU del ZXUNO con el comando zxunocfg -sVELOCIDAD (con VELOCIDAD de 0 a 3, donde 3 es la más rápida) antes de usar playmid, para tener más potencia de CPU para procesar el fichero MIDI.

¿Hay algún límite en el tamaño de un fichero MIDI que se puede reproducir con playmid?
No por parte del programa. Si hay alguna limitación, sólamente puede venir o bien de parte de ESXDOS que no sea capaz de manejar ficheros grandes, o bien por las limitaciones propias del formato FAT o FAT32 que se use en la tarjeta SD.

¿Cómo se para la reproducción de un fichero MIDI en playmid?
Pulsa SPACE o BREAK. El envío de eventos se detendrá, pero no el sintetizador, con lo que la parada es "limpia" (como si los músicos dejaran de tocar)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

robuttley
Mensajes: 7
Registrado: 06 Sep 2019, 13:15

Re: MIDI addon

Mensaje por robuttley » 15 Oct 2019, 00:36

Hi Mcleod, is this a good place to ask for help with this?

Mine arrived last week (thank you very much!) and I installed it tonight. I followed the instructions, I updated my 4.2 board with the FIRMWARE.ZX1 file you linked, so it now has bios v0.76, I updated the SPECTRUM.ZX1. I copied over the PLAYMID file to my BIN folder, and I copied over some of the midi files you linked, being careful to alter the filenames so there would be no issue with the 8.3 truncation stuff.

Then I removed my VGA & ESP8266 board, and installed the MIDI board.

When I boot the board, the first LED lights up and stays on.

When I try to run the PLAYMID command with a file, the board certainly thinks it's doing something (the second LED comes on), but no MIDI audio comes out. Audio on the board is working (if I use a BEEP command), but no MIDI. I tried with several of the files, and I even tried to put in incorrect filenames etc to just satisfy myself it was finding and 'playing' the files - just no sound comes out. The second LED comes on, and again later it goes off. But no audio.

Then I disabled DivMMC, booted a 128K Spectrum as per your notes above, and tried the PLAY command. Again, it gives the impression it is playing something, but no audio comes out. However, if I simply enter PLAY "abC", then I hear the beeps as you'd expect.

Is there anything else I can do to test the board? I don't know if it's the board, something with my Uno, or maybe something stupid I'm doing!

Many many thanks again for your time and patience making this little device!

Avatar de Usuario
desUBIKado
Mensajes: 1002
Registrado: 05 Ago 2016, 22:33

Re: MIDI addon

Mensaje por desUBIKado » 15 Oct 2019, 01:07

Se puede usar el comando PLAY con el esxDOS operativo si se usa la rom Derby++

He podido crear el megaprograma

Código: Seleccionar todo

10 PLAY "T160","","","Y1Z192Z0V15O5cdefgabC"
Ejecutarlo con RUN, grabarlo con SAVE*"ESCALA.BAS" LINE 10, y luego cargarlo con LOAD*"ESCALA.BAS" sin problemas.

Veo que escribiendo así la sentencia PLAY se oye por el AY y por el addon MIDI. Eso es porque Derby++ tiene soporte para Turbo Sound (doble AY), y al tenerlo activado también se escucha por el canal A del segundo chip AY. Si modificamos la cadena así:

Código: Seleccionar todo

10 PLAY "T160","","","","","","Y1Z192Z0V15O5cdefgabC"
entonces ya solo se escucha por el addon MIDI

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: MIDI addon

Mensaje por mcleod_ideafix » 17 Oct 2019, 01:34

robuttley escribió:
15 Oct 2019, 00:36
Hi Mcleod, is this a good place to ask for help with this?
Can you tell me which Spectrum core version you are using? Is it EXP27 ?
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
desUBIKado
Mensajes: 1002
Registrado: 05 Ago 2016, 22:33

Re: MIDI addon

Mensaje por desUBIKado » 17 Oct 2019, 20:14

Bueno yo he seguido cacharreando con el addon MIDI, y voy ha comentar algunas cosas.

Respecto al primer post escrito por mcleod_ideafix, algunas cosas para completar:

¿Qué software es compatible?

El comando .play para esxDOS y UnoDos3 que viene al descargarse el paquete Derby++ desde aquí permite, estando en el BASIC 48K, usarlo como equivalente del comando PLAY del BASIC de 128K, y se puede usar teniendo el esxDOS habilitado. No soporta Turbo Sound (Segundo AY).

Si se usa la rom Derby++ el comando PLAY, que además es compatible con Turbo Sound, puede usarse en el BASIC 128, incluso teniendo el esxDOS habilitado. Si se pasa al BASIC 48 entonces es necesario usar el comando .play comentado anteriormente.


¿Qué hardware es compatible?

1. Antonio Villena ha creado un addon WIFI+conector expansión ZX-Uno 4.1 para el ZX-DOS, por lo que luego se puede pinchar el addon MIDI al conector de expansión y tener WIFI y MIDI en el ZX-DOS.

2. El ZX GO+ tiene conector expansión ZX-Uno 4.1 en la propia placa, y un addon que se le puede conectar al conector de expansión ZX Go+ que proporciona otro conector expansión ZX-Uno 4.1. De este modo se pueden pinchar los addon WIFI y MIDI en los 2 conectores de expansión ZX-Uno 4.1.


¿Es compatible con las carcasas de ZXUNO?

Está probado que es posible colocarlo dentro de un uZX-UNO y un ZX-DOS, y cerrar la carcasa sin problemas. De la misma forma es posible pincharlo en el conector interno de expansión ZX-Uno 4.1 de un ZX GO+ dentro de la carcasa de un ZX Spectrum 48K y cierra perfectamente.


Y ahora algunas dudas para mcleod_ideafix:

Estando arrancado con la rom Derby++, si ejecuto la instrucción

Código: Seleccionar todo

PLAY "T160","","","Y1Z192Z0V15O5cdefgabC"
Se oye por el segundo AY y por el addon MIDI. Hasta aquí OK.

Según el wiki del ZX-Uno, con el registro DEVCONTROL ($0E) se puede deshabilitar los 2 AY o solo el segundo.

Con OUT 64571,14:OUT 64827,1 deshabilito los 2 AY y si ejecuto la instrucción PLAY anterior solo la escucho por el addon MIDI. Esto es correcto. Sin embargo si deshabilito solo el 2º AY con OUT 64571,14:OUT 64827,2 al ejecutar el comando PLAY sigue saliendo el sonido por el 2º AY ¿Por qué no se ha deshabilitado el 2º AY?

Ahora una pregunta, ¿por qué el comando .playmid no se pone el solo a funcionar a 28MHz al inicio si a esa velocidad mejora el rendimiento en la reproducción del sonido?

Y la última cuestión. Veo que en la cadena del comando PLAY si escribo "Z192Z8" se elegiría el instrumento 9 Celesta según el manual del SAM9773. Si Z192 es la instrucción para decirle al SAM9773 que cambie de instrumento no he conseguido ver en el manual dónde pone que haya que usar ese código ¿me podrías indicar por qué se usa Z192 y dónde aparece en el manual que ese es el valor a emplear?

Avatar de Usuario
desUBIKado
Mensajes: 1002
Registrado: 05 Ago 2016, 22:33

Re: MIDI addon

Mensaje por desUBIKado » 17 Oct 2019, 22:03

Para los linuxeros he encontrado esta utilidad para convertir ficheros midi en formato 1 a formato 0:
Si descargáis los archivos tendréis la librería y los ejemplos de programas:

midifile.rb.png
midifile.rb.png (61.02 KiB) Visto 9466 veces
Yo en mi instalación de Mageia 6 ya tengo funcionando ruby, así que lo que he hecho ha sido copiar como root :

midifile.rb a la carpeta /usr/share/rubygems/

y los archivos de ejemplo a la carpeta /usr/local/bin/

y ya puedo ejecutar desde un terminal el programa SMFformat0 que es el que permite pasar de formato midi 1 al 0.

robuttley
Mensajes: 7
Registrado: 06 Sep 2019, 13:15

Re: MIDI addon

Mensaje por robuttley » 17 Oct 2019, 22:32

mcleod_ideafix escribió:
17 Oct 2019, 01:34
robuttley escribió:
15 Oct 2019, 00:36
Hi Mcleod, is this a good place to ask for help with this?
Can you tell me which Spectrum core version you are using? Is it EXP27 ?
:D It is, yes. It's EXP27, Bios 0.76

Apologies for bad photos, just quickly resized cameraphone snaps. If they're annoying I'll remove them, I thought they might help that's all! Trust me there was an audio output lead connected when I tested it :D

Imagen
Imagen
Imagen

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: MIDI addon

Mensaje por mcleod_ideafix » 18 Oct 2019, 00:41

Check that there is no components from the ZXUNO touching the lower (not visible) side of the MIDI board. Specially, the PROG/RESET pinheader that is usually present in the ZXUNO board, located behind the addon board.

Let's rule out a misconnection issue:

Please, boot with a 128K BASIC environment. Check that, after boot is complete and you are presented with the standard 128K initial menu, the MIDI led is ON (as well as the RUN led). If not, turn off the device, re-seat the module, and power on again.
Then, issue the following command from 128K BASIC. Spaces between commands are optional.

Código: Seleccionar todo

PLAY "Y1 Z176 Z99 Z55 Z98 Z81 Z6 Z35"
On a working MIDI device, this will do an internal autotest. While it is doing it, three tones will be heard, one with high pitch for less than a second, a second one for about a second, and finally a third steady low pitch tone (about 291 Hz). You will need to do a power cycle to mute it. A reset, or master reset won't do.

The MIDI led will stay ON.

If you can't hear any of this, after the command has been issued, move the addon a little in and out to see if there is still misconnection issues. With one finger below the MIDI chip, use another one to provide a gentle pressure to the two edges of the MIDI chip that are not near the edge of the board to check if there are issues with the soldering (which shouldn't be there, but just in case...). If you can hear the low pitch tone, even for a brief moment, then something happened with the soldering.

Anyway, if it still doesn't work, I will contact you privately to do a RMA.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: MIDI addon

Mensaje por mcleod_ideafix » 18 Oct 2019, 09:41

desUBIKado escribió:
17 Oct 2019, 20:14
Con OUT 64571,14:OUT 64827,1 deshabilito los 2 AY y si ejecuto la instrucción PLAY anterior solo la escucho por el addon MIDI. Esto es correcto. Sin embargo si deshabilito solo el 2º AY con OUT 64571,14:OUT 64827,2 al ejecutar el comando PLAY sigue saliendo el sonido por el 2º AY ¿Por qué no se ha deshabilitado el 2º AY?
Me lo apunto para mirarlo.
desUBIKado escribió:
17 Oct 2019, 20:14
Ahora una pregunta, ¿por qué el comando .playmid no se pone el solo a funcionar a 28MHz al inicio si a esa velocidad mejora el rendimiento en la reproducción del sonido?
Ese comando, tal cual está, es compatible también con un Spectrum 128K que tenga ESXDOS y esté conectado a un sinte externo. Dejando la máquina a 3.5 MHz puedo identificar qué MIDIs requieren más o menos CPU, y de esa forma, tener un "feedback" si alguien usa el comando con algo que no sea un ZXUNO. Aparte de eso, no hay ninguna otra razón.
desUBIKado escribió:
17 Oct 2019, 20:14
Y la última cuestión. Veo que en la cadena del comando PLAY si escribo "Z192Z8" se elegiría el instrumento 9 Celesta según el manual del SAM9773. Si Z192 es la instrucción para decirle al SAM9773 que cambie de instrumento no he conseguido ver en el manual dónde pone que haya que usar ese código ¿me podrías indicar por qué se usa Z192 y dónde aparece en el manual que ese es el valor a emplear?
Es el comando "Program Change" (cuarta fila de la tabla, en la página 11). Es un comando estándar MIDI. Aparece como Cn pp donde n es el número de pista a donde vas a aplicar el cambio de instrumento (de 0 a 15) y pp es un valor de 7 bits que indica el instrumento a aplicar en esa pista. En concreto, con ese PLAY estás enviando el comando MIDI C0 08 que lo que hace es cambiar en la pista 1 el instrumento al número 9 (cuando se envian bytes reales a MIDI se comienza a contar desde 0 para los números de pista y de instrumento -patch- ). La lista de instrumentos está en la página 15 (en esta lista aparece comenzando en 1, así que una vez elegido el instrumento, le restas 1 a su número antes de aplicarlo con el comando Cn). Fíjate que este chip tiene emulación MT-32, que se activa con un comando de control. En ese caso, los instrumentos se organizan de forma ligeramente diferente, para que los MIDIs grabados con ciertos instrumentos Roland suenen correctamente.

Program Change no se aplica a la pista 10. La pista 10 se reserva para percusión. En esa pista, algunas de las notas están asignadas a diferentes instrumentos de percusión (que no tienen altura tonal). Tienes la lista de instrumentos de percusión en la página 17. El SAM tiene varios "drum sets" (conjuntos de percusión), y por defecto está seleccionado el set estándar. Dentro de él, si envias por ejemplo la nota LA en la quinta octava, suena un triángulo.

Código: Seleccionar todo

PLAY "","","","Y10O5A"
Este otro comando usa el bombo y la caja para crear una base rítmica sencilla. Dejando un paréntesis cerrado al final consigo que toda la secuencia se repita hasta el infinito. Cambia el valor de T (beats por minuto) para que vaya más rápido o más lento (pulsa BREAK para pararlo)

Código: Seleccionar todo

PLAY "T120","","","Y10O2CD)"
Para cambiar el drum set se usa un Program Change, al número que se especifique para cada lista. Por ejemplo, para hacer sonar un trino de pájaro (sí, sí, tiene ese sonido) se usa el drum set CM-64/32 y acto seguido, tocar la nota FA# en la octava 7, así:

Código: Seleccionar todo

PLAY "","","","Y10Z201Z127O7#F"
Aquí, Z201Z127 es el Program Change. Recuerda que en el manual, los números de pista y de instrumento comienzan por 1, pero cuando envias el dato real usando el comando Z, hay que contar desde 0. Así, enviar el 201 y el 127 es el comando C9 7F, y 9 aquí es la pista de percusión. OJO, porque el comando Y de PLAY emplea el número de pista, pero comenzando en 1. Sí, es lioso.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: MIDI addon

Mensaje por mcleod_ideafix » 18 Oct 2019, 11:09

A ver quién reconoce estos compases :) (los espacios dentro de las cadenas son opcionales. Los he puesto para ayudar a copiar el código al ordenador)

Código: Seleccionar todo

10 LET i$="T160 Z201 Z0": REM inicializacion.
20 LET r$="Y10 O5 N3 FE O2 DD O5 FE O2 D O5 E)": REM Ritmo Rock 1
30 LET m$="Y1 Z192 Z0 &&& (5cffgg 6a3#a 5C#a aagg 8f)": REM Primera parte con piano, se repite.
40 LET m$=m$+"(Z192 Z40 N3 C#a5a aa Z192 Z73 N3 #aa 5ggg)": REM Segunda parte, alternan violin y flauta. Se repite.
50 LET m$=m$+"Z192 Z0 Cafgg7fH": REM Ultima parte, piano. Se detiene la musica con H
60 PLAY i$,"","",r$,m$
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Responder