LEZIONE 21 – MSX e la musica

da | Feb 4, 2024 | MSX BASIC | 0 commenti

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’ utile anche per ripristinare tutti le modifiche fatte con PLAY. Sintassi: BEEP                  

Come nella parte grafica, anche in quella musicale l’MSX ha un piccolo linguaggio interno: MML (Music Macro Language) ed viene usato come il DRAW, cioè ha le stesse caratteristiche. Le stringhe musicali devono essere racchiuse tra virgolette o possono essere inserite nelle variabili. Ma prima di capire come fare, di seguito inserisco la lista di tutte le istruzioni da poter usare all’interno del MML. Come DRAW per la grafica, il comando principale per far avviare le istruzioni musicali è PLAY. La sintassi corretta è: PLAY “PRIMA VOCE”,”SECONDA VOCE”,”TERZA VOCE” oppure PLAY A$, B$, C$. Le voci possono essere usate a piacimento. Solo la prima, la prima e la terza o seconda e terza, eccetera. Sulle note possiamo aggiungere il tempo di battuta (n), mettendo un numero che determinerà la velocità di esecuzione della nota. Più questo è alto, più veloce sarà suonata la nota. Se non viene usato, è 4 per default, almeno che non venga specificato all’inizio con l’istruzione L che determina la lunghezza della nota da quel punto in poi.                           

COMANDO        SIGNIFICATO                   

C           Do           

D           Re

E           Mi

F           Fa

G           Sol 

A           La

B           Si

R           Pausa

+ o #          Diesis

(-) meno        Bemolle

(.) punto        Estende la durata del 50%         

On          Ottava (n = da 1 a 8, per default 4)

Ln          Durata della nota (n = da 1 a 64, per default 4)

Tn           Ritmo (n = da 32 a 255, per default 120)

Vn          Volume (n = da 1 a 15, per default 8)

Nn          Valore di tutte le note ( n = da 1 a 96)

Mn          Periodo dell’inviluppo (n = da 1 a 65535, per default 255)

Sn           Forma d’onda (n = da 1 a 15, per default 1)

Xvariabile$       Per inserire una variabile dentro la stringa

Esempio: PLAY “T120O4L8V13CDEFGABR8T150O5L4V14BAGFEDC”

Abbiamo la possibilità di sapere se una delle voci sta suonando, usando la funzione PLAY(N), dove N può essere 1 per la prima voce, 2 per la seconda e 3 per la terza, se usiamo lo zero controllerà se una delle tre voci sta suonando. Esempio: 100 IF PLAY(0) THEN 100. Abbiamo detto all’MSX di rimanere su quella linea finché non smetterà di suonare. C’è un altro modo per sfruttare al massimo il chip sonoro, ma si devono conosce bene i vari registri. Per modificare i vari registri usiamo il comando SOUND A,B, dove A è il registro e B sono i dati nel suo interno. I registri sono 14 e vanno da 0 a 13, ogni registro è formato da 8 bit e possiamo variarli modificando la seconda voce del comando SOUND, questa va da 0 a 255 in decimale, da 0 a 11111111 in binario e da 0 FF in esadecimale, ma non tutti usano i bit a disposizione (vedere tabella sotto). Per fare un esempio, vogliamo modificare il terzo bit del registro 11 usando i numeri binari, visto che ci fa capire meglio perché ci fa vedere com’è realmente il registro, scriveremo SOUND 11,&B00000100. Ho fatto finta che il registro 11 fosse tutto a 0, così ho portato il 3 bit a 1, s’intende che la lettura è sempre da destra verso sinistra. In decimale sarebbe stato: SOUND 11,4 ed anche in esadecimale la stessa cosa, aggiungendo il suffisso, visto che i primi 10 numeri sono uguali : SOUND 11, &H4. Di seguito inserisco una tabella di tutti i registri con le impostazioni corrette, a cui potete fare anche riferimento nel libro MSX – Basic di Albert Sickler.

RO - R1: controllo frequenza canale A LSB 0-255 - MSB 0-15

R2 - R3: controllo frequenza canale B LSB 0-255 - MSB 0-15
R4 - R5: controllo frequenza canale C LSB 0-255 - MSB 0-15
R6: controllo frequenza rumore 0-31
R7: mixer e controllo porte I/O 0-63
R8: volume canale A 0-15
R9: volume canale B 0-15
R10: volume canale C 0-15
R11 - R12: controllo periodo inviluppo LSB 0-255 - MSB 0-255
R13: forma inviluppo 0-14

E con questo è tutto.

Grazie e alla prossima

0 commenti

Invia un commento

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

LEZIONE 26 – INTERVAL ON, RND ED ALTRI

LEZIONE 26 – INTERVAL ON, RND ED ALTRI

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...

it_ITIT_IT