Sinclair BASIC

De Viquipèdia
Dreceres ràpides: navegació, cerca
Sinclair Basic
Paradigma de programació: imperatiu
Desenvolupador: Nine Tiles Networks
Sinclair Research
Influenciat per: BASIC
Ha influenciat: SuperBASIC

Sinclair Basic és el nom que rep el BASIC implementat a la Memòria ROM dels microordinadors Sinclair des del ZX80 fins a les diferents versions del ZX Spectrum. Aquests ordinadors es van comercialitzar des de 1980 (model Sinclair ZX80) fins a 1992 (models Amstrad/Sinclair ZX Spectrum).[1]

Història[modifica | modifica el codi]

Generació de la catifa de Sierpinski al Sinclair ZX Spectrum (14m 39s).

El Sinclair Basic va ser desenvolupat originalment el 1979 per l'empresa «Nine Tiles Networks Ltd.» com una versió mínima del BASIC estàndard amb 4 KiB, per al Sinclair ZX80. Va evolucionar per a 8 KiB en el Sinclair ZX81 i per a una versió versió gairebé completa de 16 KiB en el ZX Spectrum.[2]

Varen existir versions d'aquest llenguatge per a clònics del Sinclair Spectrum, com l'estatunidenc Timex Sinclair 2068 («Timex Basic») i el brasiler Microdigital TK 90X («TK BASIC»),[3] que han afegit ordres addicionals, no trobades en el Sinclair Basic original.

Diferències respecte al BASIC estàndard[modifica | modifica el codi]

Sintaxi[modifica | modifica el codi]

En general, el Sinclair Basic és un BASIC clàssic que utilitza nombres de línia i no admet programació estructurada.[4]

Un detall addicional per als usuaris del «ZX Spectrum» anterior al model de 128K era que cada ordre estava emmagatzemada en una tecla diferent, de manera que per escriure:

10 FOR A=1 TO 2*PI

Calia escriure:

10 F A=1 <SYMBOL-SHIFT>-<F> 2* <SYMBOL-SHIFT>-<ALT-SHIFT>-<M>
  • Això tenia com a objecte simplificar l'anàlisi sintàctica de programes, ja que permetia emmagatzemar les comandes com dígits de control (caràcters 165 endavant). En aquest sentit, els programes del Sinclair BASIC s'assemblen als programes emmagatzemats en «format binari» de BASICA o GW-BASIC.[5]
  • Un altre detall addicional és que les funcions no porten parèntesis.
  • A diferència d'ANSI BASIC, però dins del que és habitual en els BASIC actuals, s'accepten variables amb noms de qualsevol longitud.
  • L'ús de «LET» és obligatori.
  • Hi ha una diferència important en el maneig de variables de cadena. Les variables de cadena es tracten, com en C, com a matrius:
10 LET A$="ZXSPECTRUM"
20 PRINT A$(TO 3):REM "ZXS"
30 PRINT A$(4 TO 6):REM "PEC"
40 PRINT A$(7):REM "T"
50 PRINT A$(8 TO):REM "RUM"
  • Només es suporta un tipus de variable numèrica.
  • A diferència de la majoria dels BASIC, i de fet, de la majoria dels llenguatges, accepta espais en els noms de les variables:
10 LET nomes una cosa=1
20 PRINT nomes una cosa

Operadors[modifica | modifica el codi]

  • No hi ha operador de mòdul.
  • «AND» pot actuar de forma equivalent a l'operador «?» de C:
10 PRINT "TINC " + ("FAM" AND MENJAR <0) + ("FRED" AND TEMPERATURA <10)

Ramificació i subrutines[modifica | modifica el codi]

  • «DO», «WHILE», «WEND», «ELSE» i «END IF» no estan suportats.
  • Es suporta «DEF FN», que ha d'estar definit com una operació matemàtica.
  • No són suportades etiquetes ni «ON GOTO», però la línia a la qual salta el «GOTO» pot estar continguda en una variable:
10 LET FI=40
20 GOTO FI
30 PRINT "AIXO' NO S'IMPRIMEIX"
40 PRINT "FI DEL PROGRAMA"

Instruccions d'entrada/sortida[modifica | modifica el codi]

  • Les principals diferències amb BASIC estan en les operacions d'arxiu. Es suporten «LOAD», «SAVE» i «MERGE» per a accés a cinta magnètica, així com «CAT», «PRINT», «INPUT», «OPEN#» i «CLOSE#» per a accés a disc en els models dotats d'aquest perifèric.
  • «PRINT» admet «AT» (reemplaçant a «LOCATE»), «TAB» i el separador «'», d'avanç de línia. «PRINT#» significa «escriure a la part inferior de la pantalla», no en arxiu. Les instruccions de color «PAPER» (fons), «INK» (primer pla), «OVER» (sobreescriptura) i «FLASH» (parpelleig) també poden utilitzar-se com atributs de «PRINT».
  • Les instruccions de dibuix són «PLOT» (dibuixar un punt), «DRAW» (dibuixar una línia des de l'últim punt) i «CIRCLE» (cercle).

Resum[modifica | modifica el codi]

Els següents quadres comparen el Sinclair Basic amb un BASIC original no estructurat, utilitzant el programa d'exemple que apareix en l'article de la Viquipèdia en anglès sobre BASIC:

Exemple 1 - BASIC original no estructurat (Applesoft BASIC)
10 INPUT "Com es diu ? ";U$
20 PRINT "Hola ";U$
30 INPUT "Quants asteriscs desitja ? ";N
35 S$=""
40 FOR I=1 TO N
50 S$=S$+"*"
55 NEXT I
60 PRINT S$
70 INPUT "Voleu més asteriscs ? ";A$
75 PRINT
80 IF LEN (A$)=0 THEN GOTO 70
90 A$=LEFT(A$,1)
100 IF (A$="S") OR (A$="s") THEN GOTO 30
110 PRINT "Adéu ";
120 FOR I=1 TO N
130 PRINT U$;"";
140 NEXT I
150 PRINT
Exemple 2 - Sinclair Basic
5 OVER 1: REM usat en combinació amb CHR$ 8 per produir accents.
10 INPUT "Com es diu? ";U$
20 PRINT "Hola ";U$
30 INPUT "Quants asteriscs desitja? ";N
35 LET S$=""
40 FOR I= 1 TO N
50 LET S$=S$+"*"
55 NEXT I
60 PRINT S$
70 PRINT "Voleu me";CHR$ 8;"'s asteriscs? ";: INPUT A$
80 PRINT: IF LEN A$=0 THEN GOTO 70
90 LET A$=A$(1)
100 IF (A$="S") OR (A$="s") THEN GOTO 30
110 PRINT "Ade";CHR$ 8;"'u ";
120 FOR I=1 TO N
130 PRINT U$;" ";
140 NEXT I
150 PRINT:OVER 0

Referències[modifica | modifica el codi]

  1. «How the Spectrum began a revolution» (en anglès). BBC, 23-04-2007. [Consulta: 10-09-2011].
  2. «Sinclair BASIC History» (en anglès). sctrachpad.wikia.com. [Consulta: 10-09-2011].
  3. Marcelo Martins. «TK90X» (en portuguès). Clube do TK90X, 26-08-2011. [Consulta: 10-09-2011].
  4. Sir Norris. «Sinclair BASIC» (en anglès), 21-03-2005. [Consulta: 10-09-2011].
  5. Norman L. De Forest. «GW-BASIC tokenised program format» (en anglès). [Consulta: 02-10-2011].

Enllaços externs[modifica | modifica el codi]