# Simons' BASIC

Simons' BASIC, anche scritto erroneamente Simon's BASIC in alcune versioni, è una cartuccia per il computer Commodore 64, pubblicata dalla Commodore nel 1983, che aumenta le capacità del linguaggio BASIC preinstallato, introducendo 114 comandi addizionali, a spese di una piccola riduzione di 8 kB della memoria RAM disponibile.
Un'ulteriore espansione chiamata Simons' BASIC Extension uscì in seguito su disco e cassetta e fornisce altri 91 comandi oltre a quelli della cartuccia, che deve comunque essere presente.

## Caratteristiche

Il programma Simons’ Basic aggiunge al Commodore BASIC 2.0 del Commodore 64 114 comandi di aiuto generico alla programmazione, di ausilio alla correzione dei programmi, di conversione fra numeri in base binaria, esadecimale e decimale. In particolare aggiunge:
* comandi di aiuto alla programmazione
* comandi di accettazione dati
* comandi di utilità disco
* comandi per grafica in alta risoluzione
* comandi per grafica in bassa risoluzione
* comandi per formare caratteri personalizzati e comporre sprite
* comandi per la programmazione strutturata
* comandi per un totale controllo delle forme d’onda del suono.
Dato che il Simons' Basic si alloca nella memoria del Commodore 64 all'indirizzo $8000–$9FFF, si sovrascrive una parte della memoria RAM del Basic, producendo un consumo di memoria di 8 kB rispetto alla configurazione standard.
Altri effetti collaterali sono il rallentamento dell'esecuzione, intorno al 20% in certi casi, e alcuni scompensi al sistema, inoltre non tutte le funzionalità sono disponibili contemporaneamente, ad esempio o si usano i comandi per il suono o quelli per l'alta risoluzione.
Il manuale, originariamente in inglese, è completato da 4 esempi di programmazione e da un’appendice con i messaggi d’errore e un glossario dei termini. Esiste anche un'edizione in italiano.

## Storia

David Simons programmò Simons' BASIC. Simons era un sedicenne di origine inglese, che aveva imparato a programmare fin dall'età di 13 anni.
Simons' Basic fu messo in vendita per la prima volta in Italia nel 1983 e il successo fu tale che scarseggiò subito, perciò in breve uscirono altri programmi simili, come Super Expander, Screen Graphics e Ultra Basic.

## Comandi
### Assegnazione di comandi ai tasti funzione

KEY,#,"istruzione"
Comandi fino a 10 caratteri alle 16 funzioni che si possono combinare con i tasti funzione F1, F2, F3, ecc. sulla destra del C64 e i tasti SHIFT e LOGO Commodore.
DISPLAY provvede a mostrare tutte e 16 le funzioni.
AUTO,# iniziale,#passo, serve per numerare automaticamente la linea di programma successiva ad un Return.
RENUMBER#iniziale,#passo, serve per rinumerare le linea di programma. È molto utile ma bisogna stare attenti che rinumera anche le subroutine, senza aggiornare le variabili di salto condizionato.
CGOTO#=espressione aritmetica, è un’istruzione di salto non condizionato alla linea di programma che ha come risultato il numero dell’espressione aritmetica.
MERGE"nome programma",#periferica, serve per ad unire il programma residente in memoria con quello caricato per mezzo di questo comando. È utilissimo quando si ha una biblioteca di subroutine che si vogliono unire ad un nuovo programma residente.

### Ausili per listare i programmi

FIND"stringa", cerca fra le REM o fra le virgolette la parola indicata.

### Ausili per la correzione (debug) dei programmi

DUMP mostra nome e contenuto delle variabili non dimensionate di un programma in memoria.
TRACE 10, mostra i numeri di linea delle istruzioni eseguite dal C64. È utilissimo per sapere cosa succede quando un programma si impianta.
COLD esegue un reset del C64, da usare con cautela, dopo aver salvato il lavoro.

### Ausili per la conferma dell'INPUT e gestione testi

Il programma aggiunge 12 comandi per la conferma dell’INPUT e la gestione dei testi.
FETCH"carattere",I,stringa, permette di controllare quali caratteri sono accettati da INPUT da tastiera.
INKEY verifica quale stato funzione è stato premuto.

