Tutorial di programmazione in Basic, QB64 e Commodore #3

Benvenuti al terzo appuntamento del tutorial di programmazione in Basic. Il programma in Basic che realizziamo oggi è un timer per allenamento fitness. Per essere avvisati quando uscirà la quarta puntata, potete iscrivervi al canale YouTube (e attivare la campanella delle notifiche) cliccando su questo banner:

Iscriviti al mio canale YouTube: ValorosoIT. Retro tecnologia, impianti stereo vintage, retro computer, esperimenti e prove. Retroprogrammazione, Basic. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Il timer per allenamento fitness, che realizziamo in Basic, è compatibile con:

  • tutti i Commodore a 8 bit: il Commodore 16, il Vic20, il Commodore 64, il 128, il Commodore PET (digitando il programma in minuscolo);
  • gli emulatori per PC (quindi il VICE e il CCS64);
  • anche con il QuickBasic QB64, che consente di creare dei file eseguibili: sia per Windows, per Linux e per MEC, a seconda della versione di QB64 che installate.

Tutorial programmazione in Basic: realizziamo un timer per allenamento fitness

Il programma di oggi è un timer per allenamento fitness.

Consente di impostare il numero di round che compongono il circuito, il tempo di lavoro per ogni esercizio (in secondi) e la durata della pausa tra una serie e l’altra (in secondi).

Tutorial di programmazione in Basic QB64 Commodore programma allenamento fitness emulatore WinVICE

Il programma è disponibile per il download in fondo a questa pagina. Se non volete digitarlo, potete caricarlo sul Commodore con SD2IEC o Kung Fu Flash o altre interfacce.

Ecco il listato:

10 REM IL MIO TERZO PROGRAMMA IN BASIC
20 REM TIMER PER FITNESS, WWW.VALOROSO.IT
30 INPUT "NUMERO DI ROUND";NR
40 PRINT: PRINT "TEMPI PER OGNI ROUND"
50 INPUT "TEMPO DI LAVORO";TL
60 INPUT "TEMPO DI PAUSA";TP
70 OT$=RIGHT$(TIME$,1)
100 FOR R = 1 TO NR
110 A$ = "WORK!"
120 FOR T = TL TO 1 STEP -1
130 GOSUB 300
140 NEXT T
150 A$ = "PAUSA"
160 FOR T = TP TO 1 STEP -1
170 GOSUB 300
180 NEXT T
190 NEXT R
200 PRINT "CIRCUITO TERMINATO!": PRINT "COMPLIMENTI!"
210 END
300 REM ATTESA 1 SECONDO
310 PRINT "ROUND"; STR$(R); "/" ;STR$(NR); " "; A$; STR$(T)
320 IF OT$=RIGHT$(TIME$,1) THEN GOTO 320
330 OT$=RIGHT$(TIME$,1)
340 RETURN

Analisi del programma, le prime istruzioni REM, INPUT e PRINT

Iniziamo ad analizzare il programma di esempio del tutorial di programmazione in Basic.

Nelle prime due righe di programma (la 10 e la 20) troviamo l’istruzione REM, utile per includere dei commenti. Abbiamo già analizzato questa istruzione nella prima puntata del corso.

Corso programmazione Basic Commodore listato programma REM INPUT PRINT variabili, QB64

Le righe 30, 50 e 60 contengono l’istruzione INPUT. Anche di questa istruzione abbiamo parlato nelle prime due puntate del corso. Il programma chiede tre dati all’utente:

  • il numero di round che compongono l’allenamento (salvato nella variabile numerica NR);
  • il tempo di lavoro per ogni round (che viene inserito nella variabile TL);
  • ed il tempo di pausa per ogni round (che viene inserito in TP).

La riga 40 contiene l’istruzione PRINT, che abbiamo già analizzato.

La variabile di sistema TIME$ e la funzione RIGHT$

Bene, ecco una delle novità di questa puntata del tutorial di programmazione in Basic! La troviamo nella riga 70.

Corso programmazione Basic Commodore, QB64, GWBASIC, funzioni RIGHT$ TIME$, imparare a programmare
70 OT$=RIGHT$(TIME$,1)

La variabile di sistema TIME$ contiene l’ora del computer. Il computer la aggiorna automaticamente ogni secondo.

Nei Commodore, contiene ora minuti e secondi, senza i due punti di divisione, come in questo esempio: “201015” ad indicare le 20, 10 minuti e 15 secondi.

Nel QuickBasic 64, le ore, minuti e secondi sono divisi dai due punti, in questo modo: “20:10:15”.

Nella variabile OT$, che è una stringa, viene inserito l’ultimo carattere a destra di TIME$, quindi i secondi. Ad esempio, se l’ora attuale è “20:10:15”, in OT$ viene salvato solo un carattere a destra, il “5”. Per recuperare l’ultimo carattere a destra di una stringa, si utilizza la funzione RIGHT$.

E’ possibile scegliere quanti caratteri recuperare a destra di una stringa, mediante il numero digitato dopo la variabile TIME$. Nel nostro caso, ce ne occorre solamente uno.

Iscriviti al gruppo Facebook. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Come vedremo successivamente nel programma, questa variabile sarà parte di un timer che serve per scandire lo scorrere dei secondi di allenamento.

Il ciclo FOR … NEXT

Nella riga 100 troviamo un’altra novità! Il ciclo FOR! E’ uno dei cicli fondamentali nei linguaggi di programmazione.

Corso programmazione Basic Commodore listato programma REM INPUT PRINT variabili, QB64
100 FOR R = 1 TO NR

Il computer esegue tutte le istruzioni comprese tra FOR e NEXT (in questo caso FOR R e NEXT R) un determinato numero di volte.

La variabile R identifica il contatore del ciclo ed il suo valore viene incrementato ad ogni ciclo, quando viene trovata l’istruzione NEXT R.

Il ciclo termina quando il valore del contatore raggiunge il valore indicato dopo il TO.

In questo caso, il ciclo si ripete un numero di volte pari alla variabile NR (il numero dei round dell’allenamento) e il contatore R assume i vari valori, in successione, da 1 a NR.

La riga 110 assegna alla variabile A$ la stringa “WORK!”. Occorrerà al programma successivamente, quando scriverà a monitor se dobbiamo lavorare o fare pausa durante l’allenamento.

In questo caso ci riferiamo al momento in cui, durante l’allenamento, dobbiamo lavorare. Per cui, il ciclo successivo (dalla riga 120 alla 140), è proprio il timer che conteggia il tempo di lavoro.

Anche la riga 120 contiene un ciclo FOR! E’ un secondo ciclo (FOR T), annidato all’interno del precedente (FOR R).

Tutorial di programmazione in Basic QB64 QuickBasic ciclo FOR NEXT STEP TO annidato

Tutte le istruzioni comprese tra FOR T e NEXT T vengono ripetute un certo numero di volte (pari al valore della variabile TL).

L’istruzione STEP dà la possibilità di modificare l’importo in base al quale la variabile del ciclo si incrementa. In questo caso, tramite STEP -1, si è scelto che il valore della variabile T debba essere decrementato ad ogni ciclo, partendo da TL (il tempo di lavoro durante l’allenamento) fino ad arrivare ad 1.

E’ un conteggio alla rovescia.

Per ora saltiamo la riga 130 e proseguiamo l’analisi del programma con la riga 140: NEXT T chiude il ciclo che abbiamo aperto prima con FOR T. Raggiunta l’istruzione NEXT, il BASIC incrementa (o decrementa, se STEP è negativo), il valore della variabile T. Se viene raggiunto il valore obiettivo, il ciclo termina e viene eseguita l’istruzione dopo NEXT, in questo caso la 150. Altrimenti, se T non ha raggiunto il suo obiettivo, il ciclo si ripete, in questo caso dalla riga 130.

La riga 150 ha la stessa funzione della 110: servirà nel programma successivamente, quando scriverà a monitor se dobbiamo lavorare o fare pausa durante l’allenamento. In questo caso è una pausa.

Infatti, nelle righe successive (dalla 160 alla 180), è presente il timer che conta il tempo di pausa durante l’allenamento.

Per le righe 160, 170 e 180 vale quanto già visto per il precedente ciclo FOR T.

In questo caso, il valore della variabile T varia da TP (il tempo di pausa) a 1, eseguendo le istruzioni contenute tra FOR T e NEXT T un determinato numero di volte.

Anche questo ciclo FOR T è annidato all’interno del ciclo FOR R, come abbiamo visto per il precedente.

La riga 190, NEXT R, è la chiusura del primo ciclo FOR R, quello che contiene gli altri due cicli annidati.

190 NEXT R

Tutorial programmazione in Basic: le istruzioni GOSUB e RETURN

Ecco un’altra novità di questa puntata, la trovate alla riga 130 e alla riga 170: l’istruzione GOSUB!

Iscriviti al gruppo Facebook. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

170 GOSUB 300

Tramite GOSUB è possibile saltare ad un’altra riga di programma, in questo caso alla 300.

