LEZIONE 26 – INTERVAL ON, RND ED ALTRI

da | Mar 22, 2024 | MSX BASIC | 0 commenti

Buongiorno a tutti,

In questa puntata parlerò di un interrupt importante, specialmente per i giochi, quando vogliamo far apparire un nemico all’improvviso o un oggetto utile, ma anche per creare un cronometro o un orologio e tante altre cose. Il COMANDO sfrutta il time che viene aggiornato automaticamente dal nostro MSX che avviene ogni cinquantesimo di secondo. Ma andiamo per ordine. Sempre all’inizio del programma inseriamo la riga del comando: ON INTERVAL = Tempo GOSUB Numero di linea. Succede che, quando attiviamo questo comando, in nostro MSX comincia a contare il TEMPO (sempre in cinquantesimi di secondo), quando questo raggiungerà la cifra impostata dopo l’uguale, salterà alla subroutine dopo il GOSUB, lasciando quello che sta facendo. Dopo aver eseguito la routine, ritornerà dove aveva lasciato. Il comando entrerà in funzione dopo l’attivazione con INTERVAL ON. Con INTERVAL OFF sarà disattivato e con INTERVAL STOP sarà sospeso, per farlo ripartire daremo sempre INTERVAL ON. Di seguito una piccola dimostrazione di un cronometro.

10 KEY OFF: DEF INT A-Z: SCREEN 0: WIDTH 40: ON INTERVAL = 50 GOSUB 100 20 S=0: M=0: INTERVAL ON 30 LOCATE 1,11: PRINT “MINUTI:”;M; “SECONDI:”;S 40 LOCATE 1,20:PRINT “Premere spazio per fermare il timer” 50 IF INKEY$<>CHR$(32) THEN 50 60 INTERVAL OFF: END 100 S=S+1:IF S=60 THEN M=M+1:S=0 110 LOCATE 1,11: PRINT “MINUTI:”;M; “SECONDI:”;S: RETURN

La Funzione RND crea un numero casuale tra zero ed uno. Può essere inserita in una variabile: A=RND(1), o stampata al momento con PRINT: PRINT RND(1). Il numero dentro le parentesi è fittizio. Se mettiamo un numero positivo, ripeterà sempre la stessa sequenza di numeri, ma se vogliamo che questo non avvenga, possiamo usare la funzione TIME in modo negativo: A=RND (-TIME). TIME è una funzione usata in MSX-DOS per impostare l’ora. In Basic possiamo dire che è una variabile riservata, che conta il tempo in cinquantesimi di secondo dal momento che accendiamo il nostro MSX. Si può anche azzerare: TIME=0. E’ molto comoda per vedere i tempi di esecuzione di una parte del programma. Per fare un esempio, se vogliamo vedere il tempo impiegato di una subroutine mettiamo all’inizio, TIME=0 e alla fine vediamo il risultato, aggiungendo PRINT TIME. Ricordiamoci che il suo risultato sarà sempre in cinquantesimi di secondo.

Per finire, menzionerò tutti i comandi restanti, poco usati o usati dai programmatori esperti, ma utile sapere a cosa servono.

DSKF restituisce il numero di settori liberi in un disco. La sintassi corretta è: DSKF(Numero Drive). Numero Drive può essere 0 per quello corrente, 1 per il DRIVE A e 2 per il DRIVE B

MOTOR ON/OFF, avvia e sospende il motorino del registratore a cassette. Comando poco usato, oltretutto perché nella maggior parte dei programmi, L’MSX lo fa automaticamente.

TRON/TROFF è utile per fare dei controlli linea per linea nei nostri programmi, infatti abilita la visualizzazione dei numeri di linea mentre si sta eseguendo un programma. Basta attivarlo prima di dare il RUN digitando TRON. Per disattivare la funzione, TROFF

PAD(n), Legge i dati dalla tavoletta grafica. Dove n può avere un valore da 0 a 7. Da 0 a 3 sono i dati per la porta 1. 0 attiva la porta 1, 1 legge la coordinata X, 2 la coordinata Y e 3 lo stato del pulsante, se è premuto il suo valore sarà -1. Stessa cosa per i restanti 4,5,6,7. 4 porta 2, 5 legge X, 6 legge Y e 7 lo stato del pulsante.

