Programando em C no MSX

SDCC_msx_msxdos_hello

É possível programar em C no MSX? Claro que sim, no MSX Archive é até possível baixar tanto o Hitech-C quanto o MSX-C. Este último foi desenvolvido pela japonesa ASCII e “tecnicamente” é o C oficial do MSX — se você ficou interessado o Javier Lavandeira tem uma uma série intitulada relearning MSX em seu blog onde ele resolveu um fazer guia passo a passo sobre desenvolvimento para MSX partindo bem do princípio e tratando deste compilador.

Porém, se preferir algo mais “moderno” há o Small Device C Compiler, ou simplesmente SDCC, que é um compilador padrão ANSI C que suporta uma série de microcontroladores e microprocessadores de “pequeno porte” e entre eles o Z80. E seguindo uma sugestão feita pelo Rogério Machado via grupo GDMSX do Google+ resolvi montar um passo a passo sobre como configurar este compilador para ser usado no MSX.

Antes de começar

Se preferir, prepare um ambiente separado, seja utilizando uma máquina virtual,contêiner, chroot etc. Vá lá que eu espero 🙂

Instalando o SDCC

Claro, a primeira coisa é instalar o SDCC e também algumas ferramentas que serão utilizadas para a geração dos programas, nas distribuições que usam apt-get faça:

$ sudo apt-get --yes install make sdcc wget

As dependências serão resolvidas pelo apt-get portanto é só aguardar o download e a instalação terminarem.

Adicionando suporte ao MSX

O SDCC tem um suporte para geração de código para o processadores Z80 mas para que ele produza executáveis específicos para o hardware do MSX é necessário “ensiná-lo” corretamente sobre como fazê-lo. Isto significa basicamente que você precisará baixar e compilar os arquivos preparados pelo Avelino Herreras Morales na pagina dele. Mas se preferir eu preparei este script para fazer a tarefa:

Crie um diretório, mova o script para lá e o execute. Ele se encarregará de  baixar todos os arquivos necessários e compilá-los:

$ mkdir -p ~/Projetos/msx
$ cd ~/Projetos$ 
$ ./sdcc_enable_msx_support ./msx
Downloading crt0msx_msxdos.s... OK
Downloading crt0msx_msxdos_advanced.s... OK
Downloading types.h... OK
...
Assembling keyboard.s...
Assembling putchar.s...
Assembling vdp.s...
Compiling conio.c....
Compiling heap.c....
Compiling mem.c....

Não se preocupe com as mensagens de aviso — os ?ASlink-Warning… — é normal.

No final da execução ele terá criado um diretório específico, o “./msx” contendo os arquivos baixados, compilados e também os cabeçalhos para serem usados no compilador C.

SDCC_msx_files

Ah sim, male a pena uma leitura na página do Avelino para entender as diferenças entre o crt0msx_msxdos e o crt0msx_msxdos_advanced.

Convertendo o IHX para binário

Os programas compilados pelo SDCC são gerados em Intel HEX — 😀 Yey! 😀 — e precisam ser convertidos em binário para rodar no MSX. Você pode baixar e utilizar o hex2bin mas acabei montando um conversor bem xexelento em Python para cuidar desta tarefa.

Daí será necessário também instalar:

$ sudo apt-get install python python-pip
$ pip install bincopy

Para executar estas mal traçadas linhas:

Como ele foi feito para ser integrado ao Makefile, não sofistiquei muito mas contribuições são sempre bem vindas. 🙂

Montando um Makefile

Mas por que? Porque, como já disse em outra oportunidade, é muito chato ficar tendo de lembar a toda hora a sintaxe e os parâmetros do compilador:

Ele está está pronto para compilar programas em C e retornar um “.com”, por padrão ele utiliza o crt0msx_msxdos_advanced mas você pode usar “make normal” ou trocar para que este seja o padrão.

Fazendo um teste

E claro é preciso testar se está tudo certo com o compilador:

#include "conio.h"
#include "dos.h"

void main(void) {
    puts("Hello, world :-)\r\n");
    exit(0);
}

Este é o mesmo programa de testes da página do Avelino e para compilar use simplesmente make:

SDCC_make

Daí é transferir o arquivo para um disquete ou imagem de disco com MSX-DOS e rodar, mais ou menos isto aqui para as imagens de disco:

$ sudo mount msxdos.dsk /mnt -t msdos -o rw,loop
$ sudo cp hello.com /mnt/hello.com && sync
$ sudo umount /mnt

Para o caso do disquetes remova o “,loop” e substitua o “msxdos.dsk” pelo dispositivo que corresponde a unidade de disquetes.

Aliás estes procedimentos podem ser acrescentados ao Makefile fazendo-o gerar uma imagem de disco, acrescentando o(s) arquivo(s) e executando o emulador, mas isto fica como exercício. 🙂

E para terminar

Na página do Avelino há outros exemplos de código e bibliotecas, além dos arquivos para suporte a geração de imagens de cartucho (ROM) diretamente pelo SDCC. Outra fonte interessante é na página do Nestor Soriano (o Konamiman) com uma biblioteca alternativa para as funções básicas de console, suporte para as pilhas TCP/IP que ele desenvolveu entre outras coisas. E como o SDCC usa é compatível com o padrão ANSI-C, há uma grande quantidade de códigos em C que pode ser compilado com pouca/nenhuma modificação para o MSX!

Anúncios

2 comentários sobre “Programando em C no MSX

  1. parabéns!!! muito bom o artigo, eu sempre quis saber o passo-a-passo para poder desenvolver no linux e enviar parar o MSX! agora, graças a você, posso começar!
    De fato, o Javier Lavandeira é muito ousado em mostrar como se programa no próprio ambiente do MSX… aliás, sabemos que até a Konami usava computadores mais avançados para desenvolver para MSX (eram os HP 64000), mas não sei que ambiente/bibliotecas eram usados…
    Vou ficar ligado para os próximos artigos!! obrigado!

    Curtir

  2. Pingback: Configurando o SDCC para compilar no Linux programas para rodar no MSX - Peguei do

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s