Google Translate

Hungarian English French German Italian Portuguese Russian Spanish

Commodore 64 - Memória

A Commodore 64 tervezése során a mérnökök az egyszerűségre helyezték a hangsúlyt, és a Microsoft-tól licencelt Basic V2 programozási nyelvet bővítették ki olyan parancsokkal melyek tipikusan a gép működtetésére szolgálnak. Lényegében ha egy felhasználó akárhányszor begépel egy sort, és leüti az enter billentyűt, a sort a Basic értelmezi és a szükséges lépéseket - az operációs rendszer közbenjárásával - végrehajtja.

A kibővített Basic, valamint a kapcsolódó gépi kódok (pl. a program szerkesztése, alacsony szintű hardware vezérlés) együttesen alkotják a Commodore 64 operációs rendszert. A teljes rendszer az ún. olvasható memóriában (ROM) van tárolva. A ROM lényegében egy memória chip a gépben, de a tartalma nem írható vagy módosítható, csak olvasható. A számítógép indítási szekvenciája során a ROM tartalma átmásolásra kerül a szabad elérésű (RAM) memóriába. A RAM mint neve is mutatja mind olvasható, írható és módosítható. A 64 Kb tárhelyet több RAM chip együttesen adja ki. Az operációs rendszer a gép hardware felépítésével együtt dolgozva azonban lehetővé teszi (a programozó helyett/számára), hogy a RAM egy nagy egybefüggő tárhelyként viselkedjen.

Ebben a cikkben a memóriát fogjuk behatóbban tanulmányozni. Ha jobban szeretnéd megérteni a C64-et, vagy netán szeretnéd megtanulni a programozás alapjait olvass tovább, és kövesd figyelemmel a cikksorozatot.

 Az operációs rendszer a ROM-ban található. Mielőtt tovább mennénk tisztázzuk nagy vonalakban miképp vannak az adatok eltárolva a memóriában.

Bitek és a bináris számrendszer

A memória chipek mondhatni elég egyszerű módon tárolják az adatot - ha elég közelről vesszük szemügyre. A benne lévő adatfolyam bitek sorozata. Egy bit-nek mindössze két értéke lehet: 0 vagy 1. Ez a két érték alkotja a kettes (bináris) számrendszert. Mint bármely számrendszer esetén, a bináris számokkal is lehet műveleteket végezni, és a számítógép a színfalak mögött az ideje nagy részét ezzel (is) tölti. Az ilyen műveleteket - igen hatékonyan - a számítógép hardware szinten oldja meg, logikai áramkörökkel.

Természetesen, a bináris számrendszerben is van korlátlan helyi érték. Így a számunkra oly ismerős tízes számrendszer számai is ábrázolhatóak. Eltérés azonban, hogy a a bináris számokat jobbról balra kell olvasni, pl.:

BinárisDecimális
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9

Egy bináris szám könnyen átváltható decimálisba. Jobbról balra haladva, minden helyi érték egy bizonyos decimális szám megfelelője, mégpedig az egy, kettő, majd a kettő hatványai:

... 64 32 16 8 4 2 1

Elég ha sorra veszed a helyi értékeket, és ahol bináris 1 van, azoknak a decimális megfelelőjét összeadod. Példa:

1    0   1   0   0

16 + 0 + 4 + 0 + 0 = 20

Természetesen sokkal könnyebb számológéppel váltani. Indítsd el a Windows számológép programját, majd válts programozói nézetbe az ALT + 3 segítségével. Gépeld be a fenti példán látható 20-at, majd a bal oldalon válaszd ki a "Bin" üzemmódot. Az eredmény 10100 lesz.

Byte

Nyílván egy olyan világban ahol az emberek decimálisan ábrázolják a számokat, felmerül az igény, hogy a programokban is decimális számokat lehessen használni. Ehhez azonban valamiképp rendszerezni kell a bitek irdatlan folyamát. És így elérkeztünk a második digitális tárhely egységhez a byte-hoz (ejtsd: bájt).

1 byte = 8 bit

Biztos kiváncsi vagy mekkora a legnagyobb decimális szám ami ábrázolható 1 byte-on. És ha elég figyelmes voltál eddig már tudhatod is akár a választ. Ha netán arra tippelsz hogy 128 vagy 256, csak vess egy pillantást a példára:

1     1    1    1    1   1   1   1

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

A byte már egy sokkal "kézzelfoghatóbb" alap egység. Programozás szempontjából a legkisebb táregység. Ritkán fordul elő - Basic esetén soha - hogy a bitek szintjén manipuláld a memóriát. Más nyelvek is legfeljebb csak a byte-ok bitjeit engedi módosítani, ám erre tipikusan nincs is szükség.

Kilobyte

A Kilobyte a következő digitális táregység a byte után.

1 Kb = 1000 Byte

A Kilobyte már egy igen nagy egység, és ekkora egységet a számítógép nem is képes egyetlen szám ábrázolására használni a memóriában. Hogy miért nem képes, az egy hosszabb választ igényel, erről bővebben később. Hogy miért nem lenne célszerű 1 kb-on számot tárolni az könnyen belátható: még a tudományos projektekben sincs rá igény hogy ilyen nagy számokkal kelljen műveleteket végezni. A 255-nél nagyobb számok könnyedén tárolhatóak kettő (vagy több) byte-on.

Memória a hardware szempontjából

Érdemes megemlíteni, hogy a memória a programozás szempontjából egy absztrakt (elvont) fogalom. Ez mindjárt ki is fog derülni.

Mint láttad, alacsony szinten (a hardware szintjén) a memória chipekben tárolt bitek. Az áramkörök teszik lehetővé, hogy a bitek értéke változzon, és megint más áramkörök képesek bitekkel műveleteket végezni. De tőlünk mint számítógép felhasználóktól és/vagy programozóktól ez a teljes működési folyamat teljesen függetlenül végbemegy!

Memória az OS szempontjából

A következő absztrakciós szintet az operációs rendszer jelenti, ami összehangolja a chipeket, és rajta keresztül byte szinten lehet a tartalmat manipulálni. Az operációs rendszernek elég egy címet és egy értéket megadni, és az ő felelőssége hogy tárolja azt - majd szükség esetén előhívja. Ismét, ez a folyamat a programozótól - tipikusan - független, ám befolyásolható folyamat. Tehát az operációs rendszer szempontjából a memória: címeken tárolt értékek sorozata. Sematikusan ez így ábrázolható:

                  8 Kilobyte
                      |
Hardware       [ RAM chip 1 ]  [ RAM chip 2 ] ...
Software (OS)  [1][2][3] ...   [8001][8002] ...    <- címek
                |

             1 byte

Példa: Amikor az OS a 8001-es címre a 20 decimális számot írja (ha egy Basic program kérné erre az OS-t a POKE paranccsal, sanszosan tönkre menne a Basic értelmező, hisz a 2. chip-en van tárolva)

Hardware       [ Ram chip 2                ]
               [0][0][0][1][0][1][0][0] ...   <- egy bájt bitjei,
Software (OS)  [8001                  ] ...   <- ami a 8001-es címhez tartozó érték.

Habár a címek máris kezelhetőbbé teszik a programozást, van még egy ennél is jobb absztrakciós szint.

Memória a programozó szempontjából

A programozó változókkal dolgozik. A változó már egy többnyire szoftveres fogalom. Minden változónak van neve, típusa, és egy értéke. Az, hogy a változó hogy lesz eltárolva a memóriában az adott programozási nyelv megvalósításán, és az operációs rendszeren múlik.

A Commodore Basic esetén a változó nevének minden egyes karaktere lefoglal egy byte-ot, a típusa 1 byte-ot, és az érték típustól függően egy vagy több byte-ot. Ez is magyarázza azt, hogy csak igen korlátozott számú változóval lehet a C64 programokban dolgozni. A másik igen fontos tényező, hogy a 64 Kb RAM egy jelentős részét maga az OS, és a Basic foglalja el, a TELJES Basic program számára csak 39 Kb marad fenn. És ennek is csak egy része van fenntartva a változókkal kapcsolatos információk tárolására, hisz magának a programnak is kell hely! A program minden egyes karaktere 1 byte-ot foglal el.

Zárásképp biztos meg tudod mondani, hogy a következő program nagyjából hány byte-ot fog foglalni a memóriában (a sorszámok is a program része):

10 A = 6
20 B = 6
30 PRINT A * B
  • Forráskód karakterei: 30 + 2 sor vége karakter (láthatatlan a képernyőn)
  • A és B változó kb. 6 byte
  • Futás időben is szükség van byte-okra (a BASIC értelmező munkájához), de erre fenn vannak tartva cím tartományok (lásd az ábrát a bevezetőben).

Remélem érdekes volt betekinteni a memória világába!

Zene

Google keresés

Váltó

Digitális Táregység


Számrendszer

#=

IMDb Keresés

Kód

Karakter

Szín

Szín kódtábla

Webmaster: GoobeMaster
Érvényes XHTML és CSS
Minden jog fenntartva! ® 2010 - 2017
Jogtulajdonos: United Voxels Ltd. (United Kingdom)

Check Google Page Rank

Technikai háttér: