Sinclair BASIC: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m r2.6.4) (Bot: Aggiungo: hr:Sinclair BASIC
Funzionalità collegamenti suggeriti: 1 collegamento inserito.
 
(18 versioni intermedie di 14 utenti non mostrate)
Riga 1:
Il '''Sinclair BASIC''' (dal nome del poliedricodi Sir [[Clive Sinclair]]) è un dialetto del [[linguaggio di programmazione]] [[BASIC]] utilizzato negli [[home computer]] ad [[8 bit]] prodotti da [[Sinclair Research]] e [[Timex Sinclair]]. L'[[interprete (informatica)|interprete]] del Sinclair BASIC fu sviluppato da ''Nine Tiles Networks Ltd.''.
 
== 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 ==
==Il Sinclair BASIC dello ZX Spectrum==
=== Operazioni matematiche e funzioni ===
===Parole riservate===
* 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 ne n'erano 50), ''funzioni'' (31) ed altre ''altre parole chiave'' (5), inserite attraverso uno sistema specifico sistema 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. QuelloNormalmente chei segueprogrammi ènon l'elencosi delleavviano paroleda chiavesoli (quelledopo il caricamento ma occorre lanciarli con <ucode>sottolineateRUN</ucode>; sonomentre funzioni):il salvataggio può però avvenire anche in modo da impostare l'avvio automatico.
:<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><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
 
I comandi presenti solo sullo ZX81 e sui suoi [[clone (informatica)|cloni]], sul TS1000 e sul [[Timex Sinclair 1500]] erano:
Riga 21 ⟶ 49:
*SPECTRUM (che impostava lo Spectrum 128K in modalità compatibile Spectrum 48K)
 
Vi erano inoltre alcune specificità:
===Note===
 
# 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>IF&ndash;THENIF–THEN(&ndash;ELSE–ELSE)</code>. Per questo motivo il controllo <br>&nbsp;&nbsp;&nbsp;<code>10 IF V=5 THEN GO TO 50 ELSE GO TO 100</code><br>diventava<br>&nbsp;&nbsp;&nbsp;<code>10 IF V=5 THEN GO TO 50</code><br>&nbsp;&nbsp;&nbsp;<code>20 GO TO 100</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>&nbsp;&nbsp;&nbsp;<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 '''Timex BASIC''', utilizzato nei compatibili Spectrum come il [[Timex Sinclair 2068]] (ma non nel [[Timex Computer 2048]] che utilizzava il Sinclair BASIC tradizionale) aveva le seguenti parole chiavichiave aggiuntive:
 
* <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:, ''[http://www.worldofspectrum.org/ZXBasicManual/ Sinclar ZX Spectrum BASIC Programming]'' -, Sinclair Research, ([[1982]])
* {{en}} Neil Ardley:, ''Sinclair ZX Spectrum+ User Guide'' -, Dorling Kindersley in associazione con Sinclair Research, ([[1984]]), ISBN 0-86318-080-9.
 
==Voci correlate==
* [[cs:SinclairBeta BASIC]]
*[[Beta BASIC]], di ''Andy Wright'': nato come estensione del Sinclair BASIC, alla fine divenne un interprete vero e proprio.
* [[SuperBASIC]]
*[[SuperBASIC]], dialetto BASIC molto avanzato, introdotto con il [[Sinclair QL]]: aveva delle similitudini con il Sinclair BASIC.
 
==Collegamenti esterni==
* [http://www.worldofspectrum.org/ZXBasicManualZX81BasicProgramming/ Sinclair ZXZX81 Spectrum BASICBasic Programming] — Il manuale originale del 1982 di{{Webarchive|url=https://web.archive.org/web/20070422024127/http://www.worldofspectrum.org/ZX81BasicProgramming/ Steven|date=22 Vickersaprile (vedi2007 note)}}
* Andrew Owen, [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"
*[http://www.worldofspectrum.org/ZX81BasicProgramming/ Sinclair ZX81 Basic Programming] — Sempre di Vickers
*[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"
 
==Note==
*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.
{{Portale|informatica}}
 
[[Categoria:Computer Sinclair]]
[[Categoria:BASIC]]
 
[[cs:Sinclair BASIC]]
[[en:Sinclair BASIC]]
[[es:Sinclair BASIC]]
[[hr:Sinclair BASIC]]
[[lt:Sinclair BASIC]]
[[nl:Sinclair BASIC]]
[[pl:Sinclair BASIC]]
[[pt:Sinclair BASIC]]
[[ru:Sinclair BASIC]]
[[sl:Sinclair BASIC]]