Querendo usar ferramentas GNU para criar softwares (jogos?) em liguagem assembly e/ou C para Mega Drive, fui em busca do binutils para ter um assembler para Motorola 68000 (o processador do console).
Aqui está como eu fiz para gerar meu gas – o GNU assembler – (meus passos foram baseados na fonte Marc’s Realm):
Primeiro, obtive a versão mais nova do binutils, que no caso foi a 2.18. Então, descompactei o arquivo com “tar jxf binutils-2.18.tar.bz2″. Ele cria uma pasta chamada binutils-2.18.
Criei um diretório chamado binutils-build, onde ficará os arquivos de compilação do binutils, deixando a árvore do código fonte intacta.
De dentro desse diretório, via terminal, chamei o script configure do binutils:
$ ../binutils-2.18/configure --prefix=/opt/m68k --target=m68k-megadrive-elf --disable-libada --disable-libssp
Lembrando:
- –prefix diz a pasta onde será instalado o programa pelo comando make install. É opcional, mas prefiro não deixar nas pastas convencionais.
- –target indica para qual arquitetura e/ou processador as ferramentas gerarão o código.
- O alvo (m68k-megadrive-elf) é dividido em 3 partes: X-Y-Z, sendo X o processador (família m68k), Y é o nome da plataforma (à escolha: linux, jumento, unknown, etc.), e Z é o formato do arquivo de saída (no caso, elf).
- –disable-libada desabilita a compilação da biblioteca ADA, completamente desnecessária para o meu caso.
- –disable-libssp inibe a compilação da biblioteca SSP, que não sei para que serve, então não preciso
Após realizada a geração dos makefiles, hora de gerar os binários!
$ make
Feito isso com sucesso, basta instalar as ferramentas como super-usuário (root):
$ su -c "make install"
Lembre-se de colocar o diretório do prefix (caso tenha usado essa opção) na variável de ambiente $PATH para atalhar as coisas!
export PATH=$PATH:/opt/m68k
Inclua isso, por exemplo, no arquivo .bashrc.
Agora, terás o assembler (e outras ferramentas úteis) para m68k!
- m68k-megadrive-elf-as: o assembler
- m68k-megadrive-elf-objcopy: converte de elf/coff para binário
- m68k-megadrive-elf-ld: o linker
Para gerar um arquivo binário para o Megadrive, deve fazer:
$ m68k-megadrive-elf-as -m68000 codigo.s -o codigo.elf $ m68k-megadrive-elf-objcopy -O binary codigo.elf codigo.bin
Et voilà! Seu jogo em formato direitinho pro Megadrive e emuladores.
Inconveniente do processo: O assembler gerado é para a família m68k, isso quer dizer que variantes como 68010 e 68020 também podem ser montados. Como o Mega só usa o 68000, os programas são desnecessariamente maiores. E o pior: o 68020 é dado como padrão. Isso implica em ficar definindo toda vez que for montar que o processador é o 68000 e não o 68020. Só descobri uma forma de definir o 68000 como único processador de montagem: ao realizar o configure do binutils, definir o alvo (target) como m68000-megadrive-elf. Entretanto, isso elimina a opção -m68000 (desnecessária, agora) do assembler, o que estraga as coisas para a compilação do gcc, que mostrarei em um post futuro…
Se alguém souber como definir pro assembler o processador 68000 como padrão, agradeço.
Filed under: gcc, megadrive | 15 Comments
Tags: 68000, assembler, assembly, binutils, gas, genesis, megadrive, sega
Gostaria de dizer que fiquei muito entusiasmado com isso, imagine poder programar pro Mega num PC! Isso é muito massa!
Qual a linguagem que o programa tem de ser escrito para poder compilar com essas feramentas? C? Assembly? Uma outra linguagem mais específica?
Outra coisa, desculpe minha igonorância, mas que é “gas”?
Em qual distribuição tu executaste a compilação destas ferramentas? Ouvi dizer que qualquer procedimento relativo a compilação é melhor no slackware, mas gostaria de saber se posso realizá-lo no Kurumin, isto é, sem muitas dificuldades.
Estefferson:
O GNU criou compilador C e montador (assembler) para o processador Motorolla 68000 (que é o mesmo do Megadrive).
Dessa forma, com o GCC (compilador de C do GNU), podemos programar para o megadrive. Como também disponibilizam o GAS (GNU ASsembler) para esse chip, podemos também programar em assembly de m68k.
Minha distribuição é o Debian, mas pode usar qualquer uma: basta instalar o GCC da sua plataforma (sim, você usa o GCC para gerar o GCC hehe). O Kurumim já vem com ele pré-instalado.
Com isso, basta seguir os passos descritos neste post para gerar o assembler (GAS) e depois procure o outro post referente ao GCC (deve ser feito nesta ordem: não é possível gerar um compilador C para a plataforma sem um assembler para ela – no método GCC).
Qualquer dúvida, só falar!
Olá,
Cara, deu um erro desse tipo aqui:
make: ** [all] Erro 2
Depois dei um make install mas na última linha tinha:
make: ** [install] Erro 2
Ainda com esperança de encontrar os binários fui em /opt/m68k e lá só tinha um diretório /usr/share com váriuos arquivos que aparentam serem relativos a idiomas, do tipo .mo
O que deu errado?
Estefferson,
o script configure funcionou?
A única saída do make foi apenas essa?
Qual a versão utilizada do binutils?
Sobre o configure, o que eu posso dizer é que foram muitas, muitas linhas de saída, assim, como o make e o make install.
E eu utilizei a versão referida na tua postagem, usando o mesmo link de download.
Como disse o configure, o make e o make install geraram muitas saídas, mas as linhas que aparentam dar erro, são essas duas que pude notar.
Estefferson,
mudei o tema para ver se fica melhor de ler a linha completa do comando configure. Repetirei aqui:
$ ../binutils-2.18/configure –prefix=/opt/m68k –target=m68k-megadrive-elf –disable-libada –disable-libssp
Não adianta executar make install, sem que o make tenha sido corretamente executado.
E as linhas de saída mencionadas não ajudam a descobrir qual foi exatamente o erro
Tente mostrar umas linhas anteriores. Mas, primeiro, confira se executou o comando configure com todos os argumentos.
Qual a sua distribuição linux?
Eu uso o Kurumin 7.
Vou executar de novo de acordo com os passos indicados e volto em breve com a resposta.
Olá,
O saída dos comandos tar, configure e make estão aqui:
http://geocities.yahoo.com.br/darkchet2003/relatorio-m68k.htm
Estefferson,
um erro ocorre aqui:
chmod: mudando permissões de `SRC-POTFILES-t’: Operação não permitida
make[3]: ** [SRC-POTFILES] Erro 1
e isso é captado desde o configure:
chmod: changing permissions of `conf16245.sh’: Operation not permitted
e ao, fim do configure:
chmod: changing permissions of `./config.status’: Operation not permitted
chmod: changing permissions of `conf17761.sh’: Operation not permitted
config.status: creating Makefile
Por que você não tem permissões de alterar as… permissões?
Quando o configure conclui corretamente, vai exibir uma lista de Makefile criados em cada pasta…
Para ter certeza de que o configure concluiu corretamente, faça o seguinte:
$ COMANDO_CONFIGURE_LISTADO_NO_BLOG && make
Os 2 e-comerciais && fazem com que o comando seguinte só seja executado caso o anterior tenha terminado com sucesso.
Consegui cara! Bastou dar os comandos como root! Aí ele compilou redondinho, gerando os binários!
Agora vou gerar o gcc para m68k!
Valeu demais!
Exceto para o “make install”, não seria necessário estar como root…
Você estraiu para alguma pasta inadequada (que você não tem livre acesso)?
Deve ter sido porque eu estava usando a pen drive pra compilar. Tive que usar porque estou fazendo isso num computador da biblioteca do meu curso, é um PII antigo com pouco espaço no HD, menos de 50 mb, para falar a verdade. Por causa disso tive de usar a pen drive, que tinha espaço de sobra.
Sim, era por causa de ser um pendrive mesmo. Eles são convencionalmente formatados no sistema FAT, que não oferece suporte a permissões…