
Recentemente, durante le mie visite ai vari mercatini online, ho acquistato per pochi euro un lotto di vecchie carcasse elettroniche e, tra le varie cose, era presente questo stilosissimo controller con connettore di tipo Atari, quindi compatibile anche con il mio Commodore 64 e con il VIC 20.
In condizioni estetiche molto buone, probabilmente 40 anni fa le sue plastiche non tendevano al giallo, ma non sono uno di quelli fissati con il retrobright, per cui, per quanto mi riguarda, è perfetto così.
Ho un debole per gli oggetti elettronici con le plastiche trasparenti; in particolare, in questo caso si vedono i LED al suo interno che si accendono per ogni pulsante premuto.
Non è un’opzione necessaria per giocare, ma visivamente devo dire che fa la sua porca figura. Tamarrissimo!

L'ultima modalità non la conoscevo; cito le uniche informazioni che ho trovato online a riguardo, tratte da una vecchia rivista italiana (Testo integrale della rivista K-Kappa n. 44):
Nel modo decathlon, mentre il tasto verde in alto viene premuto, il joystick reagisce come se andasse a destra, mentre quando viene rilasciato va a sinistra (molto pratico, ma chi ci gioca ancora a Decathlon?)Purtroppo questo selettore non va a scatti, e questo lo rende molto scomodo nel caso in cui durante una partita si voglia attivare la posizione auto-fire centrale, in quanto occorre impostare la levetta perfettamente al centro e spesso basta pochissimo per non attivare correttamente la funzione.
A mio avviso sarebbe stato meglio avere la modalità decathlon al centro; in questo modo sarebbe stato molto più semplice passare dalla modalità normale a quella auto-fire.
Volendo, si potrebbe fare una piccola modifica invertendo un paio di fili, ma penso che lascerò il controller inalterato; l'opzione auto-fire l'ho sempre vista un po' come barare!
Una volta aperto, mi rendo subito conto del primo problema: uno dei due cavetti verdi si è staccato dalla PCB (quello verso il basso).

Dissaldo tutti i cavi e finalmente accedo dall'altro lato.




Li ho controllati tutti con il multimetro (in modalità prova-diodi o test di continuità) e funzionano perfettamente.
Mi armo di pistola dissaldante e procedo alla sostituzione!


Il condensatore è da 100uF / 16V. Secondo la tabella presente sullo stesso ESR meter, dovrebbe avere una ESR al massimo di 0.7 ohm.


Con il multimetro (perdonatemi, ma ho dimenticato di fare la foto) ho anche verificato il suo valore ed era circa 90uF, ragionevolmente in tolleranza.
Insomma, il condensatore è ok!
Avrei dovuto farlo dopo aver risaldato i cavi; infatti, successivamente l'ho nuovamente pulita.



Il secondo pulsante in alto, invece, utilizza un meccanismo diverso.
Per fare questo, basta mettere una goccia di alcol sullo switch, un pezzettino di carta tra le lamelle, chiudere il contatto e strisciare la carta in modo che si porti via eventuali tracce di sporco.



Nel peggiore dei casi sono arrugginite, ma magari sono solo molto sporche.
Provo a pulirle con la lavatrice a ultrasuoni.
La vedrete spesso su queste pagine.

Insieme all'acqua ho messo una goccia di detersivo per i piatti.



Molto meglio di prima!

Per questo motivo, una volta montato il circuito nel case, mi rendo conto che le plastiche dei pulsantoni rossi (i tasti azione) mantengono premuti gli switch, rendendoli inutilizzabili.
Invece, per gli switch corrispondenti alla leva di comando non c'è nessun problema.



Alcuni comandi, infatti, non funzionano.
Prima di procedere, devo segnarmi a quali fili corrispondono i singoli pin del connettore.
È un lavoro molto noioso, ma necessario.
Per fare questo, ho preso un piccolo filo metallico (uno di quelli che avanzano quando si saldano le resistenze), collegato ai vari pin del connettore, e uno per uno ho verificato con il tester, in modalità test di continuità, a quale filo corrispondesse sulla PCB, segnandomi il tutto su un post-it.



Questi su AliExpress costano pochissimo.


Un altro lavoro noioso, ma qualcuno dovrà pur farlo.

