# Beta BASIC

Il Beta BASIC è un interprete BASIC sviluppato per gli home computer Sinclair ZX Spectrum da Andrew Wright e commercializzato tramite la sua società BetaSoft. Questa curava anche la pubblicazione di una newsletter/rivista a cadenza periodica denominata BetaNews, che rappresentava uno dei principali forum del tempo per i programmatori dello Spectrum più esperti.
Sviluppato inizialmente come estensione del Sinclair BASIC crebbe nel tempo fino a diventare un interprete vero e proprio.

## Caratteristiche

Il Beta BASIC era un programma del tipo TSR (Terminate and Stay Resident) che si sostituiva completamente all'interprete Sinclair BASIC dello ZX Spectrum che, come in molti altri microcomputer dell'epoca, era anche il suo sistema operativo, offrendo un'interfaccia a riga di comando (CLI, Command Line Interface) e l'editor a schermo per i programmi, oltre che rappresentare l'unico modo per gestire le risorse del computer.
Il Beta BASIC offriva nuovi CLI ed editor che supportavano sia il particolare modo di inserimento dei comandi BASIC dello ZX Spectrum basato sulla pressione di singoli tasti sia la classica digitazione lettera per lettera delle parole chiave, che risultava molto più rapida nel caso in cui l'utente avesse collegato al computer una tastiera completa. Inoltre il Beta BASIC estendeva il sistema a singoli tasti mappando i caratteri "grafici" dello Spectrum con nuove combinazioni. Per passare tra le varie modalità l'utente doveva semplicemente premere la barra spaziatrice: questa azione provocava il cambio di stato del cursore fra "K" (per Keyword), la modalità a parole chiave, "L" (per Lowercase), la tastiera normale con lettere minuscole, e "C" (per Capital), la tastiera con le lettere maiuscole. L'istruzione KEYWORDS poteva essere usata per alterare lo stato di inserimento, ad esempio disattivando la modalità "K".
Un'altra caratteristica del Beta BASIC era la possibilità di formattare il testo durante la digitazione. Anche il Sinclair BASIC permetteva questa possibilità ma il Beta BASIC lo faceva in automatico così che ad esempio era possibile accorgersi meglio della chiusura dei cicli usando l'indentazione delle righe. Un'altra caratteristica era l'evidenziatura della linea corrente e la possibilità di muovere il cursore su e giù, a destra ed a sinistra, un evidente aiuto durante la scrittura di lunghe linee di codice.
Il Beta BASIC era un interprete nel vero senso del termine, sostituendosi completamente a quello dello Spectrum residente in ROM, che usava come libreria effettuando delle chiamate a delle funzioni che non erano replicate nel codice del Beta BASIC principalmente per non consumare troppa memoria: l'interprete girava infatti come programma ed utilizzava parte dei 48 KB di RAM dello Spectrum, lasciando liberi i restanti per i programmi dell'utente.

## Differenze con il Sinclair BASIC

Rispetto agli interpreti contemporanei, il Beta BASIC era molto sofisticato: supportava la programmazione strutturata con funzioni e procedure indicate con nomi e variabili locali, permettendo programmazione ricorsiva. Anche se l'editor supportava i numeri di linea, essi non erano necessari: esisteva infatti una particolare modalità operativa che saltava completamente la loro visualizzazione. Infine, esso offriva operazioni sugli array e comandi per l'accesso ai file su disco o cassetta.
In termini di prestazioni esso surclassava molti altri BASIC ad 8 bit degli anni ottanta avvicinandosi alle capacità del QuickBASIC 4.5 o del QBASIC di Microsoft, ambienti BASIC che compariranno più tardi per i futuri computer a 16 bit.
Sugli Spectrum con 128 KB di RAM il Beta BASIC dalla versione 4.0 in poi offriva le funzionalità per accedere alla memoria extra della macchina gestendola come un RAM disk: in esso i programmatori potevano salvare i propri programmi per caricarli successivamente, memorizzare blocchi di memoria o immagini dello schermo. Il Beta BASIC permetteva anche di creare nel RAM disk degli array di dati virtualmente grandi fino ad 64 KB, conservando i 30 KB di RAM del computer (ciò che restava dei 48 KB iniziali dopo l'avvio dell'interprete) per il programma dell'utente, un quantitativo significativo per gli standard dell'epoca: quasi tutti gli altri BASIC ad 8 bit dell'epoca erano generalmente limitati a 64 KB, tra programma e dati.

## Nuove funzionalità

