MBASIC: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Corretto: "erano però" |
|||
(16 versioni intermedie di 10 utenti non mostrate) | |||
Riga 1:
▲Il [[linguaggio di programmazione]] '''MBASIC''' è una versione del [[Microsoft BASIC]] sviluppata da [[Microsoft]] per i [[sistema operativo|sistemi operativi]] [[CP/M]]. L'MBASIC era uno dei 2 linguaggi BASIC contenuti nel pacchetto software offerto da [[Osborne Computer Corporation]] insieme ai suoi [[Osborne 1]], [[Osborne Executive]] e [[Osborne Vixen]].
==Caratteristiche tecniche==
===Interazione con il sistema===
L'MBASIC versione 5 richiedeva un sistema CP/M con almeno 28 [[byte|kB]] di memoria [[
L'MBASIC non usava tutti i servizi del CP/M ma solo la [[terminale (informatica)|console]], la gestione della stampante e l'accesso ai [[floppy disk|floppy]]: il linguaggio non supportava la modalità [[Computer grafica|grafica]], i colori, i [[joystick]], il [[mouse]], le [[Local Area Network|reti locali]], il suono o gli [[Real-time clock|orologi in tempo reale]]. Inoltre l'MBASIC non supportava le aree utente messe a disposizione
===L'editor del linguaggio===
L'MBASIC era un [[linguaggio interpretato]]: il [[codice sorgente]] veniva salvato in memoria in forma di [[token (testo)|token]], ossia con le parole chiave del BASIC convertite in un singolo byte per risparmiare memoria. Ogni riga di testo inserita a video che iniziava con un numero veniva considerata come linea di codice e salvata in RAM, tutto il resto era considerato come un comando diretto ed eseguito immediatamente.
Il programma salvato in memoria poteva essere stampato a video oppure salvato su disco, sia nella forma compressa in token sia come testo [[ASCII]]. I numeri di riga erano utilizzati dalle istruzioni [[GOTO]] e [[GOSUB]] per le operazioni di salto. L'[[editor (informatica)|editor]] forniva solo funzionalità base, e conveniva salvare il sorgente in formato ASCII per poi modificarlo con un editor di testo vero e proprio.
Riga 32 ⟶ 15:
===Gestione della memoria===
Il programma, le [[Variabile (informatica)|variabili]] ed il [[buffer]] del disco dell'MBASIC condividevano con il CP/M la stessa memoria del sistema su cui giravano: su un sistema con 64 kB di RAM (il massimo indirizzabile da un processore ad 8 bit quale l'8080 o lo Z80) avviando l'interprete, che consumava 28 kB, restavano meno di 32 kB per il programma ed i suoi dati. Per questo motivo i programmatori non usavano inserire commenti nel codice, operazione fattibile con la parola chiave <code>REM</code>, dato che essi venivano memorizzati in formato ASCII, consumando 1 byte per carattere.
Per permettere di eseguire programmi molto grandi, le ultime versioni dell'MBASIC introdussero le istruzioni <code>CHAIN</code> e <code>MERGE</code>: la prima passava l'esecuzione ad un altro programma mentre la seconda caricava un programma unendolo a quello presente in memoria. Non c'era però il supporto all'esecuzione di programmi da terminale (l'istruzione <code>SHELL</code> presente in altri dialetti del BASIC), che permetteva di passare temporaneamente il controllo ad un comando del terminale per implementare funzioni del sistema operativo non supportate dall'MBASIC.
===Gestione dei file ed I/O===
I dati potevano essere letti o salvati su disco sia come file sequenziali, delimitati alla fine di ogni riga con la coppia di caratteri CR/LF ("carriage return"/"line feed") tipica del CP/M, sia come file ad accesso causale con campi di dimensione prefissata, che potevano essere utilizzati anche per implementare una rudimentale forma di [[database]]. I [[numero in virgola mobile|numeri in virgola mobile]] venivano salvati in formato MBF (''Microsoft Binary Format''), una codifica proprietaria che Microsoft usava in tutti i suoi BASIC che offriva una rappresentazione più precisa rispetto all'[[IEEE 754]] normalmente adottato dagli altri dialetti BASIC ma incompatibile con esso. I dati salvati in formato MBF potevano perciò essere letti solo su un computer che usava un BASIC Microsoft.
===Variabili
L'MBASIC supportava i seguenti [[Tipo di dato|tipi di dato]]:
* tipo [[Carattere (informatica)|carattere]] ad [[8 bit]], con [[Stringa (informatica)|stringhe]] lunghe massimo 255 caratteri;
* [[Numero intero (informatica)|interi]] a [[16 bit]];
* numeri in virgola mobile a [[32 bit]] (singola precisione), equivalenti a 6 cifre decimali con 2 cifre per l'esponente;
* numeri in virgola mobile a [[64 bit]] (doppia precisione), equivalenti a 16 cifre decimali con 2 cifre per l'esponente.
Gli operatori sulle stringhe includevano la selezione di parti delle stesse, la concatenazione, l'assegnamento, ed i test di uguaglianza.
I [[Array|vettori]] potevano avere fino a 7 dimensioni ma nessuna funzione od operatore poteva operare su di essi: ad esempio, non si potevano eseguire operazioni di assegnamento. A differenza di altri dialetti BASIC di quel periodo, l'MBASIC non supportava le operazioni sulle [[matrice|matrici]] ed i [[Numero complesso|numeri complessi]] né un tipo di [[Binary-coded decimal|dato decimale (BCD)]].
Tutte le operazioni in virgola mobile erano eseguite via software dato che quasi nessun sistema CP/M aveva un [[coprocessore matematico]]: per questo motivo le funzioni matematiche precostituite quali il [[Seno (matematica)|seno]], il [[coseno]], la [[Tangente (matematica)|tangente]], il [[logaritmo naturale]], la [[funzione esponenziale]], la [[radice quadrata]], davano solo risultati in singola precisione.
L'MBASIC fornva anche un [[Numeri pseudo-casuali|generatore di numeri pseudo-casuali]], a cui l'utente poteva fornire un "seme" usato per ottenere una sequenza di numeri utili per i giochi o le simulazioni.
L'MBASIC consentiva l'uso della parola chiave <code>LET</code> per la dichiarazione delle variabili, anche se il suo uso non era obbligatorio. A differenza dei primi dialetti BASIC, l'MBASIC non limitava l'uso dei nomi delle variabili a 2 soli caratteri ma permetteva di usarne fino a 40 (MBASIC 5), consentendo così ai programmatori di usare nomi più indicativi del valore che conservavano.
===Strutture di controllo===
Nell'MBASIC il flusso del programma era gestito tramite le [[Struttura di controllo#Strutture di controllo della programmazione strutturata|strutture di controllo]] <code>IF...THEN...ELSE</code> e <code>WHILE...WEND</code> e le istruzioni di salto <code>[[GOTO]]</code> e <code>GOSUB</code>. All'assenza dell'istruzione <code>CASE</code>, per la scelta fra più di 2 opzioni, si sopperiva con l'istruzione di salto multiplo <code>ON...GOTO</code>. Le sub-routine non aveva parametri e tutte le variabili erano globali. L'MBASIC non metteva a disposizione strumenti per la [[programmazione strutturata]] ed era facile scrivere "[[spaghetti code]]".
==PEEK, POKE e funzioni definite dall'utente==
Come per tutti gli altri dialetti BASIC dei computer ad 8 bit dei primi [[anni 1980|anni ottanta]], anche nell'MBASIC le funzioni [[PEEK e POKE]] rivestivano un ruolo importante dato che permettevano di leggere e scrivere direttamente nella memoria dell'elaboratore. Data l'assenza di sistemi di [[protezione della memoria]], il programmatore poteva accedere direttamente al [[sistema operativo]] od a funzioni normalmente non permesse dai comandi a disposizione: ad esempio, con una <code>POKE</code> in un sistema CP/M, se il suo [[BIOS]] supportava questa funzione, si poteva passare il terminale sulla [[porta seriale]]; nei computer con un [[Real-time clock|orologio in tempo reale]], una serie di <code>PEEK</code> permetteva di leggerne l'orario.
L'MBASIC permetteva all'utente di definire delle funzioni che potevano essere poi richiamate da un programma: queste funzioni erano di solito salvate in un'area riservata della memoria oppure inserite tramite <code>POKE</code> in costanti di tipo stringa come una serie di istruzioni in [[linguaggio macchina]].
Erano inoltre disponibili le istruzioni <code>INP</code> e <code>OUT</code> per leggere e scrivere direttamente nelle porte di I/O dell'8080: grazie a ciò si poteva controllare direttamente una periferica. Su alcuni computer CP/M, come il diffuso [[Osborne 1]], tutte le istruzioni di I/O erano però riservate dal sistema.
{{see|BASIC}}▼
Programmi in MBASIC che usavano <code>PEEK</code>, <code>POKE</code> o le funzioni scritte in linguaggio macchina non erano però eseguibili su macchine differenti da quelle per cui erano stati scritti.
==Varianti e derivati==
Microsoft mise in commercio anche un [[compilatore]] BASIC per il CP/M denominato '''BASCOM''', che aveva una sintassi simile a quella dell'MBASIC tanto che un programma sviluppato in MBASIC poteva essere compilato con il BASCOM: il software compilato non solo occupava meno memoria grazie alle ridotte dimensioni dell'eseguibile rispetto ad un sorgente in BASIC, mettendo quindi a disposizione dell'utente più memoria libera per i dati delle proprie applicazioni, ma risultava mediamente dalle 8 alle 10 più veloce dell'originale.
Tutte le chiamate alle funzioni del CP/M che erano integrate nell'MBASIC furono convertite per i sistemi [[PC-DOS]]/[[MS-DOS]] e rese disponibili nei BASIC che Microsoft sviluppò per i [[PC IBM]], il [[BASICA]] ed il [[GW-BASIC]]. I token usati per rappresentare le parole chiave del linguaggio erano però differenti per cui per trasportare un programma MBASIC in BASICA/GW-BASIC l'utente doveva salvare il listato in testo [[ASCII]].
==
* {{cita libro|autore=Thom Hogan|coautori=Mike Iannamico|titolo=Osborne 1 User's Reference Guide|anno=1982|editore=Osborne Computer Corporation}}
* {{cita libro|autore=David A. Lien|titolo=The BASIC Handbook - 2nd Edition Encyclopedia of the BASIC Computer Language|anno=1981|editore=Compusoft Publishing}}
Riga 85 ⟶ 65:
* [[BASIC]]
* [[Altair BASIC]]
* [[Microsoft BASIC]]
{{Portale|Informatica}}
[[Categoria:BASIC]]
|