Acelerando o processo de compilação do MSX-C
Introdução[edit]
Como pode ser visto no Resumo para instalação do MSX-C 1.2, 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).
Automatizando[edit]
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:
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:
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:
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. Se quizer algo mais limpo:
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[edit]
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[edit]
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), baseado no Resumo para instalação do MSX-C 1.2.
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:
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.