venerdì 14 luglio 2023

TI-89 Mandelbrot

 Ho scoperto per puro caso che le calcolatrici Texas Instruments TI-89 (e parenti) hanno al proprio interno un processore della classe 68000 e che possono essere programmate, oltre che in TI-Basic, anche in C...proviamo un po'



Il compilatore C che ho usato si trova a questo link https://github.com/debrouxl/gcc4ti

esistono versioni meno aggiornate ma non sono cosi' complete

Per compilare si va in /trunk/tigcc-linux/scripts e si lancia ./Install

si impostano poi le variabili di ambiente

export TIGCC=/usr/local/share/gcc4ti/

export PATH=$PATH:$TIGCC/bin

il codice di questo post e' ripreso dal precedente post 

le differenze sono :

1) la funzione main in TIGCC si chiama _main (underscore main)

2) sono necessari gli include di stdio e kbd anche se di fatto non sono richiamati dal codice


#define USE_TI89 // produce all types of files
//#define USE_TI92PLUS
//#define USE_V200

#include <stdio.h> // standard ANSI C input/output support
#include <kbd.h>
#include <tigcclib.h>

#define FIXEDPT_WBITS 4
#define WIDTH 160
#define HEIGHT 100

#include "fixedptc.h"

void _main(void) {

ClrScr();

int j,k,i;
float test;
fixedpt Re,Im,DRe,DIm;
fixedpt X,Y,DUE;
fixedpt XN,YN,YNN;
fixedpt A,B;


Re = fixedpt_rconst(-2.00390625); //finestra reale tra -2 e +0.5
Im = fixedpt_rconst(-1.205); //finestra immaginaria tra -1.2 e 1.2
DRe = fixedpt_rconst(0.015625); //2.5/160
DIm = fixedpt_rconst(0.024); // 2.4/100
DUE = fixedpt_rconst(2.0);

A = Re;

for (j=0;j<WIDTH;j++)
{
A = fixedpt_add(A,DRe);
B = Im;
for (k=0;k<HEIGHT;k++)
{
B = fixedpt_add(B,DIm);

X = fixedpt_rconst(0.0);
Y = fixedpt_rconst(0.0);

for (i=0;i<=127;i++)
{
XN=fixedpt_sub(fixedpt_mul(X,X),fixedpt_mul(Y,Y))+A; // (x*x) - (y*y) + A
YN=fixedpt_mul(X,Y); // x*y
YNN=fixedpt_mul(DUE,YN); // 2*x*y
YN=YNN + B; // 2*x*y*+B
test = fixedpt_tofloat(fixedpt_mul(XN,XN) + fixedpt_mul(YN,YN)); //(XN*XN)+(YN*YN)
if (test > 4.0)
{
//png.plot(j,k,1.0,1.0,1.0);
if (i%2) DrawPix(j,k,A_NORMAL);
break;
}
X = XN;
Y = YN;
}
}
}
}


tigcc -O2 -o timand timand.c 

il file binario avra' una estensione .89z (nel caso si compile di per TI-92 sara' .92z)

Per il trasferimento dell'eseguibile tramite cavo USB ho usato il programma TILP funzionante su Linux impostando Direct Link



Una volta trasferito il codice sul dispositivo si puo' eseguire digitando il nome del fie per esempio se il nome del file e' timand come se fosse una funzione ...per esempio timand()
In alcuni casi la calcolatrice puo' non mostrare la linea di comando ma le icone..in questo caso si preme il tasto MODE si scrolla in basso fino all'opzione APP Desktop e se seleziona OFF

Se non si vuole usare un dispositivo fisico si puo' usare l'emulatore TIEmu. In questo caso per caricare l'eseguibile e' sufficiente premere il tasto F10 e selezionare il flie .89z







Nessun commento:

Posta un commento

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...