quarta-feira, 6 de junho de 2018

BGM player

Subrotina em assembler para ser usada em jogos ou demos. Permite tocar uma trilha sonora de tons simples que pode ser gerada a partir de arquivos padrão RTTL.

A subrotina utiliza formato próprio, composto de 3 bytes, contendo duração da nota (1byte) e sua "frequência" (2 bytes).

duração      : [ 1 byte ]  1..255
"frequencia" : [---lsb--][0000-msb]  0..4095



A subrotina não é blocante e deve ser chamada a cada interrupção do VDP. Por isso a duração corresponde a intervalos de tempo múltiplos de 16.67ms (1/60Hz) ou de 20ms (1/50Hz) conforme o padrão da máquina.

A "frequência" corresponde ao divisor de clock que deve ser carregado nos registros de divisão do PSG (12 bits).

Uma nota com duração igual a 0 (zero) corresponde a um comando, dessa forma

duração: [ 0 ]  Comando
         [ccccrrrr][dddddddd]  

         cccc comando 0..15  
         rrrr argumento 0..15
         dddddddd dado 0..255

Até o momento três comandos estão definidos:

cccc = 0, : Reinicializa música
rrrr, dddddddd sem uso
                                  
cccc = 1,  : Escreve num registro do PSG
rrrr = registro [0..15]
dddddddd = dado [0..255] valor a ser escrito.


cccc = 2,  : Escreve num registro do PSG 
             e interpreta proximo comando ainda no mesm
             intervalo de tmepo
rrrr = registro [0..15]
dddddddd = dado [0..255] valor a ser escrito.

                                  
A geração das músicas a partir de "Ringtones" no formato RTTL pode ser feita utilizando um script python que permite inclusive que as músicas sejam ouvidas (pelo menos na versão windows)

Alguns detalhes:
Um valor de divisor para geração da frequência igual a 0 faz com que o canal do PSG fique mudo e isso é usado para gerar a pausa. Em nenhuma das referências que consultei havia essa informação.

O valor máximo de duração de uma nota é por volta de 4.3 segundos. Para gerar notas de maior duração o script gera uma segunda nota de mesma frequencia com o valor de duração excedente.

Códigos fonte e demais arquivos disponíveis no repositório do GitHub mas também tem uma imagem de disco na página do projeto no Hackaday.io que dá pra testar no WebMSX


segunda-feira, 21 de maio de 2018

Diagrama redesenhado da placa CPU do HOTBIT

Desenhei este diagrama nas férias do início do ano, mas só agora me lembrei de postar. Ele foi baseado num diagrama que achei no site do Luciano (MSXPRO).

A título de curiosidade este diagrama foi editado num netbook Asus EEE 1005HA com tela de 1024x600

O circuito está disponível nos formatos PDF e Eagle (versão >=6.0) em meu repositório de MSX do Github
https://github.com/Danjovic/MSX/raw/master/Schematics/HOTBIT%20HB8000/HotBit.pdf