Newsgroup: it.hobby.elettronica.digitale
Titolo: Cpu Z80

Salve,
Cerco disperatamente informazioni generali sulla CPU Z80 della Zilog.
Qualcuno gentilmente puo' darmi qualche URL di siti inerenti o informazioni
a riguardo?
Grazie.
Acrosstheuniverse.

 a riguardo?
Se scrivi CPU Z80 in un qualsiasi motore di ricerca trovarei centinaia di
siti che trattano questo processore. In sintesi comunque si tratta, nella
versione base, di una cpu 8 bit, con capacita' di indirizzamento di 64kbyte
(16 bit), velocita' massima di clock 8 MHz (nella versione C se non ricordo
male), puo' gestire 256 porte di I/O. Non ha ne ROM ne RAM, tutto deve
essere inserito esternamente.
Per la cronaca e' il processore che equipaggiava il vecchio ZX Spectrum e su
cui girava il famosissimo arcade PacMan, puoi quindi ben immaginare quanti
siti potrai trovare.
Saluti.

 ha scritto nel messaggio
news:4mXt8.27659$SR5.7...@twister1.libero.it...


 si!!!)... e di quanti bit č ???
No, niente registro IR.
Se metti in un motore di ricerca Z80 e manual oppure data sheet trovi il
manuale.
-- 
Franco
Wovon man nicht sprechen kann, darüber muß man schweigen.
(L. Wittgenstein)


Il set di istruzioni ne contava 600,
il bus dati era di otto bit, quindi il set era "esteso" con dei prefissi
(se la memoria non m'inganna erano Ix e Iy)
i registri si chiamavano, se non ricordo male
AF BC DE HL
composti da 2 parole da 8 bit l'una.
Il registro F fungeva da flag "parlante" per
i risultati delle operazioni, ed era, se non ricordo male,
il posto dove finivano i risultati delle operazioni.
Se c'era un registro ir non me lo ricordo ma non mi pare.
il bello della famiglia degli z80 era che ... era una famiglia numerosa
:
c'era il PIO, con (ahia la memoriaaaaaa :) mi pare 3 porte parallele da
8 bit,
il SIO che gestiva le porte seriali e il CTC che aveva dei clok,
e credo uno che si chiamava DMA per la gestione della memoria
in comune fra questi. si potevano collegare in rete daisy chain fra di
loro..
Scusa le imprecisioni ma sono passati vent'anni :)
--
@ 1982 Sinclair computers L.t.d. ;)

 X esempio vorrei sapere una cosa ha un registro IR ? (penso proprio di
se per IR intendi il registro dedicato al refresh della memoria 
dinamica la risposta è si.
-- 
Electronic page at: 
http://www.elparadise.com
News2000 1.5ß Version 
http://socket2000.8m.com

 spectrum era una conversione.
Anche questo e' falso, lo Z80 dello Spectrum era uno Z80A standard
funzionante a circa 3,5MHz (una frequenza adatta per generare i segnali
video per la TV), quello che intendi tu era probabilmente il chip che
gestiva l'I/O e la memoria video (di cui ora mi sfugge il nome) che era
appunto un chip proprietario della Sinclair, ma il processore era
perfettamente standard.
Saluti.

 perfettamente standard.
Diciamo che ovviamente il codice originale ha subito delle modifiche per
adattarlo al diverso hardware dello Z80, l'integrato a cui fai riferimento
era la famigerata U.L.A. della Ferranti, purtroppo il vero punto debole
dello Spectrum.
P.S.
Non mi toccate lo Z80 perchè potrei fare una strage in sua difesa :-)))
Bye


Probabilmente intendeva una conversione del pacman
delle (forse) prime schede basate su z80 dei coin-op


Perche', dell'espansione a 80k per non buttare via gli "altri" 16K
dei chip da 32, non ne vogliamo parlare ? Ben 16K in piu'
che chi aveva il commodore .... eheh :)
L'ula sara' anche stata il vero punto debole dello spectrum
pero' i nastrini cazzuti della tastiera erano veramente deleteri,
solo a un mio amico, bastardo, gli funzionano ancora adesso
cosi' come li ha comprati

No per registri IR intendo Istruction Register
ovvero il 'contenitore' delle istruzioni prelevate dalla memoria secondo il
valore puntato da PC.
Puoi aiutarmi?
Ciao.
"due di picche" <mega...@TOGLIaruba.it> ha scritto nel messaggio
news:UQ1u8.16941$vF6.5...@news2.tin.it...


 Ciao.
Questo è l'elenco esatto dei registri presenti nelle cpu Z80:
A,B,C,D,E            8-bit registers
AF                   16-bit register containing A and flags
BC                   16-bit register containing B and C
DE                   16-bit register containing D and E
HL                   16-bit register used for addressing
F                    8-bit Flag register
I                     8-bit Interrupt Page address register
IX,IY                16-bit index registers
PC                   16-bit Program Counter register
R                    8-bit Memory Refresh register
SP                   16-bit Stack Pointer register
Quello che tu chiami IR esiste ma non è indirizzabile  dall'utente il suo
uso è riservato all'unità interna "Instructions Decode and CPU Control".
Rif. pag 2 dello "Z80 CPU User Manual" by Zilog.
Bye

 LD (IRONIA),0
Non mi toccate lo Z80 !!!  :-)
Saluti.

Non mi toccate lo Z80 !!!  :-)
D'accordo, ma tu hai mai scritto qualche programma
per Z80?
Luigi


io si e penso pure lei, seppure solo per lo spectrum
(205-86-5 :)
per l'8085 invece ho proggettato un intero sistema di sviluppo

Daniela, hai ragione per tutto (sopratutto per chi ci tocca lo Z80 (mio
primo processore))
meno che per la moltiplicazione e divisione che se ricordo bene non c'era
(forse confondi con 8088).
Lo usato la prima volta su SORD M-100 (dal 1978), e poi su MicroProfessor I.
Lo Z80 è stato mitico, ancora oggi la Rabbit semiconductor e lo Z8 fanno
parte dell'evoluzione dello Z80.
Volevo fare ancora un rimando alla memoria con l'assemblatore CHAMP (su
Spectrum) che è stato la cosa migliore che mi è successa da quando
programmo.
A tutti quelli che credono che bisogna avere 1 GHz per divertirsi ricordo
che un computer senza SO necessita solo della vostra fantasia e curiosità
per divertirvi.
Chiunque programma qualche cosa che non sia Windows o Mac, con il linguaggio
macchina scoprirà un nuovo modo di vivere le CPU.


l'8088 non era gia' a 16 bit ?

 divisione, 
No, niente moltiplicazione sullo Z80.


> l'8088 non era gia' a 16 bit ?
Giusto (con bus esterno a 8 bit), ma intendevo per le operazioni di
motiplicazione e divisione

 macchina scoprirą un nuovo modo di vivere le CPU.
Un modo nuovo e affascinante ma spesso anche penalizzante, soprattutto a
livello professionale. :)
--
Lorenzo

 Era veramente eccezionale, anche a confronto con assembler odierni.
Mah, io ne usavo un altro, di cui adesso mi sfugge il nome... Quello 
era davvero eccezionale, altro che CHAMP!



scusa non e' che misai indicare un sito con qualche schermata ?
non mi ricodo se lo usavo pure io o era un altro

micro del c64 faceva queste operazioni, tanto per dirne una.
erri. da quel punto di vista il 6502/ 6510 era ancora piu' squallido dello
Z80. chesso'... ad esempio il carry si doveva azzerare, se necessario, a
manina prima delle ADD /SUB (non c'erano ADD-ADC e SUB-SBC).

parte dell'evoluzione dello Z80.
No, Z8 e Z8000 non derivano e non hanno niente a
che fare con lo Z80. L'unica cosa che li accomuna
e' il produttore Zilog (fondata da Fededrico Faggin).
Lo Z8 e' un single chip che per almeno 15 anni e' stato
quasi ignorato dall'industria, da qualche anno invece
e' riuscito a trovare un po' di spazio nel mercato per
motivi a me misteriosi.
Lo Z8000 invece era una grossa (per allora) CPU
a 16 bit che ha avuto qualche successo iniziale, per
esempio era montato nell'Olivetti M20, uno dei primi
personal computer a 16 bit.
Successo dovuto alla sua struttura innovativa che pero'
e' stata pure la causa del suo rapido oblio di fronte
alla CPU Intel 8086, piu' tradizionale, che permetteva
il passaggio dagli 8 ai 16 bit in modo indolore.
In effetti l'Intel ha dimostrato una grande lungimiranza,
riuscendo a restare leader con CPU oggettivamente
scarse ma che mantenevano la compatibilita' con le
generazionio precendenti.
Tanto e' vero che a distanza di quasi 30 anni,
i Pentium riportano ancora la stessa struttura dell'antico
8080 e possono ancora eseguire quel codice (simbolico,
non di macchina)!
Chissa'... se lo Z8000 fosse stato compatibile con lo
Z80 forse la storia dell'informatica degli ultimi 20 anni
sarebbe stata molto diversa, magari oggi avremmo Zilog
e Digital Research e tanti altri invece di Intel e Microsoft.
Luigi

 per divertirvi.
Verissimo.
Saluti.

 per Z80?
Certo qualcosa come 15-16 anni fa, la memoria inganna a volte.
Saluti.

Sono veramente molto contento di vedere ancora tantissima attività verso un
processore così 'vecchio', e mi fà tanto piacere che in fondo, a parte
qualche imprecisione (anche mia), abbiamo tutti un bel ricordo nel cuore dei
bei tempi andati.
Cosiglio vivamente all'originatore di questo post di impegnarsi nel creare e
programmare un target con lo Z80, perchè sicuramente entrerà in quella
cerchia di programmatori un po' malinconici ma orgogliosi di aver scritto
codice su un pilastro dell'informatica.
Scusate i miei deliri.
Ciao.

 che ho messo mano ad uno Z80.
Se ben ricordo il primo micro a 8 bit ad avere la moltiplicazione era il
6809 (pero` per lo Z80 avevo fatto una routine che calcolava la radice
quadrata di un numero intero di 16 bit, risultato su 8 bit usando soli
10 byte di codice). 
Ciao


Non pensavo di scatenare un fiume di 'lacrime' :-) col mio post....
evidentemente lo z80 è stata una vera e propria tappa.
Io sto preparando un esame di ingegneria e lo sto studiando ora
e ringrazio tutti quelli che mi hanno dato dei consigli o dei link in
proposito
o hanno semplicemente postato un mesaggio. CIAO
Acrosstheuniverse


Ma dai ;)
--
© Protected by SpeedLock

10 byte di codice).
Ma dai! Non e' possibile! A meno che con
questi 10 byte non facevi qualche call...
Oppure usavi una look up table!
Se hai ancora quel codice, prova a postarlo.
Ciao
Luigi


Scritto con codici inventati, non li ricordo con esattezza. Numero in HL
(solo positivo, da 0 a 65536), risultato in A (da 0 a 255). Non ho mai
aggiunto la parte di arrotondamento, prendeva troppi byte, e far stare
tutto l'interprete basic in poco piu` di 2k richiedeva qualche rinuncia.
	LD A, #FFH
	LD D,A
	LD E,A
Loop
	INC A
	ADD HL,DE
	DEC DE
	DEC DE
	JRC LOOP
La DEC DE non tocca i flag, mentre ADD HL DE attiva il carry.
Sono 10 byte, mi pare proprio fosse cosi`.
Adesso vediamo se qualcuno scopre come funziona :-)


 valore puntato da PC.
No, non esiste nello Z80, però ci arrivi indirettamente prelevando la
locazione di memoria puntata da PC.


 locazione di memoria puntata da PC.
Non mi ricordo come si fa a leggere il PC e a portarlo in un registro. 


 Non mi ricordo come si fa a leggere il PC e a portarlo in un registro. 
Che io sappia direttamente non si può. Si ovvia ottenendolo 
indirettamente chiamando una subroutine con una call. La subroutine 
va a ravanare poppando e ripushando l'indirizzo di ritorno nello 
stack (al quale dovremo sottrarre la lunghezza della call) per 
ottenere il PC. Non è certamente il massimo della vita...


Adesso vediamo se qualcuno scopre come funziona :-)
Beh, a prima vista non si capisce come funzioni.
Sembra una di quelle routine semplici e geniali di una
volta :-)
Non ricordo di aver visto niente del genere nemmeno
in The art of computer programming.
Comunque la guardero' meglio. grazie ciao.
Luigi

 in The art of computer programming.
No, lo knut fa piuttosto algoritmi, non implementazioni in assembler
tirato per i denti :-)
La routine non e` delle piu` veloci, ma non si puo` avere tutto dalla
vita :-)



Non e' nemmeno una delle piu' lente essendo il core di ogni
divisione, piuttosto, noto che divide solo per due ;)
Ne abbiamo scritte altre per dividere per tre, quattro e cinque,
oppure magari la facciamo diventare di 14 byte e mettiamo
dentro anche un altro luppino ;)
dividendo quello che c'e' in un registro per quello che c'e'
in un altro registru ;) magari :) ?


In buona sostanza compara (?!) il risultato dell'ultima operazione
se ha avuto riporto, sommando (?!) il contenuto di cio' che resta
in de, decrementato di due) ad hl.
in hl metti il risultato della somma hl+de, ma in hl non si sa cosa c'e'
prima (speriamo bene :) facciamo un piccolo tracing :
af         de         hl
ff00
            ffff                    add hl, de            (e vado a
memoria, metti il ris, in hl)
                        ffff        dec de,dec de
            fffd
                        ffff+fffd  che attiva il riporto (ed esce ?)
Cosi' a occhio e croce mi pare che non funzioni, ma probabilmente mi
sbaglio io

 sbaglio io
JRC mi pareva che fosse jump relative on carry: il riporto e` attivato e
salta a loop. Quando invece non fa piu` il riporto esce, ed in A c'e` la
radice quadrata di quanto c'era inizialmente in HL


 divisione, piuttosto, noto che divide solo per due ;)
Acc! VOleva essere una routine per calcolare la radice quadrata. Sicuro
che divida per due?


Adesso vediamo se qualcuno scopre come funziona :-)
io non rispondo: l'algoritmo originale lo conoscevo gia' ... trovato non
so su che libro.
anche se sarei curioso di sapere da dove salta fuori


Non l'avevo trovato su nessun libro, ma tirato fuori usando una nota
relazione matematica :-) (la si puo` dimostrare per induzione).


relazione matematica :-) (la si puo` dimostrare per induzione).
Ciao Franco,
grazie al tuo algoritmo, scopro adesso
che i quadrati di numeri naturali possono
essere trovati con una serie di numeri dispari !!
N al quadrato è pari a somme per i da 1 ad N di
2i - 1 .
Devo riconoscere che è stato geniale aver avuto l'intuzione
di implementare l'algoritmo in quel modo.
La tua esperienza non finisce di stupirmi.
Ciao,
Alessandro.

 2i - 1 .
Questo e` della serie: "anche se sempra inutile, impara e metti da
parte, che potrebbe sempre venir buono in qualche occasione" ;-)


relazione matematica :-) (la si puo` dimostrare per induzione).
ok, allora a me non era nota ^_^; (cmq e' quello che volevo sapere: da
dove veniva fuori)
o forse e' una di quelle relazioni di cui uno non si rende
immediatamente conto delle applicazioni pratiche (se non quelle di
risolvere qualche quesito delle olimpiadi della matematica) ... quale
relazione sarebbe esattamente ?

...

Cavolo! E' davvero geniale!
E io continuavo a pensare al metodo di Newton :-(
Luigi

 relazione sarebbe esattamente ?
La somma di tutti i dispari consecutivi da` sempre un quadrato perfetto
consecutivo. 
1+3=4
1+3+5=9
1+3+5+7=16
Cioe` se scrivi i dispari come dn=2*n-1, partendo da 1 e sommando tutti
i dispari fino a m (cioe` fino al dispari 2*m-1) ottieni m^2.
Si dimostra calcolando m^2-(m-1)^2=m^2 - m^2 + 2m -1 = 2*m-1.
Cioe` dato un quadrato (m-1)^2, per passare a quello dopo devi sommare
un dispari 2*m-1. E questo vale per qualunque m. Poi basta dimostrare
che vale anche per il primo (per m=1) e la proprieta` e` dimostrata.


 E io continuavo a pensare al metodo di Newton :-(
Con Newton, usato bene, fai molte meno iterazioni, ma ci sono delle
divisioni da fare. Questo invece lavora solo per gli interi. Non ho mai
fatto nulla per usare il resto che rimane in HL per fare una
approssimazione del risultato al posto di un troncamento.
