Sinclair BASIC: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Funzionalità collegamenti suggeriti: 1 collegamento inserito.
 
(28 versioni intermedie di 20 utenti non mostrate)
Riga 1:
Il '''Sinclair BASIC''' (dal nome del poliedricodi Sir [[Clive Sinclair]]) è un dilaettodialetto 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.''.
{{WIP|Leo72}}
Il '''Sinclair BASIC''' (dal nome del poliedrico Sir [[Clive Sinclair]]) è un dilaetto 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.
[[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 richeista]]
* 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.
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 sidoveva 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 seuqenza di tasti SHIFT che era necessaria. Quello che segue è l'elenco delle parole chiave (quelle <u>sottolineate</u> sono funzioni):
* 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 ===
:<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>, <u>VAL</u><sup><small>3, 6</small></sup>, <u>VAL$</u><sup><small>3</small></sup>, VERIFY
* 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''"==
[[Category:=== 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 richeistarichiesta]]
 
Sullo ZX Spectrum c'erano 86 parole riservate al Sinclair BASIC: queste includevano ''comandi'' (ce ne n'erano 50), ''funzioni'' (31) ed ''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 sidovevasi 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 seuqenzasequenza 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.
 
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>8</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 15 ⟶ 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 [[tokenToken (informaticatesto)|token]] residente in ROM. Come conseguenza di ciò, in un programma le parole riservate occupavano giusto 1 [[byte]] di memoria, un metodo che garantiva un ottimo risparmio di memoria rispetto ai sistemi di memorizzazione tradizionali lettera-per-lettera (un sistema utilizzato anche sui computer [[Commodore BASIC|Commodore]]). L'interprete BASIC poteva, inoltre, riconoscere i comandi o le funzioni analizzando un singolo byte del listato.
 
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 22 ⟶ 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.
 
A differenza dei dialetti BASIC per home computer derivati dal [[Microsoft BASIC]], le funzioni <code>LEFT$()</code>, <code>MID$()</code> e <code>RIGHT$()</code> del Sinclair BASIC accedevano alle stringhe come [[array]]: ad esempio, <code>A$ (5 TO 10)</code> restituiva una sottostringa contenente i caratteri di <code>A$</code> compresi fra il 5° ed il 10°. Come nei moderni linguaggi di programmazione quali il [[Python]], era possibile rimpiazzare i comandi <code>LEFT$()</code> e <code>RIGHT$()</code> semplicemente omettendo la parte sinistra o destra del parametro: per questo motivo <code>A$ ( TO 5)</code> è equivalente a <code>LEFT$(A$,5)</code>.
<!--
Unlike the LEFT$(), MID$() and RIGHT$() functions used in the ubiquitous [[Microsoft BASIC]] dialects for home computers, parts of strings in Sinclair BASIC are accessed in a manner similar to arrays. For example, A$ (5 TO 10) will give a substring starting with the 5th and ending with the 10th character of A$. As with modern programming languages such as Python, it was therefore possible to replace the LEFT$() and RIGHT$() commands simply by omitting the left or right array position respectively; for instance A$ ( TO 5) is equivalent to LEFT$(A$,5).
 
==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 chiave aggiuntive:
 
* <code>DELETE</code> cancellava un intervallo di linee del programma BASIC
The '''Timex BASIC''' dialect, used on the Spectrum-compatible [[Timex Sinclair 2068|TS2068]], but not the [[Timex Computer 2048|TC2048]], which used the ordinary Sinclair BASIC, has the following six keywords as well as the ordinary Sinclair BASIC ones:
* <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>.
* DELETE deletes BASIC program line ranges. SHIFT + 0 with the K cursor produces the command DELETE.
* <code>RESET</code> resettava la macchina e le periferiche.
* FREE is a function that gives the amount of free RAM. PRINT FREE will show how much RAM is free.
* <code>SOUND</code> pilotava il chip audio AY-3-8192.
* ON ERR is an error detection function mostly used as ON ERR GO TO or ON ERR GO SUB.
* <code>STICK</code> leggeva la posizione del [[joystick]] interno ([[Timex Sinclair 2090]]).
* RESET can be used to reset the machine. It was intended to reset peripherals.
* SOUND commands the AY-3-8192 sound chip.
* STICK is a function that gives the position of the internal joystick (Timex Sinclair 2090).
 
==See alsoBibliografia==
*{{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}}
*[[Beta BASIC]], written by Dr. Andy Wright, was originally a [[BASIC extension]], but ended up as a full-fledged interpreter.
* {{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}}
*[[SuperBASIC]], a much more advanced BASIC dialect, introduced with the [[Sinclair QL]] personal computer, with some similarities to the earlier Sinclair BASICs.
* {{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=}}
*Vickers, {{en}} Steven (1982).Vickers, ''[http://www.worldofspectrum.org/ZXBasicManual/ Sinclar ZX Spectrum BASIC Programming]''., Sinclair Research., 1982
*Ardley, {{en}} Neil (1984).Ardley, ''Sinclair ZX Spectrum+ User Guide''., [[Dorling Kindersley]] in associationassociazione withcon Sinclair Research., 1984, ISBN 0-86318-080-9.
 
==ReferencesVoci correlate==
* [[cs:SinclairBeta BASIC]]
*Vickers, Steven (1982). ''Sinclar ZX Spectrum BASIC Programming''. Sinclair Research.
* [[SuperBASIC]]
*Ardley, Neil (1984). ''Sinclair ZX Spectrum+ User Guide''. [[Dorling Kindersley]] in association with Sinclair Research. ISBN 0-86318-080-9.
 
==ExternalCollegamenti linksesterni==
* [http://www.worldofspectrum.org/ZXBasicManualZX81BasicProgramming/ Sinclair ZXZX81 Spectrum BASICBasic Programming] — The original 1982 manual by{{Webarchive|url=https://web.archive.org/web/20070422024127/http://www.worldofspectrum.org/ZX81BasicProgramming/ Steven|date=22 Vickersaprile (referenced2007 above)}}
* Andrew Owen, [http://scratchpad.wikia.com/wiki/Sinclair_BASIC_History The History of Sinclair BASIC] — By Andrew Owen, whose Sinclair BASIC documents are hosted by the World of Spectrum website
*[http://www.worldofspectrum.org/ZX81BasicProgramming/ Sinclair ZX81 Basic Programming] — also by Vickers
*[http://scratchpad.wikia.com/wiki/Sinclair_BASIC_History The History of Sinclair BASIC] — By Andrew Owen, whose Sinclair BASIC documents are hosted by the World of Spectrum website
 
{{Portale|informatica}}
[[Category:ZX Spectrum]]
[[Category:Sinclair Research]]
[[Category:BASIC interpreters]]
-->
 
[[Categoria:Computer Sinclair]]
[[cs:Sinclair BASIC]]
[[enCategoria:Sinclair BASIC]]
[[es:Sinclair BASIC]]
[[lt:Sinclair BASIC]]
[[nl:Sinclair BASIC]]
[[pl:Sinclair BASIC]]
[[pt:Sinclair BASIC]]
[[ru:Sinclair BASIC]]
[[sl:Sinclair BASIC]]