SIDBERRY – Un player con chip 6581 e Raspberry PI

SIDBERRY

SIDBERRY è un jukebox realizzato con RasberryPi e SID, il chip audio 6582 alloggiato in una board custom collegata direttamente al Raspberry.

Ultimamente si sente molto parlare dell’home computer Commodore C64. L’architettutra semplice e pulita, la possibilità di gestire 64 kbyte di memoria con accesso a 16 bit, la velocità del processore MOS 6502 (o dell’avanzato 6510, con ben 16 byte di cache!) lo rendono una piattaforma top da emulare, anche con macchine decisamente poco potenti come gli attuali SBC.

Una delle caratteristiche peculiari del C64, il chip audio 6581 o, familiarmente, SID (acronimo di Sound Interface Device) risulta tuttavia piuttosto difficile da emulare: si tratta di un sintetizzatore audio analogico/digitale polifonico a 3 voci e 4 forme d’onda che, opportunamente pilotato, era in grado di generare un audio inarrivabile per gli home computer dello stesso periodo.

Gianluca Ghettini ha realizzato un player basato sul SID e pilotato da Raspberry, che ha chiamato SIDBERRY. Diamogli la parola!

Il chip SID

Il SID originale, nelle varianti 6581 e 8580, è controllato caricando i suoi 29 registri interni con i valori opportuni al momento opportuno. La sequenza di byte inviati genera l’effetto o la musica desiderati. Ogni registro è 1 byte ed i registri sono in tutto 29 quindi c’è bisogno di almeno 5 gpio di indirizzo (2^5=32) e 8 gpio di dati per un totale di 13 gpio. Un altro gpio è richiesto per la linea CS del chip (Chip Select).

SIDBERRY

Fortunatamente il Raspberry ha ben 17 gpio e i 14 richiesti sono perfettamente pilotabili con la libreria WiringPi. Gli altri pin del chip servono per i due condensatori dei filtri interni (CAP_a e CAP_b), alimentazione, linea R/W (che andremo a collegare direttamente a GND, siamo sempre in scrittura), entrata del segnale di clock, linea di reset (collegata sempre a VCC) e uscita audio analogica (AUDIO OUT).

Hardware

Per una descrizione più approfonditya dell’hardware delchip seguire il link.

La board riproduce esattamente le “condizioni al contorno” per il SID chip come se si trovasse alloggiato in un Commodore 64 originale. L’application note originale mostra chiaramente i collegamenti da effettuare e i pochi componenti esterni richiesti (generatore di clock, condensatori e poco altro).

SIDBERRY

Unica differenza, le linee di indirizzo e dati vengono dirottate direttamente sui gpio del RasberryPi.

Attenzione:

Il RasberryPi ragiona in logica CMOS a 3.3V mentre il SID chip è TTL a 5V quindi completamente incompatibili a livello di tensioni. Fortunatamente, siccome andiamo unicamente a scrivere nei registri, il RasberryPi dovrà soltanto applicare 3.3v ai capi del chip, più che sufficienti per essere interpretati come livello logico alto dal SID.

SIDBERRY SIDBERRY

Software

Il grosso del lavoro. Volevo una soluzione completamente stand-alone, senza l’ausilio di player esterni (come ACID64) e quindi ho realizzato un player che emula gran parte di un C64 originale. L’emulatore è necessario in quanto i file .sid sono programmi in linguaggio macchina 6502 e come tali devono essere eseguiti. Il player è scritto in C/C++ e basato sul mio emulatore MOS CPU 6502  più un semplice array di 65535 byte come memoria RAM (il C64 originale ha infatti 64K di RAM). Il player carica il codice programma contenuto nel file .sid nella RAM virtuale più un codice assembly aggiuntivo che ho chiamato micro-player: sostanzialmente si tratta di un programma minimale scritta in linguaggio macchina per CPU 6502 che assolve a due compiti specifici:

  • installare i vettori di reset e interrupt alle locazioni corrette
  • chiamare la play routine del codice sid ad ogni interrupt

Questo perchè il codice che genera la musica in un comune C64 è una funzione chiamata ad intervalli regolari (50 volte al secondo, 50Hz). La chiamata è effettuata per mezzo di un interrupt esterno. In questo modo è possibile avere musica e un qualsiasi altro programma (videogioco ad esempio) in esecuzione nello stesso momento.

Altre componenti sono il parser per i file .sid e la libreria WiringPi per pilotare i GPIO del RaspberryPi.

Questo il layout dell’intero applicativo, a destra è la memoria RAM virtuale 64K

SIDBERRY

Considerazioni finali

Il progetto ci riporta nell’epoca degli home computer. Allora, con un po’ di buona volontà e tanto impegno era possibile inventarsi una nuove professione.

Le immagini mostrano come sia semplice cablare il nostro juke-box e spiegano come creare i file .sid contenenti l’audio da riprodurre. Il repository github contiene tutti i file necessari per il progetto.

Non resta altro da fare che rimboccarsi le maniche e mettersi al lavoro!

Grazie Gianluca.

 

Iscriviti ai nostri gruppi Telegram

Link utili

Seguici per non perdere le prossime novità!

 

Definire ciò che si è non risulta mai semplice o intuitivo, in specie quando nella vita si cerca costantemente di migliorarsi, di crescere tanto professionalmente quanto emotivamente. Lavoro per contribuire al mutamento dei settori cardine della computer science e per offrire sintesi ragionate e consulenza ad aziende e pubblicazioni ICT, ma anche perche’ ciò che riesco a portare a termine mi dà soddisfazione, piacere. Così come mi piace suonare (sax, tastiere, chitarra), cantare, scrivere (ho pubblicato 350 articoli scientfici e 3 libri sinora, ma non ho concluso ciò che ho da dire), leggere, Adoro la matematica, la logica, la filosofia, la scienza e la tecnologia, ed inseguo quel concetto di homo novus rinascimentale, cercando di completare quelle sezioni della mia vita che ancora appaiono poco ricche.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.