[Repair log] Mario Bros
Inviato: 15/06/2015, 15:07
Sebbene proceda molto più lentamente di quanto vorrei, continua la pubblicazione dei miei repair log...
Questa volta sarà un po' meno dettagliata delle precedenti, ma sto ancora cercando una sorta di trovare un punto di equilibrio tra quanto/cosa vale la pena dettagliare e il costo in termini di tempo necessario per scendere a certi livelli di dettaglio...
Spluciando l'elenco dei miei appunti questa volta tocca a un gran classico Nintendo: Mario Bros
Background della scheda
Scheda acquistata come non funzionante dall'utente maxxximoma.
Si tratta della versione su due layer di Mario Bros. I due PCB che la compongono sono marchiati rispettivamente TMA1-02-CPU e TMA1-03-VIDEO. Immagini di repertorio dei due PCB che compongono il gioco (Come al solito mi sono scordato di fotografare la mia prima della riparazione). Come scritto più sopra la scheda CPU in mio possesso differisce da quella indicata sopra per il silk screen che indica TMA1-02-CPU invece di TMA1-05-CPU.
Malfunzionamento
La scheda si accende, ma non va oltre una prima schermata composta da un pattern pressoché fisso. Ispezione visiva
A una prima ispezione visiva la scheda si presenta in buone condizioni generali. A causa di un urto subito in passato, lo zoccolo in 4P si presenta parzialmente divelto. Fortunatamente i piedini sono integri ed una leggera pressione sul telaio in plastica lo riporta in sede senza evidenziare apparenti danni. Mancano inoltre tutte le etichette di copertura delle finestre di cancellazione delle eprom.
Guardando con attenzione il PCB scopro che nella locazione 5D sulla scheda CPU c'è uno Z80 CPU, tuttavia lo schematico presente nel service manual nella medesima locazione riporta il controller DMA della linea Z80. Probabilmente in seguito a un tentativo di riparazione maldestro, il vecchio DMA controller, marchiato Z80, è stato sostituito dalla versione, più nota e diffusa, dello Z80, vale a dire la CPU. Interventi effettuati
-= Ripistino del DMA controller =-
Dopo aver acquistato e rimpiazzato il controller DMA lo stato delle cose sembra migliorare, ed effettivamente ora la sequenza di boot termina con successo e il gioco si avvia... Purtroppo però il risultato non è ancora quello atteso: Gli sprite di Mario, Luigi e dei nemici sono corretti, invece le scritte e gli sprite componenti lo sfondo sono chiaramente errati.
Vista la tipologia del problema ritengo possa trattarsi di un difetto di indirizzamento, probabilmente su un banco di RAM. Vado quindi a verificare i banchi installati sul PCB e alla fine riesco a ritrovare il colpevole. Si tratta della SRAM 1kx4 2114 in posizione 3D sulla scheda VIDEO. Mi appresto perciò a sostituirlo con un AM2148 (funzionalmente equivalente) prontamente zoccolato per rimpiazzare il componente difettoso: Dopo aver effettuato anche questo intervento i difetti grafici allo sfondo, spariscono completamente, e diventa quindi possibile giocare normalmente.
Tuttavia il tutto non è ancora esente da difetti in quanto tutti i colori risultano contaminati da una forte componente blu: Senza indugio inizio quindi a studiare il funzionamento della parte di logica deputata alla generazione dei colori in Mario Bros.
-= Palette =-
La generazione dei colori relativa alle tre componenti RGB avviene nella scheda CPU come schematizzato nell'immagine sottostante: Sostanzialmente la PROM @4P è una PROM 28S42 512x8, vale a dire 512 parole da 8 bit. Ogni segmento da 8 bit rappresenta un colore, codificato secondo la seguente tripletta: 2B,3G,3R.
La ROM risulta divisa in due blocchi accessibili in maniera mutuamente esclusiva. Il primo blocco, caratterizzato dall'avere A8 (MSB del bus indirizzi) posto a 0, lo si ottiene quando il ponticello CL2 è integro e quindi chiuso. Tale blocco referenzierà le triplette che hanno come codifica i colori invertiti, così come richiesti nella configurazione originale Nintendo. Tagliando il ponticello CL2 invece l'indirizzo A8 viene portato al valore logico alto, referenziando quindi la parte di memoria alta della ROM contente la codifica colore standard per i monitor arcade (E' possibile notare come i due blocchi di memoria contengono effettivamente uno i valori binari negati dell'altro).
Anche se non è pertinente con questo repair log, è comunque degna di nota la sezione a destra dello schematico, dove la presenza dei ponticelli CL4 e SL3 permette di selezionare la tipologia di CSYNC desiderata :CL4 chiuso e SL3 aperto -> -CSYNC (default), CL4 aperto e SL3 chiuso +CSYNC.
Il colore da visualizzare a schermo viene pertanto indirizzato tramite CADR[0..7]. Il valore da visualizzare a schermo sarà quindi riportato sull'uscita D[0..7], dove i singoli bit, rispettivamente in stato logico alto o basso, riporteranno diversi valori di tensione sui tre partitori, uno per ciascun canale, che piloteranno le uscite sul pettine JAMMA attraverso i transistor Q5-Q8.
Essendo marcatamente esagerata la componente blu, presente anche quando i due bit D[0..1] erano impostati a zero, ho pensato che potesse trattarsi di uno dei transistor che andasse erroneamente in saturazione. Ho quindi provveduto a rimuovere i tre transistor C828 e montare degli zoccoli per poter effettuare delle prove agevolmente (Prestare attenzione al fatto che i C828 non hanno il classico layout con la base al centro E B C, ma bensì un meno standard E C B): Purtroppo la mia supposizione iniziale si è rivelata sbagliata, quindi per poter cercare di identificare meglio il problema ho deciso di provvedere a modificare la palette originale contenuta nella PROM con delle palette custom che mi permettessero di indagare più a fondo il problema.
-- 28S42 --
Un po' di storia... Le memorie PROM (Programmable ROM) sono una tipologie di memoria molto diffuse all'inizio degli anni 80. Una PROM è una PLA (Pragrammable Logic Array) composta da una matrice AND fissa, e da una matrice OR programmabile tramite fusibili bruciabili in fase di programmazione applicando una tensione elevata al fusibile che si intende bruciare. In tal modo si viene a creare un circuito aperto e l'interconnessione viene interrotta. Queste memorie erano utilizzate al posto delle EPROM laddove i tempi di accesso di quest'ultime fossero stati eccessivamente alti.
Al giorno d'oggi, vista la loro natura non cancellabile, questo tipologie di memorie sta diventando sempre più raro, e di conseguenza costoso. Inoltre, dovendo utilizzarle per fare degli esperimenti sulla palette ho per forza necessità di utilizzare memorie riprogrammabili.
Come visto sopra, la PROM 28S42 è una PROM ampia 4096 bit, organizzata in 512 parole da 8bit. Di questi 4096 bit tuttavia abbiamo appena visto che a me ne servono solamente 2048 (quelli della palette positiva).
Un possibile sostituto per delle PROM è costituito solitamente da PAL/GAL, la cui logica interna è molto simile a quella delle PROM. In queste ultime infatti ad essere immutabile è la matrice delle OR, mentre la matrice delle AND puo' essere programmata (e riprogrammata nel caso delle GAL) a piacimento.
Purtroppo pero' dopo aver dato in pasto le equazioni da sintetizzare e ridurre al PC mi sono reso conto, tristemente, che il contenuto della PROM non poteva essere riportato in un equivalente GAL a causa del numero e della tipologia dei dati contenuti.
Senza perdermi d'animo mi sono messo a cercare se, al giorno d'oggi, esistessero delle EPROM sufficentemente veloci da poter rimpiazzare efficacemente il 28S42. Fortunatamente, dopo breve ricerca, ho trovato un possibile candidato nella EEPROM Winbond W27C512-45Z che con il suo tempo di accesso di 45ns si rivela un valido componente per sostituire per la memoria originale.
Come è noto, purtroppo, non c'è rosa senza spine, e le spine della nostra EEPROM sono sostanzialmente tutte nel diverso fattore forma (la EEPROM della Winbond è un 600 mil) e soprattutto il diverso pinout tra i due. Si rende quindi necessario costruire un adattatore: Genero dunque due diverse immagini della PROM, opportunamente modificate per visualizzare, nella schermata di test, le palette di Mario e Luigi colorate nelle varie sfumature di verde e di rosso nella prima, e di blu e con una palette di calibrazione nella seconda: Ed agendo sulla calibrazione del monitor riesco ad ottenere un risultato più che buono: Soddisfatto del risultato mi appresto a rimettere la PROM originale... e qui faccio la belinata del secolo
Vuoi la stanchezza, vuoi la fretta, ho inserito l'integrato al rovescio nello zoccolo!!!
Risultato: PROM bruciata e tante imprecazioni! Per cercare di risolvere un non problema (la tonalità blu) sono andato a cercarmente uno ancora più grande. Per fortuna, disponendo del dump della PROM originale, posso riprogrammare la mia EEPROM adattata per sopperire temporaneamente alla mancanza della PROM.
Questa volta sarà un po' meno dettagliata delle precedenti, ma sto ancora cercando una sorta di trovare un punto di equilibrio tra quanto/cosa vale la pena dettagliare e il costo in termini di tempo necessario per scendere a certi livelli di dettaglio...
Spluciando l'elenco dei miei appunti questa volta tocca a un gran classico Nintendo: Mario Bros
Background della scheda
Scheda acquistata come non funzionante dall'utente maxxximoma.
Si tratta della versione su due layer di Mario Bros. I due PCB che la compongono sono marchiati rispettivamente TMA1-02-CPU e TMA1-03-VIDEO. Immagini di repertorio dei due PCB che compongono il gioco (Come al solito mi sono scordato di fotografare la mia prima della riparazione). Come scritto più sopra la scheda CPU in mio possesso differisce da quella indicata sopra per il silk screen che indica TMA1-02-CPU invece di TMA1-05-CPU.
Malfunzionamento
La scheda si accende, ma non va oltre una prima schermata composta da un pattern pressoché fisso. Ispezione visiva
A una prima ispezione visiva la scheda si presenta in buone condizioni generali. A causa di un urto subito in passato, lo zoccolo in 4P si presenta parzialmente divelto. Fortunatamente i piedini sono integri ed una leggera pressione sul telaio in plastica lo riporta in sede senza evidenziare apparenti danni. Mancano inoltre tutte le etichette di copertura delle finestre di cancellazione delle eprom.
Guardando con attenzione il PCB scopro che nella locazione 5D sulla scheda CPU c'è uno Z80 CPU, tuttavia lo schematico presente nel service manual nella medesima locazione riporta il controller DMA della linea Z80. Probabilmente in seguito a un tentativo di riparazione maldestro, il vecchio DMA controller, marchiato Z80, è stato sostituito dalla versione, più nota e diffusa, dello Z80, vale a dire la CPU. Interventi effettuati
-= Ripistino del DMA controller =-
Dopo aver acquistato e rimpiazzato il controller DMA lo stato delle cose sembra migliorare, ed effettivamente ora la sequenza di boot termina con successo e il gioco si avvia... Purtroppo però il risultato non è ancora quello atteso: Gli sprite di Mario, Luigi e dei nemici sono corretti, invece le scritte e gli sprite componenti lo sfondo sono chiaramente errati.
Vista la tipologia del problema ritengo possa trattarsi di un difetto di indirizzamento, probabilmente su un banco di RAM. Vado quindi a verificare i banchi installati sul PCB e alla fine riesco a ritrovare il colpevole. Si tratta della SRAM 1kx4 2114 in posizione 3D sulla scheda VIDEO. Mi appresto perciò a sostituirlo con un AM2148 (funzionalmente equivalente) prontamente zoccolato per rimpiazzare il componente difettoso: Dopo aver effettuato anche questo intervento i difetti grafici allo sfondo, spariscono completamente, e diventa quindi possibile giocare normalmente.
Tuttavia il tutto non è ancora esente da difetti in quanto tutti i colori risultano contaminati da una forte componente blu: Senza indugio inizio quindi a studiare il funzionamento della parte di logica deputata alla generazione dei colori in Mario Bros.
-= Palette =-
La generazione dei colori relativa alle tre componenti RGB avviene nella scheda CPU come schematizzato nell'immagine sottostante: Sostanzialmente la PROM @4P è una PROM 28S42 512x8, vale a dire 512 parole da 8 bit. Ogni segmento da 8 bit rappresenta un colore, codificato secondo la seguente tripletta: 2B,3G,3R.
La ROM risulta divisa in due blocchi accessibili in maniera mutuamente esclusiva. Il primo blocco, caratterizzato dall'avere A8 (MSB del bus indirizzi) posto a 0, lo si ottiene quando il ponticello CL2 è integro e quindi chiuso. Tale blocco referenzierà le triplette che hanno come codifica i colori invertiti, così come richiesti nella configurazione originale Nintendo. Tagliando il ponticello CL2 invece l'indirizzo A8 viene portato al valore logico alto, referenziando quindi la parte di memoria alta della ROM contente la codifica colore standard per i monitor arcade (E' possibile notare come i due blocchi di memoria contengono effettivamente uno i valori binari negati dell'altro).
Anche se non è pertinente con questo repair log, è comunque degna di nota la sezione a destra dello schematico, dove la presenza dei ponticelli CL4 e SL3 permette di selezionare la tipologia di CSYNC desiderata :CL4 chiuso e SL3 aperto -> -CSYNC (default), CL4 aperto e SL3 chiuso +CSYNC.
Il colore da visualizzare a schermo viene pertanto indirizzato tramite CADR[0..7]. Il valore da visualizzare a schermo sarà quindi riportato sull'uscita D[0..7], dove i singoli bit, rispettivamente in stato logico alto o basso, riporteranno diversi valori di tensione sui tre partitori, uno per ciascun canale, che piloteranno le uscite sul pettine JAMMA attraverso i transistor Q5-Q8.
Essendo marcatamente esagerata la componente blu, presente anche quando i due bit D[0..1] erano impostati a zero, ho pensato che potesse trattarsi di uno dei transistor che andasse erroneamente in saturazione. Ho quindi provveduto a rimuovere i tre transistor C828 e montare degli zoccoli per poter effettuare delle prove agevolmente (Prestare attenzione al fatto che i C828 non hanno il classico layout con la base al centro E B C, ma bensì un meno standard E C B): Purtroppo la mia supposizione iniziale si è rivelata sbagliata, quindi per poter cercare di identificare meglio il problema ho deciso di provvedere a modificare la palette originale contenuta nella PROM con delle palette custom che mi permettessero di indagare più a fondo il problema.
-- 28S42 --
Un po' di storia... Le memorie PROM (Programmable ROM) sono una tipologie di memoria molto diffuse all'inizio degli anni 80. Una PROM è una PLA (Pragrammable Logic Array) composta da una matrice AND fissa, e da una matrice OR programmabile tramite fusibili bruciabili in fase di programmazione applicando una tensione elevata al fusibile che si intende bruciare. In tal modo si viene a creare un circuito aperto e l'interconnessione viene interrotta. Queste memorie erano utilizzate al posto delle EPROM laddove i tempi di accesso di quest'ultime fossero stati eccessivamente alti.
Al giorno d'oggi, vista la loro natura non cancellabile, questo tipologie di memorie sta diventando sempre più raro, e di conseguenza costoso. Inoltre, dovendo utilizzarle per fare degli esperimenti sulla palette ho per forza necessità di utilizzare memorie riprogrammabili.
Come visto sopra, la PROM 28S42 è una PROM ampia 4096 bit, organizzata in 512 parole da 8bit. Di questi 4096 bit tuttavia abbiamo appena visto che a me ne servono solamente 2048 (quelli della palette positiva).
Un possibile sostituto per delle PROM è costituito solitamente da PAL/GAL, la cui logica interna è molto simile a quella delle PROM. In queste ultime infatti ad essere immutabile è la matrice delle OR, mentre la matrice delle AND puo' essere programmata (e riprogrammata nel caso delle GAL) a piacimento.
Purtroppo pero' dopo aver dato in pasto le equazioni da sintetizzare e ridurre al PC mi sono reso conto, tristemente, che il contenuto della PROM non poteva essere riportato in un equivalente GAL a causa del numero e della tipologia dei dati contenuti.
Senza perdermi d'animo mi sono messo a cercare se, al giorno d'oggi, esistessero delle EPROM sufficentemente veloci da poter rimpiazzare efficacemente il 28S42. Fortunatamente, dopo breve ricerca, ho trovato un possibile candidato nella EEPROM Winbond W27C512-45Z che con il suo tempo di accesso di 45ns si rivela un valido componente per sostituire per la memoria originale.
Come è noto, purtroppo, non c'è rosa senza spine, e le spine della nostra EEPROM sono sostanzialmente tutte nel diverso fattore forma (la EEPROM della Winbond è un 600 mil) e soprattutto il diverso pinout tra i due. Si rende quindi necessario costruire un adattatore: Genero dunque due diverse immagini della PROM, opportunamente modificate per visualizzare, nella schermata di test, le palette di Mario e Luigi colorate nelle varie sfumature di verde e di rosso nella prima, e di blu e con una palette di calibrazione nella seconda: Ed agendo sulla calibrazione del monitor riesco ad ottenere un risultato più che buono: Soddisfatto del risultato mi appresto a rimettere la PROM originale... e qui faccio la belinata del secolo






Vuoi la stanchezza, vuoi la fretta, ho inserito l'integrato al rovescio nello zoccolo!!!
Risultato: PROM bruciata e tante imprecazioni! Per cercare di risolvere un non problema (la tonalità blu) sono andato a cercarmente uno ancora più grande. Per fortuna, disponendo del dump della PROM originale, posso riprogrammare la mia EEPROM adattata per sopperire temporaneamente alla mancanza della PROM.