MBASIC: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
m Corretto: "erano però"
 
(18 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]].
{{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.
 
Uno dei punti di forza dell'MBASIC erano i suoi messaggi di errore in formato testuale, che aiutavano nell'individuazione degli errori di sintassi e di esecuzione. L'MBASIC aveva anche la funzione <code>TRACE</code> che visualizzava i numeri di riga man mano che venivano eseguiti dall'interprete, utile per ricercare eventuali errori logici nel programma (ad esempio: cicli infiniti).<!--
===Iterazione con il sistema operativo===
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 dati dello stesso. I commenti inseriti nel codice con la parola chiave <code>REM</code> venivano perciò ridotti al minimo dato che il testo veniva memorizzato 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 della memoria===
Uno dei punti di forza dell'MBASIC erano i suoi messaggi di errore in formato testuale, che aiutavano nell'individuazione degli errori di sintassi e di esecuzione. L'MBASIC aveva anche la funzione <code>TRACE</code> che visualizzava i numeri di riga man mano che venivano eseguiti dall'interprete, utile per ricercare eventuali errori logici nel programma (ad esempio: cicli infiniti).<!--
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.
 
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 dati dello stesso. I commenti inseriti nel codice con la parola chiave <code>REM</code> venivano perciò ridotti al minimo dato che il testo veniva memorizzato 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.
=== Files and input/output ===
Data could be read and stored to disk as either sequential files (delimited by the CP/M convention of CR/LF at the end of each line) or else as fixed-record-length random access files, which, given a sufficiently determined programmer, could be used to perform database-type record manipulation. The [[Microsoft Binary Format]] for [[floating point]] numbers was proprietary to the implementation, which meant that data could only be interchanged with other programs using ASCII text representation or else with extensive programming to convert the binary format.
 
===Gestione Variablesdei andfile data typesed 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.
MBASIC supported the following data types:
* 8-bit character data, in strings of length 0 to 255 characters;
* 16-bit integers;
* 32-bit [[floating point]] (single precision), equivalent to six decimal digits, with a two-digit exponent;
* 64-bit floating point (double precision), equivalent to sixteen decimal digits, with a two-digit exponent.
 
===Variabili e tipi di dato===
String operators included substring selection, concatenation, assignment, and testing for equality.
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.
Arrays of the above types were allowed with up to 7 dimensions, but no functions or operators worked on arrays; for example, there was no assignment of arrays. Unlike some other BASIC implementations of the time, MBASIC did not provide support for [[matrix (mathematics)|matrix]] operations, [[complex number]]s, or a [[binary coded decimal|decimal (BCD)]] data type for financial calculations. All floating point operations were carried out in software since typical CP/M systems did not have [[floating-point unit|floating point hardware]]. The built-in mathematics functions (sine, cosine, tangent, natural log, exponential, square root) only gave single precision results. A software [[pseudorandom number generator]] was provided; this relied on the user to key in a seed number to obtain a sequence of numbers useful for games and some simulations. MBASIC permitted but did not require the <code> LET </code> keyword for assignment statements.
 
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)]].
Early versions of BASIC on microcomputers were infamous for one- or two-character variable names, which made the meanings of variables difficult to recall in complex programs. MBASIC version 5 allowed identifiers up to 40 characters long, which permitted programmers to give variables readable names.
 
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.
=== Program flow control ===
Program flow control in MBASIC was controlled by <code> IF...THEN...ELSE... </code> conditional tests, <code> WHILE...WEND </code> loops, and <code> GOTO </code> and <code> GOSUB </code> instructions. No <code> CASE </code> statement was available, although an <code> ON...GOTO... </code>(computed GOTO) provided multi-way branches. Subroutines had no parameters and all variables were global. MBASIC did not make [[structured programming]] mandatory for programmers and it was easy to write [[spaghetti code]].
 
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.
== PEEKs, POKEs, and user functions ==
No discussion of BASICs on the 8-bit computers of the late '70s and early '80s would be complete without mentioning the importance of the [[PEEK and POKE]] functions for directly reading and writing to memory. Since these systems typically had no [[memory protection]], this allowed a programmer to access portions of the operating system, or functions that would not otherwise be available. This also provided opportunities for user programs to hang the system. For example, a CP/M programmer might use a <code> POKE </code> function to allow BASIC to switch the console device to the serial port, if the system [[BIOS]] supported this. For machines with real-time clocks, a set of <code>PEEK</code> instructions might have been used to access the time.
 
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.
For more complex operations, MBASIC allowed user-defined functions that could be called from a BASIC program. These were typically placed in a reserved area of memory, or POKEd into string constants, as a series of [[Machine language|machine codes]] (op codes). MBASIC also provided hardware <code>INP</code> and <code>OUT</code> instructions that read and wrote directly to the 8080 hardware input/output ports. This could be used to control peripheral devices, though on at least one common CP/M system, the Osborne 1, all I/O instructions were pre-empted for use by the system.
 
===Strutture di controllo===
Any MBASIC programs that made use of <code>PEEK</code> and <code>POKE</code>, and of [[machine code]] user functions, were not portable between machines.
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==
== Successors to MBASIC ==
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.
{{see|BASIC}}
Microsoft also sold a CP/M BASIC [[compiler]] (known as BASCOM) which used a similar source language to MBASIC. A program debugged under MBASIC could be compiled with BASCOM. Since program text was no longer in memory and the run-time elements of the compiler were smaller than the interpreter, more memory was available for user data. Speed of program execution increased by 8 to 10 fold.
 
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]].
All the functions of CP/M MBASIC were available in the IBM PC disk-based [[BASICA]] or [[GWBASIC]] which made migration of programs from CP/M systems to PC-compatibles possible. The tokens used to represent keywords were different, so CP/M programs had to be saved in ASCII source form. Typically screen formatting escape sequences put into the CP/M version would be replaced with the cursor positioning commands found in the PC versions of BASIC, otherwise little rewriting would be needed.
 
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.
== Importance of MBASIC ==
MBASIC was an important tool during the era of 8-bit CP/M computers. Skilled users could write routines in MBASIC to automate tasks that in modern-day systems would be performed by powerful application program commands or scripting languages. Exchange of useful MBASIC programs was a common function of computer [[users' group]]s. [[Type-in program|Keying in long BASIC listings]] from a magazine article was one way of "bootstrapping" software into a new CP/M system. At least one compiler for a high-level language was written in MBASIC, and many small games and utility programs ranging from a few lines to a few thousand lines of code were written.
 
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.
== Other uses ==
MBASIC is also the name of a commercial [[BASIC]] compiler for the [[Microchip Technology]] [[PIC microcontroller]] family developed by Basic Micro, Inc., unrelated to the CP/M interpreter.
-->
 
==Varianti e derivati==
==Riferimenti==
{{seemain|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]].
 
== 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 81 ⟶ 65:
* [[BASIC]]
* [[Altair BASIC]]
* [[Microsoft BASIC]]
{{Portale|Informatica}}
 
[[Categoria:BASIC]]
 
[[de:MBASIC]]
[[en:MBASIC]]
[[fa:ام بیسیک]]