SEGA Rally 2 Driver Board Force Feedback GAL Reverse Engineering

SEGA Rally 2 Championship era probabilmente il miglior gioco di rally nel 1998 ma a tutt’oggi molti appassionati dichiarano che sia il miglior cabinato arcade dedicato al rally. SEGA Rally 2 era (è) famoso, tra le altre, per il realismo del ritorno di forza (Force FeedBack – FFB) del volante di guida.

Il cuore del Force FeedBack in SEGA Rally 2, ma anche in cabinati analoghi SEGA, è la scheda elettronica Driver Board che riceve i comandi dal computer centrale (SEGA Model 3), ne effettua un processamento in base ai feeback ricevuti dal volante e pilota la scheda di potenza Motor Board che alimenta il motore elettrico connesso al volante di guida.

La Driver Board è una scheda non semplicissima che monta parecchi componenti elettronici. Uno di questi componenti è la Lattice GAL16V8, un IC programmabile. In questo articolo andrò a descrivere come ho eseguito il reverse engineering della logica combinatoria interna alla GAL per poterne effettuare una copia e/o una sostituzione.

sega rally 2 championship twin arcade cabinet

SEGA Rally 2 championship twin arcade cabinet

Il Force Feedback (FFB) è realizzato, nel cabinato SEGA Rally 2, tramite 4 componenti fondamentali:

  • Il computer centrale SEGA Model 3 che invia, tramite bus seriale, i comandi del FFB alla Driver Board. La comunicazione seriale tra il SEGA Model 3 e la Driver Board è stata già studiata da diversi utenti che hanno pubblicato le specifiche dei comandi ed anche software capaci di interfacciarsi direttamente con la Driver Board. Vedere questi link per maggiori informazioni:
    http://superusr.free.fr/model3.htm
    https://github.com/njz3/vJoyIOFeederWithFFB
    https://github.com/njz3/vJoyIOFeederWithFFB/blob/master/DRIVEBOARD.md
  • La Driver Board riceve i comandi del FFB dal SEGA Model 3 ed i feedback dai sensori nel volante. Con queste informazioni pilota la parte di potenza contenuta nella scheda Motor Board capace di movimentare il motore;
  • La Motor Board è pilotata dalla Driver Board e contiene la parte di potenza che si interfaccia direttamente con il motore in DC montato dietro al volante per mezzo di una cinghia di trasmissione;
  • Il Motore in DC che applica la forza al volante al quale è connesso.

Nell’immagine seguente una lista di cabinati e giochi SEGA con la tipologia di FFB utilizzato. Notare che più giochi utilizzano il medesimo hardware ma cambia la tipologia di EEPROM (vedremo in seguito meglio la cosa). La lista è stata realizzata da BigPanik e njz3 io l’ho semplicemente inserita in questo articolo ma il merito è solo loro (vedere link precedenti)

Sega Model Drive Board EEPROM

Lista delle Board/EEPROM (Grazie a BigPanik e njz3 per l’ottimo lavoro!!!)

La Driver Board è composta da parecchi IC quasi integralmente prodotti da Toshiba (molto difficili da trovare originali e nel package SOP).

SEGA Rally 2 Driver Board

SEGA Rally 2 Driver Board

Una lista dei componenti principali che si possono trovare sulla Driver Board sono riportati in seguito:

  • IC3 – Microcontrollere (Toshiba TMPZ84C015BF-10);
  • IC9 – SRAM (Toshiba TC55257DFI-85L);
  • IC8 – EEPROM (ST M27C512-15FI);
  • IC4 – GAL (Lattice GAL16V8D-15LP);
  • OSC1 – 16MHz Oscillatore;
  • IC7 – IC di Reset;
  • IC33 – ADC (OKI MSM6253);
  • LED2/LED3 – Display a 7 segmenti.

La Driver Board, come visibile nella figura “Lista delle Board/EEPROM”, è utilizzata in più cabinati SEGA. L’hardware tra i vari cabinati è identico ma cambia la memoria istruzioni contenuta nella EEPROM e quindi cambia l’elaborazione del FFB. La EEPROM di molti cabinati SEGA è già stata dumpata e resa disponbile online. Il .bin può essere cercato con Google (all’interno delle ROMS dei vari giochi Arcade). Essendo disponibile online il .bin, sostituire la EEPROM non è un problema.

Il problema più grande per riparare la Driver Board è la GAL16V8D che contiene la logica programmabile. La logica all’interno della GAL16V8D è ignota e sostituire questo IC è impossibile (fino ad oggi).

Ho quindi deciso di provare a fare un reverse engineering della logica interna alla GAL per renderla disponibile a tutti i riparatori o gli appassionati che ancora tentano di mantenere in vita queste meraviglie.

Il processo di reverse enginnering non può che partire dall’analisi del circuito al fine di determinare quali fossero gli Input e gli Output della GAL. Tralascio la descrizione di questa parte non banale e riporto direttamente gli Input e gli Output:

Analizzanto lo schematico è anche chiaro come la logica interna alla GAL sia esclusivamente combinatoria senza macchine a stati o processi temporizzati da clock esterni. Questo rende notevolmente più semplice il lavoro di reverse engineering in quanto per capirne la logica è sufficiente pilotare gli Input con tutte le possibili combinazioni ed osservarne gli Output. Questa operazione può essere eseguita su qualsiasi GAL puramente combinatoria dal quale si vuole estrarre la logica interna.

Ovviamente, visto la quantità di Input ed Output, non sarebbe stato possibile farlo manualmente. Ho quindi realizzato un software per Arduino MEGA che pilota tutti gli Input e ne osserva gli Output. Notare che tutti gli Output sono stati posti in pull-up tramite resistenze da 10k per capire se realmente la GAL pilotava gli Output.

Arduino Mega con GAL16V8D

Arduino Mega con GAL16V8D

Il codice per Arduino MEGA è il seguente:

Dopo il reset, Arduino MEGA inizia a pilotare gli Input ed ad osservarne i relativi Output. Il risultato viene stampato sulla console Seriale dalla quale può essere copiata in un file .csv e successivamente importato in Excel per una più semplice analisi. Nella figura sottostante lo screenshot del foglio Excel con la prima parte degli Input ed i relativi Output.

EXCEL GAL Combinational Logic

EXCEL GAL Ingressi ed Uscite (solo la prima parte)

Analizzando gli Input/Output è possibile determinare la seguente logica combinatoria che lega Input ed Output. La logica è ovviamente descritta in VHDL.

In questo articolo ho descritto come sintetizzare un VHDL per la GAL16V8D usando il software ispLEVER. Non ripeterò in questo articolo la procedure ma se interessati potete leggere l’articolo precedente.

Alla fine della pagina ho deciso di rilasciare in forma completamente gratuita il JEDEC file (.jed) pronto per essere programmato in una nuova GAL16V8D.

Se vi piace questo articolo e avete risolto un problema con il vostro SEGA Rally 2, donatemi un caffè!!!

Ciao ciao, buona giornata e buone vacanze!!!

 

 


Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *