Architektura 6502

Kurz assembleru 6502 začnu popisem jeho architektury a rozdílů proti (alespoň v ČR a SR) známější architektuře x80.

Doufám, že jste nepřeskočili předchozí díl, kde jsem popisoval základní rozdíly mezi architekturou procesorů 8080 a 6800. Téměř všechno, co jsem psal o architektuře 6800, lze vztáhnout na procesor 6502, s jedinou výjimkou, a tou je zápis vícebajtových hodnot. Na rozdíl od 6800 používá 6502 zápis „Little Endian“, tedy stejný jako 8080 (nejprve je nižší byte, pak vyšší).

Procesor 6502, stejně jako jeho vzor 6800, nesází na velký počet interních registrů. Kromě programového čítače (PC), ukazatele zásobníku (SP) a registru příznaků má pouhé tři registry. Jeden je akumulátor, vůči němu se provádějí matematické a logické operace, a dva mají funkci indexových registrů pro přístup do paměti (registry X a Y). Kromě PC jsou všechny registry osmibitové (PC má 16 bitů).

Registry 6502

15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (pozice bitu)
Akumulátor
 — A Accumulator
Indexové registry
 — X X index
 — Y Y index
Ukazatel zásobníku
0 0 0 0 0 0 0 1 SP Stack Pointer
Programový čítač
PC Program Counter
Stavový registr (registr příznaků)
 — N V 1 B D I Z C P Processor flags

Jak je to tedy zařízeno se zásobníkem, jestliže ukazatel má jen 8 bitů? Vyšší byte je vždy roven 01h, takže zásobník sídlí na adresách 0100h-01FFh. Ano, má maximálně 256 bajtů. Při zápisu se, stejně jako u 8080, postupuje směrem k nižším adresám. Když dojde na konec, tj. na adresu 0100h, pokračuje se zase od začátku (od 01FFh). Zásobník tedy funguje ve stránce 1.

Princip paměťových stránek jsme si popisovali. Zmiňoval jsem, že u 6800 má paměťová stránka 0 speciální význam – existuje adresovací mód, který místo kompletní 16bitové adresy používá pouze osmibitovou (a horní byte je vždy 00h). Tento mód je, nepřekvapivě, nazván „zero page“.

Takže u 6502 máte k dispozici tři vnitřní registry (A, X, Y) a 256 bajtů nulté stránky (v praxi si ale velkou část této oblasti sebere pro sebe operační systém, takže aplikačním programátorům už moc nezbývá). Tento koncept vychází z možností tehdejší techniky, kdy paměti byly rychlejší než procesory a dobře navržený čip (jako je třeba právě 6502) zvládne na tři takty procesoru přečíst operační kód, přečíst parametr (adresu v zero page) a přečíst nebo zapsat hodnotu z/do paměti. Srovnejme si časování instrukce, která přenese do akumulátoru obsah paměti na adrese 1234h:

  • Intel 8080: LDA 1234h – 3 byte, 13 taktů procesoru
  • Z80: LD A, (1234h) – 3 byte, 13 taktů
  • 6502: LDA 1234h – 3 byte, 4 takty

U nejobvyklejšího časování zvládne 8080 tímto způsobem přenést 153.846 bajtů za sekundu (2MHz), Z80 za tu dobu přenese 269.230 bajtů (3.5MHz), 6502 přenese 447.500 bajtů (taktováno na 1.79MHz). Omlouvám se, že tu explicitně počítám takovou samozřejmost, ale je na místě ukázat a připomenout, že frekvence procesoru není všechno a nelze říct: V Atari má procesor 1,79MHz, ve Spectru 3,5MHz, je tedy jasné, co je rychlejší (a to ani nezmiňuju, že ve starých počítačích nejedou procesory neustále na plnej kotel, občas je okolní systém zpomaluje). Nahradit registry přímo na čipu (které jsou sice nejrychlejší, ale poměrně drahé) rychlým přístupem do paměti je (nebo alespoň v 70. letech bylo) docela důvtipný nápad.

6502, stejně jako 6800, nemá speciální systém pro periferie. Návrhář systému musí tedy tyto obvody (klávesnice apod.) namapovat do prostoru paměti. Nevýhodou je, že se tím připravíme o prostor pro paměť, výhodou je, že s periferiemi může programátor pracovat stejně jako s pamětí a využít k tomu libovolnou instrukci, která dokáže číst nebo zapisovat z/do paměti.

Líbil se vám článek? Podpořte autora na Patreonu
Příspěvek byl publikován v rubrice 6502. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

3 komentáře u Architektura 6502

  1. odpad napsal:

    Díky za tyhle články. Jen bych ještě doplnil, že ona výhodná nultá stránka bývá ale v praxi „zabraná“ téměř celá „systémem“ daného počítače a pro uživatele zbývají jen jednotky volných paměťových pozic. Takže ony mnohde pronášené vzletné řeči o tom, že 6502 má ne 3 ale 259 registrů jsou silně nadnesené. Třeba Apple II má v příručkách pěkně graficky ztvárněno využití zero-page, takže člověk ví, na čem je. Špičkově má zero-page vyřešenou 6809 – ta formálně zachovává syntaxi „nulté stránky“, ale kde se tato „nultá“ stránka nachází se dá určit. On je 6809 vůbec úplně neuvěřitelný, ale to sem nebudu tahat, tady je to 6502. Nicméně, když už rozebírám registry a „registry“ – to, že jsou X a Y u 6502 jen 8bitové je velká smůla. Pokud beru pro 6502 za výchozí 6800, který měl (mimo dvou akumulátorů) indexový registr 16bitový (byť jen jeden), je škoda, že tohle nemohli zachovat i v 6502 – nejlépe pro X i Y. Přeci jen, spousta indexací v reálných aplikacích přesahuje 256 a musí se to pak zbytečně šudlit. Asi se Motorola hodně cukala, a tak museli mimo přeházení pinů udělat i takováto okleštění. Vůbec – Motorola se neměla Peddleho a spol. zbavovat.

    • Martin Malý napsal:

      Předjímáte obsah dalších dílů. 🙂 Až proberu instrukce, dostaneme se k algoritmům, optimalizacím a přesně k těmhle výhradám. U 6809 začínám čím dál víc zvažovat, že bych ho probral taky. Ale díky za připomenutí, tu zmínku o systému tam dám už teď.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *