Arduino (11)


Homemade GameBoy FlashCart prototypes

Dopo avervi presentato il mio GameBoy Cartridge Reader/Writer, oggi vi mostrerò un video dimostrativo di due prototipi di FlashCard realizzati da me per gameboy.

Queste cartucce, una volta programmate con l’Arduino Cartridge Reader/Writer, permettono di eseguire codice propetario e non (Homebrew) su un game boy reale; di fatto si rivelano un ottimo strumento di sviluppoo software!

1) Il primo prototipo monta una flash da 4mBit in formato PLCC ed una SRAM da 8kb

2) Il secondo prototipo monta un socket DIP in grado di accogliere tutte le memorie flash da 4mBit fino a 32mBit in formato DIP e PLCC (il massimo consentito per il GameBoy color) e monta una SRAM da 32kb. Possiede inoltre uno switch meccanico in grado di selezionare fino a 4 giochi installati su una stessa memoria. 😀

Un breve video dimostrativo delle funzionalità delle cartucce, alcuni Homebrew e del programmer:




Tolfa 2013 practice session

Anche quest’anno a Tolfa si è ripetuta la Masterclass di Composizione e musica elettronica, qui una sessione di prova in preparazione alla performance finale, buona visione!

 




Olinuxino custom Android image for 272×480 touchscreen LCD

Recently i was talking about my new Olinuxino delevopment board by Olimex and related developments with it. Well, nothing to say, the board does its job flawlessly both in Andoid and Linux enviroments, the only problem i faced concern the touchscreen LCD i got together with the board, and this is what I’m going to fix and explain today 🙂