PDL(n) controlla il paddle, dove n è il numero di porta come il joystick. La funzione può assumere un valore da 0 a 255 rispetto a gli otto movimenti del joystick. Per controllare il pulsante possiamo usare la funzione STRIG.

CALL chiama una routine in linguaggio macchina, sia creata dall’utente, sia residente in ROM: CALL FORMAT.

OUT Indirizzo, Dato. Invia un byte all’indirizzo specificato. Dato va da 0 a 255.

INP(Indirizzo), Restituisce un byte dall’indirizzo specificato.

WAIT attende che i dati provenienti da una porta I/O soddisfino determinate condizioni: WAIT Porta, Espressione AND, Espressione XOR.

VARPTR(Variabile), Restituisce l’indirizzo iniziale dove è immagazzinato un valore assegnato alla variabile specificata.

POKE Indirizzo, dato, Modifica un indirizzo della RAM. Dato va da 0 a 255

PEEK(Indirizzo), legge un dato da un indirizzo della RAM.

VDP(registro) o VDP(registro)=valore. Legge o modifica i registri VDP della Vram. I registri vanno da 0 a 8, l’ultimo cioè l’otto può essere solo letto.

BASE(n ) o BASE(n)=IndirizzoVram, Legge o modifica il primo indirizzo delle tabelle del VDP. n è compreso tra 0 a 19.

DEFUSR richiama un programma in linguaggio macchina. la sintassi corretta è DEFUSR(n)=indirizzo iniziale. n va da 0 a 9, cioè possono essere aperti fino a 10 programmi. Indirizzo iniziale è il punto di partenza dove è stata memorizzata la routine.

USR(n). viene utilizzato per far avviare un programma in L.M. richiamato con DEFUSR. La sintassi corretta è: Variabile=USR n (numero). Sia variabile che numero sono argomenti fittizi, possiamo mettere quello che vogliamo. Invece n è il numero con cui è stato aperto il programma in L.M. Esempio: DEFUSR0=&H41: A=USR0(1).

VPOKE modifica un dato nella Vram, VPOKE Indirizzo, dato. Indirizzo va da 0 a 16383 (I 16 Kb della Memoria video), dato va da 0 a 255.

VPEEK legge il dato dell’indirizzo impostato, dalla VRAM: VPEEK(Indirizzo)

Questa era l’ultima funzione. Siamo giunti al termine. Chiedo scusa se alcuni argomenti non sono stati comprensibili oppure non sono stato bravo nella spiegazione, ma ho cercato di farlo in modo più semplice possibile, evitando parole o sinonimi usati dagli “esperti”, visto che chi è alle prime armi, avrebbe reso la spiegazione ancora meno comprensibile. Ringrazio tutte le persone che hanno seguito e spero che questo vi sia stato d’aiuto per iniziare a fare qualcosa, anche poco, l’importante è cominciare. Sarò sempre a vostra disposizione per dubbi, chiarimenti e info. Potete scrivere nei vari siti o forum dell’Associazione MSX Italia. Purtroppo non ho tanto tempo per seguire tutto, ma se non sarò io a rispondervi, altri soci più preparati saranno ben felici di potervi aiutare.

Ancora grazie di cuore a tutti.

Ps: Visto le richieste di alcuni di voi, farò una lezione extra, spiegherò come “costruire” i Tiles e impostare le collisioni con essi, che aiuterà tanto per chi volesse creare semplici Platform.

0 commenti

Invia un commento

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

LEZIONE 25 – GESTIONE ERRORI, TASTI FUNZIONE E INTERRUZIONE PROGRAMMI

LEZIONE 21 – MSX e la musica

L'MSX ha un ottimo chip sonoro che può 'suonare' tre voci contemporaneamente. Iniziamo con il commando classico che sentiamo spesso in vari programmi o quando avviene un errore. Il suo nome è BEEP, cioè scrivendo il nome di questo comando riproduciamo questo suono. E'...

it_ITIT_IT