¿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: 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"
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: 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"
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)