Movatterモバイル変換


[0]ホーム

URL:


Vai al contenuto
WikipediaL'enciclopedia libera
Ricerca

Commodore BASIC

Da Wikipedia, l'enciclopedia libera.

IlCommodore BASIC (nelle prime versioniPET BASIC) è il dialetto del linguaggioBASIC usato nella linea a8 bit deglihome computer dellaCommodore International, a partire dalPET del 1977 fino alC128 del 1985.

Il suo nucleo era basato sulMicrosoft BASIC adattato per il processoreMOS 6502. Date le sue origini, condivideva gran parte del codice con altri BASIC per 6502 del periodo, come l'Applesoft BASIC.

Digitazione di comandi sul Commodore PET

Storia

[modifica |modifica wikitesto]

Bill Gates offrì inizialmente una licenza basata sul pagamento di unaroyalty di 3 dollari per ogni installazione del suo interprete maJack Tramiel, il capo di Commodore, rifiutò la proposta con la frase "Sono già sposato", e proponendo un accordo sulla base di un esborso unico di 25.000dollari per una licenza perpetua ed illimitata (circolano differenti versioni sull'importo pagato, che oscilla a seconda delle fonti tra 10.000 e 30.000 dollari). Microsoft era allora una società ancora piccola ed alla ricerca perpetua di fondi, per cui Gates accettò la proposta e concesse a Commodore l'utilizzo del suo Microsoft BASIC con la licenza senzaroyalty;[1] parallelamente come laApple era riuscita ad ottenere una licenza perpetua senza ulterioriroyalties per l'Applesoft BASIC.

Caratteristiche

[modifica |modifica wikitesto]

L'interprete dei comandi ed il controllo degli errori

[modifica |modifica wikitesto]

L'interprete BASIC residente inROM e delKERNAL era una buona implementazione dell'editor a tutto schermo, che permetteva agli utenti di inserire e modificare comandi diretti o righe di programma ovunque sullo schermo — semplicemente premendo il tastoRETURN ogni volta che ilcursore si trovava su una riga contenente una istruzione BASIC valida. Ciò segnava un enorme passo avanti nelle interfacce di inserimento programmi in confronto ai BASIC presenti sugli home computer dell'epoca, che in genere utilizzavano degli editor di riga, richiamati da comandiEDIT o similari.

IlBASIC del C64 implementa anche un sistema dicontrollo degli errori che però non sempre risultava efficace, che permetteva di controllare la correttezza del caricamento in memoria dei programmi da nastro tramitedatassette. Questo avveniva esclusivamente con i salvataggi effettuati normalmente senza utilizzare programmi turbo: il programma tramite il comando "SAVE" veniva salvato due volte consecutivamente e, durante la fase di lettura del programma e in maniera totalmente invisibile all'utente, venivano lette entrambe le registrazioni e successivamente confrontate tra loro. Se le due copie non corrispondevano tra di loro veniva generato il "LOAD ERROR". Era inoltre possibile l'uso di loader/saver alternativi a quelli del sistema operativo, che permettevano dei caricamenti e salvataggi su cassetta più veloci. Un particolare segnale identificava l'inizio di un blocco dati (generalmente, un programma), e per poterlo trovare l'utente era generalmente costretto a scorrere lentamente la cassetta avviandola col tasto"Play".

Velocità nell'esecuzione

[modifica |modifica wikitesto]

Era tuttavia estremamente lento in confronto allinguaggio macchina. Test hanno dimostrato che per copiare 16kilobyte di memoria dallaROM allaRAM ci vuole meno di un secondo in linguaggio macchina, ma più di 2 minuti in BASIC. Per cercare di far fronte alla lentezza dell'interprete, i programmatori cominciarono ad usare vari trucchi per velocizzare l'esecuzione. Uno era quello di memorizzare valori interi usati frequentemente all'interno di variabili piuttosto che usarli direttamente, dal momento che interpretare il nome di una variabile portava via meno tempo rispetto all'estrapolazione del numero dal listato sorgente. Nonostante le righe di codice fossero numerate, l'ordine di esecuzione delle stesse non seguiva l'ordine numerico ma piuttosto l'ordine con cui erano immagazzinate in memoria. All'atto dell'inserimento del codice, le righe venivano automaticamente riordinate per seguire l'ordine numerico, ma andando a modificare (tramite le istruzioniPOKE) la memoria in cui veniva memorizzato il programma, si poteva rovinare la numerazione, ribaltandola o anche dando la stessa numerazione a tutte le righe, senza che ciò interferisse con l'esecuzione del programma (a parte le istruzioni di salto, come ad esempioGOSUB, che necessitano di un numero riga come parametro). La stessa caratteristica, comunque, poteva essere usata per rinumerare le righe di programma, in modo da far spazio a nuove istruzioni, nel caso si fosse utilizzato un incremento unitario tra una riga e l'altra non lasciando spazio per ulteriori linee di codice.

Itoken

[modifica |modifica wikitesto]

Itoken del Commodore BASIC potevano essere abbreviati inserendo la prima lettera (oppure le prime nel caso di token simili), seguite da una letterashiftata, ottenuta premendo contemporaneamente al tasto della lettera il tasto "SHIFT" (la lettera shiftata appariva sotto forma di un simbolo grafico). Il token abbreviato era riconosciuto allo stesso modo di quello completo; così si poteva immettere un numero maggiore di comandi nella linea Basic (il buffer di input accettava al massimo 88 caratteri). Una volta concluso l'input mediante Return, ogni token della linea Basic veniva quindi automaticamente convertito in un codice di un solo byte e così salvato in memoria. Il comando LIST provvedeva a fare rivedere i token, convertendo al volo i codici da 1 byte con i token. Il formato numerico nativo del Commodore BASIC, così come nel caso del suo progenitore Microsoft BASIC, era lavirgola mobile. Tutte le operazioni aritmetiche venivano eseguite usando numeri in questo formato; le operazioni tra interi implicavano la conversione degli operandi avanti e indietro dal formato a virgola mobile. Molte implementazioni di BASIC del periodo usavano 1 byte per l'esponente e 3 per lamantissa. Questo causava problemi nelle applicazioni gestionali in quanto l'accuratezza della virgola mobile con 3 byte di mantissa è di circa 6,5 cifre decimali, e gli errori di arrotondamento erano comuni. Commodore, invece, optò per una mantissa di 4 byte, che rese il suo BASIC molto più preciso, e quindi più adatto al mondo degli affari rispetto a molti altri BASIC del periodo.

Le variabili

[modifica |modifica wikitesto]

I nomi delle variabili erano limitati adue caratteri di lunghezza: i caratteri che eccedevano questo limite venivano ignorati. Questo significa che i nomi "AREA" ed "ARENA" si riferivano alla stessa variabile "AR". Era disponibile tuttavia la funzione di individuazione automatica delle parole chiave del linguaggio senza bisogno di spazi che separano i vari elementi grammaticali. Ad esempio è possibile scrivere

10 FORK=1TO10:PRINTK;"-ESIMO CICLO":NEXTK

Usando gli spazi si otterrebbe invece:

10 FOR K=1 TO 10:PRINT K; "-ESIMO CICLO":NEXT K

Questa caratteristica, pur rendendo il codice meno leggibile, permette di risparmiare la (poca) memoria a disposizione a quei tempi (la RAM necessaria per memorizzare gli spazi).

Nonostante riduca la leggibilità, questa caratteristica può rendere il codice ambiguo per il sistema:

 IFSTAND64THENSTOP

contiene diverse "combinazioni" di token validi (alcune semanticamente significative ed altre no):

 IF S TAN D64 THEN STOP
 IF ST AND 64 THEN STOP

tuttavia, l'individuazione dei token da parte del sistema riconoscerà un'unica forma, la prima nell'esempio precedente, perché vengono individuati tutti i token presenti nell'ordine della scrittura: IF, TAN, THEN e STOP (ST è una variabile riservata, ma non ha un token ed è gestita dalla routine di gestione delle variabili come un'eccezione).

Estensioni

[modifica |modifica wikitesto]

Cronologia delle versioni

[modifica |modifica wikitesto]

BASIC 1.0

[modifica |modifica wikitesto]

Implementato nelPET 2001

  • bug: array limitati a 256 elementi
  • bug: il comandoPEEK falliva per locazioni di memoria superiori a $C000

BASIC 2.0

[modifica |modifica wikitesto]
Il Commodore BASIC 2.0 su un Commodore 64

Utilizzato nelPET 2001 con una tastiera e ROM aggiornate, nelVIC-20 e nelC64

  • corretti la maggior parte degli errori della 1.0
  • Easter egg del PET – inserire WAIT 6502,1

BASIC 4.0

[modifica |modifica wikitesto]

Implementato nelPET/CBM 4000/8000 (e ultime versioni del PET 2001)

  • nuove operazioni sufloppy disk:DLOAD,DSAVE,COPY,SCRATCH, etc (15 in tutto)
  • variabili di stato per gli errori su disco:DS,DS$

BASIC 4+

[modifica |modifica wikitesto]

Utilizzato nelCBM-II (Modelli B e P).

  • aggiunti i comandiDCLEAR,BANK,BLOAD,BSAVE,DISPOSE. Questi comandi verranno poi implementati tutti sul C128 (successore della serie CBM-II che fu un disastro e venne ritirata quasi subito dal mercato) tranneDISPOSE in quanto non più necessario a causa di una diversa gestione dello stack. I token dei comandi sono però diversi tra CBM-II e C128 limitando la portabilità binaria dei sorgenti.

BASIC 3.5

[modifica |modifica wikitesto]
La versione 3.5 su un Commodore 16

Utilizzato sulC16/116 e sulPlus/4

  • comandi grafici e sonori:GRAPHIC, CIRCLE, PAINT, DRAW, BOX, SOUND, VOL, etc.
  • gestione portajoystick:JOY
  • conversioneesadecimale:DEC(),HEX$()
  • lettura flessibile datiDATA:RESTORE [numeroriga]
  • funzione di ricerca stringhe:INSTR
  • formattazione della stampa:PRINT USING,PUDEF
  • supporto all'esecuzione codice per condizioni (IF) che risultano false:ELSE
  • cicli strutturati:DO,LOOP,WHILE,UNTIL,EXIT
  • assegnazione funzioni ai tasti funzione:KEY (anche modalità diretta)
  • inserimento/editazione programmi:AUTO,DELETE,RENUMBER
  • gestione dinamica degli errori:TRAP,RESUME,ERR$()
  • istruzioni didebug (tracing):TRON,TROFF
  • Monitor di sistema:MONITOR
  • Easter egg sul C(1)16 e Plus/4 – SYS 52650

BASIC 7.0

[modifica |modifica wikitesto]

Adoperato nelC128

  • ulteriori comandi grafici e sonori, inclusa la gestione deglisprite
  • gestionepaddle epenna ottica:POT,PEN
  • funzione dior esclusivo:XOR
  • recupero indirizzo delle variabili:POINTER
  • gestione finestre in modalità testo:WINDOW
  • istruzione di attesa temporizzata:SLEEP
  • gestione della memoria:BANK,SWAP,FETCH,STASH
  • ulteriori operazioni su disco:BOOT,BLOAD,BSAVE,DVERIFY,DCLEAR
  • regolazione della velocità della CPU:FAST,SLOW (2 e 1 MHz rispettivamente)
  • comando non documentato:RREG (legge i registri della CPU dopo l'esecuzione di un comandoSYS)
  • comandi non documentati e non funzionanti:OFF,QUIT
  • Easter egg su C128 – SYS 32800,123,45,6

BASIC 10

[modifica |modifica wikitesto]

Versione progettata per ilCommodore 65, ma che non venne mai pubblicata. Tra le caratteristiche vi erano:

  • comandi grafici e video:PALETTE,GENLOCK
  • gestionemouse:MOUSE,RMOUSE
  • gestione file testuali sequenziali:TYPE
  • editazione programmi:FIND,CHANGE
  • gestione della memoria:DMA,FRE(0|1|2)
  • comandi non implementati:PAINT,LOCATE,SCALE,WIDTH,SET,VIEWPORT
    PASTE,CUT

Note

[modifica |modifica wikitesto]
  1. ^Affermazione diJack Tramiel alle celebrazioni del 25º Anniversario delCommodore 64 alComputer History Museum, avvenuto il 10 dicembre2007Copia archiviata, sucomputerhistory.org.URL consultato il 13 settembre 2008(archiviato dall'url originale l'11 dicembre 2008).[1]

Bibliografia

[modifica |modifica wikitesto]

Voci correlate

[modifica |modifica wikitesto]

Altri progetti

[modifica |modifica wikitesto]

Altri progetti

Collegamenti esterni

[modifica |modifica wikitesto]
V · D · M
Commodore International
Personal computer a8 bit
produzione in serieCBM KIM-1 ·Commodore PET ·Commodore CBM ·Commodore CBM-II (serie B/P) ·Commodore VIC-20 ·Commodore 64 ·Commodore MAX ·Commodore Educator 64 ·Commodore SX-64 ·Commodore DX-64 ·Commodore 16 ·Commodore 116 ·Commodore Plus/4 ·Commodore +4 ·Commodore 128
prototipiCommodore SX-100 ·Commodore 232 ·Commodore 264 ·Commodore V364 ·Commodore LCD ·Commodore 65
Personal computer a16/32 bit
produzione in seriePC compatibili ·Amiga 1000 ·Amiga 500 ·Amiga 2000 ·Amiga 2000HD ·Amiga 2500 ·Amiga 2500/30 ·Amiga 2500UX ·Amiga 1500 ·Amiga 500 Plus ·Amiga 3000 ·Amiga 3000UX ·Amiga 3000T ·Amiga 3000T-040 ·Amiga 600 ·Amiga 600HD ·Amiga 1200 ·Amiga 1200HD ·Amiga 1200HD/40 ·Amiga 4000/030 ·Amiga 4000/040 ·Amiga 4000T
prototipiCommodore 900 ·Ranger ·AA3000 ·A3000+ ·Nyx
Giochi degliscacchi
produzione in serieCommodore CHESSmate
Console dedicate
produzione in serieCommodore TV Game 2000K ·Commodore TV Game 3000H ·Commodore 64 DTV
Console a8 bit
produzione in serieCommodore 64 Games System
Console a16/32 bit
produzione in serieAmiga CD32
Lettoristand-alone diCD-ROM
produzione in serie
Commodore CDTV
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica
Estratto da "https://it.wikipedia.org/w/index.php?title=Commodore_BASIC&oldid=145226541"
Categorie:
Categoria nascosta:

[8]ページ先頭

©2009-2025 Movatter.jp