Acelerando o processo de compilação do MSX-C

From Programação no MSX
Revision as of 14:05, 5 July 2018 by Wilsonpilon (talk | contribs) (→‎Automatizando)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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.