O MSX-C é o compilador C oficial da ASCII Corporation para a linha de computadores MSX, adaptado do original para CP/M. Ele compila código em C para mnemônicos Z80 usando o Macro Assembler (M80/L80) para gerar código executável para MSX-DOS, além da manutenção de bibliotecas.
Fabricante
- Microsoft originalmente.
- ASCII Corporation adaptação para MSX-DOS.
Versões
- 1.00 de Outubro de 1983, para CP/M usando opcodes do 8080.
- 1.10 de Junho de 1987, para MSX-DOS 1 usando opcodes do Z80.
- 1.20 de Agosto de 1988, para MSX-DOS 2 e bibliotecas repaginadas.
Resumo para instalação do MSX-C 1.2
Você deve preparar um ambiente com no mínimo o MSX-DOS 2 e 256Kb de RAM (mapper), mas para ter um ambiente mais confortável, recomenda-se usar o NEXTOR, 1Mb de Mapper, HD/SD e Turbo de 7 ou 10 Mhz, visto que a compilação direto no MSX é relativamente demorada para arquivos grandes.
Uma vez preparado o ambiente, iniciamos o processo de instalação e configuração do MSX-C.
Começamos instalando o MSX-DOS 2 Tools:
- Copie todos os arquivos do diretório \KIDS do floppy para o diretório \BIN do HD/SD.
- O mesmo deve ser feito com o diretório \TOOLS do floppy, que também vai para o \BIN do HD/SD.
- E por fim os arquivos do diretório \UTILITY do floppy devem ser copiados para o \BIN do HD/SD.
Passamos agora para a instalção do MSX-C 1.2 propriamente dita:
- Copie todos os arquivos *.COM da raiz do floppy para o diretório \BIN do HD/SD.
- Copie todos os arquivos do diretório \INCLUDE do floppy para o diretório \INCLUDE do HD/SD.
- Todos os arquivos *.REL da raiz do floppy vão para o diretório \LIB do HD/SD.
- Os arquivos *.TCO da raiz do floppy devem ser copiados para o diretório \BIN do HD/SD.
Opcionalmente, crie um diretório \C no seu HD e copie os seguintes arquivos:
- Tudo que estiver em \BATCH no floppy vai para \C\BATH no HD/SD.
- Os arquivos \SAMPLE do floppy vão para \C\SAMPLE no HD/SD.
- E os arquivos \SRC do floppy são copiados para \C\SRC no HD/SD.
Em seguida modifique o AUTOEXEC.BAT incluindo as seguintes linhas:
Listagem
mode 80
set path=a:\;a:\bin
set include=a:\include
set temp=a:\temp
set shell=a:\command2.com
Certifique-se de que o diretório \TEMP esteja criado no seu HD/SD. O comando SET SHELL será importante numa próxima fase.
Teste
Para testarmos o básico do ambiente, criamos o famoso HELLO.C. Para isso vamos usar o AKID (copiado do MSX-DOS 2 Tools) como editor de textos e vamos assumir que seu HD/SD de trabalho esteja designado na unidade "A":
a:>AKID HELLO.C
e insira o programa:
Listagem
#include <stdio.h>
char main() {
puts("Ola Mundo do MSX!");
}
Para sair do AKID, pressione [F1] e em seguida [E].
Em seguida passe pelo processo de compilação, que será melhor descrito nos próximos tópicos:
Listagem
A:>CF HELLO /* Vai gerar um arquivo temporário pré-compilado (.TCO) */ A:>CG HELLO /* Vai gerar um arquivo Assembly (.MAC) */ A:>M80 =HELLO/Z /* Vai gerar um arquivo Relocável (.REL) */ A:>L80 A:\LIB\CK,HELLO,A:\LIB\CLIB/S,A:\LIB\CRUN/S,A:\LIB\CEND,HELLO/N/Y/E:xmain /* Vai linkar o HELLO.REL com as bibliotecas do MSX-C e gerar um executável (.COM) */
O último passao vai linkar o HELLO.REL com as bibliotecas do MSX-C e gerar um executável (.COM).
O parâmetro "xmain" no final do comando de linkagem deve ser minúsculo (XMAIN != xmain != Xmain em C), ao término basta executar o arquivo gerado (HELLO.COM).
MSX Library
Com a biblioteca padrão testada, vamos instalar agora a biblioteca específica do MSX:
- Do floppy da MSX-C Lib copiamos os arquivos *.H da raiz para o diretório \INCLUDE do HD/SD.
- Os arquivos *.REL da raiz do floppy vão para o diretório \LIB do HD/SD.
- Jogamos os arquivos *.TCO da raiz do floppy para o diretório \LIB do HD/SD.
- Também copiamos estes mesmos arquivos *.TCO para o diretório \BIN do HD/SD.
Testaremos agora a biblioteca do MSX com o seguinte código (seta.c):
Listagem
#include <stdio.h>
#include <glib.h>
char main() {
screen((TINY)2);
pset(22,31,(TINY)6, (TINY)0);
pset(21,32,(TINY)6, (TINY)0);
pset(23,32,(TINY)6, (TINY)0);
pset(20,33,(TINY)6, (TINY)0);
pset(22,33,(TINY)6, (TINY)0);
pset(24,33,(TINY)6, (TINY)0);
pset(22,34,(TINY)6, (TINY)0);
pset(22,35,(TINY)6, (TINY)0);
while(!kbhit()) {}
screen((TINY)0);
}
Apenas o processo de linkagem é diferente, pois inclui a MLIB
Listagem
a:>cf seta
a:>cg seta
a:>m80 =seta/z
a:>l80 a:\lib\ck,seta,a:\lib\clib/s,a:\lib\mlib/s,a:\lib\crun/s,a:\lib\cend,seta/n/y/e:xmain
Automatizando o processo
Como pode ser visto, o processo geral de compilação do MSX-C pode ser um pouco enfadonho, pois primeiro devemos passar pelo PARSER que vai gerar um arquivo pré-compilado (TCO), em seguida devemos usar o CODE GENERATOR para que, a partir do TCO nos gere um arquivo fonte em ASSEMBLY (MAC). Este MAC deve ser compilado com o MACRO ASSEMBLER para gerar um arquivo objeto (REL), por fim devemos usar o LINKER para ligar nosso programa as bibliotecas C e gerar o arquivo executável (COM).
A primeira coisa que podemos fazer é criar um arquivo .BAT genérico que execute estes comandos em sequência para não termos que dispararmos individualmente. Um exemplo simples (C.BAT) já existe no pacote MSX-C
Listagem
cf %2 %1
fpc %1 lib
cg -k %3 %1
m80 =%1/z
del %1.mac
l80 a:\lib\ck,%1,a:\lib\clib/s,a:\lib\crun/s,a:\lib\cend,%1/n/y/e:xmain
desta forma, para programas que usam a lib padrão, basta digitar:
Listagem
A:>C PROGRAMA
para gerar PROGRAMA.COM a partir de PROGRAMA.C. Raramente um programa para MSX não vai encostar na MLIB (biblioteca específica do MSX), então podemos alterar um pouco o C.BAT da seguinte forma
Listagem
cf -e%1 -m %1
fpc %1 lib mlib
cg -k -u %1
m80 =%1/z
l80 a:\lib\ck,%1,a:\lib\mlib/s,a:\lib\clib/s,a:\lib\crun/s,a:\lib\cend,%1/n/y/e:xmain
Esta versão gera um arquivo adicional (DIA) contendo o diagnóstico do PARSER. Veja que também não excluímos o arquivo Assembly (MAC) pois é uma boa fonte de estudos. Querendo algo mais limpo:
Listagem
cf %1
fpc %1 lib mlib
cg -k -u %1
m80 =%1/z
del %1.mac
l80 a:\lib\ck,%1,a:\lib\mlib/s,a:\lib\clib/s,a:\lib\crun/s,a:\lib\cend,%1/n/y/e:xmain
del %1.rel
del %1.sym
Perceba a ordem, a MLIB vem antes da CLIB por um bom motivo, a MLIB redefine algumas funções da CLIB, por exemplo, o printf da MLIB permite impressão de números float (XDOUBLE) ou long (SLONG) enquanto o printf padrão não, colocando a CLIB antes da MLIB, um printf("%6.1f",valor); vai dar erro de parêmtro.
Acelerando o Processo
Obviamente o processo de compilação depende muito da velocidade do processador, do I/O de disco e da quantidade de memória disponível, então:
- Se o MSX tiver modo Turbo, deixe-o ligado.
- Dê preferência a usar HD/SD e não FDD.
- Use uma RAM Disk se tiver acima de 512Kb de Mapper
Ram Disk
O compilador, o macro assembler, as bibliotecas e os includes ocupam em torno de 320Kb, então se você tiver um MSX com 1Mb de mapper, crie uma RAM Disk de 512Kb e crie um BAT para copiar os arquivos para ela a cada BOOT, com isso trabalhamos apenas em RAM. Segue um exemplo (AUTOEXEC.BAT).
Listagem
ramdisk 512
mkdir h:\temp
set temp=h:\temp
copy a:\command2.com h:\
set shell=h:\command2.com
mkdir h:\bin
copy a:\bin\akid.com h:\bin
copy a:\bin\m80.com h:\bin
copy a:\bin\l80.com h:\bin
copy a:\bin\lib80.com h:\bin
copy a:\bin\cref80.com h:\bin
copy a:\bin\cf.com h:\bin
copy a:\bin\cg.com h:\bin
copy a:\bin\fpc.com h:\bin
copy a:\bin\mx.com h:\bin
copy a:\bin\cramdsk.bat h:\bin\c.bat
mkdir h:\include
copy a:\include\*.* h:\include
set include=h:\include
mkdir h:\c
copy a:\lib\*.* h:\c
set path=h:\;h:\bin;h:\c;a:\;a:\bin
h:
cd \c
Desta maneira podemos trabalhar inteiramente na RAM Disk, basta editar seus arquivos fonte no diretório h:\c, o arquivo "cramdsk.bat" referido no AUTOEXEC pode ser criado assim:
Listagem
cf %1
fpc %1 lib mlib
cg -k -u %1
m80 =%1/z
del %1.mac
l80 ck,%1,clib/s,mlib/s,crun/s,cend,%1/n/y/e:xmain
del %1.rel
del %1.sym
sem referenciar o diretório A:\LIB, usando assim as libs do diretório corrente H:\C. Obviamente, lembre-se de copiar suas alterações de volta para o HD/SD/FDD antes de testar o código (inclua no C.BAT) para evitar perda em caso de problemas.
Downloads
- MSX-C: Pacote básico para uso do MSX-C no MSX
Nenhum comentário:
Postar um comentário