MBASIC: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
m Corretto: "erano però"
 
(12 versioni intermedie di 9 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]].
{{Infobox Software
| nome = MBASIC
| logo =
| screenshot =
| didascalia =
| sviluppatore = [[Microsoft Corporation]]
| versione ultimo rilascio = 5
| data ultimo rilascio = --
| versione beta =
| data versione beta =
| sistema operativo = [[CP/M]]
| linguaggio = [[BASIC]]
| genere = [[Linguaggio di programmazione|Programmazione]]
| licenza = [[software proprietario]]
| sito web = --
}}
 
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 [[Random Access Memory|RAM]] libera ed almeno un'[[floppy disk drive|unità floppy]]. A differenza del BASIC-80, la versione per computer con [[CPU]] [[Intel 8080|8080]]/[[Zilog Z80|Z80]] dell'[[Altair BASIC]] che Microsoft distribuiva personalizzato per lo specifico [[hardware]] del sistema su cui doveva poi girare, l'MBASIC si appoggiava direttamente al sistema CP/M, sfruttandone le chiamate di sistema per la gestione delle operazioni di [[input/output]], ed era in questo modo indipendente dall'hardware sottostante.
 
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 deldal CP/M per l'organizzazione dei file sul disco. Siccome il CP/M era un sistema pensato per computer mono-utente, anche l'MBASIC non supportava nessuna forma di [[multitasking]] come ad esempio il blocco dei file. Nonostante queste limitazioni, l'MBASIC era considerato comunque un BASIC potente e funzionale.
 
===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.
Riga 50 ⟶ 33:
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 (trigonometriamatematica)|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_controlloStruttura di controllo#Strutture_di_controllo_della_programmazione_strutturataStrutture 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 '80ottanta]], 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]].
Riga 66 ⟶ 49:
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.
 
Programmi in MBASIC che usavano <code>PEEK</code>, <code>POKE</code> o le funzioni scritte in linguaggio macchina non peranoerano però eseguibili su macchine differenti da quelle per cui erano stati scritti.
 
==Varianti e derivati==
{{main|Microsoft BASIC}}
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]].
 
==Riferimenti Bibliografia ==
* {{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 86 ⟶ 69:
 
[[Categoria:BASIC]]
 
[[de:MBASIC]]
[[en:MBASIC]]
[[fa:ام بیسیک]]