Tutorial: realizzare uno slideshow con foto e musica sul Commodore 64

Dopo il precedente articolo, in cui spiegavo come convertire in maniera semplice e rapida delle fotografie in modo da poter essere visualizzate su un vero Commodore 64, il desiderio di andare avanti era troppo e mi sono così messo a cercare in giro qualche tool per creare slideshow di immagini, usando magari una musica in formato SID come sottofondo. Inutile dire che dopo tanto peregrinare non ho trovato nulla di ben fatto e funzionale come volevo io.

slideshow

Un giorno conosco su Facebook, precisamente sul gruppo Ready64 (che seguo da quando è stato fondato il sito ufficiale: ready64.org) Daniele Redivo (aka Ready.) membro di un gruppo italiano illustre e arcinoto ai sessantaquattristi: Hokuto Force, nonchè membro del gruppo spagnolo Level64. Gli illustro quindi la mia idea. Da ottimo programmatore assembler, Daniele prepara un sorgente, completo di tools per la compattazione e compilatori, che con poche modifiche è facilmente adattabile alle proprie esigenze e permette di creare in poco tempo proprio ciò che cercavo: una demo con foto e immagini in scorrimento continuo, con una musica in formato SID di sottofondo!

Magnifico! In giro non c’è nulla del genere ed è inutile dire che Daniele ha fatto qualcosa di davvero strabiliante. Il risultato è davvero bellissimo e potete ammirarlo in questo video nel quale il file D64 generato viene caricato direttamente su un Commodore64 utilizzando la C64SD:

Sperando che questo vi sia già bastato per farvi venire la voglia di provare anche voi, comincio subito con il tutorial.

Step 1: Preparazione immagini

La demo è fatta per far scorrere un numero pari di immagini, quindi una volta scelte immagini e foto che volete utilizzare, dovete convertirle in formato Koala come vi ho spiegato nel precedente articolo.

Per semplicità e pulizia nominerete le immagini con un numero progressivo a partire dallo 0: 00.kla, 01.kla ecc ecc. Ricordo ancora che dovete avere un numero pari di immagini, quindi se partite con la numerazione dallo zero, l’ultima immagine avrà un numero dispari (esempio: 30 immagini, avremo i files numerati da 00.kla a 29.kla).

Step 2: Scelta del SID

Il SID da utilizzare come musica di sottofondo deve essere in formato DAT e non SID, la differenza sostanziale è che il file DAT è più scarno di informazioni (non sono indicati autore, modello di SID ecc). Un file SID può essere convertito in DAT utilizzando tools appositi come SidPlay per Windows (scaricabile gratuitamente da qui). Non tutti i SID possono essere utilizzati (o meglio: questa affermazione vale per gli utenti alle prime armi). Per semplificare le cose necessitiamo difatti di un SID che abbia le seguenti caratteristiche (ricordo che nel linguaggio assembler del MOS6502, un numero preceduto dal simbolo di dollaro identifica un numero scritto in esadecimale):

  • Deve esserci una sola musica all’interno
  • Deve avere l’Init Address a $1000
  • Deve avere il Play Address a $1003
  • Il Load Range non deve superare l’indirizzo $3FFF (ovvero il SID deve avere una dimensione massima di $2FFF ovvero 12287bytes)

Dicevo infatti che gli utenti esperti sanno sicuramente come estrarre le singole musiche da un SID multi-musica e spostare gli indirizzi, ma io non sono esperto e così mi sono cercato delle musiche con queste caratteristiche sul sito del Commodore 64 Scene Database, impostando un filtro per cercare esclusivamente Musiche nella ricerca avanzata.

Ottenuto l’elenco di musiche, basta cliccare sul link di ognuna per controllare se ha le caratteristiche che desideriamo. Tanto per fare un esempio, queste sono le caratteristiche del SID che ho scelto per la mia demo (loader tune di Tom Roger Skauen – Le musiche realizzate per i Loader hanno quasi tutte queste caratteristiche):

loadertuneCome vedete dalle informazioni, segue proprio le specifiche che ho appena dettato. Ad ogni modo è possibile visualizzare queste informazioni anche attraverso SidPlay in questo modo::

  • Apriamo il sid con File -> Open. Il SID viene suonato
  • Visualizziamo le informazioni con File -> Properties

Le informazioni del SID in questione appaiono così in SidPlay:

sidplay_info

Come vedete il load Range di questa musica in particolare va da $1000 a $1BB2, quindi non supera la locazione $3FFF.

Dopo aver quindi procurato una musica adatta, la convertiamo in DAT semplicemente Selezionando File -> Save As e selezionando C64 Data (*.dat) nel menù “Salva come”

saveas

Ad ogni modo l’ Init Address e il Play Address sono impostati nel file “VARIABLES.SRC” con le variabili MUSIC_INIT e MUSIC_PLAY, e alla riga 185 del Main come vedremo dopo, quindi è possibile utilizzare, senza troppi passaggi, anche musiche che non rispondono perfettamente a questi canoni.

Step 3 : Modifica files sorgente

Il sorgente della demo può essere scaricato in fondo all’articolo. Il mio consiglio è quello di scaricarlo ed estrarlo nella radice del vostro hard disk (C:) in modo da avere una cartella C:\KOALA_SLIDESHOW contenente tutti i files, come nell’immagine seguente:

rootLa prima cosa da fare è trasferire nella cartella “extra” le immagini convertite in formato Koala allo step1 e la musica in formato DAT ottenuta allo step 2.

Nella cartella src ci sono tutti i files sorgente da modificare. Utilizzando un editor di testo (il Notepad oppure, meglio, Notepad++), aprire “VARIABLES.SRC”.

Alla riga 9 c’è la variabile “SELECT_PIC_MAX”, impostarla al numero di immagini meno 1, nel mio caso avendo 30 immagini l’ho impostata a 29.:

SELECT_PIC_MAX = 29 ;number of pictures -1

Successivamente a riga 10 e 12 bisogna modificare le variabili separate da virgola in modo che riflettano il numero di immagini. Quindi nel mio caso (30 immagini) andremo da <FILENAME00 a <FILENAME29 per la riga 10 e da >FILENAME00 a >FILENAME29 per la riga 12. La logica da adottare per la modifica dovrebbe essere immediata da capire.

Dalla riga 14 in poi abbiamo delle definizioni che servono a dire al programma principale come si chiamano le immagini da caricare dal .D64 (sul file .D64 generato alla fine del procedimento, difatti, avremo il programma principale e poi le singole immagini, che saranno caricate al volo durante l’esecuzione del programma). Potete facilmente capire che anche qui, tutta questa parte va modificata per adattarla al nostro numero di immagini seguendo la logica che è facile intuire leggendo le righe già presenti.

Apriamo quindi il file “MAIN.SRC”, alla riga 186 c’è da modificare eventualmente il nome del file SID da caricare, mentre alla riga 185:

.ALIGN $1000

è riportato l’init address del file SID, che come abbiamo visto è appunto $1000 nel nostro esempio. (gli indirizzi INIT e PLAY vanno eventualmente modificati anche in VARIABLES.SRC come detto sopra).

Apriamo infine in modifica il file batch “makefile.bat” (non date doppio click !). Per aprirlo in modifica o gli cambiate l’estensione (es.: TXT) e quindi lo aprite col notepad o, se avete installato Notepad++, dal menù contestuale (cliccando il tasto destro) vi appare “Edit with notepad++”.

Vedete che da riga 9 partono dei comandi per “exomizer”, che è un tool per comprimere i files, notate che per le immagini “pari” nella riga di comando vi è l’indirizzo $4000, mentre per le immagini dispari l’indirizzo è $A000:

exomizer mem -l$E000 "extra\00.kla",$4000 -o "work\00_EXO"
exomizer mem -l$E000 "extra\01.kla",$A000 -o "work\01_EXO"

bisogna seguire questo schema, quindi alternare i comandi con $4000 a quelli con $A000, prima uno e poi l’altro: modificare quindi queste righe per adattarle al proprio numero di immagini: exomizer prende le immagini nominate come xx.kla (da 00.kla a 29.kla nel mio caso) e le compatta trasferendole nella cartella “work”, cambiandogli il nome (00.kla viene compattata e salvata in “work” come 00_EXO e così via).

La demo infatti carica le immagini in due locazioni di memoria differenti, in maniera tale che mentre un’immagine viene visualizzata, l’altra viene scompattata in background in un’altra locazione: il ritardo tra un’immagine e l’altra viene difatti realizzato proprio grazie al tempo necessario alla decompressione delle immagini. Potete difatti notare nel codice, commentate, altre porzioni di codice che io e Daniele abbiamo inserito nelle prove iniziali per caricare le immagini successive premendo la barra spaziatrice o inducendo un ritardo “artificiale” di 3 secondi basato sulla scansione del raster: queste semplici parti di codice, ad esempio, sono un buon esercizio per cominciare ad imparare l’assembler se non vi avete mai messo le mani.

Dalla riga 46 in poi viene invece invocato il programma c1541 che serve ad includere i singoli files in un .D64: dal comando si capisce chiaramente che vengono prelevati i files immagine compressi presenti nella cartella “work” e inclusi nel file .D64 cambiandogli il nome in xx (00, 01, 02 ecc ecc). Giusto per farvi capire il senso delle operazioni: questo è in pratica il vero nome dei file immagine inclusi nel .D64, che è lo stesso che abbiamo specificato dalla riga 14 in poi in “VARIABLES.SRC”. Quindi modificare anche qui dalla riga 45 in poi per adattare al nostro numero di immagini, che ricordo: deve essere pari!

Step 4: compilazione

Siamo pronti per realizzare il file finale. Salviamo il file batch e rimettiamo l’estensione BAT nel caso in cui l’avessimo cambiata per modificarlo. Ora bisogna andare nel prompt dei comandi (prompt del DOS). Su Windows 7 basta cliccare sul pulsante Start e digitare CMD nella finestra “Cerca programmi e file”.

Si apre il prompt del dos, anche se per me è banale, non tutti potrebbero avere dimestichezza col DOS, quindi perdonatemi, ma…. digitate:

  • C: (date invio) – Questa è la letterà dell’unità in cui avete copiato la cartella KOALA_SLIDESHOW. In realtà ci troviamo già in C, ma potreste aver copiato la cartella in un’altra unità, per cui metto lo stesso questo passaggio.
  • CD\KOALA_SLIDESHOW (date invio), ci posizioniamo quindi nella cartella che ci interessa
  • makefile (invio)

In realtà, dopo aver modificato il file batch, possiamo anche eseguirlo dando doppio click anzichè entrare nel prompt dei comandi, ma così vi perdete una parte del divertimento!

Il file batch quindi esegue tutti i comandi in sequenza:

  • compressione delle immagini con exomizer
  • cancellazione del vecchio file slideshow.d64
  • creazione di un nuovo “contenitore” chiamato slideshow.d64
  • compilazione del programma con 64 Turbo Assembler (64tass.exe), il programma principale appena creato si chiamerà KOALA.PRG
  • compattazione del programma principale con exomizer, il file appena compattato si chiamerà KOALA_EXO.PRG
  • inclusione del programma principale nel file .D64 (rinominato in “slideshow”)
  • inclusione delle immagini compresse nel file .D64

compilazione

a fine compilazione veniamo riportati al prompt, non curarsi dell’errore “opening dynamic library opencbm.dll failed!”. Chiudere quindi questa finestra. Il file del nostro slideshow, se tutto è stato fatto correttamente, si trova nella cartella “def_files” e si chiama “slideshow.d64”, pronto per essere caricato in un emulatore o su un commodore64.

Downloads

Koala Slideshow (744 download)

Il file D64 seguente è il risultato ottenuto con i sorgenti scaricabili di cui sopra ed è un omaggio a tutti i miei amici che hanno partecipato alla nostra prima Mostra, al nostro primo Torneo di Retrogame e al Museo.

Slideshow Associazione64 (599 download)

Lascia un commento