Cubik: #1 – Back to basics

Ensiksi todettakoon, että en ole vielä aivan varma kuinka paljon tulen asioita avaamaan. Pyritään siihen, että keskimääräinen lukija pystyy ymmärtämään asioista suurimman osan, mutta samalla ei tylsisty. Toiseksi pitäisikö tätä viedä eteenpäin top-down vai bottom-up näkökulmasta. Tällä hetkellä top-down tuntuu paremmin istuvammalta tähän, mutta kaikki oikeudet muutoksiin pidätetään tietenkin :3.

Ennen kun voidaan puhua softasta, meillä pitää olla rauta. Perinteisesti rauta on voitu jakaa kolmeen osaan.

1: Suoritin (CPU)
Kaiken laskennan takana on suoritin. Suorittimen tärkeimmät osat ovat ohjainyksikkö (Control unit) ja laskentayksikkö (Arithmetic logic unit). CU kirjaimellisesti ohjailee dataa suorittimen sisällä ja ALU osaa suorittaa yksinkertaista laskentaa.

Cubikin CPU tulee olemaan Zilogin valmista Z80 8-bittinen suoritin, joka oli aikoinaan erittäin suosittu.  TI on mm. käyttänyt tätä pitkään graafisissa laskimissaan. Z80:ssa on 8-bittinen data väylä, 16-bittinen muistiväylä ja uusimmat  versiot tukevat kellopulssia 20 MHz:n asti. Vaikka dataväylä on vain 8-bittinen, niin sisäisesti Z80 osaa käsitellä 16-bittisiä lukuja.

2: Muisti (RAM)
Vaikka CPU pystyy sisäisissä rekistereissään pitämään muutamaa lukua tallessa, niin se tarvitsee kaverikseen jonkinlaisen muistin, josta voidaan lukea suoritettavaa ohjelmaa ja säilöä ohjelman vaatima data. Muistiväylä Z80:ssa on 16 bittinen eli pystymme osoittamaan 2^16 = 65 536 eri muistiosoitteeseen. Kerralla voimme siis osoittaa vain 64 kB muistialueeseen. Samasta syystä vuosituhannen vaihteessa tavalliset PC:t tukivat vai 4 GB ramia. Koska 32-bittisellä muistiväylällä se oli maksimi. Tätä rajaa voimme kuitenkin näennäisesti kasvattaa.

Yleinen tapa on muistin sivuttaminen. Analogiana voidaan pitää, että voimme kerralla lukea kirjasta vain yhtä aukeamaa, mutta sivua kääntämällä saamme lisää luettavaa, mutta edelleen pystymme yhdellä kertaa lukemaan vain yhtä aukeamaa.  Tästä voi kuitenkin kirjoittaa oman postauksen, joten sivuutetaan se nyt toistaiseksi. Tällä hetkellä suunnitelmissa on sisällyttää Cubikkiin 512kB – 4MB muistia.

Koska käynnistyessään suoritin alkaa suorittamaan ohjelmaa muistiosoitteesta 0000 ja virran katkaisu on saanut RAMin unohtamaan sisältönsä, niin tarvitsemme pienen pysyvän muistiblokin. Tämä palanen tulee sisältämään alustus- ja käyttöjärjestelmän latausrutiinit. Eli tavallisessa PC:ssä tätä on kutsuttu BIOS:ksi. Tämän hetkinen suunnitelma sisältää 8kB EEPROM:in. Samaan muistiin olisi myös tarkoitus sijoittaa C:n standardikirjasto, jotta lopulta voidaan siirtyä ohjelmoimaan C:tä.

3: Oheislaitteet (IO)
Erästä Aallon proffaa lainaten tietokone, joka ei tee IO:ta ei ole kovin mielenkiintoinen. Eli jollain tavalla käyttäjän pitäisi pystyä vaikuttamaan koneen toimintaan. Virallisen dokumentaation mukaan Z80:sen IO-osoiteavaruus on 8 bittinen, mutta oikeasti kuitenkin kaikki osoiteväylän 16 bittiä on käytössä.

Tarvitsemme logiikan, joka osaa tämän 8 bittisen osoitteen perusteella valita oikean IO-laitteen. Yleensä IO:lle juttelu on asynkroonista. Jotta suorittimen ei tarvitse koko ajan pollata IO-laitteiden tilaa, niin käytetään keskeytyksiä. Eli IO-laite kertoo CPU:lle, että nyt olisi asiaa.

Z80:ssa on kaksi keskeytyssignaalia, yksi maskattava ja yksi ei maskattava. Maskattavat keskeytykset voidaan kytkeä ohjelmallisesti pois päältä. Z80 tukee kolmea erilaista keskeytystilaa, mutta tässä tullaan käyttämään vain niistä kaikista tehokkainta, missä jokaiselle IO-laitteelle voidaan määrittää oma keskeytyksen käsittelijä. Tästäkin saa kokonaan oman postauksen.

Seuraavat oheislaitteet ovat välttämättömiä:

  • Reaaliaikakello (RTC), keskeyttämään suoritinta tasasin väliajoin, jotta voidaan esim. toteuttaa moniajo. Pitää myös huolen päivämäärästä ja kellon ajasta.
  • VGA ulostulo näytölle. Vähintäänkin kunnollinen tekstimode ja ehkä alkeellinen grafiikkatila.
  • PS/2 liitäntä näppäimistölle.
  • Sarjaportti.
  • CF-muistikortinlukija, CF-muistikortti on käytännössä IDE (PATA) väylällä toimiva flash-muisti.

Näistä jokaisesta saa myös oman postauksen aikaiseksi.

4: Kello
Kaikki edellä mainittu toimii, jos ja vain jos kaikki on tahdistettu. Tärkein tahdistettava osio on tietenkin suoritin, joka tekee asioita vain, kun kellopulssi käskee. Tämän lisäksi pitää mm. huomioida että muisteilla ja IO-laitteilla on jonkinlainen access time aina. 

5: Reset
Z80 pitää erikseen resetoida, kun siihen on kytketty virrat. Muuten suorittimen alkuarvot ovat vähintäänkin mielenkiintoiset. Eli käynnistyksen yhteydessä täytyy pitää huolta, että kaikki laitteet tulee nollattua. Tämä hoituu generoimalla reset-pulssi.

Cubik - Block Diagram

 

Lopulta meillä pitäisi olla jotain tämän näköistä. Edellä mainitut asiat ovat suuntaa antavia ja tarkemmat speksit moutoutuu kyseisiä blokkeja tehdessä. Jolloin myös asiaa tarkemmin niiden sielun elämästä.

Rakenteesta pitäisi myös koittaa saada mahdollisimman modulaarinen. Sillä mitä luultavammin asioita voi tehdä aina paremmin, jolloin yhden palasen parantaminen onnistuu paljon helpommin. Kuvastakin on selkeästi erotettavissa kolme eri kokonaisuutta: CPU, muisti ja IO. Piirilevyjen teettämisen näkökulmasta tämä on myös parempi tapa. Sillä pienet kiinalaiset tekevät mieluummin pienempiä levyjä.

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 *