### Ausili numerici

Il programma aggiunge 8 comandi di ausili numerici.
PRINT % <#binario>, ci dà il numero decimale di un numero binario.
PRINT$<#esadecimale>, ci dà il numero decimale di un numero esadecimale.

### Utilità disco

Il programma aggiunge 2 comandi di utilità disco. Qui scarseggia un po', se pensiamo a DOS Wedge, all'Epix Fast Load o ad altri programmi più complessi di gestione disco o come i disk monitor, Clone e Unguard.
DISK,"operazione", sostituisce il comando OPEN1,8,15,
DIR$, sostituisce il comando LOAD"$",8

### Grafica con il Simons' Basic e gestione video

Il programma aggiunge comandi di bassa risoluzione.
SCRSV2,8,2,"nome,S,V", memorizza e salva su nastro o su disco, i dati sul video in bassa risoluzione.
COPY stampa su stampante un video grafico.

### Comandi di alta risoluzione

CIRCLE disegna una circonferenza.
PAINT riempie di un dato colore una figura.

### Sprite Editor

Il programma aggiunge 9 comandi di sprite editor.
Per mezzo dell’editor di sprite si possono definire anche nuovi font e sono disponibili 3 comandi per la gestione di caratteri.
Il modo classico di definire sprite si fa introducendo il disegno sotto forma di DATA numerico, per mezzo di una subroutine di POKE. Simons’ Basic invece ci fornisce un’interfaccia grafica che si richiama con il comando DESIGN. Gli altri comandi per gli sprite sono at @, MEM per modificare la configurazione RAM e ROM, e MMOB che muove lo sprite.

### Programmazione strutturata

Il programma aggiunge 10 comandi di programmazione strutturata.
PROC etichetta ogni routine usata, corrisponde al comando chiamato divisione di procedura del Cobol.
IF condizione THEN vera : ELSE falsa, i famosi comandi condizionali dei quali, nel Basic v.2.0, manca l'ELSE.

### Intercettazione degli errori

Il programma aggiunge 3 comandi di intercettazione degli errori.
ON ERROR è il salvagente quando si prova un programma che si blocca per errore. Permette di rientrare o di andare a una propria subroutine di errore che ci salva da un reset.

### Controllo del sintetizzatore musicale

Il programma aggiunge 5 comandi di musica ed effetti sonori.
WAVE serve per scegliere la forma d'onda.
ENVELOPE serve per scegliere l'inviluppo.

### Lettura di coordinate

Il programma aggiunge 4 comandi read con penna ottica, joystick e paddle.

## Accoglienza

La rivista Creative Computing ha affermato che il BASIC di Simons "trasforma quasi il C64 in un nuovo computer". Ha elogiato il "manuale molto fine" in contrasto con la scarsa documentazione di Commodore, e aveva predetto che sarebbe diventato "il linguaggio standard per programmare la macchina". Ahoy! ha scritto "Se fai qualche programmazione in BASIC e dovessi vedere questo prodotto sullo scaffale di un rivenditore, non fare domande, non esitare, compralo e basta!" La rivista ha elogiato la potenza e il "manuale eccellente" di Simons' BASIC, affermando che "il suo prezzo lo rende uno dei migliori affari disponibili per il Commodore 64". La recensione di RUN fu meno favorevole, affermando che i suoi "molti comandi potenti e utili ... sfortunatamente, erano stati implementati molto male per un pacchetto commerciale. Il controllo dei parametri dei comandi è molto limitato e molte cose sono state trascurate o ignorate". La rivista italiana MCmicrocomputer lo consigliava per chi poteva tollerare il generale peggioramento dei tempi di esecuzione; notava inoltre che il tool aiuta ad adattare per il Commodore 64 i molti programmi BASIC diffusi per altri computer, in particolare l'Apple II. Nel settembre 1985 la rivista Sperimentare lo descriveva come uno dei programmi più diffusi per il Commodore 64, sebbene in forma diversa dall'originale su cartuccia, e lo consigliava per sfruttare al meglio le caratteristiche della macchina, spesso nascoste.