Newsgroup: it.comp.retrocomputing
Titolo: Come ti riparo l'anticaglia con l'assembler [Lungo]

 
Qualche tempo fa ho acquistato uno Xerox 820-II, un macchina non comune, 
prodotta dalla Xerox nei primi anni '80 e basata sulla classica 
accoppiata Z80 + CP/M.
Completa del suo mastodontico doppio drive da 8", la macchina prevedeva 
una scheda opzionale che poteva trasformarla in un ibrido 8-16 bit con 
la possibilità di eseguire due sistemi operativi diversi 
contemporaneamente sulle due CPU (con il video in sharing), scheda 
purtroppo non presente nel mio esemplare.
Acquistato naturalmente come "non testato" (e vabè...), il computer 
all'accensione mi accoglie con questo laconico messaggio:
 
http://1drv.ms/1poo6im
 
 
L'820-II monta i soliti 8 x 4164. Purtroppo con la RAM dinamica il 
troubleshooting è sempre una rogna, perché fra CAS, RAS, DIN, DOUT, 
refresh e cazzi vari non si riesce mai a capire cosa succede lì 
dentro... e anche con un oscilloscopio la cosa può diventare lunga, così 
mi sono ritrovato a disposizione due opzioni:
 
1) Dissaldare i chip partendo dal primo, sperando di beccare quello 
guasto e sopratutto sperando che la colpa non sia della logica di 
supporto. PRO: posso riutilizzare i chip buoni senza sprechi. CONTRO: 
elevata probabilità di disintegrare qualche pista e rovinare la scheda 
madre (in più Enrico mi aveva ventilato l'ipotesi che fosse a tre layer, 
mettendomi un'angoscia pazzesca ;-) )
 
2) Tagliare i pin dei chip, un chip alla volta, poi dissaldare e 
zoccolare, sperando di aver fatto fuori il chip guasto. PRO: la 
rimozione dei soli pin è molto meno critica. CONTRO: con la mia sfiga il 
chip guasto sarà l'ultimo, e avrò sprecato 7 RAM.
 
Succede che, nella mia ricerca di informazioni, mi imbatto in un service 
manual dove trovo nientemeno che il sorgente delle ROM della macchina in 
questione, scritto in assembler Z80. Visto che ho delle EEPROM in giro, 
mi viene l'idea di provare a modificare la ROM originale: se riuscissi a 
fargli stampare indirizzo e contenuto della locazione in errore, potrei 
individuare il chip guasto e tagliare via solo lui!
 
Un'emulatore di EPROM sarebbe stato lo strumento ideale, ma essendo roba 
estinta dal tempo delle trilobiti mi devo arrangiare.
Messo su un cross assembler per Z80, comincio a sperimentare: 
inizialmente volevo modificare la routine di test della ROM originale 
(che per verificare la memoria sposta lo stack pointer a fa un po' di 
pop e push), ma alla fine decido di sovrascriverla con una nuova routine 
scritta da zero.
Purtroppo sono un neofita con l'assembler Z80 per cui le modifiche non 
sempre vanno a buon fine... per fortuna con le EEPROM la cancellazione è 
istantanea :-)
Scarico anche un ambiente di sviluppo con debugger per lo Z80, purtroppo 
in versione trial e con limitazioni, ma almeno posso fare un po' di 
debbugging su PC.
Mi ci vuole un po' di try&error, ma alla fine la nuova ROM viene messa a 
punto: inizialmente fa un test della video RAM riempiendo lo schermo con 
un carattere ASCII e poi ripete con il successivo, partendo da "0" fino 
a "Z". Dopo parte il test vero e proprio: inziando da F000 stampa a 
video l'indirizzo testato, il byte scritto ed il byte riletto.
Ecco la ROM in azione:
 
http://1drv.ms/1poocqq
 
 
Dovendo testare la RAM ho dovuto prendere qualche accorgimento: ad 
esempio non posso usare lo stack, per cui niente POP e PUSH e tutto 
confinato nei registri. Inoltre niente CALL per le subroutine ma devo 
salvarmi io l'indirizzo di ritorno e poi andare di JP o JR (nel mio caso 
uso IX come puntatore alla memoria video e IY per tenermi gli indirizzi 
di ritorno - ovviamente niente salti annidati).
 
La ROM fa il suo lavoro e mi segnala i chip guasti, che provvedo a 
tagliare e sostituire. Una volta rimessa la EPROM originale il risultato 
è il seguente :-)
 
http://1drv.ms/1sV6gIF
 
 
Tutto bene?
Insomma... in realtà i chip guasti segnalati erano ben 7 su 8 e la 
macchina non ne ha voluto sapere di ripartire finché non li ho 
sostituiti tutti.
Col senno di poi facevo prima se tagliavo tutto e via... ;-) però è 
stata comunque una esperienza interessante, magari da ripetere con altre 
macchine.
La ROM modificata è a disposizione, se qualcuno ha uno Xerox 820-II che 
non funziona :-)
 
*Gabriele*
 
 
 
 
 
 

... due sole parole...
 
standing ovation
 
 
:-)
 
te la sei meritata!
 
Claudio

 *Gabriele*
 
Complimenti veramente.....Sei un mostro....
Sinceramente io non avrei saputo manco da dove iniziare...!!!!

 Qualche tempo fa ho acquistato uno Xerox 820-II, un macchina non comune, 
 
Bravo, bel lavoro e bel racconto :)
 
G.
 

Complimenti.
 

accoppiata Z80 + CP/M.
...
 
Complimenti per il lavorone!
Altra dimostrazione della tua sagacia.
 
Ora vai all'attacco dei drive 8"!
;-)
 
Ciao
 
Giorgio

 non funziona :-)
Grazie di aver condiviso l'esperienza, ottimo lavoro! :)
Sette chip su otto sono tantini... hai già controllato che le tensioni 
in uscita dall'alimentatore siano dentro le specifiche?
 
Ciao,
   Gabriele