LIMACE (Langage Immédiat pour Machines à Calculer Élémentaires)

 

UN CROSS-COMPILATORE da LIMACE a TI-57 S.O.A.

A CROSS-COMPILER from LIMACE to TI-57 A.O.S.


Nel corso delle mie solite ricerche di informatica "antica" - e, a dire il vero, stavo solo riordinando dei file PDF relativi alle calcolatrici programmabili - mi sono imbattuto nel numero 7 (Maggio 1979) della rivista francese "L'Ordinateur Individuelle" che, come dice il nome, si occupava di calcolatori "individuali" comprese le calcolatrici programmabili, in un articolo molto interessante sulla possibilità di definire un "linguaggio" ad alto livello per quest'ultime detto "LIMACE". Lo scopo era quello di pubblicare programmi scritti in tale linguaggio per poi generare automaticamente il codice macchina  tramite un cross-compiler; come esempio venivano prese due calcolatrici di fascia bassa e cioè la TI-57 e la HP-25. Si invitavano i lettori a scrivere questi cross-compiler per i modelli che interessavano loro nonché a commentare l'idea ed apportare ulteriori miglioramenti al linguaggio. La risposta dei lettori non fu per niente esaltante tanto che dopo l'articolo di Novembre (sempre del 1979) LIMACE è scomparso da ogni orizzonte. L'unico cross-compiler, scritto (molto bene) da un tale Xavier Ackaouy  per il BASIC Livello 2 del TRS-80 con 16K di memoria, è stato pubblicato in Ottobre e riguardava la TI-57.

In realtà l'idea di un "linguaggetto" per la TI-57 mi ha preso subito e dopo gli interessanti risultati di BAX-59 ho deciso di riprendere ed estendere l'idea di LIMACE (solo per 57 ovviamente) partendo dal programma pubblicato: è nato così LIMACE57 v 2.0 che è stato integrato come il suo fratello maggiore nell'emulatore della TI-57. La cosa curiosa è che l'originale è scritto tutto in francese (parole chiave comprese) e per rispetto agli ideatori la cosa è stata mantenuta affiancandola con una versione in inglese che è quella usata dall'emulatore.

Al solito, il richiamo di LIMACE57 avviene con Shift-F7 e una volta compilato il tutto con F7 il risultato viene importato ed eseguito: l'ambiente di programmazione LIMACE ha i suoi propri comandi per caricare, salvare, listare, stampare ecc.. i propri file (con estensione .LIM).

Il progetto LIMACE57 (Langage Immédiat pour Machines à Calculer Élémentaires pour TI-57) è essenzialmente composto da una sola parte che comprende sia il cross-compiler vero e proprio che  l' "ottimizzatore": con il comando CREATE (CREERE) viene prodotto un file .SOA importabile dall'emulatore. Viste le dimensioni della memoria della 57 è possibile che vengano superati i limiti dei 50 passi disponibili: in questo caso il file finale dovrà essere "ottimizzato" manualmente per farlo rientrare nei limiti della memoria stessa.

Comunque, come per BAX-59, LIMACE57 è utilizzabile anche da solo: mancherà ovviamente la possibilità diretta di esecuzione. Basterà al limite immettere il programma in una TI-57 reale e si potrà vederlo all'opera.....

 

La pagina iniziale di presentazione del linguaggio.

Vediamo un programma che ci può permettere di fare un confronto tra le sintassi di BAX-59 e LIMACE57. Il programma è stato tratto dall'HP-25 Owner's Handbook a pag. 98 ("Converging Series") che calcola "e" nei limiti della precisione della macchina tramite la nota serie 1/0! + 1/1! + 1/2! + ... + 1/n!

BAX-59 LIMACE57

5 LET E=EXP(1)
6 LET L=0.0000001
10 LET X=1
20 LET F=1
30 LET G=1
40 LET F=F*X
50 LET X=X+1
60 LET G=G+1/F
65 LET D=G-E
66 PRINT G,D
70 IF ABS(D)>L THEN 40
80 PRINT "TENT";X
90 END
 

15
1 INITIALIZE V5/.0000001
2 V4=EXP(1)
3 V0=1
4 V1=1
5 V2=1
6 V1=V1*V0
7 V0=V0+1
8 V2=V2+INV(V1)
9 V3=V2-V4
10 PRINT V2,V3
11 V6=ABS(V3)
12 IF V6>V5 THEN 6
13 PRINT V0
14 STOP
15 REM FROM HP 25 USER'S MANUAL
 

IL LINGUAGGIO


LIMACE è proporzionato al suo "target" e quindi molto semplice, tuttavia è possibile scrivere e compilare anche programmi di una certa complessità.

Le variabili sono solo semplici (da V0 a V7), le espressioni possono comprendere i soliti operatori aritmetici e sedici funzioni, gli operatori relazionali usabili nei confronti, tramite la IF..THEN, sono i consueti, i salti con GOTO n.linea, sono presenti le subroutine che terminano con RETURN e si richiamano tramite una  GOSUB, l'unica istruzione di ciclo è la WHILE..WEND che può agire solo su V0 (niente cicli nidificati quindi).

Una tabella riassuntiva del linguaggio LIMACE (inglese e francese........)

Nelle cartelle LIMACE57\PROG\ENG  e LIMACE57\PROG\FRA sono presenti, oltre agli eseguibili, anche degli esempi - rispettivamente per l'inglese e per il francese - che possono essere usati come guida per vedere come viene effettuata la traduzione.

Anche qui viene riportato come esempio, il calcolo del massimo comun divisore (EUCLIDE.LIM) di una coppia di numeri a e b, secondo il noto algoritmo euclideo.

  Listato LIMACE Traduzione in SOA Commento
000
001
002
003
004
005
006
007
008
009
010
011

 
11
INPUT V1,V2
V3=V1
V4=V2
IF V3=V4 THEN 10
IF V3<=V4 THEN 8
V3=V3-V4
GOTO 4
V4=V4-V3
GOTO 4
PRINT V3
STOP
 

 

R/S STO 1 R/S STO 2
RCL 1 STO 3
RCL 2 STO 4
LBL 2 RCL 4 STO 7 RCL 3 EQ GTO 0
RCL 3 STO 7 RCL 4 GE GTO 1
RCL 4 INV SUM 3
GTO 2
LBL 1 RCL 3 INV SUM 4
GTO 2
LBL 0 RCL 3
R/S
 

numero di linee del programma LIMACE
si parte con RST R/S a R/S b R/S
salva i due numeri originali


test di scita dal calcolo


ricalcola i due numeri
con l'algoritmo di Euclide
torna al test di uscita


torna al test di uscita
visualizza il risultato
fine programma
 

LIMACE57 è scritto, al solito, in Quick Basic 4.5 (ma è stato compilato con Basic PDS 7.1) e quindi è a 16 bit: come già detto sono disponibili due versioni nazionalizzate in inglese e francese. E' disponibile pure la versione a 32/64 bit compilata con QB64 1.20.
 

            LIMACE57 versione 2 (anche a 32/64 bit).


E' disponibile la versione finale di LIMACE57 (la numero 2) sia in francese che in inglese con un suo piccolo manuale ed anche la trascrizione dei numeri de "L'Ordinateur Individuelle" che parlano di LIMACE.

    Download LIMACE57 cross-compiler (2.0) (documentazione inclusa - documentation included)

LIMACE-59 is available in English and François.
(source code is NOT included)