Utile per sparatutto a scorrimento orizzontale, come ad esempio Defender!
Conclusioni
Un controller, secondo me, ben fatto, solido e con buone plastiche, sicuramente meritava una seconda vita.Peccato per lo switch poco utile per selezionare la modalità di gioco, ma me ne farò una ragione.
Sembrerebbe anche abbastanza raro, vista la scarsità di informazioni trovate sul web.
Penso di aver fatto un buon lavoro in questo restauro; sicuramente mi sono divertito nel farlo.
Speriamo che i nuovi switch durino nel tempo.
CSS Trick: background animato sul logo
Per questo blog ho usato il framework Hugo con il tema Risotto; mi piace il minimalismo e questa combinazione mi ha particolarmente convinto, essendo semplice e senza troppi fronzoli. Ho apportato qualche modifica al tema per adattarlo alle mie esigenze, e quella di cui vorrei parlare in questo post riguarda l’animazione dello sfondo del logo.
Per ottenere l’effetto di gradiente rotante che si vede attualmente, ho inizialmente sperimentato con un po’ di JavaScript, in questo modo:
document.addEventListener("DOMContentLoaded", () => {
const DEG_STEP = 2.8125 // equivale a 360 / 128;
const INTERVAL = 62.5 // equivale a 8000 / 128
let deg = 42;
let logo = document.querySelector(".page__logo-inner");
setInterval(() => {
deg += DEG_STEP;
deg %= 360;
logo.style["background-image"] = `linear-gradient(${deg}deg, rgb(247, 115, 241), rgb(16, 180, 215))`;
}, INTERVAL)
});
All’apertura della pagina, quindi, parte il setInterval, che a cadenza di 62.5 millisecondi modifica lo stile background-image, ruotando di fatto il linear-gradient.
Il loop dura 8 secondi. In 8 secondi vengono disegnati 128 fotogrammi, e ad ogni fotogramma la rotazione avanza di 2.8125 gradi.
Funzionava tutto perfettamente, ma avevo notato un problema: quando aprivo gli strumenti di sviluppo, l’utilizzo della CPU si impennava.
Questo succedeva perché nel tab Elements degli strumenti di sviluppo è visibile il DOM della pagina, con gli stili inline visibili in chiaro.
Lo stile del tag con classe .page__logo-inner, infatti, viene costantemente aggiornato, e il browser consuma CPU per visualizzare le modifiche, che, come detto prima, avvengono ogni 62.5 millisecondi. Probabilmente per il 99,99% degli utenti questo non rappresenta un vero problema, ma ho voluto comunque provare a risolverlo.
Ho deciso, quindi, di implementare lo stesso loop usando opportunamente il CSS al posto di JavaScript.
Ho provato inizialmente a impostare 3 keyframes, in questo modo:
.page__logo-inner {
background-image: linear-gradient(42deg, rgb(247, 115, 241), rgb(16, 180, 215));
animation: logo_anim 8s linear infinite;
}
@keyframes logo_anim {
0% {
background-image: linear-gradient(42deg, rgb(247, 115, 241), rgb(16, 180, 215));
}
50% {
background-image: linear-gradient(222deg, rgb(247, 115, 241), rgb(16, 180, 215));
}
100% {
background-image: linear-gradient(42deg, rgb(247, 115, 241), rgb(16, 180, 215));
}
}
Mi aspettavo che il browser calcolasse tutti i fotogrammi mancanti e rendesse quindi l’animazione fluida, ma non ha funzionato. L’animazione, infatti, si componeva di soli 3 frame, senza alcuna interpolazione, come si può vedere nella gif qui sotto.
Occorreva quindi scrivere esplicitamente tutti e 128 i keyframe per ottenere lo stesso effetto avuto con JavaScript. In questo modo il browser non avrebbe dovuto eseguire alcun calcolo, ma soltanto leggere i valori pre-calcolati.
Ma non avevo alcuna intenzione di farlo a mano, così ho scritto un piccolo programma JS da far girare direttamente sulla console del browser, che mi producesse la regola CSS con tutti i keyframe in formato testuale, da copiare e incollare direttamente nel file CSS.
const STEPS = 128;
const START_DEG = 42;
const DEG_STEP = 2.8125;
let percent_step = 100 / STEPS;
let output = "@keyframes logo_anim {\n";
for (let i=0; i<STEPS; i++) {
let percent = i * percent_step;
let deg = (START_DEG + (i * DEG_STEP)) % 360;
output += `\t${percent.toFixed(2)}% {\n\t\tbackground-image: linear-gradient(${deg}deg, rgb(247, 115, 241), rgb(16, 180, 215));\n\t}\n`;
}
output += "}";
console.log(output);
A questo punto, dopo averlo fatto girare in console, è bastato copiare l’output stampato a video e incollarlo nel file CSS.
.page__logo-inner {
background-image: linear-gradient(42deg, rgb(247, 115, 241), rgb(16, 180, 215));
animation: logo_anim 8s linear infinite;
}
@keyframes logo_anim {
0.00% {
background-image: linear-gradient(42deg, rgb(247, 115, 241), rgb(16, 180, 215));
}
0.78% {
background-image: linear-gradient(44.8125deg, rgb(247, 115, 241), rgb(16, 180, 215));
}
1.56% {
background-image: linear-gradient(47.625deg, rgb(247, 115, 241), rgb(16, 180, 215));
}
/* ... */
97.66% {
background-image: linear-gradient(33.5625deg, rgb(247, 115, 241), rgb(16, 180, 215));
}
98.44% {
background-image: linear-gradient(36.375deg, rgb(247, 115, 241), rgb(16, 180, 215));
}
99.22% {
background-image: linear-gradient(39.1875deg, rgb(247, 115, 241), rgb(16, 180, 215));
}
}
Problema risolto! Adesso l’utilizzo della CPU resta basso anche aprendo gli strumenti di sviluppo.
bit sparkle
Un blog sulla programmazione, elettronica e roba vecchia