NSA - Non Solo Amiga

ROBOTICA - AUTOMAZIONE - EMBEDDED => Microcontrollori - Elettronica - Interfacciamento. => Topic aperto da: Z80Fan - 13 Luglio 2011, 21:38:03

Titolo: Computer Z80
Inserito da: Z80Fan - 13 Luglio 2011, 21:38:03
Ecco, a gran richiesta, il mio computer Z80!

(http://z80fan.altervista.org/Z80/full.jpg)
Il computer completo: è formato da due schede, la inferiore è la scheda madre, la superiore è solo un supporto per l'Arduino e per una porta XOR (nascosta sotto l'Arduino).
L'Arduino Mega 2560 è usato come interfaccia per collegarsi all'USB (e prendere energia da essa) e usare un emulatore di terminale sul PC.

(http://z80fan.altervista.org/Z80/front.jpg)
Questa è la scheda madre; il computer è tutto qui! :D
In alto a sinistra abbiamo il grande chip, lo Z80, un Z84C0010 versione CMOS che può andare a 10MHz, ma che ora è controllato da un clock di 8MHz (scatolina argentata in basso). Ho anche un generatore da 20MHz, e penso che lo Z80 non abbia problemi ad andare a quella velocità ;).
Alla sua sinistra il bus di espansione che fornisce tutti i 40 segnali dello Z80. A destra abbiamo nell'ordine UVEPROM (da 32KiB ma solo 8KiB mappabili) che contiene i circa 700 byte di monitor (se non sapete cos'è chiedete a TheKaneB ;)), e i due chip da 32 KiB di SRAM.
Attraverso i circuiti di decodifica (5 dei 6 chip sotto) posso decidere (da programma) se mostrare allo Z80 8KiB di ROM e 56KiB di RAM, o tutti i 64 KiB di RAM.
L'ultimo chip è un demultiplexer per l'I/O, che fornisce 7 linee già decodificate per le periferiche (attraverso la striscia di contatti più esterna in basso a sinistra; la più interna è un'estensione del registro a 4 bit di cui già uso un bit per configurare la ROM).

(http://z80fan.altervista.org/Z80/back.jpg)
Lato saldature, con brevettato cable management system! ;)

(http://z80fan.altervista.org/Z80/monitor.png)
Esempio di sessione del terminale: Il primo messaggio è del firmware dell'Arduino, dopo ci sono messaggi generati solo dallo Z80, passati all'Arduino, e quindi trasmessi all'emulatore di terminale.
Ci sono 5 comandi del Monitor: "d" per "dump", visualizza il contenuto della memoria delimitato dai due indirizzi indicati; "s" per "set", carica all'indirizzo indicato come primo parametro la lista di byte che segue (il limite è dato solo dal buffer di input di 256 byte); "e" per "esegui", salta all'indirizzo indicato, mantenendo nello stack l'indirizzo di ritorno così si può tornare con un semplice RET.
Il programma che ho inserito nell'immagine è: 0x3e, 0x41 per LD A, 0x41, carica l'accumulatore con il valore ASCII della A maiuscola; 0xd3, 0x20 per OUT (0x20), A, invia il contenuto dall'accumulatore alla porta di I/O 0x20 (la porta dell'Arduino); 0xc9 per RET, ritorna al Monitor.
Gli ultimi comandi sono "o" per "output", che invia alla porta indicata il valore indicato, e "i" per "input", che legge il valore della porta di I/O indicato.
Nell'esempio, dopo il "i 20", ho premuto shift+a e quindi lo Z80 ha letto dall'Arduino (che a sua volta lo ha ricevuto dal PC), il valore 0x41.
E' da precisare che l'Arduino, in caso non abbia dati da fornire allo Z80, lo blocca con un WAIT, ma basta modificare il firmware dell'Arduino per fargli ritornare 0, e lo Z80 lo ignora tranquillamente.

Schemi:
Schema principale, con Z80 e memorie (http://z80fan.altervista.org/Z80/Z80Schematic.png);
Schema della decodifica degli indirizzi (http://z80fan.altervista.org/Z80/addressDecoder.png).
Se vi serve posso fornire gli schemi in formato Kicad.

Qui (http://z80fan.altervista.org/Z80/monitor.asm) il sorgente del monitor: come si vede c'è una jump table all'inizio, che punta alle routine di input e di output, di cui sono abbastanza orgoglioso: ci sono molti controlli sull'input, e gli errori vengono comunicati attraverso i flag.

Sto già pensando di espanderlo, con un'interfaccia VGA ad esempio, e una tastiera, in modo da renderlo indipendente da un PC; successivamente posso mettere una interfaccia IDE per i dischi fissi/Compact Flash, e altra memoria. CP/M sarebbe carino da portare, ma un bel sistemino multitasking fatto da me è molto più nerdoso! :)

Fatemi sapere cosa ne pensate! ;D
Titolo: Re: Computer Z80
Inserito da: TheKaneB - 13 Luglio 2011, 21:52:25
tutto qui? e dove sono le icone, il ponte olografico e la pila al plutonio?  :geek:

Io stavo costruendo una cosa simile usando un 65C02 a 4MHz... poi ho interrotto per sviluppare l'emulatore floppy/printer, decisamente più pratico e meno impegnativo di un intero computer come il tuo :-)

Complimenti!
Titolo: Re: Computer Z80
Inserito da: divina - 13 Luglio 2011, 22:13:07
@Z80Fan

è bellisimo !!!  :D  :D  :D  complimentoni e persevera implementando ulteriormente  :D  :D  :D

p.s.
non è visibile la sessione da terminale
Titolo: Re: Computer Z80
Inserito da: lucommodore - 13 Luglio 2011, 22:16:45
Bravissimo! :clap:
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 13 Luglio 2011, 22:20:52
Grazie a tutti per i complimenti!

Citazione da: "divina"
non è visibile la sessione da terminale
Già, avevo sbagliato l'url; fixato.
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 14 Luglio 2011, 00:27:34
Citazione da: "dsar"
Bello!
Potrebbe interessarti un vecchio libro che di recente è stato rilasciato liberamente:

Build Your Own Z80 Computer
http://retro.hansotten.nl/index.php?page=z80-sbc (http://retro.hansotten.nl/index.php?page=z80-sbc)

Magari ti può aiutare a completare e migliorare il tuo progetto, anche se non fosse di aiuto è una piccola gemma da tenere ;-)

Lo conosco bene. ;)
Non lo ho usato, non so bene perchè, forse perchè avevo già tutto in mente e volevo farcela da solo! :D
Visto che ho un po' di tempo libero gli darò una letta; sono sicuro che ci sono molte informazioni interessanti. ;)
Titolo: Re: Computer Z80
Inserito da: ArcadeHeart - 14 Luglio 2011, 10:17:23
Complimenti  :clap:
Dovrei avere da qualche parte un programmino che avevo fatto alle superiori in assembler Z80, magari puoi usarlo per testare il tuo progettino. Il programmino era una semplice tastiera musicale, in pratica si utilizzava la tastiera del computer per suonare, se lo trovo te lo passo, sempre se interessa  :P
Titolo: Re: Computer Z80
Inserito da: AmigaCori - 14 Luglio 2011, 12:42:57
Complimentoni!  :clap: , fai venire voglia di smanettare!, sono belle ste cose perche' realizzarsi da zero un computer da se e' come ritronare ai primordi dell'informatica :)
Io fossi in te mi sentirei veramente soddisfatto nel completarlo come unita' totalmente a se stante  :mrgreen:
Titolo: Re: Computer Z80
Inserito da: Mck - 14 Luglio 2011, 14:10:53
Interessante......
Bravissimo.
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 14 Luglio 2011, 15:25:17
Citazione da: "ArcadeHeart"
Complimenti  :clap:
Dovrei avere da qualche parte un programmino che avevo fatto alle superiori in assembler Z80, magari puoi usarlo per testare il tuo progettino. Il programmino era una semplice tastiera musicale, in pratica si utilizzava la tastiera del computer per suonare, se lo trovo te lo passo, sempre se interessa  :P
Allora preparo l'interfaccia per lo speaker! :D

Citazione da: "AmigaCori"
Io fossi in te mi sentirei veramente soddisfatto nel completarlo come unita' totalmente a se stante  :mrgreen:
Infatti! La prima cosa che devo fare è fornirgli un'interfaccia tastiera a una per uno schermo.
Titolo: Re: Computer Z80
Inserito da: clros - 06 Agosto 2011, 11:36:54
Complimenti!!! :-)
Titolo: Re: Computer Z80
Inserito da: cpiace64 - 28 Aprile 2012, 18:56:24
Fantastico, dal 90 al 93 ho lavorato in una ditta che costruiva controlli numerici basati su z80, i softwaristi riuscivano a fargli fare cose incredibili e io testavo le schede e i firm, bei tempi, bravo, continua così
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 28 Aprile 2012, 21:10:33
Vi faccio un piccolo aggiornamento: di tanto in tanto ci lavoro un pochino; l'ultima cosa a cui stavo lavorando era una interfaccia per tastiera PS/2, che usasse solo l'hardware già esistente, con lo Z80 che implementava il protocollo da solo (leggendo bit a bit dalla connessione seriale).

Lo Z80 è abbastanza veloce da poter leggere correttamente tutti i bit attraverso un programma di prova, il problema è quando provo a usare la linea di interrupt come indicatore dell'inizio della trasmissione: la collego alla linea di clock, così la tastiera, quando abbassa il segnale di clock (per il protocollo PS/2), avvia anche la ISR. Funzionerebbe correttamente se non per il fatto che lo Z80 non disattiva gli interrupt mascherabili automaticamente, quindi (in base all'istruzione che stava eseguendo all'arrivo dell'interrupt), la tastiera potrebbe aver già eseguito un altro ciclo di clock prima che lo Z80 possa eseguire l'istruzione DI (disattiva interruzioni), creando quindi una seconda istanza dell'ISR, sballando la sincronizzazione e bloccando la macchina.

La soluzione sarebbe di mettere qualche circuitino di controllo, nel caso più semplice un flip-flop che si attiva quando la tastiera parte, ma si resetta subito quando lo Z80 fa il ciclo di interrupt acknowledge; oppure potrei mettere un semplice shift-register che legge i pacchetti interi dalla tastiera e manda un interrupt quando è arrivato uno completo. Quest'ultima soluzione è facile da implementare, però al momento non ho shift-registers disponibili. Chissà se ne fanno da 11 bit, sarebbe comodo così (il protocollo ps/2 usa pacchetti da 11 bit).

Dopo questa magari una bella interfaccia VGA potrebbe starci... :)
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 28 Aprile 2012, 21:58:50
Citazione da: "legacy"
e l'interfaccia vga come la fai ? con una scheda video vga isa usando solo gli 8 bit ? con una fpga come gameduino ?
Nell'unico VERO modo: un timer, un paio di contatori per indirizzare la memoria video e qualche resistenza da usare come DAC. :D

Citazione da: "legacy"
io pero' non metterei tastiera e annessi su quell'affare, ma scheda di rete e gestirei tutto da remoto, vt100, come sto di fatto per fare (CS8900 10Mbit/sec) sulla mia 68000  board =P
Ma non arrivo a leggere 2 bit dalla tastiera e tu mi vuoi far fare un'interfaccia Ethernet? :D
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 29 Aprile 2012, 01:03:10
Ma se uso un modulo già pronto non è più farla da zero. :P
Poi non credere che sia così difficile interfacciarsi con un monitor VGA... la cosa più difficile secondo me in questo momento è trovare un cristallo della giusta frequenza, però i monitor sono abbastanza flessibili da tollerare frequenze più varie.

Vedrai vedrai! :D
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 30 Aprile 2012, 16:56:33
Citazione da: "legacy"
Per la tastiera, puoi hackare le tastiere transformer dei palmari palm tipo palm m1xx, o palm 5xx, dentro sono seriali TTL.
Beh non cambierebbe molto, anche la PS/2 è un'interfaccia seriale TTL. La differenza è che, essendo sincrona con clock comandato dalla tastiera stessa, mi viene molto più semplice costruire un circuitino di ricezione, usando uno shift register e un paio di porte per generare il segnale di interrupt.

Per non parlare del fatto che tastiere PS/2 le trovo ovunque! :D

Poi qui ho anche una USART di quelle fatte direttamente dalla Zilog per lo Z80; non so però se funziona ma se lo fa penso sicuramente di aggiungerla.
Un computer homebrew che si rispetti DEVE avere almeno una porta RS232! :lol:
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 30 Aprile 2012, 20:36:57
Citazione da: "legacy"
casotto al lato software, perche' devi necessariamente stare dietro alla tastiera, ad ogni byte che sputa fuori
Casotto? Devo solo scrivere una ISR che all'interrupt legge la porta e mette il dato in un buffer, né più né meno di quanto non si deve fare su un computer x86.
Poi anche con l'USART e la FIFO devi leggere i byte dal buffer interno prima o poi, se hai una RS232 ad alta velocità è un conto, ma con la tastiera che ha una banda di pochi byte al secondo, non lo vedo un gran problema.

In secondo luogo una tastiera Palm non la ho, le PS/2 le trovo ovunque, e cmq non voglio "sprecare" una porta sulla citata USART (che è da vedere se funziona) per la tastiera.
Poi devo scegliere se saldare un grande chip a 40 pin da 600mils, oppure 2-3 chip da ~20 pin da 300 (shift register, latch per il bus dati, un flip flop che mi serve per gli interrupt, del quale forse posso fare a meno). Insomma è lo stesso...
E secondo me è molto più divertente implementare l'interfaccia a mano, piuttosto che usare una scatola nera per fare tutto, visto anche che è un progetto hobbistico e non commerciale.

Citazione da: "legacy"
Altrimenti ti dico attenzione: stai usando una tastiera gia' fatta, e non va bene, devi prendere i 101 tasti, saldarli, e mettere un 8048 per fare la kb scan :lol:
Eh ma un conto è una tastiera PS/2 con l'8048, un conto è un chip che ti fa tutto lo stack TCP/IP da solo. Sarà un po' diverso...

E cmq una delle idee era anche di usare una tastiera a matrice che ho prelevato da un computer giocattolo, interfacciandola con qualche contatore per fare lo scanning, ma non dirlo a nessuno... :shhh:

----
Edit: ma basta cambiare tutti i messaggi che poi devo rivedere le mie risposte! :D
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 01 Maggio 2012, 00:26:01
Citazione da: "legacy"
Per tempi richiesti e valore aggiunto che porta, per me avrebbe senso se fosse sintesi cpld/fpga.
Ma perchè odi tanto la PS/2? E poi sempre con 'ste fpga, perchè non volete farmi fare le cose con della logica standard? Come quegli altri sul thread dei processori, che addirittura volevano farmi usare un tablet con touchscreen per "manipolare" i componenti piuttosto che farmeli saldare... (link (http://http://www.hwupgrade.it/forum/showthread.php?t=2209718&page=12), da boh, post 232).

Citazione da: "Z80Fan"
Enc e CS8900 sono invece chip di rete che in hw ti danno solo il livello fisico mac, nulla di piu', anzi lasciano a te tutto l'onere di dover implementarci sopra ogni cosa dal link layer allo stack tcp/ip. In giro c'e' tanta roba pero' scritta cosi' cosi', se il driverino e annessi li fai in C e li fai bene ottieni un oggettino software tipo mattoncino lego che puoi utilizzare anche in altri progetti, per esempio io ho messo un Enc sul nodo domotico NXP sfruttando SPI, e ho senza troppa fatica messo il tutto anche su 68EZ328. Ora conto di metterla anche sul dsp blackfin perche' con la sola seriale i download sono troppo lenti.
A maggior ragione, dovrei implementarmi il TCP/IP con lo Z80, così poi mi rimangono 100 byte liberi per il programma! :P (ovvio che scherzo)
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 01 Maggio 2012, 03:37:38
Citazione da: "legacy"
ho uno stack tcp/ip leggero sul nodo domotico...
Si, lo so lo so, ho scritto che stavo scherzando apposta, ho visto far fare cose veramente incredibili con risorse veramente limitate, tipo interi sistemi operativi multitasking e con gui su processori anche più lenti del mio... :ugeek:

Citazione
per esempio limitazione per i consumi, sta roba discreta a 5V succhia troppi mA, o limitazione per velocita', sta roba discreta fai fatica a farla andare a 12.5Mhz, a 25Mhz piangi se non hai roba F e pcb fatti a regola d'arte, mentre le fpga tirano 100Mhz senza batter ciglio, hanno lvttl quanti ne vuoi, e consumano nettamente meno per quello che fanno

ma piu' di tutto ti evitano al pratico di dover pedere un sacco di tempo in cose stupide come adattare i package smd o dip quando due integrati fanno la stessa cosa ma i pin sono messi in modo diverso (perche' ??) da un integrato all'altro, ai chip che diventano leggenda introvabili (vedi hex display driver per e.s. usati sul progetto z80 KIM-1), e tutta una serie di cose fastidio che arrivano al wirewrapping e relativi zoccoli di adattamento.
Scusa la domanda brutta ma... cosa me ne frega a me?
Il sistema non è un portatile, quindi non mi interessa quanto consuma, lo Z80 al massimo va a 10 Mhz, non devo produrlo in serie quindi l'integrato che mi serve lo trovo nel formato che ha e poi basta, lo attacco e tutto va bene.

Devo solo fare un computerino, che abbia una tecnologia simile a quella che avevano a disposizione negli anni '80, per hobby, nel modo in cui mi diverto di più. Voglio farlo in un certo modo, e questo modo non involve l'uso di fpga o chip troppo complicati. Sai sennò se lo implementavo tutto nell'fpga (perchè se devi fare qualcosa tanto vale che lo fai tutto dentro), prendo il core da qualche parte, metto un paio di circuiti a corredo e finito... bella roba, mi scrivevo una simulazione e facevo anche a meno di spendere soldi nella dev board.
Non mi interessa se è inefficiente, consuma tanto, va lento, occupa spazio, è brutto da vedere... non lo devo mica vendere!

Scusa se lo dico così eh, non c'entri niente te, però ne ho sentiti fin troppi che mi son rotto!


(Che poi tra l'altro io un progetto per un'fpga già ce lo ho, e ha a che fare sempre con il thread dei processori... visto che tu sei nel settore, riesci a consigliarmi una buona dev board che non sia costosissima, e che sia una buona piattaforma di partenza? Magari che sia anche disponibile dai principali distributori di elettronica, così se faccio un ordine da Digikey o da Mouser la prendo in un colpo solo :) Ah, magari che abbia anche i tool di sviluppo compatibili con Linux, ora ho finito con le preferenze. :mrgreen: )
Titolo: Re: Computer Z80
Inserito da: Z80Fan - 01 Maggio 2012, 18:45:36
Citazione da: "legacy"
...
Come già ho detto prima, per questo progetto ho deciso di fare in un determinato modo, ovvero di usare chip più base possibile (a parte cpu e ram ovviamente), con una tecnologia che fosse disponibile circa negli anni '80, e ciò significa (a meno di ASIC fatti su misura) tutti chip 74** o altre varie USART e chip famosi che si trovano anche dal tabacchino sottocasa.
Poi io faccio in un modo un po' diverso la progettazione di questo computer: prima vedo che chip posso avere, e di conseguenza progetto il resto. Ad esempio i circuiti di decodifica probabilmente li avrei potuti fare anche con meno chip, però quelli avevo e quelli ho usato.

