Sinclair BASIC: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica |
Funzionalità collegamenti suggeriti: 1 collegamento inserito. |
||
(21 versioni intermedie di 17 utenti non mostrate) | |||
Riga 1:
Il '''Sinclair BASIC''' (dal nome
== Storia ==
Sviluppato nel [[1979]], nacque originariamente per essere incluso nei 4 [[Kilobyte|KB]] di [[read-only memory|ROM]] del [[Sinclair ZX80]] e, a causa di questo ridotto quantitativo di memoria, risultò essere nella sua versione iniziale una [[implementazione]] incompleta del BASIC standard [[American National Standards Institute|ANSI]] del [[1978]]. Il linguaggio evolvette da questa prima versione fino a quella quasi completa integrata nei 16 KB di ROM dello [[ZX Spectrum]], passando per una versione intermedia inserita negli 8 KB di ROM dei computer [[Sinclair ZX81]] e [[Timex Sinclair 1000]].
== Caratteristiche ==
=== Operazioni matematiche e funzioni ===
* I numeri sono memorizzati in cinque byte in virgola mobile (4 di mantissa e 1 di esponente), con un range compreso tra ±2,9·10<sup>−39</sup> e ±1,7·10<sup>38</sup> e una precisione di 9,6 cifre decimali.
* Oltre alle quattro operazioni aritmetiche, sono disponibili: elevamento a potenza, seno, coseno, tangente, logaritmi naturali ed esponenziali, valore assoluto e intero, radice quadrata, pi greco e generatore di numeri casuali.
* I numeri binari possono essere usati direttamente nelle espressioni del BASIC grazie alla funzione BIN.
* L'utente può creare delle funzioni con il comando DEF FN, richiamabili con FN.
=== Operazioni logiche ===
* Gli operatori “=”, “>”, “<”, “>=”, “<=” e “<>” possono essere impiegati per confrontare valori numerici o stringhe alfanumeriche.
* Sono disponibili anche le operazioni logiche AND, OR, NOT.
=== Operazioni sulle stringhe ===
Le operazioni tra stringhe includono, oltre ai già detti confronti, la concatenazione, effettuabile con l'operatore “+”.
Altre funzioni specifiche riguardanti le stringhe sono VAL (conversione da stringa a numero), VAL$, STR$ (conversione da numero a stringa) e LEN. Infine, le funzioni CHR$ e CODE convertono codici ASCII in caratteri e viceversa.
=== Altre caratteristiche ===
* Mediante le istruzioni READ e RESTORE è possibile leggere dati statici memorizzati nel programma per mezzo dell'istruzione DATA.
* Non c'è [[Real-time clock|orologio in tempo reale]] che però è ottenibile tramite programmazione.
=== Nomi delle variabili ===
* Le variabili numeriche ammettono nomi alfanumerici incomincianti per lettera. Il BASIC non distingue tra maiuscole e minuscole, e gli spazi sono ignorati.
* Le variabili e le matrici di tipo stringa ammettono nomi di una lettera seguita dal simbolo “$”
* Le variabili di controllo dei cicli FOR-NEXT e le matrici numeriche ammettono infine nomi di una lettera singola.
== Nei modelli di "''Spectrum''"==
=== ZX Spectrum ===
[[File:ZXSpectrum48k.jpg|thumb|right|La tastiera di uno [[ZX Spectrum]]: le parole chiave del [[BASIC]] erano inserite mediante la pressione di particolari combinazioni di tasti funzione e lettere. Si notino intorno ai tasti i suggerimenti dei comandi scritti con colori differenti, ad indicare la combinazione richiesta]]
Sullo ZX Spectrum c'erano 86 parole riservate al Sinclair BASIC: queste includevano ''comandi'' (ce ne erano 50), ''funzioni'' (31) ed ''altre parole chiave'' (5), inserite attraverso uno sistema specifico delle macchine Sinclair. I comandi più comuni richiedevano la pressione di un singolo tasto: ad esempio, la pressione del tasto "P" causava l'apparizione dell'intera stringa <code>PRINT</code> (comando). I comandi di uso meno frequente richiedevano delle sequenze di tasti più complesso: ad esempio, <code>BEEP</code> richiedeva la pressione dei tasti CAPS SHIFT e SYMBOL SHIFT per accedere alla modalità estesa della tastiera (gli ultimi modelli integravano il tasto EXTENDED MODE che sostituiva questa combinazione), poi si doveva tenere premuto il tasto SYMBOL SHIFT e contemporaneamente premere il tasto "Z". Le parole chiave erano indicate sulla tastiera con uno schema a colori che indicava la sequenza di tasti SHIFT che era necessaria. Quello che segue è l'elenco delle parole chiave (quelle <u>sottolineate</u> sono funzioni):▼
▲Sullo ZX Spectrum c'erano 86 parole riservate al Sinclair BASIC: queste includevano ''comandi'' (ce
:<u>ABS</u>, <u>ACS</u>, <u>AND</u><sup><small>1</small></sup>, <u>ASN</u>, ''AT'', <u>ATN</u>, <u>ATTR</u>, BEEP, BIN, BORDER, BRIGHT<sup>7</sup>, CAT<sup><small>2</small></sup>, <u>CHR$</u></u><sup><small>3</small></sup>, CIRCLE, CLEAR, CLOSE#<sup><small>2</small></sup>, CLS, <u>CODE</u><sup><small>3</small></sup>, CONTINUE, COPY, <u>COS</u>, DATA, DEF FN, DIM, DRAW, ERASE<sup><small>2</small></sup>, <u>EXP</u>, FLASH<sup>7</sup>, <u>FN</u>, FOR, FORMAT<sup><small>2</small></sup>, GO SUB, GO TO, IF<sup><small>4</small></sup>, <u>IN</u>, INK<sup>7</sup>, <u>INKEY$</u><sup><small>3</small></sup>, INPUT, <u>INT</u>, INVERSE<sup>7</sup>, <u>LEN</u>, LET<sup><small>5</small></sup>, ''LINE'', LIST, LLIST, <u>LN</u>, LOAD, LPRINT, MERGE, MOVE<sup><small>2</small></sup>, NEW, NEXT, <u>NOT</u><sup><small>1</small></sup>, OPEN#<sup><small>2</small></sup>, <u>OR</u><sup><small>1</small></sup>, OUT, OVER<sup>7</sup>, PAPER<sup>7</sup>, PAUSE, <u>PEEK</u>, <u>PI</u>, PLOT, <u>POINT</u>, POKE, PRINT, RANDOMIZE, READ, REM, RESTORE, RETURN, <u>RND</u>, RUN, SAVE, <u>SCREEN$</u><sup><small>3</small></sup>, <u>SGN</u>, <u>SIN</u>, <u>SQR</u>, ''STEP'', <u>STR$</u><sup><small>3</small></sup>, ''TAB'', <u>TAN</u>, ''THEN'' <sup><small>4</small></sup>, <u>TO</u>, <u>USR</u><sup><small>8</small></sup>, <u>VAL</u><sup><small>3, 6</small></sup>, <u>VAL$</u><sup><small>3</small></sup>, VERIFY▼
Le parole chiave (quelle <u>sottolineate</u> sono funzioni) erano:
▲:<u>ABS</u>, <u>ACS</u>, <u>AND</u><sup
I comandi presenti solo sullo ZX81 e sui suoi [[clone (informatica)|cloni]], sul TS1000 e sul [[Timex Sinclair 1500]] erano:
Riga 14 ⟶ 42:
:FAST, SCROLL, SLOW, UNPLOT, GOSUB, GOTO (questi ultimi sullo Spectrum erano sostituiti da GO SUB e GO TO)
Sullo ZX Spectrum ogni parola riservata era assegnata ad un carattere il cui codice era compreso fra 165 e 255 della tabella [[ASCII]] che veniva espanso utilizzando facendo riferimento ad una tavola di [[
Gli Spectrum della serie ''128K'' (lo ZX Spectrum 128, +2, +3, +2A e +2B) introdussero un sistema di inserimento delle parole chiave del BASIC convenzionale, lettera-per-lettera, nonché 2 nuovi comandi nessuno dei quali presenti o riconosciuti dall'interprete BASIC dei precedenti modelli a 48K:
Riga 21 ⟶ 49:
*SPECTRUM (che impostava lo Spectrum 128K in modalità compatibile Spectrum 48K)
Vi erano inoltre alcune specificità:
# Le funzioni <code>AND</code>, <code>NOT</code> e <code>OR</code> erano [[operatore logico|operatori logici]].
# <code>CAT</code>, <code>ERASE</code>, <code>FORMAT</code> e <code>MOVE</code> erano stati inizialmente pensati per essere utilizzati con delle periferiche ma al momento del lancio dello ZX Spectrum questi comandi non erano stati ancora implementati ed il loro uso generava un errore ("Invalid Stream"). Successivamente essi furono implementati nella ''shadow'' ROM dello [[ZX Interface 1]] ed usati per lo [[ZX Microdrive]] (la ''shadow'' ROM era indirizzata quando l'interprete BASIC trovava un errore: per questo motivo molti comandi per il Microdrive utilizzavano un carattere "*").
# I nomi delle variabili di tipo [[stringa (informatica)|stringa]] dovevano essere lunghe 1 solo carattere: <code>LET A=5</code>, <code>LET Apples=5</code> e <code>LET A$="Hello"</code> sono tutte dichiarazioni valide, mentre non lo è <code>LET APPLES$="Fruit"</code>.
# A differenza di altri dialetti BASIC, il Sinclair BASIC non includeva l'operatore <code>ELSE</code> nella clausola <code>
# <code>LET</code> è obbligatorio (es.: <code>LET A=1</code> ma mai <code>A=1</code>), a differenza di molti altri dialetti BASIC.
# La funzione <code>VAL</code> non valutava solo i numeri ma anche intere espressioni. Per esempio, dato <code>LET A$="3*3+4+COS(0)"</code> il comando <code>PRINT VAL(A$)</code> restituiva 14.
# <code>INK</code>, <code>PAPER</code>, <code>FLASH</code>, <code>BRIGHT</code>, <code>OVER</code> e <code>INVERSE</code> impostavano gli attribuiti per la visualizzazione del testo e della grafica sullo schermo: potevano operare come comandi, ed in questo caso modificavano tutti i successivi output fino ad una nuova modifica delle impostazioni, oppure come parametro di <code>PRINT</code>, ed in questo caso la modifica era annullata al termine della sua esecuzione.
# Poteva essere avviata l'esecuzione di [[linguaggio macchina]] usando la funzione <code>USR</code> passandogli come valore l'indirizzo di memoria a cui iniziava il codice ed ottenendo come risultato il contenuto dell'intero registro BC (su altri computer basati sullo [[Zilog Z80|Z80]] veniva restituito il valore del registro HL), per cui:<br> <code>LET A=USR 30000</code><br>iniziava l'esecuzione del codice macchina presente all'indirizzo 30000 e, dopo il suo completamento, memorizzava il valore della coppia di byte costituenti il registro BC nella variabile <code>a</code>, che poteva essere utilizzata dal programma chiamante.
Riga 34 ⟶ 63:
==Timex BASIC==
Il dialetto
* <code>DELETE</code> cancellava un intervallo di linee del programma BASIC
* <code>FREE</code> era una funzione che restituiva il quantitativo di memoria libera.
* <code>ON ERR</code> era una funzione che intercettava gli errori, utilizzata principalmente per salti condizionali <code>ON ERR GO TO</code> o <code>ON ERR GO SUB</code>.
* <code>RESET</code> resettava la macchina e le periferiche.
* <code>SOUND</code> pilotava il chip audio AY-3-8192.
* <code>STICK</code> leggeva la posizione del [[joystick]] interno ([[Timex Sinclair 2090]]).
==Bibliografia==
*{{cita libro|autore=Mike Lord|titolo=Alla scoperta del BASIC Spectrum|editore=Gruppo Editoriale Jackson|anno=1985|annooriginale=1982|ISBN=887056228X|url=https://archive.org/details/allascopertadelbasicspectrum}}
* {{Cita testo|titolo=Programmazione dello ZX Spectrum|url=https://archive.org/details/programmazionedellozxspectrum|autore=Tim Hartnell|editore=Gruppo Editoriale Jackson|anno=1984|ISBN=88-7056-034-1}}
* {{Cita testo|titolo=Il piacere di programmare con lo ZX Spectrum|url=https://archive.org/details/ilpiacerediprogrammareconlozxspectrum|autore=Ian Stewart e Robin Jones|editore=Arnoldo Mondadori Editore|anno=1984|ISBN=}}
* {{en}} Steven Vickers
* {{en}} Neil Ardley
==Voci correlate==
* [[SuperBASIC]]
==Collegamenti esterni==
* [http://www.worldofspectrum.org/
* Andrew Owen, [http://scratchpad.wikia.com/wiki/Sinclair_BASIC_History The History of Sinclair BASIC]
▲*[http://scratchpad.wikia.com/wiki/Sinclair_BASIC_History The History of Sinclair BASIC] — Documenti di Andrew Owen, sul Sinclair BASIC ospitati dal sito "World of Spectrum"
{{Portale|informatica}}
▲*Steven Vickers: ''Sinclar ZX Spectrum BASIC Programming'' - Sinclair Research ([[1982]])
▲*Neil Ardley: ''Sinclair ZX Spectrum+ User Guide'' - Dorling Kindersley in associazione con Sinclair Research ([[1984]]) ISBN 0-86318-080-9.
[[Categoria:Computer Sinclair]]
[[Categoria:BASIC]]
▲[[cs:Sinclair BASIC]]
|