Cubik: #2 – Z80

Kuten edellisistä postauksista on selvinnyt, niin suorittimena on Zilogin Z80, jonka dokumentaatio löytyy tästä. Suosittelen selaamaan läpi, vaikka aionkin ottaa tässä esille pääpiirteet.

z80

Parhaimman yleiskatsauksen saa varmasti katsomalle pinnijärjestystä, joka löytyy sivulta 5.

Z80 Pinout

A0-A15: 16-bittinen osoiteväylä.
D0-D7: 8-bittinen dataväylä.
CLK: Kellopulssi.

RESET: Resetoi suorittimen. Pakollinen käynnistyksen yhteydessä.
INT (Interrupt Request)0-taso generoi keskeytyksen.
NMI (Nonmaskable Interrupt):  Sama, kun INT, mutta ei maskattava. Siirtyy aina osoitteeseen 0066h.

MREQ: Suoritin haluaa lukea/kirjoittaa muistiin.
IORQ: Suoritin haluaa lukea/kirjoittaa IO-laitteeseen.
RD: Lukuoperaatio.
WR: Kirjoitusoperaatio.
M1: Suorituksessa on M1-sykli. Yhdesä MREQ kanssa meinaa seuraavan käskyn hakemista muistista ja IORQ:n kanssa keskeytysvektorin pyytämistä IO-laitteelta.
WAIT: Pysäyttää suorittimen.
BUSACK: Suorittimen MREQ, IORQ, WR, RD, sekä osoite- ja datapinnit ovat high impendance -tilassa. Eli esim. DMA on pyytänyt osoite- ja dataväylän käyttöön.

On hyvä huomata, että viiva nimen päällä tarkoittaa, että kyseinen tila on 0-tasolla aktiivinen.

Jotta Z80 saadaan heräämään henkiin, niin sille tarvitaan kellosignaali.  Pulssin pitää olla kanttiaaltoa 50% suhteella. Kiteen avulla voidaan tuottaa kanttiaaltoa esim. seuraavalla kytkennällä.

clock

 

Lopputuloksena on yllä oleva kellosignaali. Tällä hetkellä taajuutena on 4 MHz. Tämän lisäksi on myös hyvä olla debugtarkoitukseen 1-5 Hz kello. Tämä onnistuu helposti esim. 555-ajastimella tai vaikkapa mikrokontrollerilla.

Z80:sen ulostulojen virtakestoksi on ilmoitettu 2 mA. Joten ulostuloja on hyvä bufferoida. Kontrollipinneistä tarvitsee myös muodostaa yhdisteitä (kuten IO luku jne.). Joten kontrolliulostulojen bufferointi hoituu suurimmaksi osaksi suoraan kombinaatioita muodostaessa. Koska ulostulojen 0-taso merkkaa aktiivista, niin AND-operaatio hoituu nyt OR-porteilla.

cpu-control
Kombinaatioulostulot ovat myös aktiivisia, kun 0. Sisäänpäin menevät tulot eivät voi leijua, vaan ne pitää vetää ylös. Jotkin Zilogin IO-piirit haluavat suoraan MREQ-signaalin, joten sen takia se on erikseen vielä bufferoitu. BUSACK-signaalista tulemme tarvitsemaan negaatiota. Syy selviää kohta. Tarkkasilmäisimmät huomasivat, että tuossa ei ole muistin lukemista indikoivaa signaalia. Tämä sen takia, että sitä ei tarvita. Sillä silloin kuin muisti ei ole kirjoitustilassa, niin se on lukutilassa.

Osoite- ja dataväylä on syytä myös bufferoida, mutta nämä ulostulot pitää myös saada high impendace -tilaan, kun BUSACK on aktiivinen. Pitää myös huomioida, että dataväylä on kaksisuuntainen. Onneksi tähän tilanteeseen löytyy juuri oikeat piirit. 74LS244 on kahdeksan porttinen tri-state bufferi ja 74LS245 on vastaava, mutta kaksisuuntaisena.

buffer

address-2 copy

Osoiteväylän bufferointi voidaan toteuttaa yllä olevalla tavalla. Huomiokaan, että kyseinen BUSACK signaali tulee nyt NOT-portin läpi (ks. yllä). Kun BUSACK on normaalisti 1 (eli ei aktiivinen), niin sen negaatio on silloin luonnollisesti 0 ja 74244:set ovat päällä.

databuss

Vastaavasti dataväylän bufferointi. Tässä vaiheessa suorittimen vaatimat elektroniikat alkaa olemaan kasassa. Vielä kuitenkin tarvitaan resetointipiiri, joka käynnistyksen yhteydessä resetoi suorittimen. Sillä manuaalisesti napin painaminen olisi ärsyttävää.

reset

Kyseinen kytkentä on otettu suoraa Build Your Own Z80 Computer -kirjasta, joka on muuten oiva tietolähde. Vaikka noin puolet tavoista tehdä asioita on vähän vanhentuneita. Toiminta perustuu kuitenkin siihen, että kondensaattori on alkutilanteensa varaukseton ja pitää reset-linjan 0-tasossa. Lopulta kun kondensaattori on latautunut, niin reset kytkeytyy 1-tasoon. Kytkennässä on aktiivinen 1 ja aktiivinen 0 linjat erikseen, kun piirien resetointi vaihtelee.

Lopputulosta voi testata esim. vetämällä koko dataväylän maihin ja resetoimalla suorittimen. 00h vastaa NOP (No operation) käskyä jolloin osoiteväylän pitäisi kasvaa yhdellä aina per operaatio. Seuraavaksi pitäisi lisätä muisti, että jotain oikeaa voisi jo tehdä.

This entry was posted in Cubik and tagged , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *