Turbo Pascal Forever – Introdução

Bom, já passamos da metade do ano e fazendo um balanço de todas as ideias que me incentivaram na criação do blog, cheguei a conclusão de que tenho muito “cartucho” ainda para gastar e um desses cartuchos é exatamente a criação de, no mínimo, dois cursos de programação na forma de série de artigos que serão publicados no site.

Então botei a mão na massa e corri atrás do feedback dos participantes do blog e também das opiniões dos participantes das principais listas de discussões relacionadas a MSX e computadores antigos em geral e o resultado final foram 2 séries sobre programação para o blog.

A primeira série, e que inicia nesse post, será dedicada a programação em Pascal (Turbo Pascal 3 para CP/M e MSX DOS) e a segunda (talvez para o ano que vem) dedicada a programação C, claro que o conteúdo desses cursos será voltado a plataformas embarcadas e a plataforma embarcada que escolhi é a MSX. 🙂

Como não poderia ser diferente vamos começar contando um pouquinho da ….

…História do Pascal – Primeiros dias.

A linguagem Pascal foi criada no ano de 1968 pelo cientista Niklaus Wirth e seu nome foi dado em homenagem ao francês, filósofo, matemático, escritor, inventor, etc e etc, Blaise Pascal.

Os principais motivadores para a criação de Pascal foram:

  1. Ter uma linguagem enxuta e eficiente;
  2. Incentivar boas práticas de programação com base em estruturas de dados e programação estruturada;
  3. Altamente didática, pois seu uso inicial visava o ensino de programação estruturada para estudantes;

.

Assim como diversas outras linguagens modernas, como C e ADA, Pascal foi fortemente baseada na linguagem ALGOL, por isso não é incomum encontrar literaturas que descrevem algoritmos completos escritos escritos em uma dessas linguagens, sendo C e Pascal as preferidas por muitos autores de livros de algoritmos e técnicas avançadas de programação, ou seja, Pascal é uma linguagem dirigida a verdadeiros programadores, ao contrário de linguagens como o BASIC em sua forma tradicional (ex: MSX-BASIC, Apple BASIC,…) que foram feitas para que não programadores pudessem criar programas de maneira rápida, porém estimulando hábitos de programação deficientes e código ilegível.

Por esses motivos, o BASIC evoluiu em direção ao Pascal nos ultimos anos, chegando a ter estruturas similares.

Segue abaixo alguns projetos escritos em Pascal:

  • p-System é um sistema operacional criado em Pascal, lá pelo final da década de 70 e me lembro de ter ouvido sobre esse sistema operacional quando o MS-DOS ainda tentava se estabelecer no mercado como mainstream.  A principal característica desse sistema era rodar código pseudo-compilado, atualmente conhecido como bytecodes, em tecnologias como Java e .Net.
  • Perix Operating System é um sistema operacional escrito em Turbo Pascal e Assembly. Seu autor mantém uma comunidade no Orkut e já conta com outros desenvolvedores experientes atuando no projeto. O autor do projeto é brazuca.
  • Skype – Reconhecido software de comunicação instantânea com capacidade de fazer chamadas telefônicas via internet, tem seu front-end para plataforma Windows, escrito em Delphi/Object Pascal.
  • Apple Lisa – Esse computador foi o precursor do Macintosh com o seu sistema operacional MacOS. O sistema operacional do Lisa foi escrito em Pascal.
  • MacOS – É o sistema operacional dos primeiros computadores Macintosh e assim como o Lisa, foi escrito também em Pascal, com partes em Assembly.

.

Turbo Pascal – O Pascal da época dos primeiros PC’s.

Programar em uma linguagem compilada era um pequeno parto na época dos primeiros PC‘s, sendo essa a realidade ainda hoje para plataformas embarcadas, uma vez que esse processo geralmente envolve vários passos até chegar ao binário compreensível pela máquina.

Esses processos são conhecidos como edição, compilação e linkagem e quando feitos em máquinas e compiladores modernos, o programador, hoje, nem precisa saber, e termina não sabendo, que os mesmos estão acontecendo, porém lá pelos anos 1970/80 era natural que todo desenvolvedor de software soubesse do que se tratava cada um desses passos, até mesmo porque ele interagia diretamente em cada um desses processos.

Sem contar que fazer esses passos nos computadores da época, era algo extremamente demorado pois os mesmos tinham recursos limitadíssimos, tanto de processamento quanto de armazenamento, o que tornava o processo lento em cada um dos passos, sendo que programas de apenas 8 KBytes poderiam levar em média de 3 a 5 minutos para a geração de executáveis.

Foi nesse cenário, com ferramentas de desenvolvimento tão arcaicas quanto escrever documentos em pedra, que nasceu uma das maiores obras de engenharia de software da época, e quem sabe de todos os tempos, e que praticamente obrigou os “grandes” players na época a elevar o nível de suas ferramentas, investindo pesado em seu desenvolvimento até chegar às ferramentas modernas existentes na atualidade………estou falando do Turbo Pascal da Borland Software Corporation.

Turbo Pascal 3.0 (Capa)

Parece exagero falar que o Turbo Pascal é uma das maiores obras de engenharia de software, mas se considerarmos que o Turbo Pascal se tratava da primeira ferramenta com Editor/Compilador integrado, capaz de compilar milhares de linhas de código em apenas poucos segundos e que todas as ferramentas da época demoravam vários minutos para fazer o mesmo, considerando máquinas com 64Kb ou menos de memória, com certeza se trata de uma grande obra de engenharia de software.

Tela de abertura do Turbo Pascal 1.0. Foi assim até a versão 3.0

A imagem acima foi retirada do site http://eugostododelphi.blogspot.com/

Na época a Microsoft Corporation, tentou revidar com o seu famigerado Microsoft Pascal,  seguido do seu não menos famigerado Microsoft Quick Pascal, porém suas ferramentas de desenvolvimento sempre estiveram atrás das construídas pela Borland, isso até o final da década de 90, quando a mesma passou a contratar engenheiros chave da equipe de desenvolvimento de compiladores da Borland, equiparando assim o cenário.

PERGUNTA 1 (utilizem a área de comentários do post para responder)

Qual o nome do arquiteto que deixou a Borland para na Microsoft criar uma das linguagens mais conhecidas da empresa na atualidade ?

Tamanha era a superioridade do Turbo Pascal frente a outros compiladores de outras linguagens que, rapidamente, as publicações da época davam foco a artigos que tratavam de Pascal, ou seja, juntamente com Assembly, Pascal se tornava mainstream no cenário de programação e na mídia, tudo isso graças a grande aceitação e popularidade do Turbo Pascal da Borland.

Depois disso a Borland cresceu e expandiu sua linha de produtos, implantando a tecnologia Turbo para um outros produtos, também consagrados, como o Turbo C/C++ e Turbo Assembler (TASM), bem como em outras menos consagradas como o Turbo Prolog.

O próprio Turbo Pascal evoluia de maneira gradativa, tanto que na versão 5.5, o mesmo passava a incorporar características de orientação a objetos (OOP), amplamente difundidas em linguagens mais modernas como Java e que no universo Pascal ficou conhecida como Object Pascal.

Tela de abertura do Turbo Pascal 5.5

PERGUNTA 2 (utilizem a área de comentários do post para responder)

Que grande empresa, reconhecida pelos seus gadgets e PC‘s, desenvolveu a extensão de Pascal, denominada Object Pascal ?

Com produtos de alta qualidade e performance, a Borland dominou o mercado para desenvolvedores de software na era MS-DOS, sendo que outras produtoras como a Microsoft, Symantec, Sybase, sequer chegavam perto em qualidade, com sua linha de produtos similares.

Com a popularização dos sistemas operacionais gráficos, principalmente graças ao  Windows 3.11, o conceito de usabilidade de software mudou radicalmente, entretanto as ferramentas de desenvolvimento de software permaneceram por um tempo com as mesmas características da época do MS-DOS,  como o Visual C++ e o Turbo C++ for Windows e Turbo Pascal For Windows.

Mas com toda a riqueza e principalmente complexidade que esses ambientes operacionais gráficos traziam ao mundo dos PC’s, na época, era inevitável que uma mudança radical na área de ferramentas para desenvolvimento de software estava para acontecer, principalmente para que os desenvolvedores aproveitassem ao máximo toda a potencialidade que esse novo mundo gráfico proporcionava e principalmente para auxiliar no desenvolvimento de produtos com mais qualidade e principalmente reduzindo o tempo de desenvolvimento de sistemas.

Foi nesse cenário que a Borland proporcionou ao mundo outra grande inovação, tão impactante quanto a apresentação da primeira versão do Turbo Pascal, trata-se do lançamento da ferramenta RAD (Rapid Application Development) denominada Delphi, que tinha como base toda infra estrutura da linguagem Pascal/Object Pascal, já conhecida e amplamente utilizada por diversos desenvolvedores ao redor do mundo.

Borland Delphi Logo

O tempo passou, as tecnologias evoluiram, hoje a linguagem Turbo Pascal, através do Delphi, já não pertence mais à Borland Software Corporation e sim da empresa de desenvolvimento de ferramentas de banco de dados Embarcadero Technologies, porém a estrutura da linguagem permanece, até os dias atuais, quase que da mesma forma que nas primeiras versões do Pascal Clássico bem como o Turbo Pascal 1.0, confirmando a visão de longo prazo de seu criador, Niklaus Wirth, ao desenvolver uma linguagem didática, estruturada, moderna, poderosa e principalmente extensível, muito a frente de seu tempo.

Bom, chegamos ao fim desse primeiro post, trazendo um pouco da história e importancia do Turbo Pascal no mundo da tecnologia de software, desde os primórdios até os dias atuais.

Até o próximo artigo.

[]’s
PopolonY2k

Referência Bibliográfica

Turbo Pascal 6 Competo e Total – Stephen O’Brien – McGrawHill

Referência  na internet

Pascal language (Wikipedia)
http://pt.wikipedia.org/wiki/Pascal_%28linguagem_de_programa%C3%A7%C3%A3o%29

Object Pascal (Wikipedia)
http://en.wikipedia.org/wiki/Object_Pascal

Turbo Pascal Compiler (Wikipedia)
http://pt.wikipedia.org/wiki/Turbo_Pascal

Turbo Assembler – TASM (Wikipedia)
http://en.wikipedia.org/wiki/Turbo_Assembler

Turbo Prolog (Wikipedia)
http://en.wikipedia.org/wiki/Visual_Prolog

Turbo C/C++ (Wikipedia)
http://en.wikipedia.org/wiki/Turbo_C%2B%2B

Delphi (Wikipedia)
http://en.wikipedia.org/wiki/Borland_Delphi

Microsoft Pascal (Wikipedia)
http://en.wikipedia.org/wiki/Microsoft_Pascal

Java Programming language (Wikipedia)
http://en.wikipedia.org/wiki/Java_%28programming_language%29

.Net (Wikipedia)
http://en.wikipedia.org/wiki/.NET_Framework

Borland Software Corporation
http://en.wikipedia.org/wiki/Borland

Microsoft Corporation (Wikipedia)
http://en.wikipedia.org/wiki/Microsoft_Corporation

Embarcadero Technologies
http://www.embarcadero.com

Blaise Pascal (Wikipedia)
http://en.wikipedia.org/wiki/Blaise_Pascal

Niklaus Wirth (Wikipedia)
http://en.wikipedia.org/wiki/Niklaus_Wirth

BASIC (Wikipedia)
http://en.wikipedia.org/wiki/BASIC

Apple BASIC (Wikipedia)
http://en.wikipedia.org/wiki/Apple_BASIC

MSX-BASIC
http://en.wikipedia.org/wiki/MSX_BASIC

Assembly language (Wikipedia)
http://en.wikipedia.org/wiki/Assembly_language

CP/M Operating System (Wikipedia)
http://en.wikipedia.org/wiki/CP/M

MSX-DOS Operating System
http://en.wikipedia.org/wiki/MSX-DOS

MS-DOS (Wikipedia)
http://en.wikipedia.org/wiki/MS-DOS

MS-Windows (Wikipedia)
http://en.wikipedia.org/wiki/Windows

Embedded systems
http://en.wikipedia.org/wiki/Embedded_system

Ada Programming language (Wikipedia)
http://en.wikipedia.org/wiki/Ada_%28programming_language%29

C Programming language (Wikipedia)
http://en.wikipedia.org/wiki/C_%28programming_language%29

ALGOL Programming language (Wikipedia)
http://en.wikipedia.org/wiki/ALGOL

Compiladores (Wikipedia)
http://en.wikipedia.org/wiki/Compiler

Linkagem (Wikipedia)
http://en.wikipedia.org/wiki/Linkage_%28software%29

Object-oriented Programming – OOP (Wikipedia)
http://en.wikipedia.org/wiki/Object-oriented_programming

Rapid Application Development – RAD (Wikipedia)
http://en.wikipedia.org/wiki/Rapid_application_development

Perix (Sourceforge.net)
http://sourceforge.net/projects/perix/

Skype
http://www.skype.com/intl/pt/home/

Apple Lisa (Wikipedia)
http://en.wikipedia.org/wiki/Apple_Lisa

Apple Macintosh (Wikipedia)
http://en.wikipedia.org/wiki/Apple_Macintosh

MacOS (Wikipedia)
http://en.wikipedia.org/wiki/Mac_OS

MSX, games e produções independentes.

Esse ano é um bom ano para o MSX no cenário nacional. Na parte de hardware sempre pudemos contar com produtores que estão sempre ativos construindo “antigas” novas tecnologias para nossas máquinas e algumas vezes construindo até novas máquinas do zero, ou quase do zero, como é o caso dos kit’s de conversão ou até mesmo motherboards MSX, “zero bala”, para adaptação em gabinetes de PC ou em antigos Experts e HotBits.

Pois bem o cenário de hardware é bem ativo, algumas vezes dá uma descansada mas sempre se levanta com novidades, porém  o mesmo não acontece com software desde a época de ouro do MSX, no Brasil. Para falar a verdade, apesar dos muitos softwares escritos originalmente em nosso País, creio que o desenvolvimento de software nunca foi um sucesso em nosso País, independente da plataforma utilizada.

Felizmente nos últimos anos, o Brasil tem começado a colher os frutos da formação de profissionais nas décadas de 70, passando pelos 80 e chegando até os 90 e para mim é inevitável que o País se torne referência em software nos próximos 10 anos, pois os profissionais de software sofreram muito ao viver as épocas em que eram “generalistas“, ou seja, podiam fazer tudo na área de tecnologia.

Por um lado ser generalista é ruim, pois não nos especializamos em um nicho de mercado, que de certa forma nos tornaria mais caros no nicho escolhido, mas analisando de uma maneira mais ampla e aberta, com certeza chegaremos a conclusão de que é isso que nos torna melhores arquitetos de software do que outros pelo mundo afora, uma vez que pensar em tudo e criar abstrações para esse “tudo”, só pode fazer quem já viveu uma situação de atuar no “todo”. 🙂

Mas é claro que só poderemos ser uma potência em software se o governo federal também fizer a parte dele que é, proporcionar uma boa infra-estrutura de ensino para os nossos jovens, e futuros profissionais. Atualmente o mérito é individual e apenas do povo brasileiro, através dos esforços dos pais (não confundir com País) e avós dessa geração que citei anteriormente, que foram os investidores dessa geração que aí está.

Voltando ao software, recentemente adquiri um lote de coisas para MSX, que vão desde hardwares e softwares a diversas revistas, incluindo MSX Magazine e outras revistas, que só tratavam de software em seu conteúdo, cada uma com mais de 100 páginas só de softwares escritos em diversas linguagens (MSX-BASIC, Prolog, ADA, C, ASM, …) , tudo da década de 80.

Revistas de MSX japonesas.

Pois bem, olhando esse material todo apenas tive a confirmação do porque os melhores games e softwares eram feitos no Japão. Simplesmente porque, aliado ao fato deles desenvolverem grandes softwares, eles desenvolviam conhecimento e difundiam em massa e ainda obtinham lucro com isso. Essas revistas tem tanto conteúdo técnico de qualidade, que eles são aplicáveis em qualquer plataforma atual e talvez todo esse conhecimento explique o porque de ainda existir diversos grupos construindo coisas para MSX no Japão e Europa e também para outras plataformas como C64, NES, SNES, Sega Genesis (aka Mega Drive), entre outros.

20 e tantos  anos depois…..

…muitos dos que viveram aquela época, hoje nem trabalham com software ou na área técnica, entretanto a grande maioria das pessoas daquela geração e que hoje estão no mercado de trabalho, ou trabalha com um computador ou pelo menos o utiliza como ferramenta no dia-a-dia e para entretenimento.

Dentre essas pessoas encontramos, Designers e Web Designers, Programadores, Músicos, Gamers, entusiastas de tecnologia, enfim, muitos de nós, desenvolveu bastante suas capacidades técnicas nos computadores pessoais, desde a épocas passadas.

Podemos dizer que, hoje, somos muito mais capazes de realizar proezas técnicas diversas, com muito mais facilidade e qualidade do que naquela época e também baseado nesse raciocínio posso dizer que se fosse possível voltar no tempo, com o conhecimento que temos hoje, poderíamos ao menos fazer frente aos dominadores do conhecimento da época. A situação seria ainda melhor se conseguíssemos construir coisas utilizando recursos computacionais modernos, como os que temos hoje. Com certeza seria um diferencial.

Não é muito difícil encontrar grupos, ao redor do mundo, que tem um ponto de vista similar ao que citei anteriormente, veja o caso do pessoal da Relevo Video Games, que desde 2009 vem lançando games originais para plataformas MSX e ZX-Spectrum, com qualidade excepcional, como é o caso do excelente e já consagrado Invasion of the Zombie Monsters, que é um game de 32Kb com gráficos, musicas e jogabilidade superior a muitos dos clássicos da época de ouro dessas plataformas e, serei ousado, superior a muitos games da mesma categoria feitos para plataformas mais atuais como Android e iPhone.

Capa do game Invasion of the Zombie Monsters

Ao acompanhar o nascimento de grupos como o pessoal da Relevo, que começou fazendo games para plataformas antigas e que já ensaiam lançamentos para outros dispositivos Mobile, acredito que o Brasil pode e tem potencial técnico, criativo e artístico para desenvolver projetos similares aos da Relevo.

Vale a pena lembrar que a Relevo Video Games é certamente um reflexo e fruto do investimento dos espanhois no desenvolvimento de video-games, iniciado na década de 80 onde empresas como Dinamic Software e Opera Soft, desenvolviam games para MSX & ZX-Spectrum, na grande maioria das vezes inferiores aos japoneses, porém era uma época de busca do Know-How necessário para fazer frente aos japoneses na arte dos games no futuro.

Bom, se passaram 20 e poucos anos e finalmente podemos dizer que os espanhóis fazem frente a qualquer outro player no mercado de video-games, haja vista que os próprios japoneses começam a entregar o desenvolvimento técnico de suas consagradas franquias, como CastleVania (aka Vampire Killer para os MSXzeiros), a empresas espanholas.

CastleVania – Lords of Shadow, mostra o sucesso espanhol no desenvolvimento de games, iniciado na década de 80, uma vez que uma franquia de origem japonesa e que ao longo dos anos sempre fora desenvolvida em solo japonês e exclusivamente por japoneses, dessa vez é produzida em “terras” espanholas, através da Mercury Steam, só demonstra que o investimento de longo prazo é sempre a melhor opção.

Enquanto isso no Brasil…

…ainda engatinhamos no desenvolvimento de games e softwares para consumo do publico em geral, porém já começamos a ser reconhecidos em algumas áreas, pelo menos como um país potencial em desenvolvimento de software, apesar do mercado ser reconhecidamente inexplorado.

Desde cedo eu sempre acreditei que jogar video-games, era algo fenomenal pelo ponto de vista do aprendizado mas quando eu falava isso para um adulto na época, lá pelos anos 1980, não chegava a ser motivo de chacota mas o pessoal mais velho simplesmente ignorava a minha opinião, mais pela diferença entre gerações, entretanto por situações como essa, talvez, tenhamos perdido muito dos futuros profissionais que não chegaram a acontecer para o mercado de desenvolvimento de games.

Sempre acreditei que o simples fato de assistir alguém jogando já era o suficiente para fazer a cabeça pipocar as ideias, pois é necessário técnica apurada e conhecimento de algoritmos otimizados e também ser pelo menos um bom programador para se construir produtos de qualidade. Com o tempo percebi que jogar poderia ser mais produtivo para os que seguiram a carreira de desenvolvimento de software e design, do que para a grande maioria que estava apenas interessada em jogar.

Bom, como sou persistente e raramente jogo a toalha de primeira, fiquei muito feliz ao ler essa noticia no TechTudo, onde o autor descreve sobre um evento ocorrido em 25 de fevereiro desse ano (2011), denominado “O Mercado de Games e Aplicativos no Brasil” e também esse outro artigo, também no TechTudo, que vai de encontro exatamente ao que penso, onde o bom produtor de jogos deve ser um auto-didata, deve gostar de aprender e desenvolver coisas novas sempre, saber algumas linguagens e principalmente jogar MUITO !!!

Outra coisa bem legal que o autor cita é sobre, criar um grupo de estudo sobre games, que discuta ideias, técnicas, converse, extrapole as discussões, ou seja, desenvolva as ideias e as transforme em realidade, desenvolvendo novas técnicas e tecnologias, criando ferramentas, pois tudo isso gera a experiência necessária para o desenvolvimento de produtores em potencial para o mercado de games.

É bom saber que um grupo de estudos e desenvolvimento é um bom inicio e melhor ainda é saber que já temos um que está a pleno vapor, desenvolvendo um projeto de um RPG para MSX 2.0, totalmente feito em MSX-BASIC, com suporte a som de qualidade, compatível com placas FM do MSX (Panasonic FM-PAC, Tecnobytes FM-Stereo, …) e com toda capacidade de cores e gráficos que esses micros tem e que pouco foram aproveitados pelos desenvolvedores brasileiros da época.

Esse grupo, que ainda não tem nome, é composto por músicos, designers e programadores que viveram, ou não, a época de ouro do MSX e basicamente vem interagindo e desenvolvendo todo o game apenas em conversas por MSN e também na comunidade MSX-Brasil, no Orkut, que de maneira natural se tornou a “casa” do jogo, podendo ter seu desenvolvimento acompanhado aqui nessa discussão.

O nome do jogo é Visitantes – Experimento Sombrio e até o momento, diversas técnicas já foram desenvolvidas, como as de conversão de música MIDI para o MSX, conforme descrito na série MusicA – Tocando MIDI no MSX I, II, III e IV.

Grande parte do código do engine responsável pela execução do RPG também está pronta, sendo que ainda está previsto o desenvolvimento do game editor, necessário para edição da interação com o usuário.

Claro que muitas outras técnicas e novidades estão a caminho e ainda é muito cedo para detalhar algo sobre esse desenvolvimento, porém a medida que o projeto avança, alguns snapshots serão lançados ao público, como o vídeo que já está disponível no YouTube, através desse primeiro making of do que está rolando no desenvolvimento do game.

Bom, eu acredito que esse essa iniciativa é não só inovadora do ponto de vista técnico mas também pelo fato de comprovar que a internet é um meio produtivo que dissemina a idéia de que não importa mais o local onde as pessoas estão e sim o que elas podem fazer de onde elas já estão. 🙂

Espero que em breve tenhamos um mercado potencial no desenvolvimento de jogos no Brasil e espero um dia poder colher frutos disso mas enquanto isso….mãos na massa….tenho algumas coisas para terminar aqui 🙂

[]’s
PopolonY2k

Referência na internet

MSX-BASIC – Wikipedia
http://en.wikipedia.org/wiki/MSX_BASIC

Prolog – Wikipedia
http://en.wikipedia.org/wiki/Prolog

ADA Programming Language – Wikipedia
http://en.wikipedia.org/wiki/Ada_%28programming_language%29

C – Programming language – Wikipedia
http://en.wikipedia.org/wiki/C_%28programming_language%29

ASM – Wikipedia
http://en.wikipedia.org/wiki/Assembly_language

Relevo Video Games
http://www.relevovideogames.com/

Dinamic Software
http://en.wikipedia.org/wiki/Dinamic_Software

Opera Soft
http://en.wikipedia.org/wiki/Opera_Soft

Mercury Steam
http://en.wikipedia.org/wiki/MercurySteam

Android Operating System
http://en.wikipedia.org/wiki/Android_%28operating_system%29

IOS – iPhone Operating System
http://en.wikipedia.org/wiki/IPhone

CastleVania Lord of Shadow
http://www.konami.com/officialsites/castlevania/

Análise da Interface ATA IDE – Tecnobytes

O mercado nacional de hardware para MSX está bastante movimentado nos últimos 3 anos, sob minha percepção, pois são construídos pelos produtores independentes, muitas novidades bem interessantes para os saudosistas, hobbistas e entusiastas, como esse que vos escreve.

A coisa está tão boa para o MSX aqui no Brasil, que no momento em que escrevo esse review, estou me deliciando com os mais de 20Mb de arquivos MOD, que baixei a noite passada e que o meu Panasonic A1WX MSX 2+ ficou um bom tempo descompactando, onde os reproduzo agora através da minha OPL4 Shockwave, uma placa Moonsound-like e que finalmente podemos adquirir aqui no Brasil graças a produção de Ricardo Oazem da Tecnobytes.

E por falar em Tecnobytes……

….para quem não se lembra, ou sabe, é uma produtora de hardware para MSX que vem desenvolvendo e comercializando coisas desde a década de 80/90 e que produziu naquela época uma placa compatível com as Panasonic FM-Pac, a famosa FM-Stereo.

E desde aquela época já percebemos o diferencial nas produções da Tecnobytes, que desenvolve produtos completamente compatíveis com os lançados no mercado internacional porém sempre com uma inovação extra, no caso da FM-Stereo, a característica Stereo dessa placa e sua qualidade sonora superior a FM-PAC original.

Bom, se inovação é a praia dos produtos da Tecnobytes, é bom sempre esperar algo diferenciado vindo deles e no caso da interface IDE o maior benefício, para mim, foi  a possibilidade de colocar o MSX no mesmo patamar de armazenamento existente no mundo dos PC’s,  considerando as devidas proporções, o que no final me tira o peso psicológico de que não estou vivendo e sim sobrevivendo no mundo MSX.

E por falar em sobrevivência….

…nós sobrevivemos……

….durante anos e anos com nossos disquetes e que mais tarde se transformaram em imagens .dsk para emuladores, como os fMSX, OpenMSX e BlueMSX e graças aos BBS e a internet, esses programas também “sobreviveram” até os dias atuais.

Ganhamos tempo suficiente para conseguir desenvolver tecnologia e adequar os nossos MSX aos padrões mais atuais de armazenamento de dados, como as interfaces IDE.

Tecnobytes ATA IDE Interface

Interface IDE não é algo novo no mundo MSX, pois já existe desde o final dos anos 90, através do produtor internacional de hardware para MSX, a Sunrise. No Brasil uma interface similar já foi produzida e comercializada pela ACVS, que é um outro player que está, digamos, um pouco inativo no cenário MSX nos últimos anos e por último temos a Tecnobytes, que vem produzindo hardware de forma mais constante, bem como produzindo algumas peças de hardware em edição limitada, como o caso das OPL4 Shockwave e V9990 PowerGraph.

Sobre a IDE da Tecnobytes anotei algumas características, após alguns meses de uso, descritas abaixo:

  1. Possibilidade de utilização de dispositivos baseados em memória flash, ou Compact Flash.
  2. Pelo fato de ser uma interface Sunrise-like, tem compatibilidade total com os softwares produzidos para a interface da Sunrise, que são muitos, bem como podemos aproveitar qualquer especificação de funções da BIOS dessas interfaces, disponível na internet, para escrever softwares utilitários para essa interface.
  3. Possibilidade de atualização de BIOS, como a nova 2.50 (beta) que está saindo do forno do Laboratório da Tecnobytes, segundo informações do próprio Ricardo Oazem através da lista MSXBR-L.

    .

Limites das IDE’s no MSX.

WARNING
Apesar de possível o uso de dispositivos com qualquer capacidade nas interfaces IDE para MSX (Sunrise-like), existem limitações quanto ao número de partições que essas interfaces podem endereçar no MSX, que chega ao valor máximo de 31 partições.

O sistema operacional do MSX (MSXDOS) também tem limitação de trabalhar com FAT12 que por sua vez pode endereçar até 32Mb, ou seja, poderíamos endereçar o máximo de 31 partições com 32Mb, totalizando aproximadamente 1Gb, ou seja, dispositivos com 2Gb, 4Gb, ou 6Gb não seriam aproveitados em sua totalidade.

Porém existe a possibilidade de utilização do MSXDOS2, que com o devido patch aplicado, poderá suportar partições com FAT16, aumentando assim a capacidade de endereçamento do sistema operacional, que passará suportar partições de até 2Gb. Infelizmente, esse patch é um software residente que deve ser carregado após o boot do sistema operacional, ou seja, você deverá ter pelo menos uma partição com FAT12 configurada em seu disco, para a carga inicial do sistema operacional, podendo deixar as demais com FAT16, por exemplo, possibilitando assim o uso completo de dispositivos acima de 2Gb até aproximadamente 60Gb.

Acredito que a versão 2.44 do MSXDOS2, liberada pelo pessoal da TNI conforme esse anuncio, suporte FAT16 nativamente sem a necessidade de softwares residentes, porém ainda não testei.

Apesar de existir a possibilidade de utilização da IDE com o MSXDOS, na prática sua utilização fica limitada pela falta de capacidade de manipulação de sub-diretórios por esse sistema operacional e também pelo fato do número máximo de arquivos possíveis por diretório no MSXDOS ser 512, e como o MSXDOS suporta 1 diretório apenas, logo temos um total de 512 arquivos possíveis em um dispositivo conectado à controladora IDE.

Mas quem em sã consciência irá utilizar um dispositivo de 1Gb, 2Gb, 4Gb ou 8Gb para armazenar 512 arquivos apenas ???

TIP
Existe a possibilidade de se burlar essa limitação do número de diretórios no MSXDOS e existe alguns comandos externos, cd.com, rd.com, md.com, que foram desenvolvidos e explicados em um artigo da Revista CPU na metade da década de 90, e que adicionam essa capacidade de manipulação de sub-diretórios no MSXDOS.

Entretanto, como esses comandos não são comandos built-in do sistema operacional, sua utilização requer malabarismos que praticamente impossibilitam o seu uso nesse sistema operacional, por isso ao utilizar uma IDE, prefira o MSXDOS2, que já possui todos os requisitos para manipulação de dispositivos de grande capacidade que uma interface IDE proporciona ao MSX.

Testes de compatibilidade

Realizei testes de compatibilidade com diversos dispositivos IDE, utilizando a interface ATA IDE Tecnobytes e o resultado dos testes estão descritos abaixo.

HARDWARE HOTFIX !!! IMPORTANTE !!!!
No dia 02/02/2011 a Tecnobytes, através de Ricardo Oazem, liberou na MSXBR-L um HotFix que corrige um problema de detecção de alguns dispositivos IDE, principalmente HD‘s.
Para as interfaces ATA IDE Tecnobytes construídas antes dessa data, o HotFix deve ser aplicado caso o usuário dessas interfaces estejam enfrentando problemas na detecção de dispositivos IDE.
No anúncio, o fabricante informou que caso o usuário não se sinta seguro de fazer o HotFix, basta enviar a interface a ele que a alteração será realizada.
O custo do capacitor cerâmico utilizado no HotFix, foi de R$0,10 (10 centavos) e o tempo que levei para aplicar esse Patch, foi de 1 minuto, ou seja, é muito simples.

WARNING2
Apesar do MSX nem sonhar com transferências disponíveis a dispositivos IDE UDMA (Ultra DMA), que chegam a no mínimo 33mb/s, todos os testes realizados com dispositivos que utilizam cabo IDE (Hard Disks, CDROM‘s, etc, …), antes do HotFix da Interface, só funcionaram quando utilizado um cabo UDMA (80 vias), sendo que quando testados com um cabo de 40 vias, esses dispositivos sequer foram reconhecidos.
Após o HotFix da Interface, os dispositivos passaram a funcionar com cabos IDE de 40 vias.

Teste de compatibilidade com Hard Disks.

Dispositivos HD’s são um dos principais motivos da existência do padrão IDE e também por muito tempo foi o sonho de consumo dos usuários de plataformas antigas da década de 80 e apesar de existir hoje dispositivos mais modernos e compactos, há ainda uma grande procura, no mercado, por  Hard Disks IDE. Por esse motivo, realizei alguns testes com alguns HD‘s disponíveis na minha bancada de testes.

São eles:

  1. Quantum Fireball 500Mb.
  2. Quantum Fireball lct 20.4Gb.
  3. Western Digital 160Gb SATA com adaptadores SATA->IDE.

.

Antes do HotFix da interface, apenas o Fireball 500Mb havia sido reconhecido, formatado e utilizado na interface IDE Tecnobytes e embora o Western Digital 160Gb SATA tenha sido apenas um teste despretensioso onde eu já esperava o seu não funcionamento, pois  o mesmo é instável até mesmo quando utilizado com adaptadores SATA->IDE no PC, a surpresa ficou quanto ao não reconhecimento e funcionamento do Quantum Fireball lct 20.4Gb, entretanto esse mesmo dispositivo funcionou após o HotFix disponibilizado pela Tecnobytes, confome descrito anteriormente.

WARNING3
Em teoria as IDE Sunrise-Like suportam qualquer Hard Disk, até mesmo os de 160Gb, porém na prática, conforme explicado anteriormente, essas interfaces só conseguem endereçar aproximadamente 60Gb desse dispositivo, devido as limitações do número de partições dessas interfaces, aliado ao limite de tamanho das partições FAT(12/16) do sistema operacional MSXDOS/MSXDOS2.

Teste de compatibilidade com CDROM’s.

Apesar de existir dispositivos de CDROM compatíveis com o padrão IDE e todos esses, em teoria, ter compatibilidade garantida com a IDE da Tecnobytes, resolvi fazer alguns testes com 2 modelos que estavam disponíveis aqui em minha bancada de testes.

São eles:

  1. LG RW 16x~40x.
  2. CDROM Genérico 56X (Xing-Ling).

.

WARNING4
Antes do HotFix da interface, esses dois dispositivos foram reconhecidos apenas quando utilizados com um cabo IDE 80 vias (UDMA) e após o HotFix, os mesmos funcionaram com cabos IDE 40 vias.

Fiz alguns testes, utilizando o pacote do MSXDOS2 e utilitários que está disponível no tutorial de instalação e configuração para IDE‘s Sunrise-Like no site da MSX Pró e após executar o comando IDECDEX.COM, o CDROM ficou mapeado como drive C: em meu MSX e a partir daí consegui navegar em diversos CD‘s de dados, validando assim o funcionamento desses dispositivos de CDROM na IDE Tecnobytes.

Teste de compatibilidade com DiskOnChip.

Um dispositivo bastante incomum, mas que testei também na interface IDE da Tecnobytes, foi o DiskOnChip IDE.

Para quem não conhece, o DiskOnChip é uma tecnologia de Flash Disks desenvolvida pela empresa Israelense M-Systems, conhecida por ser a pioneira no desenvolvimento da tecnologia SSD e que no inicio dos anos 2000 foi adquirida pela SanDisk, empresa líder em tecnologia de armazenamento em memórias Flash.

Existem diversos tipos de DiskOnChip, que vão desde chips que podem ser integrados a dispositivos embarcados, até DiskOnChip já integrados a uma interface IDE, podendo ser conectados a PC‘s comuns, mas que geralmente são utilizados em dispositivos embarcados com arquitetura de PC comum, como por exemplo placas PC/104 e SBC (Single Board Computer).

Fiz um teste utilizando o meu DiskOnChip de 256Mb com a interface IDE Tecnobytes e a mesma não reconheceu esse dispositivo. Não fiz nenhuma pesquisa técnica sobre as capacidades da interface IDE presente no DiskOnChip M-Systems que possuo, em busca de algum requisito mínimo desse dispositivo e também  não consultei os limites da Interface IDE da Tecnobytes em busca alguma incompatibilidade entre a mesma e dispositivos desse tipo.

Caso a IDE Tecnobytes conseguisse reconhecer esse dispositivo, existiria um outro impecilho para seu uso no MSX, uma vez que DiskOnChip utilizam um FileSystem específico denominado TrueFFS, cuja implementação da camada gerenciadora de FileSystem do sistema operacional hospedeiro deve estar disponível para que se tenha acesso a dispositivos DiskOnChip, o que já acontece nos Sistemas Operacionais, Linux, Windows e todos os BSD‘s existentes.

Teste de compatibilidade com Compact Flash.

Eu me aprofundei nos testes da IDE com dispositivos Compact Flash e cheguei a conclusão que , além de mais confiáveis e rápidos, os CF’s no MSX terão menos problemas de reconhecimento pela IDE no MSX do que qualquer outro dispositivo.

Quando iniciei minha bateria de testes com dispositivos Compact Flash na IDE Tecnobytes em meus MSX, fiquei receoso de que algumas marcas pudessem não funcionar devido alguma limitação tanto por parte da IDE quanto por parte do  Compact Flash, porém após fazer um estudo para escrever a segunda parte do Dossiê Storage Devices – Compact Flash, percebi que os Compact Flash, principalmente os mais modernos, são dispositivos extremamente inteligentes e que suportam diversos modos de operação, tanto como dispositivos USB ou IDE, suportando modos de transferência de dados mais rápidos UDMA ou mais lentos PIO, …… e independente de um Compact Flash ter suporte a UDMA e o MSX nem sonhar com uma taxa de transferência próxima  de um dispositivo UDMA (mínimo de 33Mb/s), os Compact Flash, devem suportar modos que possibilitem o seu acesso por dispositivos mais antigos, segundo as especificações atuais da Compact Flash Association, ou seja, por enquanto teoricamente, todo e qualquer Compact Flash que você adquirir, deverá funcionar em sua interface IDE.

Segue a lista de dispositivos Compact Flash que utilizei e testei com minha interface ATA IDE Tecnobytes:

  1. Transcend 4Gb UDMA;
  2. Dane-Elec 8Gb;
  3. Dane-Elec 2Gb;
  4. Memory Technology Company 256Mb;

.

De todos, o melhor que achei foi o Transcend 4Gb UDMA, pois me pareceu mais veloz do que os demais. Não fiz nenhum benchmark entre os Compact Flash, tarefa que deixarei para a segunda parte desse review, então a “medida” foi apenas baseada na percepção “visual“.

O Dane-Elec de 8Gb é o que está rodando oficialmente em meu micro, devido a seu tamanho de 8Gb.

Passeando pela Santa Efigênia em São Paulo, encontrei um SanDisk de 32Gb UDMA que deve ser uma obra prima, pois são os inventores do Compact Flash. Devo admitir que “formigou” a mão para comprar….

Segue abaixo outros dispositivos de Compact Flash que obtive feedback por parte de usuários de IDE (Tecnobytes, ACVS, Sunrise) de MSX e que me reportaram funcionar bem.

  1. SanDisk Exteme III 2Gb;
  2. Kingston 4Gb;
  3. Kingston 1Gb;

.

Para mim essa questão da compatibilidade está desmistificada e acredito que todas as marcas atuais funcionem bem com a Interface ATA IDE da Tecnobytes e talvez com as demais baseadas em Sunrise, porém fique atento ao adaptador de Compact Flash.

A maioria dos adaptadores de Compact Flash atuais tem suporte a DMA,  que a grosso modo é a presença de alguns pinos que interligam a IDE e o PCMCIA do Compact Flash possibilitando a transferência de dados via DMA, que é bem mais rápida em hosts que suportam DMA.

Infelizmente suporte a DMA não é a realidade para interfaces conectadas aos slots de expansão no MSX, entretanto percebi que todos os  adaptadores de Compact Flash que tem suporte a DMA tem uma qualidade melhor e funcionam 100% com a interface ATA IDE Tecnobytes, quando se está utilizando dispositivos Compact Flash com suporte a UDMA, como o Transcend 4Gb UDMA.

Outros adaptadores CF->IDE sem suporte a DMA, causaram instabilidade no I/O, truncando os arquivos, quando utilizados com Compact Flash UDMA (Transcend 4Gb UDMA).

TIP
A ausência do suporte a DMA no adaptador não influencia em nada o uso de dispositivos Compact Flash não UDMA no MSX, porém ao utilizar um Compact Flash UDMA com adaptadores sem suporte a DMA, percebi que foi o diferencial para o inicio de falhas nas operações de I/O.
Acredito estar relacionado apenas a qualidade superior dos adaptadores com suporte a DMA frente aos que não tem suporte a DMA.
Lembrando que, caso você queira utilizar um Compact Flash UDMA em hosts que suportam UDMA (PC, etc ….), o primeiro requisito do adaptador é que tenha suporte a DMA e o segundo é que seja compatível com dispositivos UDMA.
Logo a minha sugestão é a seguinte, compre adaptadores que tem a inscrição DMA em uma, ou nas duas, de suas faces, pois é mais seguro que funcione estável em dispositivos Compact Flash com ou sem suporte a UDMA. Caso tenha a especificação do produto em mãos, verifique também se o adaptador tem suporte a UDMA.

Notícias do Front:

Boas notícias quanto ao desenvolvimento de produtos baseados em tecnologia IDE pela Tecnobytes, pois o próprio autor já informou em um anúncio na lista MSXBR-L, que está desenvolvendo uma nova BIOS (2.50 beta) e que a mesma possibilitará suporte a FAT16 nativo, ou seja, em breve não necessitaremos da FAT12 para dar o boot na IDE, para mim esse é um primeiro passo para a FAT32.

Outra excelente notícia é que juntamente com a nova BIOS, teremos uma Memory Mapper, de fabricação da Tecnobytes,  que é imprescindível para o uso da IDE devido ao MSXDOS2 necessitar da mesma, o que dá aos possuidores de MSX2 e MSX2+, sem Memory Mapper, a possibilidade de ampliação do potêncial dessas máquinas.

Como senão fosse suficiente todas essas boas notícias, essa nova Mapper também funcionará em MSX1. Isso mesmo, Memory Mapper no MSX1 sem a necessidade de alterações no hardware ou atualização da BIOS do MSX…….sim, aqueles HotBit’s e Expert’s que temos guardados e quase esquecidos em nossos armários, poderão ter um dispositivo IDE e mais memória do que os eternos 64Kb.

Só nos resta aguardar mais um pouco.

Sugestões ao autor do produto:

A minha sugestão é única e simples. Os conectores IDE nos hosts geralmente vem com um pino a menos, no centro do conector, sendo que os cabos IDE, incluindo todos UDMA (80 vias), também vem com esse pino coberto no conector do cabo, o que muitos constumam chamar de mata-burro.

Pois bem, a IDE da Tecnobytes, não vem com esse pino faltando em seu conector, como na maioria dos hosts (PC’s, etc, …), o que termina obrigando a quem vai trabalhar com dispositivos que utilizam cabo IDE (CDROM, HD, …) a furar esse pino, no cabo IDE, uma vez que o mesmo está coberto, evitando assim qualquer dano à interface IDE quando se está utilizando um cabo desse tipo, ou seja, todos UDMA de 80 vias.

Finalizando….

…deixo aqui meus agradecimentos aos seguintes amigos da lista MSXBR-L que ajudaram compartilhando informações sobre seus Compact Flash e Adaptadores.

  • Antonio Sanches Parra – Pelo report, com imagens, relatando que seu Compact Flash Kingston 1Gb funcionou de maneira instável com os 2 adaptadores sem suporte a DMA, causando truncamento dos arquivos gravados no Compact Flash, sendo que o mesmo Compact Flash funcionou perfeitamente em outro adaptador com suporte a DMA.
  • Daniel Campos – Pelo report relatando a instabilidade no funcionamento de seu conversor SD->CF, tendo os mesmos problemas de truncamento de arquivos, relatados pelo Antonio Sanches Parra e também pelo report em que relatou que seu adaptador SD SDHC MMC para IDE 3.5″ funcionou corretamente na interface Tecnobytes.
  • Silvio Borges – Pelo HotFix feito na IDE da Tecnobytes e por ter disponibilizado a informação ao fabricante, que repassou a todos os usuários.

    .

Bom, por enquanto fico por aqui, sendo que reservei para a segunda parte dessa análise, um teste comparativo de performance dos diversos meios que podemos utilizar na IDE Tecnobytes ou qualquer outra interface IDE Sunrise-Like.

[]’s
PopolonY2k

Referências

Site Oficial da Tecnobytes

http://www.tecnobytes.msxall.com/

Anúncio do MSXDOS 2 Vrs2.44 (TNI)

http://www.tni.nl/news/command2com-version-244-released

Dossiê Storage Devices – Compact Flash

http://www.popolony2k.com.br/?p=130

Sunrise IDE Technical Information

http://map.grauw.nl/viewer.php?f=/resources/disk/IDETECH.TXT

Sunrise IDE Technical Information II

http://www.msx.ch/sunformsx/download/idetxt/idetech.html

Sunrise IDE Technical Information III (BIOS documentation)

http://www.msx.ch/sunformsx/download/idetxt/idesys.html

LBA Definition (Guia do Hardware)

http://www.guiadohardware.net/termos/lba

LBA Definition (PC Guide)

http://www.pcguide.com/ref/hdd/bios/modesLBA-c.html

Tutorial de configuração de interface IDE (Sunrise-like) no MSX (MSXPró)

http://www.msxpro.com/ide.html

MusicA – Tocando MIDI no MSX – Parte IV

Após um pequeno período de descanso desde o último post, retorno finalmente para a conclusão da série que descreve como converter um arquivo MIDI para o MSX, bem como  técnicas utilizadas tocar musica no MSX em geral.

Quando iniciei a pesquisa para converter MIDI para o MSX, eu esperava conseguir ferramentas 100% prontas para executar essa tarefa, porém após conseguir o 3MLEditor e o MusicA, eu já estava conformado de que teria que criar pelo menos uma ferramenta para auxiliar no processo de conversão, o que realmente aconteceu.

Como já vimos nos últimos posts, conseguimos converter um arquivo MIDI para um arquivo MML proprietário gerado pelo 3MLEditor e também conhecemos o formato MSD, que é o arquivo MML aceito pelo MusicA, que por sua vez converte o MSD para o formato aceito por muitos replayers de MSX, o BGM (Background Music).

Mas ficou um buraco no processo, entre gerar o MML pelo 3MLEditor e transportá-lo ao MusicA, e é justamente aí que entra um componente importante no processo de conversão, que é o mml2msd compiler.

mml2msd Compiler

O mml2msd compiler foi criado justamente para compilar o MML gerado no formato proprietário do 3MLEditor, convertendo-o para o formato MSD aceito pelo MusicA, inclusive aplicando todos os filtros necessários para que os dados MML gerados sejam compatíveis com o MusicA, pois conforme eu escrevi no segundo artigo da série, o MML não é um padrão de facto, logo, existem diferenças no MML entre programas e plataformas diferentes.

Voltando ao mml2msd compiler, essa ferramenta é um compilador de linha de comando criada em C++ ANSI, sendo seu código compilável em qualquer sistema que disponha de um compilador C++ ANSI compatível, o que a torna disponível para praticamente qualquer sistema operacional e plataforma existente na atualidade, como MacOSX, Linux, Windows, Solaris, *BSD (FreeBSD, NetBSD e OpenBSD), dentre outras.

Tecnologia

A ferramenta foi construída com técnicas de orientação a objetos, que permitem sua expansão de maneira simples e de forma que possamos reutilizar grande parte de seu código para criação de novas ferramentas no futuro.

Após o término dessa ferramenta, chegamos a um engine de conversão, cujo processo está dividido em 3 partes:

  1. MML Parser;
  2. MML Compiler;
  3. MML Linker;

.

MML Parser & MML Compiler

O MML parser é o responsável por identificar cada seção do arquivo MML de entrada e Tokenizar essa informação em uma arvore em memória e para isso utilizei o uso extensivo de containers STL (Standard Template Library) de forma que os dados recebidos do parser são pré-processados e compilados nesses containers, ficando organizados e prontos para o processo de linkagem no formato do objeto final.

Algumas tarefas de pré-processamento são feitas durante o parsing do MML de entrada, como por exemplo ignorar comentário de uma linha ( // ) ou de multiplas colunas ( /*   */ ). O MML do 3MLEditor não suporta comentários de multiplas linhas.

Como o formato MML do 3MLEditor é bem simples e geralmente é composto por seções e dados que podem organizados através do pair <Key, Value>, então não foi complicado explicitar isso utilizando as seguintes estruturas em C++ (STL), que definem exatamente os canais e seu código MML associado, bem como algumas estruturas com features adicionais do compilador, como por exemplo a possibilidade do usuário adicionar seu próprio código MML customizado no objeto convertido final.

C++ source code

/**
  * Token types enumeration.
  */
enum TokenType {
  TOKEN_TYPE_UNKNOWN = 0,
  TOKEN_TYPE_SECTION,
  TOKEN_TYPE_DATA,
  TOKEN_TYPE_BLANK,
  TOKEN_TYPE_ONE_LINE_REMARKS,
  TOKEN_TYPE_MULTI_LINES_REMARKS,
  TOKEN_TYPE_OPEN_MULTI_LINES_REMARKS,
  TOKEN_TYPE_CLOSE_MULTI_LINES_REMARKS
};
/**
  * Data types enumeration.
  */
enum TokenDataType {
  DATA_TYPE_UNKNOWN = 0,
  DATA_TYPE_KEY_VALUE,
  DATA_TYPE_VALUE
};
/**
  * New definitions types for use with framework.
  */
struct stToken {
  TokenDataType type;
  string                       strKey;
  string                       strValue;
};
typedef set<int> ChannelSet;
typedef map<int, string> ChannelMap;
typedef map<stToken*, ChannelSet*> CustomMMLMap;
typedef vector<stToken*> TokenVector;
typedef map<stToken*, TokenVector*> TokenVectorMap;

O processo de conversão em nenhum momento, seja no parsing e compilação das informações ou na linkagem, não requer nenhuma técnica de recursividade, principalmente pelo formato de entrada (MML) ser simples. Entretanto o objeto final (MSD) é um pouco mais complicado, uma vez que é um formato baseado em duas seções, sendo a primeira a de definições da estrutura dos canais físicos de som e ordem de execução dos comandos MML e a segunda que descreve o conteúdo dos comandos MML que serão executados pelos canais físicos.

MML Linker

Uma vez com toda a árvore de comandos <canais/comandos> MML carregados em memória, nos resta apenas transferir seu conteúdo para o objeto destino, no caso um arquivo no formato MSD, aceito pelo MusicA.

O processo consiste em uma montagem de dois passos.

  1. Associação dos canais físicos da máquina (FM, PSG e SCC) com os lógicos (conteúdo MML);
  2. Associação dos canais lógicos ao seu respectivo conteúdo MML;

.

O que resulta no seguinte arquivo MSD, conforme exemplo abaixo:

MusicA MSD Format

; MSD file generated by mml2msd compiler.
; CopyLeft (c) since 2011 by PlanetaMessenger.org.
;

;
; Associação dos canais físicos aos lógicos
;

FM1=C1,CH1
FM2=C1,CH2
FM3=C1,CH3
FM4=
FM5=
FM6=
FMR=
FM7=
FM8=
FM9=
PSG1=
PSG2=
PSG3=
SCC1=
SCC2=
SCC3=
SCC4=
SCC5=

;
; Associação dos canais lógicos aos dados MML
;

C1=T200
CH1
=T200V8>E16G+16C+16E16V10<A16>C+16V14<G+16>C+16<A16F+16E16A16>E16G+16C+16E16V10<A16>C+16V14<G+16>C+16<A16F+16E16A16R8A.
CH2
=V14R1.R32C-16F+.F+32
CH3
=V14R1.<F+16>D.D16

Conforme citado anteriormente, o conteúdo MML aceito pelo MusicA não é 100% compatível com com gerado pelo 3MLEditor e também com o do MSX-BASIC, por isso durante esse processo de linkagem é feito um pós-processamento no conteúdo gerado para compatibilizar o MML gerado.

Filtros

O MusicA não suporta algumas sequências de MML que geralmente são aceitas pelo 3MLEditor e também pelo MSX-BASIC, sendo algumas dessas sequencias inexistentes no MusicA e outras que considerando um pouco de teoria de musical, podem ser substituídas por uma sequência que as torna musicalmente compatível.

O processo de busca de tais sequências no código MML é na maioria das vezes complexo e suscetível a erros, podendo resultar em funcionamento indesejado do software bem como geração de dados indesejáveis ao formato final, por isso considerei bastante a utilização de expressões regulares durante o desenvolvimeto desse software.

O Regex, ou regular expressions, é uma tecnologia perfeita a ser utilizada no processo de busca e substituição de sequências MML inválidas e existem diversas bibliotecas feitas em C++ que implementam o engine para processamento de expressões regulares e a mais famosa delas é a Boost.

Boost é uma biblioteca escrita em C++ e que contempla uma infinidade de novos containers e algorítmos desenvolvidos com base na idéia de Alexander Stepanov e sua STL. O pacote regex da Boost é perfeito para o trabalho de busca e substituição que necessitamos, porém eu iniciei o desenvolvimento desse software utilizando a ferramenta BloodShed DevC++, que é uma IDE de código fonte aberto, para Windows, e que usa o compilador gcc via MinGW, mas ao tentar ajustar essa ferramenta para utilização do Boost percebi que, assim como eu, muitas pessoas tem dificuldades de integração dessa biblioteca com essa IDE. Na verdade a grande maioria da Boost é composta apenas de templates escritas apenas nos headers (.h) da biblioteca e se você tentar utilizar esses templates no DevC++, não terá problemas, porém o regex é um dos poucos módulos da Boost que tem código fonte (.cpp) fora dos headers e com isso que necessta que o host compiler seja configurado para incluir referência a biblioteca regex (.lib) do Boost.

Li em alguns foruns, que algumas pessoas conseguiram trabalhar com Boost no DevC++, porém decidi não gastar muito tempo com isso e temporariamente decidi não utilizar regex nem o Boost e vou deixar essa melhoria no código para uma futura versão do mml2msd, com isso fiz minhas rotinas de busca e substituição todas baseadas na STL mesmo, basicamente utilizando std::string.

Abaixo, uma lista do que não é suportado e o que foi subsitituído por uma sequencia compatível.

C++ Source Code

/**
 * Apply filter to Ampersand (&) character.
 * & after numbers is not possible;
 * & after dot (.) is not possible;
 * @param strToken The data to apply filter;
 */
void ThreeML :: AmpersandFilter( string &strToken );

/**
 * Combine two quarter notes together.
 * @param strToken The MML data to filter;
 * Thanks to The Ultimate PPMCK MML reference.
 * http://woolyss.com/chipmusic/chipmusic-mml/ppmck_guide.php
 * and to SiOPMML reference.
 * http://mmltalks.appspot.com/document/siopm_mml_ref_05_e.html
 */
void ThreeML :: CombineQuarterNotesFilter( string &strToken );

/**
 * Apply filter to Less-than (<) character.
 * Two << cannot be in sequence;
 * @param strToken The data to apply filter;
 */
void ThreeML :: OctaveLowerFilter( string &strToken );

/**
 * Apply filter to Dot (.) character.
 * . after L(n) is not possible;
 * @param strToken The data to apply filter;
 */
void ThreeML :: DotFilter( string &strToken );

/**
 * Apply filter to Tilde (~) character, removing it;
 * @param strToken The data to apply filter;
 */
void ThreeML :: TildeFilter( string &strToken );

/**
 * Filter for invalid volume MML tag. Some MML sequences
 * is higher than MSD (MusicA) supports, then this will
 * be updated for maximum value accepted by MSD format (15).
 * @param strToken The data to apply filter;
 */
void ThreeML :: InvalidVolumeFilter( string &strToken );

/**
 * Filter all instruments of token, removing it from
 * sequence.
 * @param strToken The data to apply filter;
 */
void ThreeML :: InstrumentsFilter( string &strToken );

Ainda estou estudando algumas possibilidades em cima desses filtros, como por exemplo o OctaveLowerFilter, pois acredito que os casos de MML inválidos que peguei talvez sejam porque, nesses casos, o MML original esteja fazendo uma tentativa de retornar 1 oitava que esteja fora da faixa do teclado virtual do MSX ou apenas do MusicA, por isso o mml2msd ainda está em desenvolvimento e ainda teremos algumas versões do mesmo pelos próximos meses, para afinar esses filtros do compilador.

Limitações da primeira versão e melhorias futuras.

A maior limitação do mm2msd é que ainda não estou tratando os canais de percussão, ou seja, ainda não temos uma conversão com o devido tratamento para os canais de bateria e ritmo. Se fosse uma conversão de MML para MSX-BASIC, seria mais tranquilo pois a única conversão necessária seria criar uma tabela de conversão dos instrumentos aceitos pelo MIDI para os aceitos pelo FM do MSX, entretando em se tratando de MusicA, a maneira como ele trata o ritmo é algo particular e que ainda estou mapeando para ajustar o compilador de forma que o mesmo possa transformar essa infomação, possibilitando assim que o MusicA execute os canais de ritmo corretamente, então, posso dizer que já está na lista de melhorias como prioridade.

Outra melhoria que pretendo liberar na próxima versão é a possibilidade de se incrementar o tempo utilizando um incremento especificado pelo usuário, com unidade em BPM (Batidas Por Minuto), ou seja, se uma música tem originalmente o tempo de 20BPM, poderemos desejar que o tempo da música, após a conversão, sejá de 80BPM por exemplo, para isso será necessário especificar, no momento da conversão, o valor a ser incrementado, no caso 60BPM, ao tempo, então a música convertida será executada nesse novo tempo. Isso é muito importante pois existem músicas em que determinados canais estão setados com um tempo X e outros com um tempo Y, ou seja, se tentarmos aumentar ou diminuir a velocidade da música por um processo de conversão manual no MML original, estamos propensos a inserir erros na execução da música.

mm2msd in action

Como já foi descrito anteriormente, o mml2msd é uma ferramenta de linha de comando, portanto em ambiente Windows poderá ser utilizada via cmd e nos UNIX, em geral, através do console comum a esses sistemas.

Segue abaixo tela de ajuda (help) do mml2msd, que mostra todas as opções do compilador. Essa tela de ajuda aparece caso o usuário chame o mml2msd sem parâmetro algum, ou passando a opção -h (mml2msd -h).

mml2msd MML Compiler. CopyLeft (c) since 2011 by PlanetaMessenger.org Vrs. 0.0
Usage mml2msd [-ft][-v][-ac][-acf filename][-of filename][-ri][-h] input_file_name
Optional parameters:
-ft Try to find the tempo on source MML and add it to all channels on destination file.
-v Turn on verbose mode.
-ac Add custom MML to beginning of all channels on destination file.
-acf Add custom MML to beginning of all channels based on content of file specified by parameter filename. See about how to make a custom MML file.
-of Output to file specified by filename.
-ri Generate destination file without the instruments of source MML.
-rc Remove generated comments on destination MML.
-h Show this help screen. How to make a custom MML file.

If you want to use a custom MML file to each channel of source that you’re converting, just create a file with the following format:

FM1=<Custom_MML_command> FM2=<Custom_MML_command> FM3=<Custom_MML_command> FM4=<Custom_MML_command> FM5=<Custom_MML_command> FM6=<Custom_MML_command> FMR=<Custom_MML_command> FM8=<Custom_MML_command> FM9=<Custom_MML_command> PSG1=<Custom_MML_command> PSG2=<Custom_MML_command> PSG3=<Custom_MML_command> SCC1=<Custom_MML_command> SCC2=<Custom_MML_command> SCC3=<Custom_MML_command> SCC4=<Custom_MML_command> SCC5=<Custom_MML_command> Where <Custom_MML_command>
is the MML that you want add to beginning of each specified channel.
mml2msd was developed by PopolonY2k for PlanetaMessenger.org.
For new versions please visit http://sourceforge.net/projects/oldskooltech/
Software information at http://www.popolony2k.com.br
Project home at http://www.planetamessenger.org

A forma de operação mais simplista do mml2msd é chamá-lo da seguinte forma pela linha de comando:

popolony2k@ZanacEx:~$ mml2msd nome_arq.mml

No exemplo acima o compilador abre o arquivo .mml passado por parâmetro gerando um arquivo de saída com o mesmo nome do arquivo de entrada acrescido da extensão .msd.

Operando na forma minimalista, o mml2msd tentará converter o MML da forma mais fiel possível, entretanto o MusicA tem algumas diferenças, principalmente relativas ao tempo da melodia, e por isso existem parâmetros adicionais no mml2msd que possibilitam controlar algumas opções na geração do arquivo final de maneira mais avançada.

Segue abaixo a descrição dos parâmetros opcionais do mml2msd (opção -h):

[-ft]  Try to find the tempo on source MML and add it to all channels on destination file.

Essa opção tenta encontrar o tempo a ser utilizado por todos os canais da música convertida. É importante pois no MusicA cada canal deve ter seu tempo configurado, o que não acontece no MML original, geralmente esse tempo é o mesmo do primeiro canal da melodia.

[-v]   Turn on verbose mode.

Liga o modo verboso, ou seja, todos os prints do sistema estão ativados com essa opção. Ótima para debug.

[-ac]  Add custom MML to beginning of all channels on destination file.

Permite que a adição de comando MML customizados, no inicio de todos os canais.

Ex: mml2msd -ac v10 arq_mml.mml

Ótimo para configuração dos canais, quando todos compartilham a mesma configuração, por exemplo volume ou tempo.

[-acf] Add custom MML to beginning of all channels based on content of file specified by parameter filename.

Assim como a opção -ac acima, a opção -acf permite adição de código MML customizado no inicio dos canais, porém essa opção permite que essa tarefa seja feita a partir de um arquivo de entrada.

Ex: mml2msd -acf arquivo_entrada arq_mml.mml

O arquivo que contém o código MML de entrada (arquivo_entrada) deve ser um arquivo texto no seguinte formato:

FM1=<Custom_MML_command>
FM2=<Custom_MML_command>
FM3=<Custom_MML_command>
FM4=<Custom_MML_command>
FM5=<Custom_MML_command>
FM6=<Custom_MML_command>
FMR=<Custom_MML_command>
FM8=<Custom_MML_command>
FM9=<Custom_MML_command>
PSG1=<Custom_MML_command>
PSG2=<Custom_MML_command>
PSG3=<Custom_MML_command>
SCC1=<Custom_MML_command>
SCC2=<Custom_MML_command>
SCC3=<Custom_MML_command>
SCC4=<Custom_MML_command>
SCC5=<Custom_MML_command>

Onde cada um dos canais físicos (FM1…FM<n>, SCC1…SCC<n>, PSG1…PSG<n>) poderá ter um código MML associado que será adicionado no inicio de cada canal especificado no arquivo MSD final.

[-of]  Output to file specified by filename.

Especifica o nome do arquivo de saída, permitindo assim que o nome do mesmo seja diferente do arquivo de entrada.

[-ri]  Generate destination file without the instruments of source MML.

Permite que se retire os instrumentos do arquivo final, ou seja, ao utilizar essa opção a melodia ficará com os instrumentos default para todos os canais. Essa opção tem alguma utilidade na versão 0.0 do mml2msd pois essa versão ainda não possui tabela de conversão de instrumentos, logo, os instrumentos do MIDI original poderão não ser os mesmos quando transportados para o MSX.

[-rc]  Remove generated comments on destination MML.

O mml2msd adiciona, por default, comentários entre seções dentro do MSD gerado, para desabilitar essa feature chame o compilador com essa opção ativada.

[-h]   Show this help screen

Mostra a tela de ajuda com as opções acima.

Código fonte

O código do mml2msd já está liberado sob licença GPLv3 em sua versão 0.0, no repositório do Old Skool Tech, com os seguintes endereços para download:

.

A versão em desenvolvimento está disponível no SVN do projeto e daqui 1 ou 2 meses teremos novas features adicionadas a essa ferramenta bem como a construção de uma outra que é o mml2basic, que transformará o MML do 3MLEditor para código MSX-BASIC, prontinho para executar no MSX.

Também na versão que está no SVN já existe um makefile (Makefile.unix) que possibilita a compilação e geração de binários do mml2msd, para as plataformas UNIX em geral, logo já é possível utilizar o software nos Linux, *BSD, Solaris, etc. A partir da próxima versão vou liberar uma distribuição de binário da ferramenta para o sistema operacional Linux, na área de download do projeto.

Conclusão.

Finalmente chego ao final dessa série em que o resultado foi muito gratificante de escrever e compartilhar, principalmente depois de todas essas pesquisas feitas desde o final do ano passado e principalmente depois de perceber que temos muito que fazer no MSX, que tem um terreno fértil e muitas vezes inexplorado no quesito software.

Infelizmente não temos muita gente na ativa desenvolvendo softwares para MSX, máquina essa que acho excelente para aprender ainda nos dias atuais, principalmente para quem deseja se aprofundar na área de software para sistemas embarcados, onde o MSX compartilha muita coisa com os sistemas embarcados atuais. Então quem está no mundo MSX pode fazer a diferença e por isso brevemente pretendo continuar o desenvolvimento de softwares musicais para MSX e minhas pretensões se expandem para a construção de um Player para PC que seja capaz de converter MIDI diretamente para MSD ou até mesmo BGM e também um replayer para MSX que suporte além de FM, PSG e SCC, também a opção MoonSound.

Ou seja, temos bastante coisa para aprender e compartilhar.

Um abraço a todos e fiquem antenados nesse blog pois vem mais coisa pela frente…..temos um ano inteiro para desbravar o universo MSX.

[]’s

PopolonY2k

Todos os 4 artigos da série MusicA – Tocando MIDI no MSX são dedicados a Mãe e Professora de Musica Lêda Campos Ferreira.

Obrigado por tudo

Referência na internet

MusicA – Tocando MIDI no MSX – Parte II
http://www.popolony2k.com.br/?p=742

MusicA – Tocando MIDI no MSX – Parte III
http://www.popolony2k.com.br/?p=808

The Ultimate PPMCK MML reference
http://woolyss.com/chipmusic/chipmusic-mml/ppmck_guide.php

SiOPMML reference
http://mmltalks.appspot.com/document/siopm_mml_ref_05_e.html

Old Skool Tech – Old School Technology
http://sourceforge.net/projects/oldskooltech/

Regular Expressions (Regex)
http://en.wikipedia.org/wiki/Regular_expression

Standard Template Library (STL)
http://en.wikipedia.org/wiki/Standard_Template_Library

Boost C++ Libraries
http://www.boost.org/

Minimalist GNU for Windows (MinGW)
http://www.mingw.org/Windows

GCC – The GNU Compiler Collection
http://gcc.gnu.org/

Alexander Stepanov
http://en.wikipedia.org/wiki/Alexander_Stepanov

MusicA – Tocando MIDI no MSX – Parte III

Continuando a série de artigos sobre musica no MSX, vou apresentar a vocês um software bem interessante que descobri em minha busca por uma maneira de converter MIDI para o MSX, estou falando do MusicAMSX Music Editor/Player.

Existe pouco registro sobre a autoria do MusicA na internet, porém analisando internamente os binários desse software, descobri que o mesmo pode ter sido feito na Holanda, antes de 1992, devido a strings encontradas com texto no idioma desse País e também devido a diversos samples possuir em seus comentários o ano de 1992 com textos em holandês.

A única certeza é que um dos Players presentes no disco do MusicA foi feito em 1996 pelo japonês, Keiichi Kuroda. O outro Player do MusicA parece ser de origem holandesa, porém não sei se é original do MusicA editor ou se foi adicionado ao pacote, mas com certeza o conjunto deve ter sido montado por algum entusiasta no decorrer dos anos. Infelizmente não há site oficial para nenhum desses softwares.

O pessoal da Nerlaska Studio, da Espanha e que faz softwares, principalmente games para diversas plataformas entre elas o MSX, desenvolveu um Editor baseado no MusicA, para Windows que na verdade é um plugin para o BlueMSX, onde o mesmo parece utilizar o MML do MSX-BASIC, através do comando PLAY.

Voltando ao MusicA, a característica mais interessante desse software é que ele suporta quase tudo o que existe em tecnologia de hardware musical para o MSX, ou seja, com o MusicA podemos ter as seguintes possibilidades sonoras:

  • 3 Canais de som PSG;
  • 9 Canais de som FM;
  • 5 Canais de som SCC;

.

Tudo isso totaliza incríveis 17 canais de sons, o que nos possibilita criar composições superiores a qualquer uma existente no MSX hoje, sem contar as que utilizam a MoonSound é claro.

Ou seja, exceto pela ausência de suporte a placas MoonSound-like, o MusicA suporta tudo o que já foi lançado em matéria de hardware para o MSX, o que o torna um dos mais bem sucedidos lançamentos em matéria de software musical para o MSX dos últimos anos e ainda devemos considerar o fato de que com o MusicA, podemos escrever musicas que utilizam apenas os 3 canais do PSG, ou seja, podemos compor e converter musicas MIDI para tocar em um MSX 1, sem a necessidade de alguma placa mais moderna.

O MusicA é composto por duas peças fundamentais para o nosso processo de conversão de MIDI para o MSX, que é o MML Editor e o BGM RePlayer.

Vamos falar a seguir sobre os dois modos de operação do MusicA.

MusicA MML Editor.

O modo de edição do MusicA se trata de um poderoso editor feito para quem está disposto a trilhar o caminho da construção e edição de composições diretamente em MML. Com ele você pode escrever comandos MML, como os descritos na parte 2 dessa série, e a partir daí executar e buscar erros nas músicas, ou até mesmo editar e corrigir imperfeições em trechos da composição.

O editor do MusicA grava o seu MML em um formato próprio (texto), com a extensão .MSD. Esse arquivo, assim como o MML gerado pelo 3MLEditor, é o código fonte que contém toda a música em formato MML, pronta para ser editada e executada no software.

Além disso,  é no editor que você tem acesso ao modo de compilação do MML para o formato BGM, que é aceito pelo KINROU5 BGM Replayer do MusicA.

Segue abaixo um exemplo de um arquivo MSD aceito pelo MusicA:

; MSD file generated by mml2msd compiler.
; CopyLeft (c) since 2011 by PlanetaMessenger.org.
;

;
; Channels definitions
;

FM1=C1,CH1
FM2=C1,CH2
FM3=C1,CH3
FM4=
FM5=
FM6=
FMR=
FM7=
FM8=
FM9=
PSG1=
PSG2=
PSG3=
SCC1=
SCC2=
SCC3=
SCC4=
SCC5=

;
; User custom MML definitions
;

C1=T200

;
; Channels MML content
;

CH1=T200V8>E16G+16C+16E16V10<A16>C+16V14<G+16>C+16<A16F+16E16A16>E16G+16C+16E16V10<A16>C+16V14<G+16>C+16<A16F+16E16A16R8A.
CH2=V14R1.R32C-16F+.F+32
CH3=V14R1.<F+16>D.D16

TIP

O arquivo MSD é dividido basicamente em duas seções:

  • Definição dos canais, organizados entre canais FM, PSG e SCC.
  • Definição das variáveis com o conteúdo MML a ser executado pelos canais.

A imagem acima mostra a tela do editor do MusicA com um arquivo MSD, que é o formato MML padrão do MusicA, carregado e pronto para edição/execução.

Segue abaixo alguns atalhos de teclas aceitos pelo editor do MusicA:

  • F1 – Posiciona cursor no inicio do arquivo editado;
  • F2 – Posiciona cursor no final do arquivo editado;
  • F5 – Compila e executa o MML corrente no editor;
  • F3 – Pára execução do MML corrente no editor;
  • ESC – Aciona menu de opções do Editor (Manipulação de blocos de texto, opções de disco, configuração de canais);

.

Ao entrar nas opções de disco do menu principal (ESC -> D), temos as seguintes opções disponíveis:

  • ESC) QUIT – Volta ao Editor do MusicA;
  • 1) load MUSIC – Lê um arquivo MSD, que é o código fonte do MML, aceito pelo MusicA;
  • 2) load VOICE – Lê um arquivo de instrumentos do MusicA;
  • 3) save MUSIC – Salva arquivo (MSD) editado no momento;
  • 4) save VOICE – Salva arquivo de voz carregado no momento;
  • 5) save BGM – Compila o arquivo MSD e salva para o formato BGM (BackGround Music);

.

Após a edição de sua partitura MML, é claro que você desejará gravar o resultado de seu trabalho, então o menu de disco será amplamente utilizado, inclusive para compilar o MML do editor para um arquivo BGM, que é o arquivo utilizado pelo BGM Replayer, o que é feito pela opção 5 do menu de discos.

Apesar do editor aparentar ser simples, se trata de uma excelente ferramenta para criação de melodias para o MSX, porém nada melhor do que compor com instrumentos musicais reais aliado a possibilidade de edição profissional através softwares existentes na plataforma PC, então acredito que a utilização do editor do MusicA, será util apenas para que o arquivo MSD, seja convertido para BGM para que possamos utilizá-lo no MSX-BASIC, caso você não queira utilizar nada em BASIC, poderá utilizar o editor do MusicA apenas como um Player de áudio 🙂 .

Mas se você quer mesmo é desenvolver alguma musica para utilizar fora do editor do MusicA, então você precisa conhecer as duas opções de BGM Replayers que estão presentes no pacote do MusicA.

KINROU5 BGM Replayer.

Bom, estamos avançando e conhecendo cada vez mais algumas ferramentas úteis no MSX (e fora dele) que nos  possibilita ter musica de qualidade nessa plataforma de computadores.

Já sabemos o que é MML, como conveter MIDI para um formato MML proprietário do software 3MLEditor, também sabemos sobre como utilizar MML no MSX através do comando PLAY do MSX-BASIC e também conhecemos o editor de MML, chamado MusicA, que é similar ao 3MLEditor, mas que trabalha com um formato próprietário, que é o MSD.

Sabemos também que o editor do MusicA pode compilar o formato próprio (MSD) e convertê-lo para o formato BGM, que é utilizado em muitos jogos de MSX.

Mas fica a pergunta no ar. Como utilizar esse “bendito” BGM no MSX-BASIC, principalmente em meus jogos e programas ?

Existem dois players presentes no pacote compactado do MusicA, que pode ser obtido nesse site aqui, cujo funcionamento vou explicar a seguir.

O primeiro player está na imagem de disco 720K chamada datafunk.dsk e ao inserir essa imagem no seu emulador ou gravá-la em disquete de 3/12” para utilização em um MSX real, você terá acesso aos arquivos binários do KINROU5 , bem como alguns arquivos em BASIC que servem como exemplo de utilização das músicas BGM presentes  também no disco.

Segue abaixo as informações sobre cada um desses módulos, bem como sobre as funcionalidades programáveis do KINROU5, via MSX-BASIC.

 

FILES “*.*”

  • REPLAY.BIN, GBAS07.SYS, GBAS07.LDR, KINROU05.DRV –  Esses arquivos juntos compõe o Player que poderá ser utilizado pelos seus programas em MSX-BASIC;
  • *.MSD – São arquivos MML aceitos pelo MusicA Editor e não tem funcionalidade fora desse programa, ou seja, é apenas um arquivo texto comum com conteúdo MML;
  • *.BGM – São arquivos de musica aceitos pelo player;
  • AUTOEXEC.BAS, NTSCFUNK.BAS – Código MSX-BASIC com exemplos de utilização dos comandos do player;
  • DATAFUNK.FLP – Sem uso conhecido;

Segue abaixo um programa MSX-BASIC que coloca o player em ação:

MSX-BASIC source code

10 COLOR 15,1
20 CLEAR:DEFINT A-Z
30 BLOAD“gbas07.ldr”,R
40 CMD LOAD (“datafunk.bgm”)
50 CMD PLAY
60 CLS:RESTORE
70 PRINT “DataFunk  ”
80 PRINT
90 PRINT
100 PRINT
110 PRINT “FMPAC + PSG”
120 PRINT
130 PRINT
140 PRINT”  press q to stop”
150 IF INKEY$=“q” THEN 170
160 GOTO 150
170 CMD STOP
180 CMD
190 CLS

Preste atenção na linha 30, onde é carregado o player através do comando BLOAD “gbas07.ldr”,R. Não se esqueça que os demais binários do player, conforme descrito anteriormente, são necessários para o funcionamento do mesmo, pois o GBAS07.LDR, é quem carrega esses arquivos.

O restante do “truque” continua na linha 40, onde o player aproveitou a palavra reservada, CMD do MSX-BASIC, adicionou a rotina do player ali para que pudessemos, através do MSX-BASIC, comandar suas ações.

Abaixo eu deixo o texto retirado do MSX Technical Handbook e que descreve como implementar funções adicionais ao MSX-BASIC utilizando essa palavra reservada.

TIP (In English please)

4.3 Making New Commands

In MSX the reserved words “CMD” and “IPL” are currently unused and by changing the pointers to these words (FE0DH and FE03H) to jump to your own assembly language routine, new commands can be built.

Os parâmetros aceitos pelo player via CMD são os seguintes:

  • LOAD( “NOME_ARQ.BGM”) – Carrega um arquivo BGM para execução;
  • PLAY – Inicia a execução da música BGM;
  • STOP – Pára a execução da música BGM;

.

É bem simples assim e com um pouco de traquejo, podemos até fazer um programa que crie excelentes interfaces com o usuário.

REPLAY.BIN

O outro player é o REPLAY.BIN que está presente no disco principal do MusicA (musica.dsk) possibilita, assim como o KINROU5, a integração com o MSX-BASIC. Segue abaixo um código MSX-BASIC, retirado do próprio pacote do MusicA (LOADMUS.BAS), que poderá ser utilizado como exemplo de utilização desse player.

MSX-BASIC source code

10 CLEAR 200,&HA5B6 : DEFINT A-Z : DIM A(1)
20 BLOAD“REPLAY.BIN”:BLOAD“KNIGHT.BGM”
30
40 DEFUSR0=&HCE00:‘ Init muziekdata
50 DEFUSR1=&HCE03:‘ Start muziek (a=usr(xx):xx=adres muziek)
60 DEFUSR2=&HCE06:‘ Stop muziek
70 DEFUSR3=&HCE09:‘ Fade controller (a=usr(xx):xx=volume)
80 DEFUSR4=&HCE0C:‘ PSG kanalen aan/uit?? (a=usr(xx):xx=kanalen keuze)
90
100 RESTORE190:FOR A=&HAFF7 TO &HAFFF:READ F : POKE A,F : NEXTA
110 A=USR0(0):A=USR3(4)
120 A(0)=0
130 A(1)=&HA5B7: ‘ Beginadres muziekstuk
140 A=USR1(VARPTR(A(0)))
150 FOR W=0 TO 8:A=USR3(PEEK(&HAFF7+W)):FOR P = 1 TO 60 : NEXT P : NEXT W : ‘FADE IN
160 FOR W=8 TO 0 STEP -1 : A=USR3(PEEK(&HAFF7+W)):FOR P=1 TO 60 : NEXT P : NEXT W : ‘FADE OUT
170 PRINT“A=USR2(0) ‘Stopt de muziek” : END
180 ‘ Data fade in
190 DATA 4,5,6,2,13,3,12,14,15

Ao contrário da facilidade do código MSX-BASIC do KINROU5, o REPLAY.BIN é um pouco mais complicado de se programar, porém existe a vantagem dos efeitos FADE ON/OFF.

Na linha 20 BLOAD“REPLAY.BIN”:BLOAD“KNIGHT.BGM”, temos a carga do binário do REPLAY.BIN juntamente com o arquivo de música, KINGHT.BGM.

A partir daí, as linhas 40 até 80, definem as rotinas desse Replayer, com as possibilidades de PLAY (linha 50), STOP (linha 60), controladores de Fade On/Off ( linha 70).

Esse replayer é bastante poderoso porém existe um ponto de instabilidade que causa o travamento da máquina e ocorre quando você tenta carregar outra musica no replayer sem parar a música que está em execução, ou seja, certifique-se de chamar a rotina que pára a música, no caso do exemplo acima com a chamada a USR2(0), antes de carregar outra música.

Conclusão

Estamos no fim da terceira parte dessa série de artigos sobre música no MSX e já temos compreensão de grande parte do processo de transporte de uma música MIDI para o MSX, porém faltou uma peça aí no meio do caminho que é um procedimento para transformar arquivos em formato MML, gerados pelo 3MLEditor, para os arquivos MSD suportados pelo MusicA para enfim convertê-los em BGM e acessá-los pelo MSX-BASIC ou qualquer outro software que suporte esse formato.

O último artigo da série irá explicar sobre o  compilador de linha de comando que desenvolvi, denominado mml2msd, e que é capaz de converter arquivos MML para MSD, aplicando diversos filtros de conversão em cima do MML original, afim de que o MML final (MSD), seja compreensível pelo MusicA, uma vez que o MML aceito por esse software não é 100% compatível com o gerado pelo 3MLEditor.

Bom, vou ficando por aqui e brevemente estarei liberando o último artigo da série, sobre música no MSX.

Aguardem as novidades e, repetindo as sábias palavras do jovem mestre intergaláctico, o ET Bilu, principalmente que busquem conhecimento 🙂 .

[]’s

PopolonY2k

Referências na internet

MusicA Tools
http://www.nerlaska.com/msx/musica.html

MusicA – Download
http://woolyss.com/chipmusic/chipmusic-mml/MuSICA.zip

MML Resources
http://woolyss.com/chipmusic-mml.php

Nerlaska Studio
http://www.nerlaska.com

Konami SCC
http://en.wikipedia.org/wiki/Konami_SCC

MoonSound Wikipedia
http://en.wikipedia.org/wiki/Moonsound

MusicA – Tocando MIDI no MSX – Parte II
http://www.popolony2k.com.br/?p=742

Takamichi’s Konami and other MSX Music Resources
http://www.msxnet.org/gtinter/konamuus.htm