Autore Topic: Computer Z80  (Letto 5967 volte)

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Computer Z80
« il: 13 Luglio 2011, 21:38:03 »
Ecco, a gran richiesta, il mio computer Z80!


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.


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).


Lato saldature, con brevettato cable management system! ;)


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;
Schema della decodifica degli indirizzi.
Se vi serve posso fornire gli schemi in formato Kicad.

Qui 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
« Ultima modifica: 22 Marzo 2013, 13:00:38 da Z80Fan »

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Computer Z80
« Risposta #1 il: 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!
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline divina

  • Synthetic Voodoo
  • *****
  • Post: 2051
  • Karma: +1/-7
    • Mostra profilo
Re: Computer Z80
« Risposta #2 il: 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
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
MorphOS 3.9-PowerMac G5 && PowerMac G4 FW800 && PowerBook G4 && Pegasos2 G4 //AmigaOS4.x //IcAROS x86 //- A4k 060- MacIntel/powerpc - x86/x64/powerpc servers -

Offline lucommodore

  • Human Debugger
  • *****
  • Post: 6176
  • Karma: +48/-9
    • Mostra profilo
Re: Computer Z80
« Risposta #3 il: 13 Luglio 2011, 22:16:45 »
Bravissimo! :clap:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Solo chi è folle sfida le sue molle!
http://www.questolibro.it/retro-garage << Scambio/Vendo RetroGame

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re: Computer Z80
« Risposta #4 il: 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.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re: Computer Z80
« Risposta #5 il: 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

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. ;)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline ArcadeHeart

  • ASM Lover
  • *****
  • Post: 373
  • Karma: +4/-0
  • Arcade addicted
    • Mostra profilo
Re: Computer Z80
« Risposta #6 il: 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
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

AmigaCori

  • Visitatore
Re: Computer Z80
« Risposta #7 il: 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:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Mck

  • Byte Addicted
  • ****
  • Post: 43
  • Karma: +0/-0
    • Mostra profilo
Re: Computer Z80
« Risposta #8 il: 14 Luglio 2011, 14:10:53 »
Interessante......
Bravissimo.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re: Computer Z80
« Risposta #9 il: 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.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Computer Z80
« Risposta #10 il: 06 Agosto 2011, 11:36:54 »
Complimenti!!! :-)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline cpiace64

  • Tech
  • *****
  • Post: 70
  • Karma: +0/-5
    • Mostra profilo
Re: Computer Z80
« Risposta #11 il: 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ì
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re: Computer Z80
« Risposta #12 il: 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... :)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re: Computer Z80
« Risposta #13 il: 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
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Z80Fan

  • Administrator
  • Guru
  • *****
  • Post: 1671
  • Karma: +13/-2
    • Mostra profilo
    • http://z80fan.altervista.org
Re: Computer Z80
« Risposta #14 il: 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
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Tags: