Newsgroup: it.hobby.elettronica.digitale
Titolo: velocità scrittura z80

salve, in epoca di microcontroller mi diverto ancora con lo z80.
sapete dirmi quanto ci mette uno z80 a 4MHz per scrivere in memoria 
8Kbytes in locazioni contigue?
grazie.
-- 
Prima di rispondermi devi togliere le dita dal naso!!! :-)

 ha scritto nel messaggio 
news:47741194$0$17941$4faf...@reader1.news.tin.it...


 8Kbytes in locazioni contigue?
fisicamente la scrittura di un dato in memoria avviene in 3 cicli di 
clock (750nS totali) percio' sicuramente servono almeno 
8*1024*0,000750=6,144 millisecondi, a cui vanno aggiunti i tempi delle 
restanti istruzioni che getiscono la scrittura (a spanne quindi un tempo 
almeno 5 volte superiore).

 
ok, grazie, manda pure se ti va.
ciao.


Claudio_F ha scritto:

ok, grazie.
mi serviva capire quante righe da 256 pixel (a 1 bit per pixel) riesco a 
scrivere nel tempo del ritorno verticale, in un'interfaccia grafica che 
sto costruendo.
ciao.


8Kbytes in locazioni contigue?
Dipende, se usi l'istruzione LDIR sono 21 cicli Clk per cui:
21*8192 = 172032 cicli
4.000.000/172032 = 23,251 Hz  o 0,043 Sec
Se usi dei loop il tempo sarà ovviamente superiore.
--
ciao
  Stefano

Telespalla Bob ha scritto:

io faccio così:
         LD HL, SORGENTE
         LD DE, DESTINAZIONE
         LD B, BLOCCHI
LOOP:    LDI
         LDI
         LDI
         LDI
         LDI
         ....
         ....
         ....
         ....
         ....
         ....
         DJNZ, LOOP
LDI consuma 16 cm mentre LDIR 21 (mi sembra)
ciao - S.
-- 
Postato da Alice Newsgroup: lo usi da web ma con le funzioni del newsreader 
http://newsgroup.alice.it
Gerarchie it, italia, it-alt, tin, it.binari. Unico!

LDI consuma 16 cm mentre LDIR 21 (mi sembra)
Lui deve trasferire 8K, se fa come dici tu ci vogliono + parecchi K solo per le
istruzioni, calcolando che il DJNZ salta fino a $-126 non potrai mettere piů di
62  LDI in un loop.
Attenzione anche al fatto che LDI decrementa comunque BC, e quindi C deve essere
sempre inizializzato.
Comunque non č una cattiva idea, si risparmia un pň di tempo.
Una variante potrebbe essere questa:
LDI_M  MACRO  #N
             REPT     #N
             LDI
             ENDM
BLOCCHI_L     EQU      62
BLOCCHI_H    EQU      8192\62
         LD          HL, SORGENTE
         LD          DE, DESTINAZIONE
         LD          A, BLOCCHI_H
LOOP1:
         LD          B, BLOCCHI_L
         LD          C,0FFH
LOOP:
         LDI_M    BLOCCHI_L	;scrive 62 volte LDI
         DJNZ,    LOOP
         DEC       A
         JP          NZ,LOOP1
--
ciao
  Stefano

   Stefano
è vero, ma l' idea è quella di sfruttare LDI che consuma meno
tempo, poi, si dovrà nidificare il loop a seconda delle esigenze.
Ad esempio mi è capitato di dover usare all' inizio qualcosa tipo   
LD A,N e successivamente inizializzare B con LD B,A all' inizio
del loop per risicare qualche nanosecondo dato che LD  B,N
consuma  piu'tempo che LD B,A......
ciao - Sandro


 ha
scritto:
Ho scritto una cavolata, il secondo loop non ci vuole:
LDI_M  MACRO  #N
             REPT     #N
             LDI
             ENDM
BLOCCHI_L     EQU      62
         LD          B,8192/BLOCCHI_L
         LD          HL, SORGENTE
         LD          DE, DESTINAZIONE
LOOP:
         LD          C,0FFH
         LDI_M    BLOCCHI_L	;scrive 62 volte LDI
         DJNZ     LOOP
--
ciao
  Stefano