05 aprile 2020

Bare Metal Commodore 64



Il mio primo computer è stato un Commodore64, me lo comprarono a Natale, non ricordo di che anno, so solo che da allora sono impazzito.
Quel biscottone fu il mio compagno per svariati anni, non ebbi mai il lettore floppy, costava troppo (in effetti, quasi come un altro 64!!!) mi adattai quindi alle attese del nastro ed al TV in bianco e nero, al quale seguì un monitor a fosfori verdi, uno ambra e finalmente uno a colori, un Hantarex usato, nel frattempo era uscita Amiga e col 64 ci giocavo molto meno, insomma alla fine ho fatto la cazzata, l'ho venduto per circa duecentomila lirette e ci comprai le mie prime Adidas Torsion, chi se le ricorda? Vabbè!!!

Negli anni ho sempre pensato di riprenderne uno ma non ho mai fatto il passo, no so perché, forse per via degli optional ormai obbligatori (non ho al momento, il tempo di aspettare 5 minuti che si carichi un gioco) dal costo un po' altino, in fin dei conti emulandolo potevo giocare lo stesso, non spendendo una lira, così ho sempre rimandato, finché (recentemente) sono venuto a conoscenza della possibilità di emulare nel miglior (secondo me) modo possibile, ovvero potendo utilizzare la scocca e la tastiera vera dell'amato biscottone, in più c'è un po' da smanettare, quindi mi ci sono tuffato .

Ho rimediato un Commodore64 primo modello (il successivo, quello bianco, per me non esiste), purtroppo aveva un tasto rotto ma ho potuto rimediare sostituendolo facilmente 


ecco il biscottone col tasto rotto



il tasto nuovo trovato al mercato nero dai miei spacciatori

vanno tolte tutte le viti, si
e dissaldato il Caps Lock
ferito individuato!
perno sostituito!
e la tastiera di 30 anni fa è sistemata
e dopo una pulitina sono pronto per iniziare.

Ecco cosa ho fatto.

Utilizzando un Raspberry (2 o 3) è possibile caricare una immagine tipo firmware, direttamente in memoria, senza sistemi operativi, come un BIOS, il risultato è che tutto si avvia in circa 4 secondi ed è possibile spegnerlo proprio come si faceva allora senza pericolo di perdere dati, è tutto solo in memoria.

Utilizzando arduino e flashando un .hex, facendo qualche saldatura è possibile interfacciare la vera tastiera al raspino ed utilizzarla, ci sono scorciatoie tramite combinazioni di tasti ( C=+F7 ) che consentono di accedere al menu del VICE (si alla fine il motore di tutto è lui) per poter cambiare programma e variare tutte le impostazioni del caso.

Premetto che questa cosa ha senso se il fine ultimo è quello di collegare il computer tramite la sua uscita naturale, il cavo composito su CRT, il top sarebbe un monitor Commodore, ma anche un TV può andar bene, se volete collegare tutto ad un LCD 16:9 da 50 pollici, passate oltre e proseguite col vostro normale PC.

Cercherò di spiegare i passaggi che ho effettuato per arrivare al risultato finale, interfacciare la tastiera originale, configurare ed abilitare l'uscita video su composito, abilitare l'utilizzo dei joy originali su DB9 e riscoprire la poesia di premere SHIFT+RUN STOP sulla tastiera.

Partiamo dalla tastiera.


C'è bisogno di un arduino ProMicro, dico direttamente questo senza fare troppi giri, tanto alla fine si comprerà quello che costa meno e funziona (nemmeno 3€ dal Sol Levante), dobbiamo flasharlo per farlo funzionare come un encoder, farà lui da tramite fra la tastiera originale del 64 ed arduino.
Ci sono diversi modi per flashare il ProMicro, io ho utilizzato il software avrdude con una interfaccia ->QUI<-, ammetto che la procedura non è molto user friendly, garantisco comunque che dopo un po' di madonne tutto funziona, avrò provato a flashare (prima di capire cosa sbagliavo) una cinquantina di volte, visto che come al solito le info ci sono ma sono sparse per tutto il pianeta cerco di riassumere, di seguito, la procedura funzionante.

Ho utilizzato Win764bit
- Collegare la scheda Arduino al PC
- Aprire il pannello di controllo -> System -> Device Manager -> Ports(COM e LPT)
- compare il ProMicro con la sua porta assegnata
- cortocircuitando il pin GND+RST si resetta la board e si mette in modalità programmazione, di fatti si vedrà che la porta COM cambia, per pochi secondi, per poi tornare a quella assegnata precedentemente
- organizziamo avrdudess (caricando i vari files come descritto nel link sotto) ed impostiamo la porta di programmazione su quella che compare per pochi secondi, attenzione che sarà disponibile e selezionabile solo dopo aver effettuato il reset della board, quindi siate rapidi
- una volta impostato tutto, resettiamo e facciamo click su programma finché la cosa non va a buon fine

vi lascio comunque il link al progetto su github ->Eccolo<- nel quale è descritto più o meno tutto, se avete dubbi chiedete pure.

Dopo un po' di saldature relativamente semplici il risultato è questo

prova pettine
prova 2
the amazing spider arduino!
gli diamo un aspetto decente
saldiamo i pin del pettine
et voilà!
Non dovremo far altro che inserire il "pettine" da noi creato nel connettore della tastiera del biscottone ed il ProMicro al Raspberry, il gioco è fatto!

Segnalo che è possibile utilizzare il pin vcc di arduino per allimentare il led del Commodore 64, non essendo prioritario vedrò di farlo e descrivere la procedura in seguito.

Non ci rimane adesso che preparare la SD del raspberry con il BMC64, attualmente l'ultima versione è la 1.8 ed è molto completa, anche se è sempre possibile migliorare. Il link per scaricarla ed avere una piccola descrizione è il seguente

Consiglio di seguire la prima procedura per il flash, ovvero, formattare in FAT32 la sd e decomprimere semplicemente i file dentro, avremo già tutto pronto. Per i futuri aggiornamenti ci basterà sovrascrivere 2 singoli file, il Kernal8-32.img e il Kernal7.img

Così abbiamo un sistema standard, senza espansioni o custom ROM, il mio consiglio è di sostituire la KERNAL rom e quella del drive 1541II con quelle JiffyDOS, in tal modo ci si apre un mondo, tra cui il caricamento veloce dei file. Per reperire queste ROM usate google, si possono acquistare.

Di seguito qualche video, il primo con le roms standard ed i loro tempi di caricamento, gli altri con le roms JiffyDOS, al momento sono su un LCD ed ho collegato alla stessa ciabatta sia il monitor che l'alimentatore del rasp, quasi quasi ci mette di più a scomparire il logo del monitor che ad avviarsi il 64, eccellente direi.




Completato il cablaggio delle porte con i DB9 e collegato tutto al GPIO, sistemato il led della tastiera e testato un joy che avevo al volo, non è uno Commodore ma è l' Arcade Power Stick del Megadrive, tanto il connettore è lo stesso e la sua funzione l'ha fatta.
Qualche foto dei lavori ed un video di test.

Per prima cosa ho spostato il cavetto nel connettore del led per farlo combaciare a quello su arduino

connettore led
scambio pin
olé!
aggiungiamo il connettore su arduino
e siamo pronti
poi ho collegato una resistenza da 220 ohm sul vcc per non far cuocere il led

resistenza da 220ohm, un po' una zozzata ma vabbé
dopo di che, ho seguito la guida ->quì<- della quale riporto la parte interessata, per collegare le DB9 alla GPIO, per il collegamento ho utilizzato dei cavetti recuperati da vecchi case per PC di quelli per collegare la mainboard ai vari tasti e led.

GPIO Joystick Banks (No PCB required)
DO NOT ATTEMPT THIS IF YOU ARE NOT COMFORTABLE WITH WIRING THINGS UP TO YOUR PI I TAKE NO RESPONSIBILITY IF YOU WIRE THINGS INCORRECTLY OR DAMAGE YOUR DEVICE

It's possible to wire real Commodore or Atari joysticks directly to the Pi without a PCB. Each joystick gets its own set of GPIO pins, making it easy to hook up using nothing but jumpers and DB9 connectors. (See the website for adapter instructions). The switches inside the joystick will ground the pins like they would on a real C64. Wiring is as follows:

GPIO BANK 1 GPIO BANK 2 C64 JOY PIN
GPIO17 GPIO5 1 (Up)
GPIO18 GPIO6 2 (Down)
GPIO27 GPIO12 3 (Left)
GPIO22 GPIO13 4 (Right)
GPIO23 GPIO19 6 (Fire)
GND GND 8 (GND)
In the menu, select either GPIO1 or GPIO2 and assign it to one of the emulated ports.
i DB9 collegati
una volta collegato tutto ed infilato nella scocca ecco quello che è successo, a voi il video.

Un successone, non mi rimane che sistemare per bene i componenti nella scocca e fissarli, configurare l'uscita analogica ed il gioco è fatto.

Ho notato, dopo alcuni test un po' di ritardo nell'audio.

Aggiornamento, dopo l'update alla 1.9 del BMC64 hofatto il collegamento al CRT ed ho eliminato delay sul joy (che a quanto pare era dovuto alla connessione video), fatto la centratura dello schermo e drei che siamo a buon punto.

Allego di seguito i config.txt ed il ed il cmdline.txt per riferimento se qualcuno volesse cimentarsi.

config.txt

framebuffer_aspect=0x00050006
disable_overscan=1
sdtv_mode=18
hdmi_group=1
hdmi_mode=19
gpu_mem=64
disable_splash=1
boot_delay=0

cmdline.txt


hide_console=1 fast=true vicii_canvas_width=392 vicii_canvas_height=288 vic_canvas_width=392 vic_canvas_height=288 machine_timing=pal-composite

ricordo che questi settaggi sono per conettere il raspberry tramite il cavo composito 

Ho fatto qualche test per valutare eventuale ritardo nei controlli e c'è un piccolo delay nell'audio, devo sicuramente regolare delle impostazioni per sistemare la cosa, di seguito i video dei test.



dopo di che ho collegato tutto al CRT e sistemato il delay audio, i settaggi che trovate in alto sono già corretti


e niente sembra proprio il mio vecchio biscottone!

Non mi rimane che montare la stampante 3D e stampare i pezzi per fissare al meglio i componenti "volanti".


Ringrazio Roberto Lari per avermi accettato nel gruppo BMC64 & C. Italia (Bare Metal 8bit Commodore Raspberry), dal quale ho avuto tutte le info per realizzare questo piccolo sogno, oltre ovviamente tutti quelli che hanno dato il loro supporto per interfacciare i vari componenti.