Indietro

ⓘ BAL (linguaggio)




                                     

ⓘ BAL (linguaggio)

Il BAL è un linguaggio di programmazione usato nella seconda metà degli anni 70 e nei primi anni 80 dalla Olivetti. B.A.L. significa Business All-purpose Language, ma esistono anche citazioni Olivetti che lo indicano come Business Assembly Language, probabilmente per il suo successivo utilizzo sui sistemi BCS. Luso nellacronimo di parole inglesi e lesistenza di programmi didattici e giochi BAL con testi in inglese suggeriscono lipotesi che il linguaggio sia stato sviluppato quanto meno con la collaborazione americana, probabilmente durante la partnership con la General Electric.

                                     

1. Storia

Il BAL era usato nella seconda metà degli anni 70 e nei primi anni 80 dalla Olivetti sulle sue macchine elettro-contabili della linea Audit A5, A6, A7. Il linguaggio stesso venne poi utilizzato per la successiva generazione di computer, linea "BCS", che introducevano nuove periferiche di stampo più moderno. In tali macchine il sistema operativo BCOS o BCOS II era scritto in buona parte in BAL ed interpretato al volo dalla CPU Z8000A. Per ottemperare alle novità tecnologiche introdotte dalle nuove macchine, il BAL venne integrato con la possibilità di eseguire macrocomandi ad esempio CALL OPEN i quali comunque non facevano altro che eseguire subroutine preconfezionate scritte in BAL stesso o in Assembler. In tal modo si riusciva abbastanza agilmente ad operare con i dischi e con lo schermo CRT.

                                     

2. Struttura del linguaggio

Il BAL si può considerare un linguaggio di medio livello, in quanto ha caratteristiche di basso livello ad es. accesso diretto alla memoria ma comunque richiede minori difficoltà di utilizzo rispetto a un linguaggio assembler.

I comandi BAL circa 90 sono caratterizzati da nomi mnemonici lunghi da 1 a 4 caratteri. Ogni macchina BAL accettava direttamente gli mnemonici ed i loro operandi nel caso di inserimento, ed automaticamente traduceva ciascuno in 2 byte di codice binario comprensivi degli operandi. Analogamente ogni listing di codice BAL veniva ritradotto automaticamente in un elenco strutturato di codici mnemonici con i loro operandi.

Esempi di comandi particolarmente evoluti notare che occupavano solo 2 byte ciascuno sono:

MPR 10.3 moltiplicazione di due registri con arrotondamento del risultato DIV 1.2 divisione tra due registri e shift del risultato MDD 15 automodifica del 2º byte dellistruzione BAL successiva - questo permetteva unautoprogrammazione del codice PEU 8.2 stampa con editing esteso con inversione del colore nel caso di valore negativo - esempio di output: 123.456.78 BRA xx return da subroutine e salto dei successivi xx byte LAB xxx label di destinazione di salti o inizio subroutine
                                     

3. Registri

I dati numerici venivano gestiti da registri composti ognuno da 8 byte consecutivi nei quali potevano essere memorizzati valori positivi o negativi da 0 a 999.999.999.999.999 codificati in BCD. Gli mnemonici riferivano i registri senza che il programmatore si dovesse preoccupare della loro localizzazione in memoria ad es. AR 4.7 sommava al registro 4, il valore contenuto nel registro 7. I primi 16 Registri da 0 a 15 erano indirizzabili direttamente ovvero semplicemente citandone il numero es. AR 10.4.

Quelli oltre il n° 15, potevano essere citati mediante indirizzamento indiretto. Nello mnemonico si citava cioè il registro da 0 a 15 entro il quale era salvato il numero del registro destinazione. Es. per indirizzare il registro N° 100 si salvava il valore "100" entro il registro N° 12. Per riferirsi a tale indirizzamento indiretto bastava premettere un punto ".". Nellesempio AR.12.4. Il registro N° 0, detto anche Work Register veniva utilizzato implicitamente da molte istruzioni, e costituiva spesso il deposito del risultato di unoperazione. Es. MPR 4.2 moltiplica il registro N° 4 per il registro N° 0 e pone il risultato nel registro N° 0.



                                     

4. Altre caratteristiche

Il risultato dellesecuzione di alcuni mnemonici modificava il valore del cosiddetto Codice Condizioni similarmente ad un exit code, i cui 4 possibili stati 0, 1, 2, 3 potevano venire sondati nel successivo corso del programma per determinare scelte ad esempio lo mnemonico "PI2 41" stampa il carattere "A" ASCII $41 solo se il Codice-Condizioni risulta pari a 2) o salti ad esempio "BN1 120" salta a LAB 120 solo se il Codice Condizioni è diverso da 1.

La profondità dello stack nel caso di utilizzo di subroutine era di 4 livelli. Lo mnemonico "POP" consentiva di eliminare un livello senza dover rientrare dalla subroutine.

                                     

5. Applicazioni

Oltre al già citato sistema operativo BCOS, il quale attingeva largamente al linguaggio BAL per le sue funzioni interne, è da citare il pacchetto DMS un vero e proprio dBase ante litteram. Mediante una quindicina di comandi, che altro non erano che routine scritte in BAL, si potevano costruire file batch eseguibili per inserire, modificare, cancellare, elencare, riordinare record di un database, usando maschere predefinite scritte anchesse in BAL.

I linguaggi di programmazione dei sistemi operativi BCOS e BCOS II, ovvero BASIC e OCL, prevedevano specifiche chiamate di subroutine speciali ad esempio CALL "BEEP" o CALL "SYS" le quali erano praticamente tutte scritte in BAL con la sola eccezione nota di "SORT", scritta in assembler probabilmente per ridurne la lentezza di esecuzione.