Tutorial di programmazione in Basic QB64 QuickBasic Commodore 3 salto GOSUB RETURN

A differenza dell’istruzione GOTO, che abbiamo già visto nelle precedenti puntate, GOSUB memorizza in uno stack – un’area di memoria – la riga da cui proviene il salto, in questo caso la 130.

L’esecuzione del programma, dalla riga 130, salta alla riga 300, fino a quando il computer trova l’istruzione RETURN, presente nella riga 340. Dalla riga 340, l’esecuzione del programma ritorna alla riga successiva a quella dell’istruzione GOSUB, in questo caso la 140.

340 RETURN
Tutorial di programmazione in Basic Commodore 3 salto GOSUB ritorno RETURN stack, QB64 QuickBasic

La stessa logica viene seguita alla riga 170, che salta alla 300 per poi tornare alla 180.

L’istruzione GOSUB è utile per richiamare una determinata sequenza di istruzioni che può servire più volte all’interno di un programma.

L’istruzione END

Ci troviamo quindi alla riga 200: il nostro allenamento è finalmente completato!

Corso programmazione Basic Commodore 3 istruzione END termina programma, listato, QB64 QuickBasic

Il programma termina alla riga 210, con l’istruzione END. Raggiunta l’istruzione END, il programma termina.

210 END

In questo esempio, il programma non termina con l’ultima riga del programma, ma in una riga intermedia.

La logica del timer da 1 secondo

Le istruzioni comprese tra le righe 300 e 340 non vengono eseguite dopo la 210, ma, come abbiamo visto prima, vengono richiamate dalle istruzioni GOSUB.

La riga 310 contiene PRINT: ne abbiamo parlato nelle precedenti puntate.

L’istruzione PRINT scrive a monitor una serie di informazioni:

  • la scritta “ROUND”;
  • il contatore del round corrente, contenuto nella variabile R;
  • il numero di round totali NR;
  • la variabile A$, che specifica se stiamo lavorando o facendo pausa;
  • il timer alla rovescia, contenuto nella variabile T.
ROUND 3/ 10 WORK! 15

Non mi soffermo sulla funzione STR$, dato che l’abbiamo vista nella puntata 2 del corso.

Le righe 320 e 330 contengono il timer vero e proprio.

Corso programmazione Basic QB64 QuickBasic Commodore 3 attesa 1 secondo timer temporizzatore

In particolare, nella riga 320 c’è l’istruzione IFTHEN, analizzata nella puntata 2 del corso.

320 IF OT$=RIGHT$(TIME$,1) THEN GOTO 320

Quando il valore della variabile OT$ (che rappresenta il precedente valore dei secondi della variabile di sistema TIME$) è ancora uguale all’attuale numero dei secondi di sistema, l’esecuzione rimane sulla riga 320, in attesa che passi un secondo.

Quando, invece, il tempo scorre e il numero dei secondi in TIME$ cambia rispetto al precedente (memorizzato in OT$), l’esecuzione del programma continua alla riga 330, che salva nuovo valore dei secondi della variabile di sistema TIME$.

330 OT$=RIGHT$(TIME$,1)

L’esecuzione del programma viene poi riportata alle precedenti righe tramite RETURN.

Tutorial programmazione in Basic #3, il listato

Per la prova del programma per fitness del tutorial, vi rimando al video!

Ed ecco il listato, il programma è disponibile in due formati:

  • CORSO-BASIC-3.TXT, in formato testo, per analizzarlo su PC o per trascriverlo sui vari Commodore, sul GwBasic del DOS e sul QB64;
  • CORSO-BASIC-3.ZIP, cartella compressa ZIP da scompattare. Include il programma in formato PRG, caricabile ed avviabile dal Commodore 64 e un disco virtuale D64 con all’interno il programma caricabile dal C16, Vic20, C64 e C128, nonché emulatori (CCS64, VICE o altri).

Gli argomenti del corso sono ancora tanti!

Iscriviti al gruppo Facebook. Retro tecnologia, Commodore, impianti stereo vintage, retro computer, esperimenti e prove. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Credits: nel video tutorial, la SID music è Turrican 3 (1993) level 1-1 theme by Chris Hülsbeck.

Iscriviti al mio canale YouTube: ValorosoIT. Retro tecnologia, impianti stereo vintage, retro computer, esperimenti e prove. Retroprogrammazione, Basic. Commodore, IBM, Atari, Apple, Texas Instruments, Amstrad, MSX.

Ti piace questa pagina? Condividila:

Pubblicato in Retro Computer, Retro Tecnologia ed Elettronica Vintage, Tutti gli articoli.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *