Dunque, tieni innanzittuto presente che i file sid in realtà hanno già dentro tutto il codice per il play. In sostanza non sono file musicali (tipo mod, xm o roba del genere) ma sono veri e propri programmi personalizzati ad hoc per emettere musica.
Ciò detto, per inserire sid io uso questo sistema:
- apro il player sidplayw (
http://www.gsldata.se/c64/spw/sidplayw.html)
- scelgo il sid e lo carico
- in File->Properties mi leggo:
* Load Range: area di memoria occupata
* Init Address: chiamata di inizializzazione
* Play Address: chiamata di play
- mi regolo se la zona di memoria é compatibile con il mio programma (non devono sovrapporsi evidentemente)
- vado su File->Conversion, seleziono il file nella tendina a sinistra e come tipo metto C64 Data (.dat)
- converto il file
A questo punto ho un file .dat che posso includere nel sorgente: l'unica cosa da tener presente é che i primi due byte vanno saltati perché rappresentano l'indirizzo iniziale. Puoi scegliere tu se eliminare i byte a mano con un editor binario o includere il file con un indirizzo di partenza di due byte inferiore rispetto a quello reale del file.
Una volta incluso il file é sufficiente una sola chiamata (jsr) all'init address da qualche parte in fase di inizializzazione ed una chiamata al play address in sincrono con l'interruzione: in linea di massima basta chiamare il player ogni 50esimo di secondo ma se la musica ti sembra lenta prova a mettere due chiamate al player in successione.
NB: la frequenza con la quale va chiamato il player meriterebbe in realtà un discorso a parte. Molti sid andrebbero suonati a 60hz o magari a frequenze anche più alte. In molti casi, comunque, si rivela necessario impostare un timer interrupt con il CIA. Per il momento ti consiglio di scegliere un sid per il quale sidplayw indichi "50Hz VBI (PAL)". VBI, per la cronaca, sta per vertical blank interrupt.