Néhány szó a processzorról

Nem célom mélységeiben belemenni a mikroprocesszorok evolúciójába, sem pedig belső működésébe, de néhány dolog azért jó ha elhangzik, mert a későbbiekben még nagyon hasznos lesz.

MOS 6502

003-mos6502cpu.jpg

A MOS6502 processzort 1975-ben mutatták be, és nagyon hamar elterjedt, főképp az egyszerűségének, és olcsóságának köszönhetően. Rengeteg 80-as évekbeli mikroszámítógép és játékkonzol "agya" volt, mint például az Apple I, és Apple II, Atari 2600, a 8bites Atari számítógépek, BBC Micro, a klasszikus 8bites Nintendo (NES), és természetesen a Commodore masinák. Ami nem meglepő, hiszen a Commodore elég hamar felvásárolta a gyártó MOS Technology nevű céget, így mindenkinél olcsóbban tudta azt a gépeibe szerelni.

Maga a 6502 CPU (Central Processing Unit - központi feldolgozó egység) egy butított és átdolgozott változata egy korábbi, Motorola által fejlesztett processzornak. Általános célú, 8 bites mikroprocesszor, 16 bites cím-, és 8 bites adatbusszal.

Ez mit is jelent?

A CPU 8 bites számokkal képes műveleteket elvégezni, mint például összeadás. (0-255 közötti számokkal)

16 bites címbusza által 16 bitnyi, vagyis 65536 byte-nyi memóriát képes elérni. (64 Kb)

A 8 bites adatbusz pedig annyit jelent, hogy egyszerre 8 bit, vagyis 1 byte adatot tud "áthúzni" pl a memóriából.

Mint látjuk, ezek nem bődületes nagy számok, de az adott kor körülményeihez képest mégis jelentősek voltak, hiszen ki álmodhatott akkoriban 64 Kb memóriáról?

Belső felépítés

Az alábbi részegységek minden processzorban megvannak, így csak átfutunk rajtuk.

Control Unit - vezérlőegység

A CU feladata az utasítások memóriából kiolvasása, értelmezése, és végrehajtása. 

Arithmetical and Logical Unit - Aritmetikai- logikai egység

Az ALU az a rész, ami a konkrét számításokat végzi, pl összeadás, kivonás, logikai műveletek( pl ÉS, VAGY), stb. A számításokhoz rendszerint különféle belső regisztereket használ.

Regiszterek

A regiszterek a processzoron belül található belső tárolók, amik amolyan "munkamemóriaként" szolgálnak. Pl számok összeadásakor az ALU két megadott regiszter tartalmát összeadja, és az eredmény az egyik regiszterbe kerül. A használható munka regiszterek száma a 6502 esetében elég kevés, számszerint 3, méretük egyenként 8-8 bit. A CPU-k jelölésénél pl a "64bites" a regiszterek méretét jelöli, vagyis az adott processzor 64 bites számokkal képes dolgozni. 

Egyéb tulajdonságok

Nem kell megijedni, az alábbi részeket nem kérdezzük ki, azért vannak itt, hogy a későbbiekben vissza tudjak linkelni rájuk :)

Program counter (PC)

A PC a proci egyik belső regisztere, funkciója nagyon egyszerű, azt a memóriacímet tárolja, ahonnan a következő utasítást majd ki kell olvasni a memóriából. Az utasítás végrehajtása után a CU növeli a PC értékét, majd kiolvasásra kerül a következő parancs.

Stack - verem

A verem egy érdekes CPU-n kívüli tároló a fizikai memóriában, amit a 6502 kezelni képes. Mérete 255 byte. A verembe elmenthetjük például a munkaregisztereink tartalmát, amit később vissza tudunk olvasni. A vermet legegyszerűbb úgy elképzelni, mint egy gödröt, amibe beledobálhatunk adatokat, de mindig csak a legfelsőt tudjuk belőle kivenni. (LIFO - Last In First Out) Ha a legalsó adat kell, az összes többi felette lévőt ki kell pakolnunk előbb.

Stack Pointer - Veremmutató

Egy processzoron belüli regiszter, amely tárolja, és mutatja a verem aktuális méretét. 

Status Register (SR) vagy Processor Status (PS)

Szintén egy belső, 8 bites regiszter, aminek az egyes bitjei különböző jelentéssel bírnak. Ezek a bitek kiolvashatóak, bizonyos műveletek hatására a CPU automatikusan beállítja őket, ami számunkra nagyon hasznos lehet. Pl kivonunk egymásból két számot, és ha az eredmény negatív, a megfelelő bit 1-re vált.

Munkaregiszterek - A, X, Y

Belső regiszterek, amikkel számítási műveleteket tudunk végezni.

Interrupts - megszakítások

A megszakítások adják az egyik legérdekesebb, és legizgalmasabb részét a 6502-nek. A processzor képes bizonyos jelek hatására megszakítani az éppen futó programot, és más egyéb feladatokat végrehajtani. Dolga végeztével visszatér a félbehagyott programhoz, és onnan folytatja, ahol abbahagyta.

Legegyszerűbb úgy elképzelni a megszakításokat, mint amikor vendégeket vársz, és éppen főzöl. Megszólal a csengő, beengeded a vendéget, majd visszatérsz a félbehagyott munkádhoz. 

Tipikus életből vett példa a megszakításokra a C64 bekapcsolásától eltelt időnek a mérése. A megszakítás rendszeres időnként lefut, és függetlenül az épp futtatott programtól, mindig növeli egy számláló értékét. Mindebből mi semmit nem veszünk észre. Ugyanúgy, ahogyan manapság egy modern rendszeren sem.

Órajelciklusok

Sokan hallották már a kifejezést, hogy a "proci X mega/gigahertzen ketyeg". Ezt a "ketyegést" egy, a hardverbe épített kvarc oszcillátor állítja elő, aminek egyetlen funkciója és tulajdonsága, hogy feszültség hatására egy adott frekvenciájú vibrálást képes leadni. Ez a vibrálás hangolja össze az összes hardver elemet.

Természetesen a processzor is kap ilyen jeleket, nevezhetjük ezt egyfajta szívverésnek is. A CPU minden utasítást megadott "szívdobbanásnyi idő" alatt tud végrehajtani. Van amit 1, 2 vagy 4 ilyen ciklus alatt.

Értelemszerűen, minél több "szívdobbanást" kap, annál gyorsabb lesz a végrehajtás, ám minden processzornak megvan a saját maga maximuma, ami fölött már nem működik megbízhatóan. 

A 6502 1-2 MHz közötti órajelfrekvenciával képes működni. Ez a frekvencia a C64 esetében 0,985 Mhz, az egyéb hardverelemek összehangolásának eredményeképp. (Pl, lassú ram, együttműködés a grafikus chippel, stb)

MOS 6510

Eddig a 6502-ről volt szó, viszont köztudottan a Commodre 64-ben 6510-es processzor ketyeg. A 6510 a nagytestvér, ami a gyakorlatban teljesen kompatibilis a 6502-vel, az egyetlen különbség amiről tudok, az az, hogy a 6510 képes a memory overlappingra.

Aki eddig figyelmesen olvasott, annak feltűnhetett, hogy a processzor kereken 64Kb memóriát tud megcímezni, és ennél többet nem lát. A C64 egyik csodája az volt, hogy egyszerre tartalmazott 64Kb RAM-ot, és 20Kb ROM-ot, amiben az operációs rendszere volt. Ez összesen 84 Kb, aminek használatára a processzorunk nem képes.

Kezd érdekessé válni? Olvass tovább...

A bejegyzés trackback címe:

https://c64assembly.blog.hu/api/trackback/id/tr2516180174

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.

C64 assembly alapok

Friss topikok

  • Heretic83: Sziasztok! Tudnátok ajánlani olyan tudástárt, ahonnan lehet tanulni bővebben az assembly programoz... (2023.07.13. 19:15) Mi az az assembly
  • tájbor1001110: Válaszolva a saját kérdésemre: Az End+o -val lehet 5 szín séma között váltogatni. (2022.09.20. 21:14) Turbo Assembler
  • tájbor1001110: Ne haragudj, aludtam rá egyet és észrevettem hogy a "*=$1000" direktívából hiányzik a '$'. (((: Bo... (2022.09.16. 08:56) Képernyőtörlés

Címkék

süti beállítások módosítása