Retro-restoring Amstrad PCW 8512
Il PCW 8512 (e il suo fratello minore 8256) è un computer ad 8 bit prodotto dalla Amstrad a partire dal 1985. Concepito principalmente come sistema di video-scrittura, poteva essere utilizzato anche come un computer general purpose basato sul sistema operativo CP/M.
La CPU
Il microprocessore utilizzato è il famoso Zilog Z80 con clock a 4MHz, mentre la RAM è di 512K. La cosa interessante di questo sistema è che è sprovvisto di ROM, per cui il sistema operativo ed il BIOS vengono caricati dal disco. All'avvio il controller della stampante invia delle istruzioni alla CPU che non fanno altro che scrivere dall'indirizzo 0x0000 il vero codice di bootstrap. Quest'ultimo a suo volta caricherà dal disco A il bootstrap del sistema operativo.
Lo Storage
Il sistema ha due dischi da 3'' (non 3.5''!!) che è lo stesso formato usato dal CPC 6128 e dal Sinclair Spectrum +3. Il drive A è a singola densità e singola faccia, per cui, con 40 tracce da 9 settori di 512 byte, ha una capacità di 180K. Il drive B è a doppia densità e doppia faccia (40 cilindri da 18 settori) quindi può contenere 720K.
Il Video
Il monitor è monocromatico a fosfori verdi e può visualizzare 720x256 pixels, corrispondenti a 90 colonne per 32 righe in modalità testo. In realtà non c'è una modalità testo, la memoria video è completamente bitmapped. In questo modo uno scrolling fluido sarebbe difficile da ottenere con il solo Z80, per questo ogni riga dello schermo viene indirizzata singolarmente da un'area di 256 puntatori (denominata Roller-RAM). Cambiando i puntatori si cambia anche l'ordine delle righe visualizzate, rendendo lo scrolling istantaneo. Purtroppo questa versatilità si paga con la necessità di un codice più complesso quando si fa grafica anziché semplice testo.
I codici di controllo dello schermo sono quasi completamente compatibili con lo Zenith Z19/Z29, come il terminale VT52, mentre per la stampante sono compatibili con la Seikosha SP-800.
L'Audio
L'audio si limita ad un semplice beep proveniente da un buzzer interno, con frequenza e volume fissi.
Il Chipset
Lo Z80 viene affiancato da un chip ASIC che controlla la maggior parte delle funzioni, tra cui il refresh della RAM dinamica, la decodifica degli indirizzi ed il video. I disk drive vengono gestiti da un NEC µPD765A, che pur potendo controllare quattro dischi a doppia faccia e doppia densità viene invece utilizzato limitatamente a come descritto sopra.
E' incluso inoltre un controller per la stampante (atipico, in quanto questo controller dovrebbe stare nell'hardware della stampante stessa) che è un NEC µPD8041. Questo è in realtà una piccola MCU dotata di 64 byte di RAM e 1K di ROM. Come detto la funzione di questa MCU non è solo di controllare l'hardware della stampante, ma soprattuto quello di "iniettare" del codice nel bus dati affinché lo Z80 scriva a sua volta il codice di boot nella RAM.
La Memoria
La RAM è divisa in 32 banchi da 16K. Dato che lo Z80 può indirizzare al massimo 64K soltanto quattro banchi sono contemporaneamente visibili dalla CPU. La Roller-RAM ed il video frame buffer possono essere allocati in qualsiasi posizione purché situata nei primi 8 banchi.
Il PCW 8256 è espandibile a 512K aggiungendo 8 chip di tipo 41256 nei socket liberi e cambiando alcuni dip-switch sulla motherboard.
Le Porte
Sul retro ci sono due porte, una dedicata alla stampante ed una di espansione. In quest'ultima sono presenti il bus indirizzi, il bus dati, i segnali di controllo, il clock della CPU, il segnale di reset e due segnali utilizzabili, con un circuito adattatore, come uscita video ausiliaria.
Il Sistema Operativo
Il PCW può utilizzare la versione 3 di CP/M, denominata CP/M Plus, che è anche l'ultima rilasciata dalla Digital Research per i sistemi ad 8 bit. Questa versione ha il vantaggio, rispetto alle precedenti, di supportare il bank switching, il che consente di avere molta più memoria libera per le applicazioni (TPA, Transient Program Area): nel caso del PCW il TPA è di 61K.
Non tutti i 512K vengono utilizzati dal S.O. e come TPA: oltre alla memoria video, una parte è riservata per mantenere residente il CCP (la shell), mentre il restante è dedicato alla Ram Disk, accessibile come drive M. Nell'8512 la dimensione della Ram Disk è di 368K.
C'è inoltre il supporto per GSX (Graphics System Extension) che fornisce un insieme di primitive grafiche standardizzate per i programmi CP/M che utilizzano la grafica.
Il Restauro
Ho acquistato su ebay un 8512 per 30 GBP con la sezione di alimentazione completamente guasta. Ho così deciso di rimuoverne i componenti e sulla parte libera alloggiare una nuova PSU.
Internamente il PCW è composto da tre parti principali: la Power Board, che fornisce l'alimentazione e controlla lo schermo, lo schermo CRT e la motherboard, dov'è lo Z80 e il chipset.
Internamente il PCW è composto da tre parti principali: la Power Board, che fornisce l'alimentazione e controlla lo schermo, lo schermo CRT e la motherboard, dov'è lo Z80 e il chipset.
Questo è lo schema della Power Board: l'area rossa è quella relativa all'alimentazione (12V per il monitor e per i drive, 5V per il buffer del segnale video e per la motherboard e i 24V per la stampante esterna), di cui ho rimosso i componenti, quello che rimane gestisce il tubo catodico.
Questa è la Power Board dopo la rimozione dei componenti. Rimane solo la sezione video:
Il modello che ho ricevuto aveva anche un altro problema: un fastidioso fischio proveniente nella sezione ad alta tensione. Ho sostituito il trasformatore di riga (Flyback Transformer) e tutti i condensatori vicini: in questo modo il fischio è completamente sparito. L'unica difficoltà è stato trovare un flyback compatibile. Io l'ho recuperato da un monitor Amstrad MM12, che monta praticamente gli stessi componenti.
Ho quindi installato un SMPS (Switched Mode Power Supply) da 12V - 3A (un semplice alimentatore per notebook, il blocco di destra), e di seguito un modulo basato su HRD05003 per i 5V (quello più piccolo a sinistra):
Ho rimosso i due dischi da 3'' per sostituirli con due emulatori di floppy drive Gotek, con firmware alternativo (FlashFloppy). Bisogna fare attenzione all'alimentazione, che è invertita rispetto allo standard PC (12V <-> 5V), per cui bisogna costruire un adattatore:
Ovviamente occorre un adattatore anche per i segnali dati del drive, che da 26 pin andranno adattati a 34. La corrispondenza è questa:
Per il Gotek:
Segnale PCW-26 Gotek (Shugart-34)
GND 1 1
IDX 2 8
DS1 4 10 (DS1 - gotek impostato su S0)
DS2 6 12 (DS2 - gotek impostato su S1)
MOT 8 16
DIR 10 18
STP 12 20
WD 14 22
WG 16 24
TK0 18 26
WP 20 28
RD 22 30
SS 24 32
READY 26 34
Per un normale floppy drive PC, solo per il drive A (un 3.5'' per PC risponde sempre come secondo disco):
Segnale PCW-26 DRIVE (PC-34)
GND 1 1
IDX 2 8
DS1 4 12
DS2 6 ...altrimenti il 12 va qui per drive B
MOT 8 16
DIR 10 18
STP 12 20
WD 14 22
WG 16 24
TK0 18 26
WP 20 28
RD 22 30
SS 24 32
READY 26 1 (ready non disponibile!)
Dai Gotek ho rimosso il contenitore per sostituirlo con uno progettato appositamente e stampato in 3D (potete trovarlo sul mio profilo thingverse), così che si vada ad inserire e fissare perfettamente nell'alloggiamento dei dischi da 3''. E' stato anche sostituito il display con uno OLED, così da visualizzare i nomi delle immagini:
Il Gotek montato sull'adattatore:
Il tutto installato al posto del drive A...
....e quindi il B:
./configure --with-libdsk
make install
Adesso si possono usare i tools, per esempio questo visualizza il contenuto dell'immagine img.dsk:
cpmls -d -f pcw img.dsk <= per formato 180K (drive A del 8256 o 8512)
cpmls -d -f cf2dd img.dsk <= per formato 720K (drive A del 9512 o drive B del 8512)
Il risultato finale visto di fronte:
Il Software
Il PCW viene fornito di due dischi di sistema. Essendo a singola faccia, ogni lato è come se fosse un disco a sé da 180K. Questo è il contenuto:
Disco 1, lato A: Locoscript
Disco 1, lato B: CP/M Plus con Mallard Basic
Disco 2, lato A: DR Logo & Help
Disco 2, lato B: Programming Utilities
Solo il disco 1 è di avvio, per cui inserendo il lato A (verso lo schermo) partirà il Word Processor Locoscript, mentre inserendo il lato B sarà avviato il CP/M.
Sul web si trovano le immagini dei dischi di sistema in formato .DSK, che è direttamente leggibile dal firmware alternativo FloppyFlash.
Con Linux (o OSX, ma non so se anche con Windows) ci sono dei tools per leggere o scrivere immagini DSK formattate per PCW, anche a livello di file. In questo modo si possono caricare tutti i software compatibili con CP/M, anche se non in formato immagine.
Questi tools si chiamano cpmtools e vanno compilati con il supporto per la libreria libdsk, per cui la prima cosa da fare è installare libdsk. Qui lo faccio tramite brew (https://brew.sh/index_it):
brew install libdsk
Installata libdsk si può scaricare (http://www.moria.de/~michael/cpmtools/), configurare e installare i cpm tools:
brew install libdsk
Installata libdsk si può scaricare (http://www.moria.de/~michael/cpmtools/), configurare e installare i cpm tools:
make install
Il formato dei dischi da 180K è indicato con il parametro pcw, mente per quelli da 720K è cf2dd. Questi formati sono supportati nativamente dai cpmtools, ma il tipo di immagine DSK è supportato solo compilandoli con il supporto per libdsk, come visto sopra.
cpmls -d -f pcw img.dsk <= per formato 180K (drive A del 8256 o 8512)
cpmls -d -f cf2dd img.dsk <= per formato 720K (drive A del 9512 o drive B del 8512)
Questo comando invece copia il file locale TEST.COM nell'immagine dal 180K img.dsk, come user 0 (gli users sono una sorta di cartelle e nel CP/M ce ne possono essere 16):
cpmcp -f pcw img.dsk TEST.com 0:
Questi sono alcuni screenshot avviando il PCW con Locoscript (disco 1, lato A):
Questo invece è l'avvio da CP/M e l'esecuzione del Mallard Basic (Disco 1, lato B):
Esiste infine anche un sistema operativo Open Source e ancora attivamente sviluppato, con finestre e multitasking, chiamato Symbos, compatibile anche con i CPC e gli MSX2. Queste sono alcune schermate:
Esiste infine anche un sistema operativo Open Source e ancora attivamente sviluppato, con finestre e multitasking, chiamato Symbos, compatibile anche con i CPC e gli MSX2. Queste sono alcune schermate:
Riferimenti
Il sito di John Elliott, il "guru" del PCW e del CP/M
Software PCW
Software CP/M
Sito "non-ufficiale" sul CP/M
FlashFloppy
Symbos
Fantastico! Grazie per aver condiviso questo articolo. 🙂
RispondiEliminaChe bei ricordi.....!!! Grazie per avermi rinfrescato la memoria con le tue informazioni. Belle immagini.
RispondiEliminaVery nice job !
RispondiEliminaAll my congrats and thank you for sharing the .STL file for the Gotek.
Buongiorno Fabrizio, (ti ho scritto anche via messenger). Ti scrivo in relazione all'articolo che ho letto sul tuo blog del restauro del PCW 8512. Ho seguito pedissequamente la tua guida arrivando ad avere sul mio 8256 un singolo gotek con flashfloppy 3.35. Ho preparato una chiavetta con una serie di file DSK che mi vengono mostrati dal display OLED. Al momento del caricamento, quando accendo il PCW, però vedo il contatore delle tracce nel display salire velocemente e poi sento il triplo beep. Se metto il ponte su MO, il problema avviene una volta, se lo metto su S0, allora il caricamento va in loop. Penso a livello di cablaggio di aver fatto tutto bene, anche FlashFloppy è scritto bene. Ti chiederei gentilmente come hai configurato il file FF.CFG sulle tue chiavette, o comunque un tuo parere su questo comportamento. Grazie mille.
RispondiEliminasinceramente non so perchè ti succede questo, quello che posso fare è postare tutto quello che ho nella chiavetta di flashfloppy (incluso FF.CFG):
Eliminahttps://drive.google.com/drive/folders/1Vvi5PKNjTaiU2uHD-xfgbmci_jkeF9R7?usp=sharing
Grazie, questo è già di grande aiuto per escludere più fattori possibili.
EliminaGrazie 1000, funziona! Sulle prime non funzionava. Ho rimesso in discussione il fatto che la macchina fosse funzionante. Sono ripartito da capo. Ho rimesso il floppy e verificato che caricasse da floppy. Ho rimontato il gotek e voilà, ha caricato tutto!
EliminaCiao Fabrizio, ho ripetuto passo passo quanto hai scritto e il PCW8256 è tornato a funzionare alla grande. Grazie
RispondiElimina