<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>the Retrogames Machine &#187; commodore basic</title>
	<atom:link href="http://www.retrogamesmachine.com/tag/commodore-basic/feed/?doing_wp_cron=1775831822.5825951099395751953125" rel="self" type="application/rss+xml" />
	<link>http://www.retrogamesmachine.com</link>
	<description>the Future was Now</description>
	<lastBuildDate>Tue, 21 Feb 2023 19:44:33 +0000</lastBuildDate>
	<language>it-IT</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.7.1.1</generator>
	<item>
		<title>Breve prontuario dei comandi Commodore Basic V2</title>
		<link>http://www.retrogamesmachine.com/2013/12/19/comandi-commodore-basic-v2/</link>
		<comments>http://www.retrogamesmachine.com/2013/12/19/comandi-commodore-basic-v2/#comments</comments>
		<pubDate>Thu, 19 Dec 2013 13:21:11 +0000</pubDate>
		<dc:creator><![CDATA[MetalRedStar]]></dc:creator>
				<category><![CDATA[Articoli]]></category>
		<category><![CDATA[Retroprogrammazione]]></category>
		<category><![CDATA[Retroworkshop]]></category>
		<category><![CDATA[Basic]]></category>
		<category><![CDATA[Commodore 64/128]]></category>
		<category><![CDATA[commodore basic]]></category>
		<category><![CDATA[Commodore VIC 20]]></category>
		<category><![CDATA[retroprogrmamazione]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.retrogamesmachine.com/?p=6344</guid>
		<description><![CDATA[Nell&#8217;ambito della nostra iniziativa votata a riaccendere nei nostri lettori la fiamma dell&#8217;interesse nei confronti della programmazione cominciamo con le basi.  Un breve riassunto dei comandi del Commodore Basic V2 utilizzato dal Commodore64 (oltre che dal VIC20 e i Commodore [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="pf-content"><p><span style="font-size: 13px;">Nell&#8217;ambito della nostra iniziativa votata a riaccendere nei nostri lettori la fiamma dell&#8217;interesse nei confronti della programmazione cominciamo con le basi. </span></p>
<p><span style="font-size: 13px;">Un breve riassunto dei comandi del Commodore Basic V2 utilizzato dal Commodore64 (oltre che dal VIC20 e i Commodore PET). Attenzione! Questo non è un tutorial sul Commodore Basic ma una sorta di guida di riferimento per riaccendere in neuroni spenti (o mai accesi&#8230;).</span></p>
<p><span id="more-6344"></span></p>
<p>Nel basic V2 sono disponibili unicamente i seguenti tipi di variabili:</p>
<ul>
<li><strong>Float</strong>: È il tipo usato più frequentemente ed indica i numeri positivi e negativi dotati di parte intera e decimale. Non hanno indicatore di tipo nella loro dichiarazione.<br />
Valori possibili: +/- [2.94E-39 ... 1.70E+38] (+/- [2<sup>-128</sup> ... 2<sup>127</sup>])<br />
Precisione: mantissa a 32 bit (approx. 9.6 decimali) + esponente a 8 bit</li>
<li><strong>Interi (16 Bit):</strong> Tipo di tati raramente utilizzato. Le variabili ntere si caratterizzano per un &#8216;%&#8217; alla fine della loro &#8216;etichetta&#8217; (es. X%).  È bene notare che tutti i calcoli computazionali sono effettuati con precisione FLOAT e la conversione a Intero è effettuata solo quando il valore è assegnato alla variabile. Quindi la matematica di tipo intero è PIÙ LENTA che quella di tipo float!</li>
<li><strong>Booleani:</strong> I risultati sono espressi con interi. FALSO è rappresentato da 0 (0&#215;0000) mentre VERO da -1 (0xFFFF) o qualunque risultato NON-ZERO</li>
<li><strong>Stringhe: </strong> Le variabili &#8220;stringa&#8221; si identificano per il simbolo &#8216;$&#8217; posto dopo l&#8217;etichetta identificativa (es. X$). Le stringhe non possono essere più lunghe di 255 caratteri.</li>
</ul>
<p>Solo i primi DUE caratteri dell&#8217;etichetta di una variabile sono presi in considerazione dall&#8217;interprete BASIC. Quindi &#8216;CO&#8217;, &#8216;COCCO&#8217; e &#8216;COLOSSEO&#8217; sono nomi equivalenti di una singola variabile (ma non &#8216;C&#8217; o &#8216;CA&#8217;).</p>
<p>L&#8217;identificatore di tipo, invece, identifica e distingue variabili con la stessa etichetta. Quindi &#8216;CO&#8217;, &#8216;CO%&#8217; e &#8216;CO$&#8217; sono TRE variabili diverse.</p>
<h2>Controllo del flusso del programma</h2>
<dl>
<dt><strong><code>FOR...TO...STEP...NEXT</code></strong> - L&#8217;unico costrutto di ciclo del BASIC V2</dt>
<dd>
<div>Sintassi:<br />
<code>FOR &lt;Var&gt; = &lt;Start&gt; TO &lt;End&gt; [STEP &lt;Size&gt;]<br />
&lt;Ciclo&gt;<br />
NEXT [&lt;Var&gt;]</code></div>
<div>Esempi:</div>
<div><code>FOR I=1 TO 5: PRINT I;: NEXT -&gt; 1 2 3 4 5<br />
FOR I=1 TO 5 STEP 2: PRINT I;: NEXT -&gt; 1 3 5<br />
FOR I=5 TO 1 STEP -2: PRINT I;: NEXT I -&gt; 5 3 1<br />
FOR I=3 TO 1: PRINT I;: NEXT -&gt; 3 (!)</code></div>
</dd>
<dt><strong><code>IF...THEN</code></strong> - Esecuzione condizionale</dt>
<dd>Nota: Non esiste nulla di similare ai costrutti <code>ELSE</code> o <code>ENDIF</code>. (tra l&#8217;altro NESSUN BASIC eccetto l&#8217;MSX BASIC implementa l&#8217;<code>ELSE)</code></p>
<div>Sintassi:<br />
<code>IF &lt;Condizione&gt; THEN &lt;Istruzione&gt;</code> or<br />
<code>IF &lt;Condizione&gt; GOTO &lt;NrLinea&gt;</code> or<br />
<code>IF &lt;Condizione&gt; THEN &lt;NrLinea&gt;</code></div>
<div>Esempio:<br />
<code>100 IF A &lt; B THEN MN = A: GOTO 120<br />
110 MN = B<br />
120 ....</code></div>
</dd>
<dt><strong><code>GOTO</code></strong> oppure <strong><code>GO TO</code></strong> - Salto incondizionale</dt>
<dd>
<div>Sintassi:<br />
<code>GOTO &lt;NrLinea&gt;</code> oppure<br />
<code>GO TO &lt;NrLinea&gt;</code></div>
</dd>
<dt><strong><code>GOSUB</code></strong> -  Salto incondizionale a Subroutine</dt>
<dd>Notare che non è possibile passare parametri formali ad una subroutine. Tutto deve essere gestito con l&#8217;uso di variabili globali.</dd>
<dd>
<div>Sintassi:<br />
<code>GOSUB &lt;NrLinea&gt;</code></div>
<div>Esempio:<br />
<code>10 PRINT "Programma principale"<br />
20 GOSUB 100<br />
30 PRINT "Ritorno a Programma principale"<br />
40 GOSUB 100<br />
50 PRINT "Di nuovo Programma principale"<br />
60 END<br />
100 PRINT "Questa è la Subroutine"<br />
110 RETURN</code></div>
</dd>
<dt><strong><code>RETURN</code></strong> - Ritorno dalla Subroutine</dt>
<dd>
<div>Sintassi:<br />
<code>RETURN</code></div>
<div>Esempio:<br />
Vedi: <code>GOSUB</code></div>
</dd>
<dt><strong><code>ON...GOTO</code></strong> oppure <strong><code>ON...GOSUB</code></strong> - Salto multi direzionale</dt>
<dd>
<div>Sintassi:<br />
<code>ON &lt;EspressioneIntera&gt; GOTO &lt;NrLinea1&gt;, &lt;NrLinea2&gt;</code> &#8230;<br />
oppure <code>ON &lt;EspressioneIntera&gt; GOSUB &lt;NrLinea1&gt;, &lt;NrLinea2&gt;</code> &#8230;</div>
<div>Esempio:<br />
<code>ON X GOTO 100, 200, 300</code><br />
È equivalente a :<br />
<code>IF X = 1 THEN GOTO 100<br />
IF X = 2 THEN GOTO 200<br />
IF X = 3 THEN GOTO 300</code></div>
</dd>
<dt><strong><code>DEF FN</code></strong>- Definisce una Funzione/Subroutine in BASIC </dt>
<dd>
<div>Sintassi:<br />
<code>DEF FN &lt;Nome&gt;(&lt;Param&gt;) = &lt;Espressione a Linea Singola&gt;</code></div>
<div>Esempio:<br />
<code>DEF FN SI(X) = SIN(X)/X<br />
FN SI(π/3) -&gt; 0.816993343</code></div>
</dd>
</dl>
<h2>Input/Output</h2>
<dl>
<dt><strong><code>GET</code></strong> - Legge un singolo carattere dallo standard input (normalmente tastiera) senza attendere </dt>
<dd>
<div>Sintassi:<br />
<code>GET &lt;NomeVariabile&gt;</code></div>
<div>Esempio:<br />
<code>100 GET A$: IF A$ = "" THEN GOTO 100</code> -&gt; Attende la pressione di un tasto</div>
</dd>
<dt><strong><code>INPUT</code></strong> -Legge i dati dallo standard input (normalmente tastiera)</dt>
<dd>
<div>Sintassi:<br />
<code>INPUT</code> <code>[&lt;Prompt&gt;;] &lt;NomeVariabile&gt; [, &lt;NomeVariabile&gt; ...]</code></div>
<div>Esempi:<br />
<code>INPUT "LOGIN:"; LG$<br />
INPUT "Introdurre valori di A, B e C"; A, B, C<br />
INPUT A</code></div>
</dd>
<dt><strong><code>PRINT</code></strong> - Scrive sullo standard output (normalmente schermo)</dt>
<dd>
<div>Sintassi:<br />
<code>PRINT &lt;Dati&gt;</code> oppure<br />
<code>? &lt;Dati&gt;</code></div>
<div>Esempi:<br />
<code>PRINT "Ciao Mondo"<br />
PRINT "Queste", "sono", "Tabulazioni" -&gt; Notare le ','<br />
PRINT "Prima Linea"; -&gt; Notare il ';'<br />
PRINT "Still the same line"<br />
PRINT "Risultato="; 2*32</code></div>
</dd>
<dt><strong><code>SPC</code></strong> - Muove in avanti il cursore di un determinato numero di spazi</dt>
<dd>
<div>Sintassi:<br />
<code>SPC(&lt;Cnt&gt;)</code></div>
<div>Esempio:<br />
<code>SPC(6)</code></div>
</dd>
<dt><strong><code>TAB</code></strong>- Muove in avanti il cursore ad una specifica posizione</dt>
<dd>
<div>Sintassi:<br />
<code>TAB(&lt;Posizione&gt;)</code></div>
<div>Esempio:<br />
<code>TAB(6)</code></div>
</dd>
<dt><strong><code>POS</code></strong> - Indica la posizione corrente del cursore</dt>
<dd>
<div>Sintassi (Dummy = valore non rilevante) ;<br />
<code>POS(&lt;Dummy&gt;)</code></div>
<div>Esempio:<br />
<code>POS(6)</code></div>
</dd>
</dl>
<h2>Files</h2>
<dl>
<dt><strong><code>LOAD</code></strong>- Carica un programma da disco o nastro</dt>
<dd>
<div>Sintassi:<br />
<code>LOAD &lt;FileName&gt; [, &lt;Dispositivo&gt; [, &lt;SecondoDisp&gt;]]</code></div>
<div>Esempi:<br />
<code>LOAD "SuperGame", 8, 1 -&gt; Carica il programma da disco #8<br />
LOAD "*", 9 -&gt; Carica il primo programma da disco #9<br />
LOAD "", 1 -&gt; Carica il primo programma da nastro(#1)</code></div>
</dd>
<dt><strong><code>SAVE</code></strong> - Salva un programma su disco o nastro</dt>
<dd>
<div>Sintassi:<br />
<code>SAVE &lt;FileName&gt; [, &lt;Dispositivo&gt; [, &lt;SecondoDisp&gt;]]</code></div>
<div>Esempi:<br />
<code>SAVE "SuperGame", 8 -&gt; Salva su disco #8</code><br />
Per sovrascrivere un file esistente su disko, far precedere il nome del file dal carattere &#8216;@&#8217;</div>
<div>Esempio:<br />
<code>SAVE "@SuperGame",8 -&gt;  Salva su disco #8, sovrascrive vecchio file</code></div>
</dd>
<dt><strong><code>VERIFY</code></strong> - Controlla se il programma in memoria e quello registrato su disco o nastro coincidono. Non modifica nulla.</dt>
<dd>
<div>Sintassi:<br />
<code>VERIFY &lt;FileName&gt; [, &lt;Dispositivo&gt; [, &lt;SecondoDisp&gt;]]</code></div>
<div>Examples:<br />
<code>VERIFY "SuperGame", 8 -&gt; Verifica SuperGame da disco #8<br />
VERIFY "*", 9 -&gt; Verifica il primo programma da disco #9<br />
VERIFY "", 1 -&gt; Verifica il primo programma da nastro #1</code></div>
</dd>
<dt><strong><code>OPEN</code></strong>- Apre un flusso dati (File)</dt>
<dd>
<div>Sintassi:<br />
<code>OPEN &lt;FileID&gt;, &lt;Dispositivo&gt; [, &lt;SecondoDisp&gt; [, &lt;FNameMode&gt;]]</code><br />
<code><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;">Il parametro </span>&lt;SecondoDisp&gt;</code> è un intero opzionale compreso tra 0-15 che,secondo il valore assegnato ,assume i seguenti significati:<br />
0..Utilizzato per  <code>LOAD, </code>1..Utilizzto per <code>SAVE, </code>2-14..Liberamente utilizzabile per accesso a file utente<code>, </code>15..Canale di Comando/Errore.<br />
<code>&lt;FNameMode&gt;</code> usa il formato format: &#8220;<code>&lt;NomeFile&gt; [,&lt;TipoFile&gt; [,&lt;ModoAccesso&gt;]]" </code>dove <code>&lt;TipoFile&gt;</code> può essere uno tra: <code>P</code> (Programma), <code>S</code> (Sequenziale), <code>L</code> (Relativo) or <code>U</code> (Utente)</div>
<div><code>&lt;ModoAccesso&gt;</code> può essere uno tra: <code>R</code> (Lettura),<code>W</code> (Scrittura), <code>A</code> (Aggiunta) o il numero di Bytes/Record di un file relativo.</div>
<div>Esempi:<br />
<code>OPEN 1, 4 -&gt; Apre un file di output sulla stampante #4<br />
OPEN 1, 8, 2, "My File,P,R" -&gt; Apre un programma, per la lettura, da disco #8<br />
OPEN 1, 8, 2, "My File,S,W" -&gt; Apre un file sequenziale, per la scrittura su disco #8<br />
OPEN 1, 8, 2, "My File,L,"+CHR$(40) -&gt; Apre un file relativo con 40 Bytes/Record su disco #8<br />
OPEN 1, 8, 15 -&gt; Apre il canale Comando/Errore su disco #8</code></div>
</dd>
<dt><strong><code>CLOSE</code></strong> - Chiude un flusso dati (File)</dt>
<dd>
<div>Sintassi:<br />
<code>CLOSE &lt;FileID&gt;</code></div>
<div>Esempio:<br />
<code>CLOSE 1</code></div>
</dd>
<dt><strong><code>GET#</code></strong> - Legge un singolo carattere da un file</dt>
<dd>
<div>Sintassi:<br />
<code>GET# &lt;FileID&gt;, &lt;VarName&gt;</code></div>
<div>Esempio:<br />
<code>GET#1, A$</code></div>
<div>Notare che NON c&#8217;è spazio tra &#8216;<code>GET</code>&#8216; e &#8216;<code>#</code>&#8216;.</div>
</dd>
<dt><strong><code>INPUT#</code></strong> - Recupera dati da un File</dt>
<dd>
<div>Sintassi:<br />
<code>INPUT# &lt;FileID&gt;, &lt;VarName&gt; [, &lt;VarName&gt;...]</code></div>
<div>Esempio:<br />
<code>INPUT#1, EN$, ER$, TR$, SC$</code></div>
<div>Notare che NON c&#8217;è spazio tra &#8217;<code>INPUT</code>&#8216; e &#8216;<code>#</code>&#8216;.</div>
</dd>
<dt><strong><code>PRINT# </code></strong>- Stampa dati su un File </dt>
<dd>
<div>Sintassi:<br />
<code>PRINT# &lt;FileID&gt;, &lt;Dati&gt;</code></div>
<div>Esempio:<br />
<code>PRINT#1, "Power64"</code></div>
<div>Notare che NON c&#8217;è spazio tra &#8216;<code>PRINT</code>&#8216; e  &#8217;<code>#</code>&#8216;. Notare anche che <code>?#</code> NON è <code>PRINT#</code> anche se appaiono uguali in un listato.</div>
</dd>
<dt><strong><code>CMD</code></strong> - Redireziona lo standard output (Input non è modificato ) e scrive messaggi su esso</dt>
<dd>
<div>Sintassi:<br />
<code>CMD &lt;FileID&gt; [, &lt;Messaggio&gt;]</code></div>
<div>Esempio:<br />
<code>OPEN 1, 4 ; Apre un File#1 su Stampante#4<br />
CMD 1 ; Rende #1 lo standard output<br />
PRINT "Messaggio"<br />
PRINT "Messaggio2"<br />
PRINT#1<br />
CLOSE 1</code></div>
</dd>
<dt><strong><code>ST</code><code> </code></strong>- Stato di un dispositivo (Variabile interna)</dt>
<dd>ST = 0 .. Dispositivo Ok<br />
Bit 6: 1 .. Fine del File<br />
Bit 7: 1 .. Dispositivo non presente</dd>
<dt><strong><code>READ</code></strong> - Legge dati statici dalle istruzioni DATA nel programma</dt>
<dd>
<div>Sintassi:<br />
<code>READ &lt;Var&gt; [, &lt;Var&gt;...]</code></div>
<div>Esempio:<br />
<code>10 RESTORE<br />
20 READ X$<br />
30 PRINT X$;<br />
40 S = 0<br />
50 FOR I=1 TO 3<br />
60 READ X<br />
70 S = S + X<br />
80 NEXT I<br />
90 PRINT S<br />
100 DATA "Power", 12, 34, 18</code></div>
</dd>
<dt>L&#8217;output dell&#8217;esempio sarebbe Power 64</dt>
<dt><strong><code>RESTORE</code></strong> - Resetta al primo elemento DATA del programma il puntatore a DATA.</dt>
<dd>
<div>Sintassi:<br />
<code>RESTORE</code></div>
<div>Esempio:<br />
Vedi <code>READ</code></div>
</dd>
<dt><strong><code>DATA</code></strong>- Immagazzina dati statici</dt>
<dd>
<div>Sintassi:<br />
<code>DATA &lt;Dati&gt; [, &lt;Dati&gt;...]</code></div>
<div>Esempio:<br />
<code><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;">Vedi </span>READ</code></div>
</dd>
</dl>
<h2>Funzioni Matematiche</h2>
<dl>
<dt><strong><code>LET</code></strong> - assegna valore a un variabile</dt>
<dd>
<div>Sintassi:<br />
<code>LET &lt;Variabile&gt; = &lt;Valore&gt;</code></div>
<div>Esempio:</div>
<div><code>LET A = 6.25</code></div>
<div>Notare che il comando <code>LET</code> è innecessario e ridondante. &lt;Variabile&gt; = &lt;Valore&gt; è tutto ciò che serve per assegnare un valore a una variabile. <code>LET</code> rallenta l&#8217;intero processo, quindi NON USATELO!</div>
</dd>
<dt><strong><code>DIM</code></strong> - Dichiarazione Array</dt>
<dd>
<div>Sintassi:<br />
<code>DIM &lt;Nome&gt;(&lt;Dimensione1&gt; [, &lt;Dimensione2&gt;...])</code></div>
<div>Esempi:<br />
<code>DIM A(7)</code> -&gt; Array di 8(!) elementi indicizzati [0..7]<br />
<code>DIM B$(4,5)</code> -&gt; Array di  30(!) stringhe [0..5 x 0..6]<br />
Uso degli elementi: <code>A(3) = 17 : B$(2,3) = "Power64"</code></div>
</dd>
<dt><strong><code>+, -, *, /, ^</code></strong> - Operatori Aritmetici</dt>
<dd>
<div>Esempio:<br />
<code>9 + 5 * (15 - 1) / 7 + 2^4 -&gt; 35</code></div>
</dd>
<dt><strong><code>&lt;, &lt;=, =, &lt;&gt;, &gt;=, &gt;</code></strong> - Operatori di confronto</dt>
<dd>
<div>Esempio:<br />
<code>3 &lt;&gt; 6 -&gt; -1 (VERO)</code><br />
<code>3 &gt; 4 -&gt; 0 (FALSO)</code></div>
</dd>
<dt><strong><code>SIN</code></strong> - Seno (Argomenti in Radianti)</dt>
<dd>
<div>Sintassi:<br />
<code>SIN(&lt;Valore&gt;)</code></div>
<div>Esempio:<br />
<code>SIN(π/3) -&gt; 0.866025404</code></div>
</dd>
<dt><strong><code>COS</code></strong> - Coseno (Argomenti in Radianti)</dt>
<dd>
<div>Sintassi:<br />
<code>COS(&lt;Valore&gt;)</code></div>
<div>Esempio:<br />
<code>COS(π/3) -&gt; 0.5</code></div>
</dd>
<dt><strong><code>TAN</code></strong> - Tangente (Argomenti in Radianti)</dt>
<dd>
<div>Sintassi:<br />
<code>TAN(&lt;Valore&gt;)</code></div>
<div>Esempio:<br />
<code>TAN(π/3) -&gt; 1.73205081</code></div>
</dd>
<dt><strong><code>ATN</code></strong> - Arco Tangente (Risultato in [-π/2 .. π/2])</dt>
<dd>
<div>Sintassi:<br />
<code>ATN(&lt;Valore&gt;)</code></div>
<div>Esempio:<br />
<code>ATN(1) -&gt; 0.785398163 ( = π/4)</code></div>
</dd>
<dt><strong><code>EXP</code></strong> - Esponentr (e<sup>x</sup> dove e = 2.71828183&#8230;)</dt>
<dd>
<div>Sintassi:<br />
<code>EXP(&lt;Valore&gt;)</code></div>
<div>Esempio:<br />
<code>EXP(6.25) -&gt; 518.012825</code></div>
</dd>
<dt><strong><code>LOG</code></strong> - Logaritmo Naturale</dt>
<dd>
<div><code><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;">Sintassi:</span></code></div>
<div><code>LOG(&lt;Value&gt;)</code></div>
<div>Esempio:<br />
<code>LOG(6.25) -&gt; 1.83258146</code></div>
</dd>
<dt><strong><code>SQR</code></strong> - Radice quadrata</dt>
<dd>
<div>Sintassi:<br />
<code>SQR(&lt;Valore&gt;)</code></div>
<div>Esempio:<br />
<code>SQR(6.25) -&gt; 2.5</code></div>
</dd>
<dt><strong><code>ABS</code></strong> - Valore Assoluto</dt>
<dd>
<div>Sintassi:<br />
<code>ABS(&lt;Valore&gt;)</code></div>
<div>Esempi:<br />
<code>ABS(-6.25) -&gt; 6.25<br />
ABS(0) -&gt; 0<br />
ABS(6.25) -&gt; 6.25</code></div>
</dd>
<dt><strong><code>SGN</code></strong> - Segno</dt>
<dd>
<div>Sintassi:<br />
<code>SGN(&lt;Valore&gt;)</code></div>
<div>Esempi:<br />
<code>SGN(-6.25) -&gt; -1<br />
SGN(0) -&gt; 0<br />
SGN(6.25) -&gt; 1</code></div>
</dd>
<dt><strong><code>INT</code></strong> - Intero (Arrotonda all&#8217;intero minore o uguale all&#8217;argomento.)</dt>
<dd>
<div>Sintassi:<br />
<code>INT(&lt;Valore&gt;)</code></div>
<div>Esempi:<br />
<code>INT(-6.25) -&gt; -7 (!)<br />
INT(-5) -&gt; -5<br />
INT(0) -&gt; 0<br />
INT(5) -&gt; 5<br />
INT(6.25) -&gt; 6</code></div>
</dd>
<dt><strong><code>RND</code></strong> - Numero casuale tra [0.0 .. 1.0]</dt>
<dd>
<div>Sintassi:<br />
<code>RND(&lt;Seed&gt;)</code><br />
Se <code>(&lt;Seed&gt; &lt; 0)</code> il generatore di numeri casuali viene inizializzato.</div>
<div>Esempi:<br />
<code>RND(-625) -&gt; 3.85114436E-06<br />
RND(0) -&gt; 0.464844882<br />
RND(0) -&gt; 0.0156260729</code></div>
</dd>
</dl>
<h2>Operatori Logici e Binari</h2>
<p>Ricordiamo la codifica dei valori Booleani<br />
<code>FALSO &lt;--&gt; 0 (0x0000) e VERO &lt;--&gt; -1 (0xFFFF)</code> or o qualunque valore non-zero.</p>
<dl>
<dt><strong><code>AND</code></strong>- AND logico e binario</dt>
<dd>
<div>Sintassi:<br />
<code>&lt;Expr&gt; AND &lt;Expr&gt;</code></div>
<div>Esempi:<br />
<code>A&gt;5 AND X&lt;=Y<br />
12 AND 10 -&gt; 8 (%1100 AND %1010 = %1000) - operazione di confronto sui bit</code></div>
</dd>
<dt><strong><code>OR</code></strong> - OR logico e binario</dt>
<dd>
<div>Sintassi:<br />
<code>&lt;Expr&gt; OR &lt;Expr&gt;</code></div>
<div>Esempi:<br />
<code>A&gt;5 OR X&lt;=Y<br />
12 OR 10 -&gt; 14 (%1100 OR %1010 = %1110) - operazione di confronto sui bit</code></div>
</dd>
<dt><strong><code>NOT</code></strong>- NOT logico e binario</dt>
<dd>
<div>Sintassi:<br />
<code>NOT &lt;Expr&gt;</code></div>
<div>Esempi:<br />
<code>NOT A&gt;5<br />
NOT 2 -&gt; -3 (NOT $0002 = $FFFD) - operazione di confronto sui bit</code></div>
</dd>
</dl>
<h2>Manipolazione di Caratteri e Stringhe</h2>
<dl>
<dt><strong><code>+</code></strong> - Concatena Stringhe</dt>
<dd>
<div>Esempio:<br />
<code>"Pow" + "er64" -&gt; "Power64"</code></div>
</dd>
<dt><strong><code>&lt;, &lt;=, =, &lt;&gt;, &gt;=, &gt;</code></strong> - Operatori di confronto</dt>
<dd>
<div>Esempi:<br />
<code>"C64" &lt; "Power64" -&gt; -1 (VERO)<br />
"Alpha" &gt; "Omega" -&gt; 0 (FALSO)</code></div>
</dd>
<dt><strong><code>LEN</code></strong> - Lunghezza stringa</dt>
<dd>
<div>Sintassi:<br />
<code>LEN(&lt;Stringa&gt;)</code></div>
<div>Esempio:<br />
<code>LEN("Power64") -&gt; 7</code></div>
</dd>
<dt><strong><code>LEFT$</code></strong> - Parte sinistra della stringa</dt>
<dd>
<div>Sintassi:<br />
<code>LEFT$(&lt;String&gt;, &lt;Lung&gt;)</code></div>
<div>Esempio:<br />
<code>LEFT$("Power64", 5) -&gt; "Power"</code></div>
</dd>
<dt><strong><code>RIGHT$</code></strong> - Parte destra della stringa</dt>
<dd>
<div>Sintassi:<br />
<code>RIGHT$(&lt;String&gt;, &lt;Lung&gt;)</code></div>
<div>Esempio:<br />
<code>RIGHT$("Power64", 5) -&gt; "wer64"</code></div>
</dd>
<dt><strong><code>MID$</code></strong> - Parte centrale della stringa</dt>
<dd>
<div>Sintassi:<br />
<code>MID$(&lt;String&gt;, &lt;Inizio&gt;, &lt;Lung&gt;)</code></div>
<div>Esempio:<br />
<code>MID$("Power64 per Macintosh", 13, 3) -&gt; "Mac"</code><br />
<code>/* -- 123456789012345678901 -- */</code></div>
</dd>
<dt><strong><code>STR$</code></strong> - Converte un numero in una stringa</dt>
<dd>
<div>Sintassi:<br />
<code>STR$(&lt;Valore&gt;)</code></div>
<div>Esempi:<br />
<code>STR$(6.25) -&gt; " 6.25"<br />
STR$(-6.25) -&gt; "-6.25"</code></div>
</dd>
<dt><strong><code>VAL</code></strong> - Converte una stringa in numero</dt>
<dd>
<div>Sintassi:<br />
<code>VAL(&lt;String&gt;)</code></div>
<div>Esempi:<br />
<code>VAL("6.25") -&gt; 6.25<br />
VAL("6xx25") -&gt; 6<br />
VAL("x6x25") -&gt; 0</code></div>
</dd>
<dt><strong><code>ASC</code></strong>- Codice ASCII del primo carattere di una stringa</dt>
<dd>
<div>Sintassi:<br />
<code>ASC(&lt;String&gt;)</code></div>
<div>Esempio:<br />
<code>ASC("P") -&gt; 80<br />
ASC("Power64") -&gt; 80</code></div>
</dd>
<dt><strong><code>CHR$</code></strong> - Carattere corrispondente ad uno specifico codice ASCII</dt>
<dd>
<div>Sintassi:<br />
<code>CHR$(&lt;Valore&gt;)</code></div>
<div>Esempio:<br />
<code>CHR$(80) -&gt; "P"</code></div>
</dd>
</dl>
<h2>Accesso alla Memoria</h2>
<dl>
<dt><strong><code>PEEK</code></strong> - Legge un byte dalla locazione di memoria</dt>
<dd>
<div>Sintassi:<br />
<code>PEEK(&lt;Loc&gt;)</code></div>
<div>Esempio:<br />
<code>PEEK(53280)</code> -&gt; Valore corrente del byte che determina il colore del bordo dello schermo</div>
</dd>
<dt><strong><code>POKE</code></strong> - Scrive un byte in una locazione di memoria</dt>
<dd>
<div>Sintassi:<br />
<code>POKE &lt;Loc&gt;, &lt;Valore&gt;</code></div>
<div>Esempio:<br />
<code>POKE 53280, 7 </code>-&gt; Imposta a 7 il valore del che determina il colore del bordo dello schermo, ottenendo il bordo giallo</div>
</dd>
<dt><strong><code>WAIT</code></strong> - Attende finché il byte di una locazione di memoria assume un certo valore </dt>
<dd>
<div>Sintassi:<br />
<code>WAIT &lt;Loc&gt;, &lt;Maschera&gt; [, &lt;Inverti&gt;]</code><br />
<code>WAIT</code> il programma si arresterà fino a che <code>((PEEK(&lt;Loc&gt;) EXOR &lt;Inverti&gt;) AND &lt;Maschera&gt;) != 0</code><br />
Se &lt;<code>Inverti</code>&gt; non è specificato assume valore di default 0.</div>
<div>Esempio:<br />
<code>WAIT 198, 255</code> -&gt; Attende la pressione di un tasto nel buffer tastiera.</div>
</dd>
</dl>
<h2>Interfaccia a programmi in Assembly</h2>
<dl>
<dt><strong><code>SYS</code></strong> - System &#8211; Richiama un programma assembler da una locazione di memoria</dt>
<dd>
<div>Sintassi:<br />
<code>SYS &lt;Loc&gt; [, &lt;Param&gt; ...]</code></div>
<div>Il numero di parametri dipende dal programma chiamato.</div>
</dd>
<dt><strong><code>USR</code></strong>- Comando utente</dt>
<dd>
<div>Sintassi:<br />
<code>USR</code>(&lt;Param&gt;)</div>
<div>Simile a <code>SYS</code> ma la locazione di memoria &lt;<code>Loc</code>&gt;a cui si punta è fissa a <code>$0310</code> ed il primo ed unico parametro &lt;<code>Param</code>&gt; è sempre valutato e memorizzato nel FloatAccu1 (<code>FAC1</code>) quando il programma assembly viene chiamato. Meno flessibile di SYS e quindi raramente utilizzato.</div>
</dd>
</dl>
<h2>Esecuzione Programmi</h2>
<dl>
<dt><strong><code>RUN</code></strong> - Avvia un programma BASIC</dt>
<dd>
<div>Sintassi:<br />
<code>RUN [&lt;Linea&gt;]</code></div>
<div>Se  &lt;<code>Linea</code>&gt; non è specificato il programma inizia dalla prima linea.</div>
<div>Esempio:<br />
<code>RUN</code></div>
</dd>
<dt><strong><code>STOP</code></strong>- Arresta l&#8217;esecuzione di un programma</dt>
<dd>
<div>Sintassi:<br />
<code>STOP</code></div>
<div><code>STOP</code> è simile ad <code>END</code>, ma stampa il messaggio <code>BREAK IN &lt;Linea&gt;</code> .</div>
</dd>
<dt><strong><code>END</code></strong> - Conclude l&#8217;esecuzione di un programma</dt>
<dd>
<div>Sintassi:<br />
<code>END</code></div>
</dd>
<dt><strong><code>CONT</code></strong> - Continua l&#8217;esecuzione di un  program </dt>
<dd>
<div>Sintassi:<br />
<code>CONT</code></div>
<div>Quando l&#8217;esecuzione di un programma è interrotta da by <code>STOP</code>, <code>END</code> o dalla pressione del tasto Run/Stop il comando <code>CONT</code> viene usato per riprendere l&#8217;esecuzione.</div>
</dd>
</dl>
<h2>Vari</h2>
<dl>
<dt><strong><code>REM</code></strong> - Commento</dt>
<dd>
<div>Sintassi:<br />
<code>REM &lt;Testo&gt;</code></div>
<div>Esempio:<br />
<code>REM Questa linea è un commento</code></div>
</dd>
<dt><strong><code>LIST</code></strong> - Mostra il listato del programma BASIC corrente</dt>
<dd>
<div>Sintassi:<br />
<code>LIST [&lt;Linea&gt; | &lt;Da&gt;- | -&lt;A&gt; | &lt;Da&gt;-&lt;A&gt;]</code><br />
Senza parametri l&#8217;intero programma viene listato.</div>
<div>Esempi:<br />
<code>LIST<br />
LIST -40<br />
LIST 100-200</code></div>
</dd>
<dt><strong><code>NEW</code></strong> - Cancella il programma corrente e tutte le variabili dalla memoria</dt>
<dd>Sintassi:<br />
<code>NEW</code></dd>
<dt><strong><code>CLR</code></strong> - Cancella tutte le variabili </dt>
<dd>
<div>Sintassi:<br />
<code>CLR</code></div>
</dd>
<dt><strong><code>FRE</code></strong> - Indica la memoria disponibili</dt>
<dd>
<div>Sintassi:<br />
<code>FRE(&lt;Dummy&gt;)</code></div>
<div>Esempio:<br />
<code>FRE(0)</code> -&gt; -26627 (immediatamente dopo l&#8217;accensione)</div>
<div>Restituisce il numero di Bytes liberi per i programmi BASIC come un intero a 16 bit con segno. Se la memoria libera eccede i 38KByte viene indicato un numero negativo. Quindi -26627 dovrebbe essere interpretato come 65536-26627 = 38909.</div>
</dd>
<dt><strong><code>π</code></strong> - Pi = 3.14159265</dt>
<dt><strong><code>TI</code></strong> - Timer Ticks trascorsi dall&#8217;accensione (1 Tick = 1/60 Second)</dt>
<dt><strong><code>TI$</code></strong> - Timer dall&#8217;accensione in Ore/Minuti/Secondi </dt>
<dt>             A <code>TI$</code> (ma non a TI) può essere assegnato un valore!</dt>
<dd>La precisione del timer è piuttosto scarsa (scarto &gt;1%)</dd>
</dl>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.retrogamesmachine.com/2013/12/19/comandi-commodore-basic-v2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
