Obrigado a Julio Marchi pelo espaço cedido na MSX All
 

MSX Digitized Sound Generator

  Ferramenta para conversão de sons do PC (samples) para rodar no PSG do MSX. Digitalize vozes e coloque no seu programa!
MAP Player - 8 bits   O MAP Player é um player para arquivos PCM de 8 bits não sinalizados do PC, de autoria de Laurens Holst da página MSX Assembly Page. Ele utiliza os três canais de PSG do MSX de forma inteligente, onde é capaz de discriminar até 244 níveis de som.
  No projeto DSG, adaptamos o player para funcionar com o Move Data e tocar nas duas primeiras páginas da RAM do MSX.
Código fonte   Primeira parte: altera slots e seta canais de som.
D000  		   10 		ORG  &HD000		; Endereço incicial
D000  F3	   20 		DI 			; Desabilita interrupção
D001  3E 07	   30 		LD   A,7		;  
D003  D3 A0	   40 		OUT  (&HA0),A		; Sel. registrador 7 do PSG
D005  3E B8	   50 		LD   A,&B10111000	; Sel. canais A,B,C
D007  D3 A1	   60 		OUT  (&HA1),A		; Altera Mixer do PSG
D009  06 07	   70 		LD   B,7		; 
D00B  78	   80 LPSG:	LD   A,B		; 
D00C  3D	   90 		DEC  A			; Zera regs. 0-6
D00D  D3 A0	  100 		OUT  (&HA0),A		; 
D00F  AF	  110 		XOR  A			; 
D010  D3 A1	  120 		OUT  (&HA1),A		; 
D012  10 F7	  130 		DJNZ LPSG		; 
D014  DB A8	  140 		IN   A,(&HA8)		; Lê slots
D016  5F	  150 		LD   E,A		;
D017  06 04	  160 		LD   B,4		;
D019  CB 3F	  170 ROT:	SRL  A			; Seta tudo RAM
D01B  10 FC	  180 		DJNZ ROT		;
D01D  83	  190 		ADD  A,E		;
D01E  D3 A8	  200 		OUT  (&HA8),A		;
  Autor: Marcelo Silveira.

  Segunda parte - player.
D020  21 00 00	  210 		LD   HL,0		; End. incial dados
D023  11 00 80	  220 		LD   DE,&H8000		; Comprimento dados
D026  D9	  230 		EXX 			;
D027  0E A1	  240 		LD   C,&HA1		;
D029  16 00	  250 		LD   D,0		;
D02B  D9	  260 		EXX 			;
D02C  7E	  270 LOOP:	LD   A,(HL)		;
D02D  23	  280 		INC  HL			;
D02E  D9	  290 		EXX 			;
D02F  5F	  300 		LD   E,A		;
D030  21 00 D2	  310 		LD   HL,&HD200		; Link psg_table
D033  19	  320 		ADD  HL,DE		;
D034  46	  330 		LD   B,(HL)		;
D035  24	  340 		INC  H			;
D036  5E	  350 		LD   E,(HL)		;
D037  24	  360 		INC  H			;
D038  66	  370 		LD   H,(HL)		;
D039  3E 08	  380 		LD   A,8		;
D03B  D3 A0	  390 		OUT  (&HA0),A		;
D03D  3C	  400 		INC  A			;
D03E  ED 41	  410 		OUT  (C),B		;
D040  D3 A0	  420 		OUT  (&HA0),A		;
D042  ED 59	  430 		OUT  (C),E		;
D044  3C	  440 		INC  A			;
D045  D3 A0	  450 		OUT  (&HA0),A		;
D047  ED 61	  460 		OUT  (C),H		;
D049  06 08	  470 		LD   B,8		; Delay = 8
D04B  10 FE	  480 WAITLOOP:	DJNZ WAITLOOP		;
D04D  D9	  490 		EXX 			;
D04E  1B	  500 		DEC  DE			;
D04F  7A	  510 		LD   A,D		;
D050  B3	  520 		OR   E			;
D051  C2 2C D0	  530 		JP   NZ,LOOP		;
  Autor: Laurens Holst.

  Terceira parte - reset do PSG e dos slots.
D054  DB A8	  540 		IN   A,(&HA8)		; 
D056  E6 F0	  550 		AND  &HF0		; Reconfigura slots para 00xx
D058  D3 A8	  560 		OUT  (&HA8),A		; 
D05A  FB	  570 		EI 			; Habilita interrupções
D05B  CD 90 00	  580 		CALL &H90		; Limpa PSG
D05E  C9	  590 		RET 			; Retorna
  Autor: Marcelo Silveira.

  O MAP Player é de autoria de Laurens Holst (parte 2) e Marcelo Silveira (partes 1 e 3) e está sob licença BSD-2-Clause.
Tabela de conversão PCM - PSG   A linha 310 do programa faz referência a uma tabela de conversão de valores PCM para PSG. Esta tabela contém os três volumes do PSG para cada valor de PCM e está no seguinte formato:
Endereços &HD200 - &HD2FF: Volumes do canal A
Endereços &HD300 - &HD3FF: Volumes do canal B
Endereços &HD400 - &HD4FF: Volumes do canal C

  Mais a respeito dessa tabela você pode encontrar no artigo Som de 8 bits no PSG.
Ajustes no player   Altere os seguintes valores com o comando POKE do Basic:
  • &HD021 - LSB endereço inicial dos dados do som.
  • &HD022 - MSB endereço inicial dos dados do som.
  • &HD024 - LSB comprimento dos dados do som.
  • &HD025 - MSB comprimento dos dados do som.
  • &HD04A - Delay.
Downloads
  MAP Player
  map_player.zip [MSX 1] - Player para o formato de 4 bits
  map_tables.zip [MSX 1] - Tabelas para diferentes escalas.
  som_8bit.pdf - Artigo sobre como gerar sons de 8 bits no MSX

  O MAP Player é de autoria de Laurens Holst (parte 2) e Marcelo Silveira (partes 1 e 3) e está sob licença BSD-2-Clause.

  Agradecemos ao Laurens Holst por gentilmente nos permitir utilizar seu código.



  Referências:

  1. Playing Samples on the PSG. MSX Assembly Page, em: http://map.grauw.nl/articles/psg_sample.php.


Marcelo Silveira
Engenheiro de Sistemas e Computação
Especialista em Processamento de Imagens e Inteligência Artificial
© MarMSX 1999-2022