Olimex ships some different types of GPIO LCD displays in sizes and features and since the manufacturer provides TOTALLY Opensouce hardware and software is not always easy find the correct image for the specified hardware configuration (despite this Olimex provides one of the best repository and resources i’ve never seen for this kind of projects, don’t get me wrong (: ). This turned out in a lack of Android updates for my lcd resolution display, which led to a series of UI and system bugs that the producer were never managed to solve.
After a long research on the web I finally found out that the only solution was to fix the bugs by myself, fortunately Olimex (as i said before) provided a good repository for kernels and drivers that really helped me to compile my own fresh and customized Android image 🙂

The image I’m going to share with you provides the last Android supported version (4.0.4 actually) and some patches:

  • fixed the touch screen inverted x-axis
  • fixed touchscreen calibration issue
  • fixed UI issue (reverted back from “tablet” to “phone” view)
  • now the “enter” physic key acts like the “back” software button (absolutely more comfortable!)
  • general stability

Here the direct download link to the image:

[scbutton link=”/docs/272x480AndroidOlinuxinoA13.img” target=”blank” variation=”red” size=”large” align=”center”]Download Image[/scbutton]




OLinuXino – Development Boards

L’ultimo arrivato a casa InsideCode a far compagnia alla coppia di Arduino UNO e Arduino DUE è una fiammante OlinuXino A13 wifi board della casa Bulgara Olimex.

Questa Board supporta, oltre alla programmazione diretta Bare Metal (no OS), varie distribuzioni di linux come Ubuntu, Fedora e Debian ed il sistema operativo Android, dotata di cpu Cortex A8 da 1ghz, scheda grafica integrata, wifi, vga, 4 usb host, 1 otg usb, audio in/out e 50 GPIO ed il supporto per display LCD touchscreen, è senza alcun dubbio la rivale numero 1 dei Raspberry lovers 😀

Progetti in cui sto utilizzando questa scheda: SaGa project – BomberMan

A breve pubblicherò delle immagini Android modificate e compilate appositamente per questa scheda.

WP_20130802_001WP_20130802_006

Di seguito le caratteristiche dal sito ufficiale:

  • A13 Cortex A8 processor at 1GHz, 3D Mali400 GPU
  • 512 MB RAM (2 x 256Mbit x 8)
  • 6-16VDC input power supply, noise immune design
  • 4GB NAND flash
  • 3 + 1 USB hosts, 3 available for users 1 for WIFI RTL8188CU 802.11n 150Mbit module on-board
  • 1 USB OTG which can power the board
  • Battery option and connector
  • Android OS ready to use in the NAND memory
  • SD-card connector for booting optional Linux image
  • VGA video output
  • LCD signals available on connector so you still can use LCD if you diasble VGA/HDMI
  • Audio Output
  • Microphone Input
  • 4 Mount holes
  • RTC PCF8536 on board for real time clock and alarms
  • 5 Keys on board for android navigation
  • UEXT connector for connecting addtional UEXT modules like Zigbee, Bluetooth, Relays, etc
  • GPIO connector with 68/74 pins and these signals:
    • 17 for adding another NAND flash;
    • 22 for connecting LCDs;
    • 20+4 including 8 GPIOs which can be input, output, interrupt sources;
    • 3x I2C;
    • 2x UARTs;
    • SDIO2 for connecting SD cards and modules;
    • 5 system pins: +5V, +3.3V, GND, RESET, NMI
  • Dimensions: 120 x 120 mm (4.7×4.7”)
  • Optional low-cost 7″ LCD with touchscreen

Futuri progetti ed applicazioni? Rimanete collegati! 😉




Ars Electronika Update3 – Recording session videos

Dopo una brevissima attesa ed un lieve ritardo ecco i video ripresi durante la registrazione della performance a Civitavecchia

vedi :

http://insidecode.it/ars-electronika/
http://insidecode.it/conferenza-gruppo-ars-electronika-updates/
http://insidecode.it/ars-electronika-update2-recording/








Ars Electronika Update2 : recording

Oggi presso l’associazione culturale Spazio Musica si terrà la registrazione della performance in tempo reale presentata al Circolo della Soda il 21 aprile.

Al più presto foto e filmati!




Conferenza gruppo Ars Electronika – updates

Chi ha seguito il mio blog nelle ultime settimane saprà che domenica il gruppo Ars Electronika si é esibito al Circolo della Soda a Civitavecchia presentando una conferenza e due performance dal vivo. Ci stiamo impegnando in questo giorni a raccogliere video e foto dell’evento, nonché a preparare una registrazione vera e propria della performance. rimanete collegati per futuri aggiornamenti!

vi lascio alcune foto:

WP_20130421_006 WP_20130421_005 WP_20130421_004 WP_20130421_008 WP_20130421_007




Wii controller + processing: tracking movements test

Un piccolo assaggio di cosa vedrete (per chi ci sarà) alla presentazione del 21 aprile a Civitavecchia al Circolo della Soda!

Rimanete collegati!

Una semplice dimostrazione di come sia facile interfacciare e gestire un controller wii sul computer

Video:




Masterclass Tolta 2012: Arduino, Processing, CSound, OSC

Arduino, Processing, Csound, OSC: un mix portentoso!

Nell’agosto del 2012 ho partecipato a una Masterclass di composizione e nuove tecnologie organizzata e tenuta dal comune di Tolfa. Obiettivo di tale corso approfondire e studiare nuove possibilità compositive, in accordo con nuove tecnologie, interfacciando l’utente con il mondo del computer music.

L’idea di base:

l’idea di base era quella di usare software ed hardware totalmente openSource, fare leva sulla conoscenza collettiva della comunità internazionale, dimostrando l’incredibile potenziale di questi semplici strumenti “liberi”. Abbiamo così ideato una performance in tempo reale utilizzando un’interfaccia utente basata sul micro-controller Arduino, una interfaccia grafica basata sul framework opensource Processing e il programma di sintesi audio CSound; il tutto tenuto insieme dal protocollo di comunicazione OSC (open sound control).

La realizzazione:

Lo scopo del corso era quello di fornire le conoscenze di base riguardo il mondo del computer sound e della sintesi audio con CSound; oltre alle lezioni il Maestro gestiva anche le fasi di preparazione dell’evento.

Ognuno aveva il suo compito: preparare i suoni e i vari strumenti digitali, preparare le interfacce utente e far sì che tutti riuscissimo a comunicare in tempo reale. Personalmente mi sono dedicato maggiormente alla parte software per quanto riguarda l’interfaccia grafica e l’animazione Processing, e alla parte hardware nella realizzazione dei sensori di prossimità e la gestione Arduino: l’implementazione nell’animazione Processing di tutti i controlli audio e di comunicazione OSC, non che la gestione di parametri attraverso i dati dei sensori di prossimità opportunamente elaborati da Arduino.

Mi sono occupato di costruire la board dei sensori e gli stessi sensori ottici, ho fatto in modo che ognuno di noi avesse un proprio sensore in grado di modificare un diverso parametro sia dal lato audio e l’aspetto che quello dell’animazione grafica.

Più in dettaglio il video del Making-of:

La Performance:

Un video vale più di mille parole:

What’s next?

Rimanete collegati: il 21 aprile al Circolo della soda, Civitavecchia, due nuove performance!




Arduino GameBoy cart Reader/Writer

Introduzione:

Recentemente, rispolverando la mia collezione di retro games Nintendo, ho notato con mio grande dispiacere che alcune cartucce di gioco (ferme da più di dieci anni) risultavano completamente vuote, prive dei dati di gioco collezionati in età puerile. (all’interno delle cartucce di gioco è presente una batteria tampone che ha lo scopo di mantenere in memoria il salvataggio; quando la batteria si esaurisce, inevitabilmente si perde il salvataggio).

A quel punto sorse spontanea la domanda: come posso fare un backup dei salvataggi dei miei vecchi giochi?

Certo, esistono già dei lettori di cartucce, ma sono difficili da reperire, e spesso molto costosi… così ho optato per una soluzione più economica e amatoriale:

Arduino GameBoy cart reader/writer

Arduino GameBoy cart reader/writer

Arduino sembrava essere l’ideale per questo tipo di progetto, così tentai di costruire un mio proprio prototipo di lettore di cartucce per GameBoy.

Analisi del progetto

[ssbluelist]

  • Il primo passo verso la realizzazione del progetto è quello di aprire una cartuccia di gioco per analizzarne la struttura interna;
  • Secondo passo: estrapolare il Pinout e capire come interfacciare la cartuccia di gioco e la nostra board Arduino;
  • Terzo passo: realizzare la prima interfaccia hardware e software;
  • Quarto passo: riguarda il lato software: riuscire a leggere i dati dalla cartuccia;
  • Quindo passo: realizzare l’interfaccia software dal lato pc in modo da salvare i dati letti dal nostro Arduino;
  • Sesto passo consiste nel scrivere i dati salvati precedentemente nel computer nella cartuccia di gioco;
  • Conclusioni.

[/ssbluelist]

Primo passo: Inside the Gameboy

Per prima cosa diamo uno sguardo all’interno della cartuccia di gioco per analizzarne la struttura:

Interno della cartuccia

Interno della cartuccia

[sstoggles] [sstoggle title=”Componenti”]ROM dove sono contenuti i dati del gioco

RAM dove è contenuto il salvataggio del gioco

MBC controllo dei banchi di memoria, gestisce e alloca grandi spazi di memoria

Timer Chip mantiente la data e l’ora (presente solo in alcune cartucce)

Batteria[/sstoggle][/sstoggles]

Secondo passo: Cartridge Pinout

La cartuccia di gioco presenta un’interfaccia a 32 Pin:

cartridgepin

Cartridge pinout

[sstoggles] [sstoggle title=”PinOut”]VCC – Alimentazione (5 volts)

CLK – Clock

~WR – se Low AND RD Low, possiamo scrivere sulla SRAM

~RD – se low AND WR High, possiamo leggere la ROM e la SRAM

CS_SRAM – se abilitato, seleziona la SRAM in scrittura

A0 – A15 – 16 linee di indirizzo della ROM (a seconda della configurazione anche della SRAM ed altri componenti)

D0 – D7 – le 8 linee dati attraverso le quali leggiamo/scriviamo la ROM/SRAM.

Reset – provoca un Reset dei componenti (abilitato Low)

Audio in – (non in uso)

GND – Massa
[/sstoggle][/sstoggles]

Terzo passo: Arduino Interface

Analizzando la struttura della cartuccia e il suo pinout abbiamo visto come il GameBoy possa allocare solamente indirizzi dati a 16 bit (ricordiamo le 16 linee dati A0-A15). Questo significa (in teoria, ma vedremo che in realtà non è così) che la capacità massima di allocamento è 2^16 byte = 65,536 bytes

Dal momento che questi 16 indirizzi controllano anche l’accesso alla sRAM e a tutti gli altri componenti della cartuccia, in realtà solamente gli indirizzi compresi tra 0x0000 e 0x777f sono dedicati alla ROM  (gli indirizzi sono espressi base esadecimale), per un totale di 32,767 bytes su cui lavorare.

Il primo gioco per GameBoy mai realizzato fu “Tetris“, la cartuccia era provvista solamente di una ROM da 32,767 bytes, una quantità di spazio più che sufficiente per i giochi dell’epoca (lontano 1989).

Il GameBoy prende piede nel vecchio e nel nuovo continente, la tecnologia avanza, e 32kbyte di spazio cominciano ad essere pochi: la Nintendo introduce un nuovo chip nei suoi progetti, L’ MBC (Memory Bank Controller). Questo chip risolse totalmente il problema di spazio all’interno delle cartucce (uno standard mantenuto fino all’avvento del GameBoy Color): come ci suggerisce il nome, infatti, il circuito integrato funge da controllore di banchi di memoria; con opportuni accorgimenti e collegamenti, è in grado di pilotare ROM con 21 linee di indirizzo, allocando fino a 8Megabytes! (ultima versione MBC5)

Quello che ci rimane da fare ora è creare un collegamento tra la cartuccia e il nostro Arduino:

testboard

Prototipo su BreadBoard

Il problema più grande che ho dovuto affrontare è stato quello della mancanza dei pin: la cartuccia, come abbiamo visto, è provvista di 32 pin, mentre Arduino possiede solamente 13 pin digitali (di cui 2 usati per la trasmissione seriale) e 5 analogici, come risolvete tale problema? Shift Registers!

[ideabox]Usando due ShiftRegisters 74LS595N collegati in serie serie, siamo in grado di pilotare fino a 16 uscite digitali utilizzando solamente 2 pin digitali del nostro Arduino (i2c bus).[/ideabox]

Quarto passo: Arduino Software

Ecco forse la parte più difficile, realizzare il software Arduino: prima di tutto schematizziamo il funzionamento del nostro programma e cosa ci interessa che faccia.

  1. Arduino attende l’inserimento della cartuccia.
  2. Una volta rilevata la cartuccia procede verificando il Checksum, per decretarne la validità e il corretto inserimento
  3.  Arduino legge tutti gli attributi dell’Header (tutte le informazioni peculiari della cartuccia: nome gioco, grandezza rom, ram etc.) e le invia al computer.
  4. Il software attende in risposta dal computer uno dei seguenti comandi: Leggi ROM, Leggi sRAM, Scrivi sRam
  5. Ricomincia il ciclo del programma.

Qui un estratto dell’algoritmo usato per il Checksum (situato all’indirizzo 0x014d della ROM):

original source from TheNintendoGameboy:

 x=0:FOR i=0134h TO 014Ch:x=x-MEM[i]-1:NEXT

 from my Arduino software:
 // Wait for serial input
 while (Serial.available() <= 0) {
 //coltrollo cartuccia inserita correttamente (checksum)
 int checksum = readbank0Address(0x014D) ;
 int x = 0;
 for (int addr = 0x0134; addr <= 0x014C; addr++) {
 x = x - readbank0Address(addr) - 1 ; 
 }
 if ((x & 0xFF) == checksum) { digitalWrite(greenled, HIGH);  }
 else digitalWrite(redled, HIGH);
 delay (50) ;

Qui in Allegato il codice sorgente completo.

Quinto passo: Computer Software

Analizzato il lato Arduino, passiamo ora al lato Computer:

Ho realizzato il software computer in Phyton basandomi su quello realizzato da InsideGadgets, ampliandolo, adattandolo alla mia board Arduino e perfezionandolo.

Il software funziona nel seguente modo:

  1. Il software attende la riposta dalla board Arduino.
  2. Una volta rilevata la Board Arduino, il software invia la richiesta dell’Header della cartuccia e stampa a schermo la risposta.
  3. A questo punto l’utente può scegliere tra varie opzioni: Leggi ROM – Leggi sRAM – Scrivi sRAM – Ricomincia loop programma.
  4. Il software invia il comando ad Arduino e salva i dati con il nome di intestazione del gioco della cartuccia
  5. Ricomincia il ciclo del programma.

Qui uno screenshoot del programma in esecuzione:

screenshot

[ssbluelist]
Il necessario:

  1. Interprete python: Download
  2. Plugin python serial 2.6: Download
  3. Sorgente completa del programma per computer: Download

[/ssbluelist]

Conclusioni:

Fonti e ispiratori:

Per qualunqu dubbio o domanda non esitate a commentare 😉