Translate

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 GPB 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.
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:

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:

./configure --with-libdsk
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.

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)

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:





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




Commenti

  1. Fantastico! Grazie per aver condiviso questo articolo. 🙂

    RispondiElimina
  2. Che bei ricordi.....!!! Grazie per avermi rinfrescato la memoria con le tue informazioni. Belle immagini.

    RispondiElimina
  3. Very nice job !
    All my congrats and thank you for sharing the .STL file for the Gotek.

    RispondiElimina
  4. 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.

    RispondiElimina
    Risposte
    1. sinceramente non so perchè ti succede questo, quello che posso fare è postare tutto quello che ho nella chiavetta di flashfloppy (incluso FF.CFG):
      https://drive.google.com/drive/folders/1Vvi5PKNjTaiU2uHD-xfgbmci_jkeF9R7?usp=sharing

      Elimina
    2. Grazie, questo è già di grande aiuto per escludere più fattori possibili.

      Elimina
    3. Grazie 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!

      Elimina
  5. Ciao Fabrizio, ho ripetuto passo passo quanto hai scritto e il PCW8256 è tornato a funzionare alla grande. Grazie

    RispondiElimina

Posta un commento

Post popolari in questo blog

Amiga 600 with Gayle ver.1, VHDL code to implement PAL chip (XU1)

Installazione Gotek su Amstrad PCW 9512