quarta-feira, 30 de maio de 2012

Como programar para o MSX usando a linguagem C

Olá, programadores e amantes do MSX!

Este artigo é para você que gosta de desenvolver aplicações, jogos e demos para MSX, a famosa linha de computadores lançada pela Microsoft e ASCII em meados dos anos 80, muito populares no Brasil e na Europa.

Muito provavelmente você deve ter iniciado na programação em BASIC no MSX. Pois bem, você certamente chegou num ponto onde percebeu que BASIC era lento demais e que a linguagem era bem limitada. Então deve ter estudado e aprendido (ou pelo menos deve ter tentado aprender) a linguagem Assembly do Zilog Z80, que é o processador, isto é, o cérebro, do MSX. Como dificilmente alguém tinha acesso na época a um assembler nativo, provavelmente você mexeu direto com a linguagem de máquina do Z80. E percebeu então o sacrifício que é desenvolver uma aplicação ou jogo completo em Assembly, ou pior ainda, em linguagem de máquina. Eis que você deve ter imaginado, será que agora, em pleno 2012, não existe alguma ferramenta que facilite o desenvolvimento de software para o MSX sem as limitações de linguagens como BASIC?

E a resposta é sim, existe. Recentemente encontrei por aí um compilador cruzado da linguagem C para MSX chamado z88dk. Pra quem não sabe, um compilador cruzado é um compilador que você roda num tipo de hardware (no seu PC, por exemplo), compila código-fonte e gera um executável para outro tipo de hardware (como o MSX, por exemplo). O z88dk faz justamente isso. Ele pega o seu código-fonte escrito em linguagem C padrão e compila (transforma) esse código em um arquivo binário executável que você pode rodar normalmente num MSX. Não é uma maravilha? Poder programar qualquer tipo de software para o MSX usando uma das linguagens de programação mais poderosas e populares de todos os tempos, que é a linguagem C.




Você pode baixar o z88dk no site oficial do projeto. Então, instale o compilador e siga as instruções do tutorial a seguir para escrever, compilar, e rodar o seu primeiro programa em C para o MSX.


Baixe o z88dk através do site oficial ou direto do Sourceforge:



Durante a instalação, o instalador configura algumas variáveis de ambiente do Windows. Você precisa configurar o seu PATH adicionando o caminho do compilador, para que possa compilar os programas a partir da linha de comando. Eu suponho que você, sendo um programador, já saiba o que é o tal do PATH, então não vou explicar aqui. Quando já tiver configurado, abra a linha de comando, digite zcc e pressione Enter para testar. Se aparecer a mensagem com a versão do zcc (que é o compilador) então está tudo pronto, confira a seguir o tutorial para compilar o seu primeiro programa em C para o MSX. Caso contrário, verifique a sua configuração pois deve ter faltado alguma coisa.



Tutorial

Hello World em C para o MSX


Abra o Bloco de Notas, Notepad++, ou qualquer outro editor de texto sem formatação da sua preferência e digite o código em C a seguir:

#include <msx.h>
#include <stdio.h>

main()
{
     msx_set_mode( mode_1 );
     msx_color( 15, 4, 7 );
     printf( "Hello World!\n" );
}

Agora salve este arquivo como main.c em uma pasta apropriada. Abra a linha de comando (se ainda não estiver com ela aberta) e vá até a pasta onde salvou o arquivo. Você precisa então chamar o compilador com algumas opções. Digite o seguinte e pressione Enter:

zcc +msx -create-app main.c

Ao executar o compilador, várias mensagens aparecerão. Preste atenção se não aparece nenhum erro no meio dessas mensagens. Se aparecer, é porque digitou alguma coisa errada no código-fonte ou na linha de comando. Se não aparecer mensagens de erro, então é porque compilou certinho. Dê uma olhada na pasta onde você havia salvo o main.c e verá que o compilador gerou outros arquivos lá, inclusive o binário executável do MSX. O programa do MSX é o arquivo chamado a.msx (isso se você não renomeou ele).

Para rodar esse arquivo no emulador BlueMSX, faça o seguinte: Abra o BlueMSX, no menu clique em Arquivo > Disco drive A > Inserir diretório. Selecione a pasta onde está o a.msx e inicie a emulação. Quando entrar no interpretador BASIC, digite o comando para carregar esse arquivo e executar. Se você não lembra, é assim:

BLOAD"A.MSX",R

Ao executar, você deve ver a seguinte tela:




E aí está! Este é o Hello World que você escreveu em C e compilou para código de máquina do Z80 usando o z88dk. Não é sensacional? É, eu também acho.

Fim do tutorial.



Uma dica: se você não quer ter que ficar montando o diretório do PC como disquete no BlueMSX pra poder rodar os seus programas, por exemplo, quando você for distribuir o programa independente na internet, você pode injetar o executável (o a.msx, ou qualquer outro nome que você tenha colocado) direto em uma imagem de disquete (o típico arquivo com extensão .DSK) que o BlueMSX reconhece. Pra isso existe uma pequena e utilíssima ferramenta chamada Disk-Manager, onde você pode escolher arquivos no PC e injetá-los em uma imagem de disquete nova ou existente. Assim você pode distribuir o arquivo DSK contendo os seus programas. Clique aqui para ir ao site oficial desta ferramenta: http://www.lexlechz.at/en/software/DiskMgr.html

Ah, e só pra avisar, o z88dk inclui uma biblioteca de funções em C, para desempenhar tarefas comuns no MSX (no header &ltmsx.h&gt) como mudar cores da tela, desenhar sprites, tocar sons, etc. Bom, até aí maravilha, o que mais poderíamos querer? O problema é que o compilador não vem com a documentação das bibliotecas e os cabeçalhos (headers) não estão documentados o suficiente. Então pra você saber quais são as funções da biblioteca em C do MSX, como funcionam e o que fazem, você precisa olhar os headers e tentar decifrar, ou experimentar mesmo. Se quer aproveitar o máximo das bibliotecas incluídas, é bom se familiarizar bastante com elas.

Bom, espero que tenham gostado da novidade e de hoje em diante, se quizerem desenvolver software para o MSX, sem se limitar com o BASIC e nem se matar encima do Assembly, vá de z88dk e programe em C!

Dúvidas? Deixe seu comentário. Até mais!