<?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; Basic</title>
	<atom:link href="http://www.retrogamesmachine.com/tag/basic/feed/" 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>
		<item>
		<title>OpenMSX 0.9.1 su Raspberry</title>
		<link>http://www.retrogamesmachine.com/2013/01/10/openmsx-0-9-1-su-raspberry/</link>
		<comments>http://www.retrogamesmachine.com/2013/01/10/openmsx-0-9-1-su-raspberry/#comments</comments>
		<pubDate>Thu, 10 Jan 2013 14:11:46 +0000</pubDate>
		<dc:creator><![CDATA[MCP]]></dc:creator>
				<category><![CDATA[Articoli]]></category>
		<category><![CDATA[Fuffa]]></category>
		<category><![CDATA[arm]]></category>
		<category><![CDATA[Basic]]></category>
		<category><![CDATA[C64]]></category>
		<category><![CDATA[Commodore]]></category>
		<category><![CDATA[emulation]]></category>
		<category><![CDATA[emulator]]></category>
		<category><![CDATA[emulatori]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[msx2]]></category>
		<category><![CDATA[openmsx]]></category>
		<category><![CDATA[oric]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[porting]]></category>
		<category><![CDATA[raspberry]]></category>
		<category><![CDATA[retrocomputer]]></category>
		<category><![CDATA[retrocomputing]]></category>
		<category><![CDATA[speccy]]></category>
		<category><![CDATA[z80]]></category>

		<guid isPermaLink="false">http://retrogamesmachine.wordpress.com/?p=1660</guid>
		<description><![CDATA[Ciao a tutti! e Buon 2013! Sto portando l’ultima versione di openmsx sul piccolo Raspy… ma purtroppo, per via della ram, crasha verso la fine la compilazione. Cerco in qualche modo di farmi una piattaforma di sviluppo virtuale usando Qemu [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="pf-content"><header><strong>Ciao a tutti! e Buon 2013!</strong></p>
</header>
<div>
<p>Sto portando l’ultima versione di openmsx sul piccolo Raspy… ma purtroppo, per via della ram, crasha verso la fine la compilazione.<br />
Cerco in qualche modo di farmi una piattaforma di sviluppo virtuale usando Qemu sotto OSX Mountain Lion. (in alternativa sfrutto quella sotto windows)</p>
<p>Il porting dell’ORIC è stato indolore e facilissimo.<br />
Quello MSX mi ha dato anche qualche problema con le librerie… ma tutto si sistema <img alt=":)" src="http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif?m=1129645325g" /><br />
Diciamo comunque che la cosa è fattibile anche entro brevissimo tempo.</p>
<p>Stay Tuned.</p>
</div>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.retrogamesmachine.com/2013/01/10/openmsx-0-9-1-su-raspberry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C&#8217;era una volta&#8230;</title>
		<link>http://www.retrogamesmachine.com/2012/10/09/cera-una-volta/</link>
		<comments>http://www.retrogamesmachine.com/2012/10/09/cera-una-volta/#comments</comments>
		<pubDate>Tue, 09 Oct 2012 17:52:27 +0000</pubDate>
		<dc:creator><![CDATA[MCP]]></dc:creator>
				<category><![CDATA[Fuffa]]></category>
		<category><![CDATA[Assembly]]></category>
		<category><![CDATA[atari]]></category>
		<category><![CDATA[Atari 2600]]></category>
		<category><![CDATA[Basic]]></category>
		<category><![CDATA[Commodore]]></category>
		<category><![CDATA[Commodore 64/128]]></category>
		<category><![CDATA[Commodore VIC20]]></category>
		<category><![CDATA[Memorie]]></category>
		<category><![CDATA[Retroprogrammazione]]></category>
		<category><![CDATA[Sinclair]]></category>
		<category><![CDATA[ZX Spectrum]]></category>

		<guid isPermaLink="false">http://retrogamesmachine.wordpress.com/2012/10/09/cera-una-volta/</guid>
		<description><![CDATA[Negli anni 80 i computers disponevano di pochi kb di ram (se non byte&#8230; atari 2600) ed una CPU (processore) che potevano erogare pochi mhz di potenza, ben differenti dagli odierni i7&#8230; ed era assolutamente d&#8217;obbligo programmare nel modo più [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="pf-content"><p>Negli anni 80 i computers disponevano di pochi kb di ram (se non byte&#8230; atari 2600) ed una CPU (processore) che potevano erogare pochi mhz di potenza, ben differenti dagli odierni i7&#8230; ed era assolutamente d&#8217;obbligo programmare nel modo più veloce ed ottimizzato possibile. Molti di noi iniziarono con il Basic per poi evolversi buttandosi nel &#8220;cyberspazio&#8221; dell&#8217;assembly. Il periodo era quello della sperimentazione ed il computer veniva visto come il &#8220;cervello elettronico&#8221; a cui tutto era permesso (e possibile).</p>
<p>In pochissimi byte si potevano creare giochi con colori, animazioni e suoni ed effetti, per l&#8217;epoca, strabilianti. Spesso i ragazzi creavano piccole &#8220;demo&#8221; per testare la potenza delle varie macchine (Commodore64, Msx, Amstrad, ZXSpectrum etc) mettendo a confronto i vari limiti cimentandosi in vere e proprie coreografie digitali.</p>
<p>In un&#8217;altra occasione mi piacerebbe riprendere ed approfondire questo argomento.</p>
<p><a href="http://64kappa.files.wordpress.com/2012/10/tasm_c64.jpg"><img src="http://64kappa.files.wordpress.com/2012/10/tasm_c64.jpg?w=487" alt="Image" /></a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://www.retrogamesmachine.com/2012/10/09/cera-una-volta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
