quarta-feira, dezembro 07, 2022

MSX-C

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
1

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!");
}
2

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) */
3

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);
}
4

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
5

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
6

desta forma, para programas que usam a lib padrão, basta digitar: 

Listagem

A:>C PROGRAMA
7

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
8

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
9

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
A

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
B

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

Outros Sites


Nenhum comentário:

Postar um comentário