Il Beta BASIC gestiva direttamente lo schermo dello Spectrum (256×192 pixel) eliminando le restrizioni dello schermo a 32 colonne in modalità testo dell'interprete Sinclair: esso infatti offriva dei font scalabili compreso uno speciale font largo solo 4 pixel ma ancora ben leggibile che permetteva all'editor del Beta BASIC di visualizzare il testo su 64 colonne, andando quindi a competere con gli editor di alcuni dei computer ad 8 bit che comparivano in quel periodo sul mercato, che introducevano una nuova modalità ad 80 colonne. Esisteva anche una modalità con un numero di colonne ancora maggiore, 85: essa però era limitata dal fatto che non esisteva stacco fra i caratteri per cui la leggibilità del testo ne risentiva molto, anche se permetteva l'adattamento di programmi BASIC nati per funzionare con interfacce adattate all'uso sugli schermi ad 80 colonne.
La dimensione del testo poteva essere controllata via software per cui un programma poteva usare una parte dello schermo a 64 colonne, una parte a 32 colonne o dimensioni intermedie più grandi o più piccole.
Ne furono realizzate anche versioni speciali per gli utenti dello ZX Interface 1 e dello ZX Microdrive nonché per altre interfacce non Sinclair quali il DISCiPLE ed il +D.
Quando uscì l'Amstrad Spectrum +3 si pensò anche a realizzarne una versione per tale computer ma il progetto fu accantonato.

## Limiti dell'interprete

Il Beta BASIC soffriva di alcuni limiti. Come tutti i microprocessori ad 8 bit, anche lo Zilog Z80 dello Spectrum poteva gestire direttamente solo 64 KB di memoria: di questi, 16 KB erano la ROM che conteneva l'interprete Sinclair BASIC, lasciando indirizzabili solo 48 KB di RAM. Per memorizzare le informazioni video il sistema utilizzava parte di questa RAM, usata anche per salvare alcune strutture dati dell'interprete. Il Beta BASIC occupava circa 11/12 KB della restante memoria per cui alla fine restavano liberi per l'utente 20/30 KB di RAM.
Il Beta BASIC non possedeva un proprio compilatore e quelli esistenti per il Sinclair BASIC, come l'HiSoft BASIC, non erano compatibili non riconoscendo le parole chiave aggiuntive del Beta BASIC: l'unico modo per sfruttare tali compilatori con il Beta BASIC era quello di scrivere del codice senza utilizzare i nuovi comandi.
Come il Sinclair BASIC, anche il Beta BASIC supportava solo variabili ed operazioni in virgola mobile, un limite rispetto ad altri BASIC dell'epoca che supportavano anche i numeri interi. Un altro limite del Beta BASIC era la possibilità di utilizzare solo nomi di variabili lunghi 1 lettera.
L'assegnazione dei nomi alle procedure avveniva nel Beta BASIC senza l'obbligo di utilizzare la parola chiave PROC, obbligatoria invece nell'unico altro BASIC ad 8 bit che integrava il supporto per la programmazione strutturata, il BBC BASIC. Grazie a tale caratteristica si potevano creare nuove parole chiave, estendendo quelle dell'interprete. Ma il BBC BASIC, nonostante non offrisse tale possibilità, forniva una velocità di esecuzione maggiore: esso era uno dei più veloci interpreti dell'epoca. Il Beta BASIC non era particolarmente veloce, anche se rimpiazzava alcune routine dell'interprete in ROM con altre più veloci, ad esempio quelle per il tracciamento grafico di cerchi ed archi. Un'altra carenza rispetto al BBC BASIC era il supporto all'esecuzione di codice macchina inserito nelle linee dei programmi BASIC.

## Sviluppi successivi

Durante lo sviluppo della loro macchina SAM Coupé, gli ex-dipendenti Sinclair e fondatori di Miles Gordon Technology Alan Miles e Bruce Gordon contattarono BetaSoft chiedendo lo sviluppo di un interprete BASIC per il nuovo computer. Il risultato fu un linguaggio completo, senza utilizzo di routine esterne come nel caso del Beta BASIC che usava quelle del Sinclair BASIC e con una struttura differente rispetto a quest'ultimo. Il nuovo linguaggio fu chiamato SAM BASIC: risultava largamente compatibile con il Beta BASIC, rispetto al quale operava in modo simile, tranne che nelle routine che accedevano all'hardware del SAM, come quelle per gestire lo schermo o la memoria estesa. BetaSoft rilasciò poi un'estensione al SAM BASIC, chiamata MasterBASIC.