tietokoneen rakenne harjoitustyo

15
EVTEK-ammattikorkeakoulu Tietotekniikan koulutusohjelma [email protected] TP02S, 0201293 Elias Hämäläinen Tietokoneen rakenne: Harjoitustyö Harjoitustyö 29.4.2005 Työn ohjaaja: Seppo Haltsonen

Upload: k0201293

Post on 13-Nov-2014

419 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: tietokoneen rakenne harjoitustyo

EVTEK-ammattikorkeakoulu Tietotekniikan koulutusohjelma [email protected] TP02S, 0201293

Elias Hämäläinen

Tietokoneen rakenne: Harjoitustyö

Harjoitustyö 29.4.2005

Työn ohjaaja: Seppo Haltsonen

Page 2: tietokoneen rakenne harjoitustyo

1 JOHDANTO 3

2 PROSESSORIN RAKENNE JA TOIMINTA 3

2.1 OMINAISUUDET 4 2.2 MUISTI 5

2.2.1 Ohjelmamuisti 5 2.2.2 Datamuisti 6 2.2.3 Pinomuisti 6 2.2.4 Varatut muistipaikat 6

2.3 PROSESSORIN LOHKOKAAVIO 6

3 KÄSKYKANTA JA ASSEMBLY KIELI 8

4 REKISTERIT 8

4.1 AKKU 9 4.2 X INDEX 9 4.3 Y INDEX 9 4.4 OHJELMALASKURI 9 4.5 PINO-OSOITIN 9 4.6 PROSESSORIN TILAREKISTERI 9

5 OSOITUSMUODOT 10

5.1 VÄLITÖN OSOITUS (IMMEDIATE ADDRESSING) 10 5.2 ABSOLUUTTINEN OSOITUS (ABSOLUTE ADDRESSING) 10 5.3 NOLLA-SIVU-OSOITUS (ZERO PAGE ADDRESSING) 10 5.4 REKISTERI OSOITUS (IMPLIED ADDRESSING) 11 5.5 EPÄSUORA ABSOLUUTTINEN OSOITUS (INDIRECT ABSOLUTE ADDRESSING) 11 5.6 ABSOLUUTTINEN INDEKSOITU OSOITUS (ABSOLUTE INDEXED ADDRESSING) 11 5.7 ”NOLLA SIVU” INDEKSOITU OSOITUS (ZERO PAGE INDEXED ADDRESSING) 12 5.8 INDEKSOITU EPÄSUORA OSOITUS (INDEXED INDIRECT ADDRESSING) 12 5.9 EPÄSUORA INDEKSOITU OSOITUS (INDIRECT INDEXED ADDRESSING) 12 5.10 RELATIIVINEN OSOITUS (RELATIVE ADDRESSING) 13 5.11 AKKU OSOITUS (ACCUMULATOR ADDRESSING) 13

6 KESKEYTYSJÄRJESTELYT 13

6.1 IRQ - MASKATTAVA KESKEYTYS (MASKABLE INTERRUPT) 13 6.2 NMI - EI-MASKATTAVA KESKEYTYS (NON-MASKABLE INTERRUPT) 13

7 YHTEENVETO 14

LÄHTEET 14

Page 3: tietokoneen rakenne harjoitustyo

3

1 Johdanto

Työn tarkoituksena oli tutustua johonkin mikroprosessoriin tai mikrokontrolleriin

syvemmin. Valitsin perehtymisen kohteeksi maineikkaassa Commodore 64 -

kotitietokoneessa käytetyn 6510-prosessorin edeltäjän 6502-prosessorin. Prosessorit

ovat arkkitehtuuriltaan identtiset.

Työssä selvitetään kyseisen prosessorin yleiskatsaus prosessorin rakenteesta ja

toiminnasta, lohkokaavio rekistereineen, laskentayksiköineen ja muine lohkoineen,

käskykannan erityispiirteet, osoitusmuodot, keskeytysjärjestelyt, mahdolliset

muistinsuojaus- ja virtuaalimuistituki sekä prosessorin mahdollinen testaustuki.

2 Prosessorin rakenne ja toiminta

6502-mikroprosessori on syntynyt vuonna 1975 MOS Technology Inc:n toimesta, joka

tunnetaan myös nimellä Commodore Semiconductor Group. Kun prosessori tuli

markkinoille se oli kuusi kertaa halvempi kuin kilpailijoiden (Motorola ja Intel)

vastaavat prosessorit. 6502-prosessoria ja sen edeltäjiä on käytetty monissa koti- ja

pelitietokoneissa, kuten Apple II, Atari VCS, Atari 800 ja C64. [6]

6502 on 8-bittinen mikroprosessori, jossa on 16-bitin osoiteväylä. Se on pakattu 40-

nastaiseen koteloon.

Kuva 1. 6502-prosessori 40-nastaisessa muovisessa kotelossaan. [1]

Page 4: tietokoneen rakenne harjoitustyo

4

Kuva 2. 6502-prosessorin nastajärjestys [2]

2.1 Ominaisuudet

- 56 käskyä

- tarvitsee vain yhden +5 voltin jännitelähteen

- 8-bitin rinnakkaisprosessointi

- desimaali- ja binääri-aritmetiikka

- 13 osoitusmuotoa

- oikea indeksointi

- ohjelmoitava pino-osoitin

- pinon koko voi vaihdella, maksimi kuitenkin 256 tavua

- keskeytykset, maskattava ja ei-maskattava

- voidaan käyttää minkä nopeuksista tai tyyppistä muistia

- 8-bittinen kaksisuuntainen dataväylä

- osoitettavaa muistia 65 kilotavuun asti

- DMA (Direct Memory Addressing)

- mahdollisuus valita joko sisäinen tai ulkoinen kellolähde

Page 5: tietokoneen rakenne harjoitustyo

5

- liukuhihna-arkkitehtuuri

2.2 Muisti

Prosessorissa on 65 kilotavun osoitettava muistiavaruus, joka on jaettu keskenään

ohjelma-, data- ja pino-muistien kesken. Alla olevasta muistikartasta näet miten muisti

jakaantuu eri osa-alueiden kesken. Prosessorissa ei ole muistinsuojaus mahdollisuuksia.

Kuva 3. 6502-prosessorin muistikartta. [3]

2.2.1 Ohjelmamuisti

Ohjelma voi sijaita missä tahansa muistissa. Hyppy ja aliohjelmakutsuja voidaan viitata

minne tahansa muistiin. Ehdolliset ja haarautumiskäskyt ovat rajattu -127-+128 tavua

nykyisestä sijainnista. [7]

Page 6: tietokoneen rakenne harjoitustyo

6

2.2.2 Datamuisti

Myös dataa voidaan kirjoittaa minne tahansa muistiavaruuteen. 16-bittiset

dataosoittimet ovat tallennettu niin, että vähemmän merkitsevä tavu ensin, sitten eniten

merkitsevä tavu. [7]

2.2.3 Pinomuisti

Pinomuisti on rajattu 256 tavuun. Pino sijaitsee aina osoitteessa 0100h - 01FFh. [7]

2.2.4 Varatut muistipaikat

0000h - 00FFh Tämä muisti alue on varattu zero-page -osoittimille. Näitä

osoittimia käyttää zero-page -osoitusmuodot

0100h - 01FFh Tämä 256-tavun alue on varattu pinon käyttöön

FFFAh - FFFBh Osoitin NMI -keskeytyksen toteutukselle

FFFCh - FFFDh Osoitin ohjelman reset -signaalia varten

FFFEh - FFFFh Osoitin IRQ -keskeytyksen toteutukselle

Jotkin muistiosoitteet voivat olla varattuja Syöttö/Tulostus -toimintojen varalle, koska

prosessorilla ei ole S/T -ominaisuuksia. [7]

2.3 Prosessorin lohkokaavio

Page 7: tietokoneen rakenne harjoitustyo

7

Kuva 4. 6502-mikroprosessorin lohkokaavio rekistereineen, laskentayksiköineen ja

muine lohkoineen. [3]

Page 8: tietokoneen rakenne harjoitustyo

8

3 Käskykanta ja Assembly kieli

6502-mikroprosessorin käskykanta sisältää 56 erilaista käskyä. Käskyjen muistikkaat,

(Esim. MOV) eroavat paljon tutuista ja turvallisista Intel x86 -perheen muistikkaista.

Otetaan esimerkiksi yhteenlasku käsky, joka tapahtuu Intelin prosessoreissa ADD -

käskyllä, 6502:ssa käsky on ADS. 6502:n Käskyt voidaan jakaa seuraaviin osiin:

- Datan siirtokäskyt

- Aritmeettiset käskyt: yhteenlasku (aina muistibitin kanssa), vähennyslasku (aina

muistibitin kanssa), muistipaikan kasvatus ja vähennys yhdellä, vertailut

- Loogiset käskyt: eli AND, OR, ja XOR, sivuttaissiirto- ja rotaatiokäskyt

- Hyppy- ja haarautumiskäskyt: ehdolliset ja ehdottomat, aliohjelmakutsut

- Muut: tilalippujen asetus, bitti- ja pino-operaatiot

Alla on pieni esimerkki miltä Assembly -kielinen ohjelmakoodi näyttää 6502-

prosessorilla toteutettuna. Ohjelma tulostaa johonkin näyttöpäätteelle tekstin ”Hello,

World!

Kuva 5. Esimerkki koodinpätkä 6502-prosessorin Assembly kielellä. [4]

4 Rekisterit

Prosessorista löytyy kuusi erilaista rekisteriä, joista on lyhyesti kerrottu seuraavissa

kohdissa. 6502:ssa on hyvin vähän rekistereitä jos verrataan esim. Intelin 8080

prosessoriin.

MSG: .ASCIIZ "Hello, world!"

LDX #0

@LP: LDA MSG,X ; load character

JSR $FFD2 ; chrout

INX

BNE @LP

RTS

Page 9: tietokoneen rakenne harjoitustyo

9

4.1 Akku

Akku on 8-bittinen rekisteri, jota käytetään aritmeettisiin ja loogisiin operaatioihin.

4.2 X index

X index 8-bittinen rekisteri jota yleensä käytetään erilaisissa x-indeksointi

osoitusmuodoissa

4.3 Y index

Y index on 8-bittinen rekisteri jota puolestaan käytetään erilaisissa y-indeksointi

tapauksissa.

4.4 Ohjelmalaskuri

Ohjelmalaskuri on 16 bittinen rekisteri, jossa sijaitsee kulloisenkin käskyn

suoritusosoite.

4.5 Pino-osoitin

Pino-osoitin on 8 bittinen rekisteri. Prosessori olettaa, että ylemmät 8 bittiä pino-

osoittimesta on aina asetettu 01h arvoiseksi, eli tämä rajoittaa pinon muistin 256 tavuun,

väliltä 0100h - 01FFh.

4.6 Prosessorin tilarekisteri

Prosessorin tilarekisteri eli lippurekisteri sisältää seuraavat tilaliput:

N - Negatiivinen (Negative) Asetettu jos eniten merkitsevä bitti on yksi

Page 10: tietokoneen rakenne harjoitustyo

10

V - Ylivuoto (Overflow) Ylivuoto aritmeettisessa operaatiossa

B - Komento keskeytetty (Break Command)

D - Desimaalitila (Decimal mode) Asetettu jos prosessori on desimaalitilassa

I - IRQ-epäaktiivinen (IRQ disable) Asetettu jos IRQ -keskeytys ei ole päällä

Z - Nollalippu (Zero) Asetettu jos tulos on nolla

C - Muistibitti (Carry) Muistibitti tai lainaus aritmeettisessa

operaatiossa

5 Osoitusmuodot

6502:ssa on 13 osoitusmuotoa, eli tapaa joilla päästään käsiksi muistiin. [5]

5.1 Välitön osoitus (Immediate Addressing)

Välittömässä osoituksessa operandi on osa käskysanaa. Annettu arvo menee suoraan

akkuun. Esimerkiksi, LDA #$99, lataa arvon $99 akkuun.

5.2 Absoluuttinen osoitus (Absolute Addressing)

Käskyn toinen ja kolmas tavu määrittelevät muistiosoitteen missä data sijaitsee.

Esimerkiksi, STA $3E32 tallentaa akun nykyisen arvon muistipaikkaan $3E32.

5.3 Nolla-sivu-osoitus (Zero Page Addressing)

Page 11: tietokoneen rakenne harjoitustyo

11

256:ta ensimmäistä muistipaikkaa kutsutaan nimellä “nolla-sivu”. Eli muistialueet

0000h - 00FFh. Seuraavat 256 käskyä ovat Ensimmäisen sivu jne. Käskyt jotka

käyttävät ”nolla sivu” -osoituksia eivät käytä turhaa ylempää tavua. Esimerkiksi:

LDA $0023 toimii, mutta käyttää yhden tavun turhaan

LDA $23 ”nolla sivu” -osoitus

5.4 Rekisteri osoitus (Implied Addressing)

Monet käskyistä ovat vain tavun mittaisia, eikä viittaa muistiin. Näitä kutsutaan rekisteri

osoituksiksi. Esimerkiksi

CLC Nolla Muistibitin (Carry)

DEX Kasvattaa X-rekisteriä yhdellä

5.5 Epäsuora absoluuttinen osoitus (Indirect Absolute Addressing)

Käytetään vain suorassa hyppykäskyssä (JMP). Se käyttää annettua muistiosoitetta

osoittimena alempaan tavuun 16-bittisessä muistiavaruudessa, ja sitten hyppää siihen

muistiosoitteeseen. Esimerkiksi:

JMP ($2345) hyppää muistiosoitteen $2345 alempi, $2346 ylempi tavu

Eli, jos $2345 sisältää $EA ja $2346 sisältää $12, silloin seuraava käsky suoritetaan

muistipaikasta $12EA

5.6 Absoluuttinen indeksoitu osoitus (Absolute Indexed Addressing)

Lopullinen osoite saadaan niin, että annettuun osoitteeseen lisätään X- tai Y-rekisterin

arvo. Esimerkiksi:

Page 12: tietokoneen rakenne harjoitustyo

12

LDA $453, X X=3

Komento lataa akkuun sisällön muistipaikasta $F453+3, eli $F456.

5.7 ”nolla sivu” indeksoitu osoitus (Zero Page Indexed Addressing)

Sama kuin absoluuttinen indeksoitu osoitus, mutta annettu osoite sijaitsee “nolla

sivulla”, jolloin säästetään muistia.

5.8 Indeksoitu epäsuora osoitus (Indexed Indirect Addressing)

Etsii 16-bittisen osoitteen annetusta sijainnista ja lisää siihen X-rekisterin arvon.

Esimerkiksi:

LDA ($B4, X) X=6

$B4 + 6 = $BA, eli jos $BA sisältää $12 ja $BB sisältää $EE, on lopullinen

muistiosoite $EE12. Lopullisen muistiosoitteen arvo ladataan akkuun.

5.9 Epäsuora indeksoitu osoitus (Indirect Indexed Addressing)

Etsii 16-bittisen osoitteen sisällön annetusta muistipaikasta. Tähän sisältöön lisätään Y-

rekisterin sisältö. Hakee arvon joka on tallennettu tähän osoitteeseen. Esimerkiksi:

LDA ($B4), Y Y=6

Jos $B4 sisältää $EE ja $B5 sisältää $12, akkuun haetaan arvo osoitteesta $12EE + 6,

eli $12F4

Page 13: tietokoneen rakenne harjoitustyo

13

5.10 Relatiivinen osoitus (Relative Addressing)

Tätä osoitusmuotoa käytetään prosessorin haarautumiskäskyissä. Seuraava tavu

merkitään “offsettiin” nykyisesta osoitteesta, ja näiden summa on seuraavan käskyn

suoritusosoite. Esimerkiksi:

BNE $7F (hyppää kun nollalippu on asetettu)

Komento lisää 127 nykyiseen ohjelmalaskuriin (Program Counter) ja alkaa suorittaa

käskyä siitä osoitteesta.

5.11 Akku osoitus (Accumulator Addressing)

Kuten rekisteri osoituksessa, käskyn kohteena on akku, jolloin sitä ei tarvitse erikseen

määritellä.

6 Keskeytysjärjestelyt

Prosessorissa keskeytyksiä voidaan käsitellä kahdella tavalla.

6.1 IRQ - Maskattava keskeytys (maskable interrupt)

Kun keskeytys tapahtuu, ohjelmalaskuri ja lippurekisteri tallennetaan pinoon,

keskeytysmahdollisuus otetaan pois päältä ja prosessori hyppää muistiosoitteeseen mikä

on tallennettu FFFEh - FFFFh -alueelle. Keskeytyksestä palataan RTI -käskyllä. Tämä

keskeytys voidaan ottaa pois päältä CLI-käskyllä.[7]

6.2 NMI - Ei-maskattava keskeytys (non-maskable interrupt)

Kun keskeytys tapahtuu, ohjelmalaskuri ja lippurekisteri tallennetaan pinoon,

keskeytysmahdollisuus otetaan pois päältä ja prosessori hyppää muistiosoitteeseen mikä

Page 14: tietokoneen rakenne harjoitustyo

14

on tallennettu FFFAh - FFFBh -alueelle. Myös tässä keskeytyksestä palataan RTI -

käskyllä. Tätä keskeytystä ei voi laittaa pois päältä. [7]

7 Yhteenveto

6502-mikroprosessori on kehitetty 70-luvun puolivälissä, joten se on jo yli 30 vuotta

vanhaa tekniikkaa. Nykyajan prosessorit perustuvat kuitenkin samoihin periaatteisiin

millä silloiset prosessorit toimivat. 6502 toimii 1-4 Mhz:n nopeudella, nykyiset

prosessorit toimivat tuhat kertaa nopeammalla kellotaajuudella.

Vielä syyskuussa 2004, 29 vuotta 6502 syntymän jälkeen, Australiassa sijaitsevassa

Tasmanian yliopistossa käytettiin prosessoria Assembly kielen opetukseen tietokoneen

organisaatio ja arkkitehtuuri –kurssilla. [6]

LÄHTEET

1 Cpu-collection.de: MOS 6502. (WWW-dokumentti)

<http://www.cpu-collection.de/?l0=i&i=198&s=big&tb=1&n=>

2003, Luettu 24.4.2005.

2 Commondore Semiconductor Group: 6500 Microprocessors. (PDF-dokumentti)

<http://www.6502.org/archive/datasheets/mos_6500_mpu_nov_1985.pdf>

01.11.1985, Luettu 26.4.2005.

3 Commondore Semiconductor Group: 6500 Microprocessors. (PDF-dokumentti)

<http://www.6502.org/archive/datasheets/mos_6510_mpu.pdf>

01.11.1982, Luettu 26.4.2005.

4 Vapaa tietosanakirja internetissä: Assembly kieli. (WWW-dokumentti)

<http://en.wikipedia.org/wiki/Hello_world_program#Assembly_language>

Page 15: tietokoneen rakenne harjoitustyo

15

28.4.2005, Luettu 28.4.2005.

5 RTK: Assembly In One Step. (WWW-dokumentti)

http://www.geocities.com/oneelkruns/asm1step.html

23.7.1997, Luettu 23.4.2005.

6 Vapaa tietosanakirja internetissä: MOS 6502 –teknologia (WWW-dokumentti)

<http://en.wikipedia.org/wiki/MOS_Technology_6502>

22.4.2005, Luettu 20.4.2005.

7 CPU World: MOS Technology 6502/650x/651x architecture. (WWW-dokumentti)

<http://www.cpu-world.com/Arch/650x.html>

13.2.2005, Luettu 22.4.2005.