terça-feira, setembro 25, 2018

C para MSX

Existem algumas boas alternativas para programar em C para o MSX, sendo as mais conhecidas:

  • Hitech-C
  • Aztech-C
  • BDS-C
  • MSX-C
  • Solid-C

Embora todas tem seus méritos e deficiências, aqui vamos focar principalmente no MSX-C, por ser o C oficial da ASCII, que já conta com uma boa biblioteca nativa para MSX 1 e MSX 2, suportando inclusive o MSX-DOS 2.

Entretanto, nem tudo são flores, o MSX-C tem algumas limitações que podem dificultar um pouco a tarefa de programar, principalmente para iniciantes. Apenas para citar um exemplo, nativamente ele suporta apenas o tipo INT (numéricamente falando), nao tendo FLOAT, LONG ou SHORT. Isto pode ser contornado usando a bibilioteca MATH, que suporta os tipos XDOUBLE e SLONG. Na prática isso significa que você não pode ter algo como:


#include <stdio.h>

int main(argc, argv)
int argc;
char *argv[];
{
    float x,y,r;
    x = 2.45;
    y = 0.75;
    a = x + y;
    printf("Resultado: %3.2f", a);

    return 0;
}

que deve ser escrito como:

#include <stdio.h>
#include <math.h>

int main(argc, argv)
int argc;
char *argv[];
{
    XDOUBLE x,y,r;
    atoxd(&x,"2.45");
    atoxd(&y,"0.75");
    xdadd(&a,&x,&y);
    printf("Resultado: %3.2f", &a);

    return 0;
}

XDOUBLE é uma estrutura de 8 bytes e SLONG uma de 4 bytes. As rotinas do MATHPACK são relativamente eficientes, não sendo muito diferentes do que temos no MSX-BASIC, bastando apenas se acostumar com um pouco de malabarismo em contas de ponto flutuante ou inteiros longos.