il MacGyver dell'elettronica! :lol:

Citazione da: "legacy"
lo dice uno che ha speso ben 15 mesi cercando sporadicamante in giro dagli spaccini delle robe obsolete una manciata di dram chip da 256Knibble (4bit, mezzo byte) in package ZIP (roba oscena giapponese), per metterle su una board di sviluppo motorola del 1993, e alla fine 8Mbyte in 16 chip li ho pagati 70 euro, cose pazze, con 30 euro in piu' conpravo una fpga e ci sintetizzavo tutto sopra con la possibilita' di metterci le SIM72 da PC, anzi pensa che per un progetto simile con 10 euro ho comprato cpld e annessi e ci ho fatto interfaccina per le sim72, e cosa vuoi che costino 16Mbyte sim72 ?  5 euro al mercatino dei Navigli (milano pta genova) =P

pero' quella board doveva a must a vere quella dram, perche' e' chiaramente tifo calcistico  :violin:
Bon questo è un pochino diverso dal nostro discorso, tu dovevi sistemare una board che già esisteva come prodotto finito...

Lo stesso discorso lo puoi fare fra una decina d'anni, metti che devi sistemare una scheda con fpga ma non fanno più quel modello... :P


Citazione da: "legacy"
tutte le dev board sono ottime, la spartan3e-dev di xilinx (2005) in particolare per costi/risorse. Ha su 2 seriali, chippino di rete, lcd 2x16, tasti, vga, ps/2 kb e topo, flash, e usb-cable-xilinx on board. in pratica quello che ti serve per fare un progettino come il tuo. Questa me l'hanno regalata amicici andai (beati loro) in USA nel 2005, oggi penso che da qualche spaccino la si trova ma non so di preciso.

Invece, giusto per parcondicio, e giusto perche' l'ho appena regalata ad un amico, ti dico che una altra cosa figa ma di Altera e' la DE-zero-nano (2010), scfitta "DE0-nano", costa un circa centone, e la trovi di importazione italiana da spaccini come digikey (italia, eh, cosi paghi solo l'iva e niente mancia alle fiamme gialle). Ha su una fpga che fa paura, cycloneII, anche se e' delicatuccia come IO.

io ho solo la spartan3d dev board, poi compro piu' che altro chip cpld sciolti (solitamente tutta roba xilinx) e li accomodo su pcb home made (o fatti fare ai service) o schedine 1000 fori, o adattatori TQFP to boh-dipende, per rimpiazzare piccoli agglomerati di chip discreti o risolvere magane. Per esempio l'ultima magagna vede una cpld xc95108 in package 84-PLCC messa su una board 68060 tutta in carne ed ossa per espanderne il bus, perche' quella board ha un su un bus stronzissimo tanto che serve una fsm per gestirlo.
Bene bene, probabilmente a questo punto prenderei la Spartan3e, visto che già in due la avete consigliata (mi ero proprio dimenticato che avevo già aperto un thread > viewtopic.php?f=58&t=447&p=3185 (http://www.nonsoloamiga.com/forum/viewtopic.php?f=58&t=447&p=3185) )
Solo una cosa: tra la Spartan3e-dev e l'Altera DE1 con la Cyclone II, visto che hanno costi simili, qual'è che secondo te e "migliore"? Cioè, da come vedo la dotazione di hardware per me è paragonabile, magari una ha una fpga più capiente? Magari una ha dell'hardware aggiuntivo "speciale" (ad esempio vedo che la spartan ha una cpld, è programmabile anche lei?). Non so, sappimi dire, magari puoi rispondere nell'altro thread. Grazie in anticipo! :D
Ah magari, visto che sono niubbo totale, puoi anche dirmi più o meno cosa ci si può fare con le risorse disponibili? Un po' per capire come "dimensionare" i dispositivi.