<?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; retroprogrmamazione</title>
	<atom:link href="https://www.retrogamesmachine.com/tag/retroprogrmamazione/feed/" rel="self" type="application/rss+xml" />
	<link>https://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>https://www.retrogamesmachine.com/2013/12/19/comandi-commodore-basic-v2/</link>
		<comments>https://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>https://www.retrogamesmachine.com/2013/12/19/comandi-commodore-basic-v2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>COMING SOON: Retroprogrammazione su The Retrogames Machine</title>
		<link>https://www.retrogamesmachine.com/2013/12/04/coming-soon-retroprogrammazione-su-retrogames-machine/</link>
		<comments>https://www.retrogamesmachine.com/2013/12/04/coming-soon-retroprogrammazione-su-retrogames-machine/#comments</comments>
		<pubDate>Wed, 04 Dec 2013 09:44:17 +0000</pubDate>
		<dc:creator><![CDATA[MetalRedStar]]></dc:creator>
				<category><![CDATA[Articoli]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[editoriale]]></category>
		<category><![CDATA[retroprogrmamazione]]></category>

		<guid isPermaLink="false">http://www.retrogamesmachine.com/?p=6545</guid>
		<description><![CDATA[Sapete&#8230;qui nella redazione di The Retrogames Machine, nonostante il nome, non siamo appassionati solo di giochini ma siamo amanti della retro-informatica in generale. Tempo permettendo traffichiamo sui nostri macinini anche per tirare fuori qualche (piú o meno utile) esercizio di [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="pf-content"><p>Sapete&#8230;qui nella redazione di The Retrogames Machine, nonostante il nome, non siamo appassionati solo di giochini ma siamo amanti della retro-informatica in generale.</p>
<p>Tempo permettendo traffichiamo sui nostri macinini anche per tirare fuori qualche (piú o meno utile) esercizio di programmazione e ci vantiamo pure di avere dei &#8220;BEI&#8221; programmatori  <span style="font-size: xx-small;">(sottile gioco di parole&#8230;) </span>nel nostro staff.</p>
<p>Sappiamo che tanti lettori vorrebbero avvicinarsi (o RI-avvicinarsi) alla programmazione dei loro computer preferiti ma magari dopo tanti anni si ritrovano un po&#8217;arrugginiti e hanno bisogno di uno stimolo per<del> andare in bagn&#8230;</del> cominciare a darsi da fare con il <del>proprio gingil&#8230;</del> AAARGH!!!! Vabbé insomma, ci siamo capiti&#8230; passimo oltre&#8230;.</p>
<p><span id="more-6545"></span></p>
<p>In redazione siamo convinti sostenitori dell&#8217;importanza della diffusione della cultura retroinformatica non solo come memoria storica ma anche come &#8220;approccio&#8221; alla soluzione dei problemi in quanto tale pratica sviluppa elementi di analisi in condizioni di non abbondanza di risorse.<br />
Un approccio quindi votato all&#8217;ottimizzazione, alla creatività e contrario allo spreco e alla pratica routinaria.</p>
<p>Per questo vi informiamo che, per perseguire i nostri propositi di preservazione e mettere in moto un certo  discorso &#8220;divulgativo&#8221;, pubblicheremo, con cadenza ASSOLUTAMENTE CASUALE ED APERIODICA, delle risorse di programmazione principalmente dedicate, ovviamente, alle macchine classiche (o come  si dice oggi: retroprogrammazione) senza però disdegnare alcune digressioni in tema &#8220;&#8221;GGiovini&#8221; ma sempre con un occhio alla old-school che tanto ci è cara.</p>
<p>I contributi che proporremo saranno i più vari: tutorial mirati, soluzioni di problemi specifici, articoli tecnici, eccetera.<br />
Il progetto che però forse più ci è caro e al contempo ambizioso è realizzare una sorta di diario di sviluppo tenuto da un singolo redattore, o gruppo di redattori, impegnati nella realizzazione di un progetto specifico o nello studio di una determinata materia, nel quale tenere traccia dei progressi, i fallimenti, gli ostacoli e le soluzioni&#8230; insomma, della vita di un programmatore più o meno provetto e condividerla con la nostra comunità.</p>
<p>Speriamo che apprezzerete le iniziative che metteremo in moto in questo senso.</p>
</div>]]></content:encoded>
			<wfw:commentRss>https://www.retrogamesmachine.com/2013/12/04/coming-soon-retroprogrammazione-su-retrogames-machine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MSX2 Basic + MSX DOS (A. Sickler – A. Van Utteren)</title>
		<link>https://www.retrogamesmachine.com/2012/10/15/msx2-basic-msx-dos-a-sickler-a-van-utteren/</link>
		<comments>https://www.retrogamesmachine.com/2012/10/15/msx2-basic-msx-dos-a-sickler-a-van-utteren/#comments</comments>
		<pubDate>Mon, 15 Oct 2012 09:16:16 +0000</pubDate>
		<dc:creator><![CDATA[MetalRedStar]]></dc:creator>
				<category><![CDATA[Retroprogrammazione]]></category>
		<category><![CDATA[Retroworkshop]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[libri]]></category>
		<category><![CDATA[libri msx italiano pdf download]]></category>
		<category><![CDATA[MSX]]></category>
		<category><![CDATA[msx basic]]></category>
		<category><![CDATA[msx computers]]></category>
		<category><![CDATA[msx dos]]></category>
		<category><![CDATA[msx2]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[philips]]></category>
		<category><![CDATA[retroprogrmamazione]]></category>
		<category><![CDATA[scan]]></category>
		<category><![CDATA[scansioni]]></category>

		<guid isPermaLink="false">http://retrogamesmachine.wordpress.com/?p=752</guid>
		<description><![CDATA[Approfittando del fine settimana ho cercato di mettere un po&#8217; di ordine nel marasma di documentazione retroinformatica che ho accumulato nei miei hard disk. Sscansioni di documenti, manuali e libri vari affollavano i miei supporti magnetici senza una minima catalogazione [&#8230;]]]></description>
				<content:encoded><![CDATA[<div class="pf-content"><p>Approfittando del fine settimana ho cercato di mettere un po&#8217; di ordine nel marasma di documentazione retroinformatica che ho accumulato nei miei hard disk. Sscansioni di documenti, manuali e libri vari affollavano i miei supporti magnetici senza una minima catalogazione e spesso capitava di ignorare persino ciò che avevo o l&#8217;ubicazione di ciò che ero sicuro di avere. L&#8217;idea era di organizzare uno &#8220;spazio di lavoro&#8221; per poter approfondire la programmazione di alcune macchine in maniera più ragionata.</p>
<p>Lungi dall&#8217;aver terminato di sistemare il caos imperante (la lotta in questo senso sarà lunga) devo dire che i frutti che tuttavia ho ottenuto da questo lavoro sono stati davvero piacevolmente sorprendenti!<br />
<span id="more-752"></span></p>
<p>Ho scoperto infatti di avere  già da tempo immagazzinato tra la varia documentazione, le scansioni dell&#8217;edizione italiana del libro MSX2 Basic + MSX DOS di A. Sickler e A. Van Utteren, l&#8217;edizione distribuita da Philips coi suoi MSX2.</p>
<p>Sembra sia un libro abbastanza ricercato nella nostra lingua, io stesso, ignorando fin&#8217;ora di averlo, avevo precedentemente contattato diversi utenti MSX molto più navigati di me per trovarlo ma sembra che fosse proprio difficile ottenerlo.</p>
<p>E invece, quando mi ero rassegnato a usare il PDF dell&#8217;edizione francese e stavo valutando l&#8217;acquisto di una copia spagnola, frugando in un bell&#8217;archivione MSX che avevo già da diverso tempo tra i libri italiani guarda un po&#8217; cosa ti salta fuori!</p>
<p>La scansione proprio di quest&#8217;oggettino del desiderio (almeno mio).</p>
<p>Lesto monto un PDF dalle scan delle singole pagine e subito mi balena l&#8217;idea che forse anche qualcun altro potrebbe esserne alla ricerca, e quindi lo metto a disposizione di tutti tramite il link alla fine di quest&#8217;articolo che potrete incontrare anche nella sezione &#8220;Download&#8221; del blog.</p>
<p>Spero che vi possa essere utile, fatemi sapere.<br />
Link:<a title="MSX2 Basic + MSX DOS (A. Sickler - A. Van Utteren)" href="http://www.mediafire.com/view/?na3k7ra8830vkis" target="_blank"> (Libri – MSX) MSX2 Basic + MSX DOS Philips (A. Sickler – A. Van Utteren)</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>https://www.retrogamesmachine.com/2012/10/15/msx2-basic-msx-dos-a-sickler-a-van-utteren/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
