2.Creando un archivo en ensamblador para probar el PSG y ensamblador sjasm.
2.1.Creamos el archivo main.s.
2.2.Creamos el archivo openmsx-script.
2.3.Creamos el archivo make.bat.
3.Creando un archivo en basic para probar el PSG.
4.Creando nuestra música con vortex tracker v2.5.
4.1 Comprendiendo como tocar música
4.2 Quitando la cabecera para crear el archivo con la música
1.Introducción
El psg AY-3-8910 tenemos que controlarlo con la frecuencia y el volumen, a este chip se le puede meter el código para que reproduzca el sonido con las instrucciones out(#a0), entero, para decirle el registro que queremos cambiar y el out(#a1), entero, para decirle el valor que tendrá este registro, por favor ver http://map.grauw.nl/resources/msx_io_ports.php#psg,
En este ejemplo solo utilizaremos los registros de tono (o frecuencia) y el de amplitude (o volumen) hay 3 más posibilidades que son el ruido o Noise (que hace una cosa rara), el envolvente (que no se usa, también hace una cosa rara) y el mezclador (como tenemos 3 canales para emtir 3 sonidos a la vez los activamos y desactivamos), más adelante en la sección de crear música con basic verás las notas musicales.
2.Creando un archivo en ensamblador para probar el PSG y ensamblador sjasm
Realmente con 10 líneas de código era más que suficiente per he intentado probar varias rutinas de la bios, 😊, puedes bajarte el proyecto pinchando aquí.
Creamos una carpeta en nuestro escritorio y le ponemos “probando psg” por ejemplo dentro creamos los archivos:
2.1.Creamos el archivo main.s
output "main.rom"; acuerdate de poner los espacios delante de output org #4000 ;Cabecera db "AB" word INICIO word 0,0,0,0,0,0 INICIO: call Inicializar_variables call Actualizar_volumen_canal_a call Actualizar_tono_canal_a call Capturar_teclas Inicializar_variables: ;les ponemos a todas las variables el valor de #03 ld a,#06 ld (#f000),a ;En la direccion #f000 de la RAM estará el volumen ld a,#03 ld (#f001),a ;En #f001 estará el tono ret Actualizar_volumen_canal_a: ld a, #08 ;Le decimos que queremos configurar el regostro 8 out (#A0), a ld a, (#f000) ;le ponemos el valor inicial de volumen 3 out (#A1),a ret Actualizar_tono_canal_a: ld a,#01; el regisro que qeuremos modificar para la frecuencia es el 1 out (#A0), a ld a,(#f001) ;le ponemos el valor inicial de tono de 3 out (#A1),a ret ;********************Este loop estará siempre comprobando las teclas******************** Capturar_teclas: call Escribir_pulsa_una_tecla call #009F ; chget pone en el registro a del z80 el caracter ascii que has escrito en el teclado call #00A2 ;presenta en pantalla el caracter almacenado en el registro a del z80 cp 'q' jp z, rutinas_pulsacion_subir_volumen cp 'a' jp z, rutinas_pulsacion_bajar_volumen cp 'o' jp z, rutinas_pulsacion_bajar_tono cp 'p' jp z, rutinas_pulsacion_subir_tono jp nz, Escribir_tecla_no_valida jr Capturar_teclas ;********************Final de la comprobación de teclas***************************** rutinas_pulsacion_subir_volumen: call Borrar_pantalla ld hl, Texto_has_pulsado_subir_volumen ; para imprimir un texto en la pantalla call Imprimir call Subir_variable_volumen call Mostrar_valor_variable_volumen call Capturar_teclas rutinas_pulsacion_bajar_volumen: call Borrar_pantalla ld hl, Texto_has_pulsado_bajar_volumen call Imprimir call Diminuir_variable_volumen call Mostrar_valor_variable_volumen call Capturar_teclas rutinas_pulsacion_subir_tono: call Borrar_pantalla ld hl, Texto_has_pulsado_subir_tono call Imprimir call Subir_variable_tono call Mostrar_valor_variable_tono call Capturar_teclas rutinas_pulsacion_bajar_tono: call Borrar_pantalla ld hl, Texto_has_pulsado_bajar_tono call Imprimir call Diminuir_variable_tono call Mostrar_valor_variable_tono call Capturar_teclas Subir_variable_volumen: ld a, (#f000) add 1 ld (#f000),a call Actualizar_volumen_canal_a ret Diminuir_variable_volumen: ld a,(#f000) sub 1 ld (#f000),a call Actualizar_volumen_canal_a ret Subir_variable_tono: ld a, (#f001) add 1 ld (#f001),a call Actualizar_tono_canal_a ret Diminuir_variable_tono: ld a,(#f001) sub 1 ld (#f001),a call Actualizar_tono_canal_a ret Escribir_tecla_no_valida call #00A2 ld hl, Texto_tecla_no_valida call Imprimir call Capturar_teclas Borrar_pantalla: XOR a call #00C3;borramos la pantalla ret Mostrar_valor_variable_volumen: ld a,(#f000) add #30 call #00A2 ret Mostrar_valor_variable_tono: ld a,(#f001) add #30 call #00A2 ret Imprimir: ld a,(hl) cp 0 ret z call #00A2 inc hl jr Imprimir Escribir_pulsa_una_tecla: ld hl, Pulsa_una_tecla call Imprimir ret Escribir_texto_final_del_programa: ld hl, Texto_final_del_programa call Imprimir ret Pulsa_una_tecla: db "\n\nPulsa 'q' para subir volumen 'a' para bajar volumen, 'o' para bajar tono y 'q' para subir tono. ",0 Texto_has_pulsado_subir_volumen: db "Has pulsado subir volumen. ",0 Texto_has_pulsado_bajar_volumen: db "Has pulsado bajar volumen. ",0 Texto_has_pulsado_subir_tono: db "Has pulsado subir tono. ",0 Texto_has_pulsado_bajar_tono: db "Has pulsado bajar tono. ",0 Texto_tecla_no_valida: db "\nTecla no valida 'q' para subir volumen 'a' para bajar volumen, 'o' para bajar tono y 'q' para subir tono. ",0 Texto_final_del_programa: db "Final del programaa. ",0 relleno_de_bytes: ds #8000-$
2.2.Creamos el archivo openmsx-script
Este archivo contiene el script que necesita openmsx para iniciarse:
machine Philips_NMS_8255 ext msxdos2 cart main.rom
2.3.Creamos el archivo make.bat
Este archive contiene la ejecución de sjasm (el -s e spara que cree un archivo de símbolos) y el directorio de instalación donde tienes openmsx, el mío como es un ejecutable lo tengo en “C:\Users\Casa\Desktop\openmsx-0.15.0-windows-vc-x64-bin” pero si lo tienes instalado seguramente lo tendrás en “»C:\Program Files\openMSX”:
sjasm -s main.s start C:\Users\Casa\Desktop\openmsx-0.15.0-windows-vc-x64-bin\openmsx -script openmsx-script.txt
2.4.Probando el programa
Abrimos una terminal y ponemos make.bat para ejecutar
Ahora tienes que pulsar q y a para subir y bajar el volumen o amplitud y o y p para cambiar el tono:
3.Probando en basic el PSG
Vamos a hacer lo mismo que lo anterior pero en basic:
Existen 3 formas de crea sonido en basic
1.Con el comando beep.
2.Con el comando para reproducir el macro lenguaje musical “play”
3.Actuando directamente con el psg a través de comando sound
El beep y el play son muy sencillos, aquí tenéis ejemplos:
1 '------------------------' 1 ' Inicializando' 1 '------------------------' 1 ' Borramos la pantalla' 5 cls 6 print "pulsa la tecla tecla o / p para reproducir nota" 1 ' Lo 1 es definir el color de caracteres 15 blanco , fondo 4 azul y margen 7 azul celeste 10 color 15,4,7 1 '------------------------' 1 ' main' 1 '------------------------' 150 'while 1 1 'llamamos a la subrutina para capturar el teclado' 200 gosub 2000 1 ' Para que vuelva capturar el teclado y dibujar, es como un while' 500 goto 150 'wend 1 '------------------------' 2000 'Subrutina de captura de teclado' 1 '------------------------' 2010 k$=inkey$ 1 'play es para reproducir un audio hecho con el macro lenguaje musical de msx (t230 es el tiempo de 32-255 y a es la nota)' 2020 if k$="o" then play "T230a" 1' tambien es posible poner un pitido con beep 2030 if k$="p" then beep 2040 return
El comando sound registr_psg, valor escribe directamente el valor en el psg, auqnue podemos manejar 3 canales y además una cosa que se llama ruido y envolvente, aquí solo vamos a ver el canal A.
Sound 0, frecuencia o tono del canal A numeros menos significativos
sound 1,frecuencia o tono del canal A números más significativos, los valores son entre 0 al 15 para el tono
sound 8,volumen del canal A, los valores son entre 0 al 16
En la web de https://www.msx.org/wiki/SOUND te indica que poniéndole en los bits menos significativos un número hexadecimal podemos crear estas notas:
Vamos a probar el Do (la C), (ya sabes que las notas musicales son Do, Re, Mi, Fa, sol, La y Si) en la 2 octava (ya sabes que los teclados se dividen en conbinaciones de 8 teclas), las notas que tienen un “#” son los botones negros de los teclados, 😊:
4.Creando nuestra música con vortex tracker v2.5
Puedes bajarte el proyecto pinchado aquí
Es importante entender 3 cosas: 1.el formato, 2. El programa para crear música (tracker), 3. El reproductor escrito en ensamblador (replayer) que va a ejecutar nuestro MSX y que leerá los archivos en esos formatos y configurará el psg.
Tenemos 2 formatos para el MSX el pt3 y el wyz
Para crear la música se utilizan unos programas llamados tracker (no se porqué,los podían haber llamado creador de música, 😊) y tienen versiones para tu sistema operativo.
Para el wiz tienes el witztracker https://github.com/AugustoRuiz/WYZTracker, en este web tienes muchos ejemplos https://sites.google.com/site/wyzplayer/downloads
Para el PT3 tienes el vortex tracker https://bitbucket.org/ivanpirog/vortextracker/downloads/, también te lo puedes descargar de aquí, vamos a abrirlo
Lo primero es configurar una muestra de sonido (o la onda de la frecuencia), a esto se le llama sample, pinchamos en la pestaña “Samples” (1), pinchamos en el 0 del primer registro y ponemos un F(2) para activar el volumen:
Ahora vamos a activar el tono, pinchamos en el primer pinto del primer registro y ponemos una T:
Ahora vamos a poner una nota, pinchamos en la pestaña general Pattern (1) y pinchamos donde indico (2):
Pulsamos la tecla del teclado “q” que es la nota C-4 (Do 4 octava), sonará un pitido:
Pulsamos el 1 que está encima del teclado (no el que está a la derecha del teclado) para asignarle el sample 1:
Ahora para ayudarnos a escribir las notas ponemos un 2 donde pone Auto Step y pulsamos el botón Auto Step para dejarlo pulsado:
Nos volvemos a situar en el registro de antes:
Y pulsamos las teclas q,w de nuevo q,w, después e,r de nuevo e,r después t,y de nuevo t, y , por úlimo r,e, repetimos todo el proceso hasta quedarnos sin líneas, pincha aquí te puedes bajar el archivo pt3 si quieres verlo
Vamos a marcar el botón de Loop all y le damos al play:
Cuando te canse pincha en stop, ya tenemos nuestra canción preparada para ser reproducida por el msx, pero tenemos que guardarla en formato pt3 y quitarle la cabecera que le meten estos programas, pinchamos en File-> save As y elegimos pt3:
Creamos una carpeta llamada Pruebas vortex tracker (1), elegimos el formato pt3 (2) y le ponemos el nombre de música (3):
4.1 Comprendiendo como tocar música
Tenemos que partir de la posición de la octava
Una versión mejorada de esta melodía puede ser esta, pincha aquí para descargartela:
4.2 Quitando la cabecera para crear el archivo con la música
Ahora vamos a quitarle la cabecera, para eso nos bajamos un editor hexadecimal 010 editor https://www.sweetscape.com/download/, también puedes pinchar aquí para bajártelo:
Abrimos el archivo música.pt3 que creamos antes con este editor, como queremos quitarle los primeros 99 bytes, nos colocamos en la posición 99 (justo antes de donde empiezan los puntos):
Arrastramos y suprimimos los 99 bytes:
Le ponemos de nombre música_sin_cabecera.pt3:
Ahora descargamos el PT3 player y el archivo main.s pichando aquí, los pegamos en la carpeta donde tenemos el archivo música_sin_cabecera.pt3 y abrimos el visual studio code, en la instrucción incbin tendremos que poner nuestra música y en include el reproductor pt3:
Ahora en el cmd ponemos sjasm main.s:
Y ya:
4.3 Bajar música pt3
En esta web puedes encontrar pt3 a manta: https://zxart.ee/eng/music/mainpage/
Cuando te descargas el archivo pinchando aquí:
Ábrelo con el vortex tracker y al guardarlo cámbiale el formato a pt3:
Recuerda que tienes que quitarle la cabecera:
2 respuestas a «Creando música para MSX»
Si que sabes, yo de música y programación casi nada, cercano al cero, pero tu ya vas y lo cascas haciendo música para el gran MSX; muy bien!
Gracias, pero de músico no tengo ni idea. 🙂