Originalus Intel C8080A procesorius. Pirmasis išvadas pažymėtas juodu tašku („raktu")
AMD kopija
Intel 8080 pirmtakas, 8008, turėjo mažiau išvadų, reikalaudamas daugiau išorinės logikos visiems signalams iššifruoti
**Intel 8080** yra Intel gamintas aštuonių bitų mikroprocesorius. Šis procesorius pasirodė 1974 m ir neretai laikomas pirmuoju praktiniam pritaikymui iš tiesų tinkamu šio tipo prietaisu. Jis buvo programiškai suderinamas su anksčiau gamintu Intel 8008, kuris nepasiteisino, nes reikalavo pernelyg daug papildomų mikroschemų savo darbui palaikyti. Intel 8080 turėjo apie 6000 tranzistorių.

Tokius pat komandų sistemą bei kontaktų išdėstymą turinčius analogus gamino AMD, Mitsubishi, National Semiconductor, NEC, Siemens, ir Texas Instruments. Tarybų Sąjungoje gaminami analogai buvo vadinami KP580ИK80 (vėliau КР580ВМ80А).

Aprašymas
---------

### Registrai

Procesorius turėjo septynis 8 bitų registrus, iš kurių šeši galėjo būti kombinuojami į 16 bitų poras (BC, DE ir HL). Jis taip pat turėjo 8 bitų akumuliatorių, 16 bitų steko rodyklę į atmintį (atsisakant 8008 buvusios vidinės steko atminties) ir 16 bitų programos skaitliuką. Su 16 bitų buvo galima pasiekti 65536 atminties ląsteles (64 kilobaitus). Procesoriaus pasirodymo metu tiek adresuojamos atminties apimties pakako.

### Komandos

Dauguma 8 bitų operacijų buvo galimos tarp akumuliatoriaus ir arba vieno iš kitų registrų, arba atminties ląstelės, indeksuojamos registrų pora HL. Duomenų persiuntimas buvo galimas tarp bet kurių dviejų registrų arba registro ir minėtosios atminties ląstelės.

Visos procesoriaus komandos buvo koduojamos vienu baitu, bet kai kuriose jų po šio baito sekdavo vienas ar du baitai duomenų, dviejų baitų adresas arba vieno baito porto numeris. Visos duomenų persiuntimo tarp registrų komandos buvo koduojamos išimtinai vienu baitu, tuo užimdamos apie ketvirtį visos komandų sistemos. Procesorius turėjo 8 komandas paprogramei fiksuotu adresu iškviesti (RST). Jos buvo naudojamos pertraukimų aptarnavimui, kai kada – sisteminės bibliotekos paprogramių kvietimui.

Sudėtingiausia (ir ilgiausiai vykdoma) komanda buvo XTHL. Ji sukeisdavo vietomis registrų poros HL turinį su steko rodyklės adresuojamos ir jai sekančios atminties ląstelių turiniu. Komanda buvo skirta asemblerio programuotojų beveik nenaudotam paprogramės parametrų perdavimui per steką.

### Šešiolikos bitų operacijos

Nors Intel 8080 paprastai minimas kaip aštuonių bitų procesorius, kai kurias operacijas buvo galima atlikti ir su 16 bitų skaičiais. Pavyzdžiui, buvo galima vienetu padidinti arba sumažinti registrų poros reikšmę (INX, DXC), sukeisti vietomis DE ir HL porų reikšmes (XCHG), sudėti 16 bitų skaičius (DAD) ir atlikti 16 bitų aritmetinį postūmį į kairę (DAD H).

### Vėliavėlių registras

Vėliavėlių registras šiame procesoriuje buvo pasiekiamas ne tik kaip paskiros vėliavėlių reikšmės, bet ir kaip aštuonių bitų žodis (komandos PUSH PSW ir POP PSW). Jis turėjo tokias vėliavėles:

* C (perpildymas) – devinto (vyriausio) bito reikšmė sudedant aštuonių bitų skaičius. Naudojamas ilgesniems nei aštuoni bitai skaičiams sudėti.
* Z (nulis) – praneša jog gautas rezultatas lygus nuliui.
* P (lyginumas) – signalizuodavo jog vienetų skaičius gautame rezultate nelyginis. Vėliavėlė buvo naudojama septynių bitų duomenims perduoti, aštuntą parenkant taip, kad vienetų skaičius visada būtų lyginis arba nelyginis. Tuomet tikrinant lyginumą galima aptikti duomenų perdavimo klaidas (jei vietoje nulio buvo perduotas vienetas ir atvirkščiai).
* AC (vidinis perpildymas) praneša, jog sudedant pirmuosius keturis vieno ir kito operando bitus buvo gautas penkiaženklis dvejetainis skaičius. Šis bitas buvo reikalingas supakuotiems dešimtainiams skaičiams sudėti (komanda DAA koreguodavo sudėties rezultatą). Supakuotuose skaičiuose pirmi keturi bitai saugodavo pirmą, o likę keturi – antrą dviženklio skaičiaus skaitmenį.
* S (ženklas) – praneša jog atliekant operaciją vyriausiojo bito reikšmė tapo lygi vienetui (gautas neigiamas dvejetainis skaičius).

### Įvedimo ir išvedimo schema

#### Portų erdvė

8080 turėjo atskirą įvedimo/išvedimo įrenginių (portų) erdvę ir galėjo aptarnauti 256 įvedimo ir 256 išvedimo 8 bitų portus, tačiau skaitymo bei rašymo signalai atminčiai ir portams buvo bendri. Nustatyti, į ką kreipiasi procesorius, buvo galima tik papildomų mikroschemų pagalba. Todėl paprastesniuose kompiuteriuose portai buvo pasiekiami tiesiog kaip atminties ląstelės. Specialios portų skaitymo bei rašymo komandos (IN ir OUT) buvo arba nenaudojamos, arba naudojamos žinant jog procesorius dubliuoja aštuonių bitų porto adresą ir į aukštesnį atminties adreso baitą (pavyzdžiui, komanda IN 0E, nedekoduojant kreipimosi adresato, buvo analogiška skaitymo iš ląstelės 0E0E komandai LDA 0E0E).

#### Steko erdvė

Vienas iš procesoriaus būsenos bitų (žr. žemiau) rodydavo, jog procesorius kreipiasi į steko atminties ląstelę. Naudojant šį bitą, buvo galima sukurti iki 64 kilobaitų dydžio su pagrindine atmintimi nesusijusį (išorinį) steką. Tačiau tokia galimybė buvo naudojama itin retai. Ignoruojant šį bitą, stekas tapdavo pagrindinės atminties dalimi.

#### Procesoriaus būsenos žodis

Viename komandos vykdymo etapų duomenų magistralėje trumpam pasirodydavo procesoriaus būsenos žodis, aprašantis procesoriaus veiklą bei artimiausius ketinimus. Atskiri šio žodžio bitai informuodavo, į ką (atmintį, įvedimo – išvedimo portą ar steką) kreipiasi procesorius. Bitų reikšmės buvo reikalingos aptarnaujant pertraukimus ir tiesioginį atminties valdymą.

#### Mikroschemos išvadai

Adreso magistralė turėjo atskirus 16 kontaktų. Duomenų magistralė taip pat turėjo savus 8 kontaktus. Panaudojant dar du (skaitymo ir rašymo signalų) išvadus, paprasčiausias kompiuteris galėjo būti surinktas su labai mažai papildomų detalių. Papildomos mikroschemos buvo reikalingos tik atskirai įvedimo/išvedimo erdvei, pertraukimams ir tiesioginiam atminties valdymui. Tačiau procesoriaus apkraunamumas buvo ribotas (ne daugiau vienas kitos tipinės tų laikų mikroschemos, tokios kaip 7400, įėjimas), todėl net ir paprasti kompiuteriai dažnai turėdavo magistralės stiprintuvus.

Procesoriui buvo reikalingi trys maitinimo šaltiniai: -5 (tik 0,01mA), +5 (60mA) ir +12 (40mA) bei du nepersiklojantys 2 MHz sinchronizacijos signalai. Jis vartojo tik apie 1,3 vato galingumą – dabartiniai greitaeigiai procesoriai neretai vartoja dešimtis ar net šimtus vatų. Mėgėjai kai kada mėgindavo jį maitinti ir tik vienu maitinimo šaltiniu (+12 išvadą sujungę su +5 išvadu, o -5 išvadą įžeminę). Kalbama, jog neretai (ypač КР580ВМ80А) procesorius dirbdavo.

Visų mikroschemos išvadų paskirtis procesorių lydinčioje gamyklinėje dokumentacijoje buvo aprašyta taip:

| Išvado numeris | Signalas | Kryptis | Paaiškinimas |
| --- | --- | --- | --- |
| 1 | A10 | Išėjimas | Adreso magistralė 10 |
| 2 | GND | – | Įžeminimas |
| 3 | D4 | Dvikryptis | Dviejų krypčių duomenų magistralė. Čia taip pat trumpam pasirodydavo procesoriaus būseną ir ketinimus paaiškinantis būsenos žodis, kurio bitų reikšmės buvo tokios:
* D0 Skaitoma pertraukimo komanda. Atsakydamas į pertraukimo signalą, procesorius perskaitydavo ir įvykdydavo *vieną* laisvai pasirenkamą komandą, jos skaitymą ženklindamas šia vėliavėle. Paprastai kitos mikroschemos parūpindavo valdymą perduodančią komandą (RST arba CALL), nukreipdamos vykdymą į pertraukimą aptarnaujantį kodą.
* D1 Skaitomi duomenys (loginis nulis = duomenys rašomi)
* D2 Skaitoma arba rašoma iš/į steką (buvo galima atskira steko atminties erdvė)
* D3 Niekas nevyksta, procesorius sustabdytas tam skirta HLT komanda.
* D4 Skaitoma arba rašoma iš/į įvedimo/išvedimo įrenginius.
* D5 Skaitomas pirmasis vykdomos komandos baitas.
* D6 Skaitomi duomenys iš įvedimo jungties.
* D7 Skaitomi duomenys iš atminties.
 |
| 4 | D5 |
| 5 | D6 |
| 6 | D7 |
| 7 | D3 |
| 8 | D2 |
| 9 | D1 |
| 10 | D0 |
| 11 | -5 V | - | -5 V maitinimo įtampa. Tai turėjo būti pirmoji prijungiama ir paskutinė atjungiama įtampa (antraip procesorius perdegdavo). |
| 12 | R | Įėjimas | Pradinis startas (angl. *Reset*). Gavęs šį signalą, procesorius tuojau pat imdavo vykdyti komandas, pradėdamas nuo adreso 0000. Kitų registrų reikšmės nepasikeisdavo. Tai invertuojantis įėjimas (aktyvi reikšmė – loginis nulis). |
| 13 | DMA | Įėjimas | Reikalavimas procesoriui užleisti adresų, duomenų ir valdymo magistrales tiesioginiam atminties valdymui (magistralių kontaktai būdavo pervedami į didelės varžos, arba „Z" būseną, leidžiant signalo lygiais manipuliuoti kitam įrenginiui |
| 14 | INT | Įėjimas | Pertraukimo signalas. |
| 15 | CLC2 | Įėjimas | Antrasis iš dviejų nepersiklojančių 2 MHZ sinchronizacijos signalų |
| 16 | ACK INT | Išėjimas | Šis kontaktas formaliai buvo žymimas kaip „pertraukimo patvirtinimas", tačiau procesorius tiesiog turėjo dvi komandas (EI ir DI) nustatyti jame loginio vieneto arba nulio reikšmes. Šis išvadas buvo skirtas pertraukimo sistemai valdyti, tačiau paprastesni kompiuteriai jį naudojo tiesiog kaip dar vieną išvedimo portą (pavyzdžiui, garso signalams formuoti). |
| 17 | RD | Išėjimas | Skaitymo signalas, bendras tiek atminčiai, tiek ir įvedimo įrenginiams. |
| 18 | WR | Išėjimas | Rašymo signalas, bendras tiek atminčiai, tiek ir išvedimo įrenginiams. Tai invertuojantis išėjimas, aktyvus lygis – loginis nulis. |
| 19 | S | Išėjimas | Sinchronizacija. Vienetas reiškia jog procesoriaus duomenų magistrale perduodamas anksčiau minėtas procesoriaus būsenos žodis. Patikimam darbui šį signalą galutinai formuodavo dar ir papildoma išorinė logika. Galop būsenos žodis būdavo įrašomas į išorinį registrą ir panaudojamas WR ir RD signalams tinkamai nukreipti. |
| 20 | 5 V | – | + 5 V maitinimo įtampos šaltinis. |
| ---- |
| 21 | ACK DMA | Išėjimas | Patvirtinimas, jog procesorius užleido visas magistrales kitam jomis manipuliuoti sugebančiam įrenginiui (diskų valdikliui, koprocesoriui, video valdikliui, atminties regeneravimo schemai ir pan.) |
| 22 | CLC1 | Įėjimas | Pirmasis iš dviejų nepersiklojančių 2 MHZ sinchronizacijos signalų |
| 23 | RDY | Įėjimas | Šiuo signalu buvo įmanoma laikinai sustabdyti procesoriaus darbą. To prireikdavo dirbant su lėtai veikiančiais išoriniais įrenginiais arba realizuojant aparatinį pažingsninį derinimo režimą. |
| 24 | WAIT | Išėjimas | Nurodo, jog procesorius yra laukimo būsenoje (nedirba) |
| 25 | A0 | Išėjimas | Adreso magistralė |
| 26 | A1 |
| 27 | A2 |
| 28 | 12 V | - | +12 V maitinimo įtampa. Tai turėjo būti paskutinis prijungiamas ir pirmas atjungiamas įtampos šaltinis. |
| 29 | A3 | Išėjimas | Adresų magistralė prireikus galėjo persijungti į didelės varžos būseną. |
| 30 | A4 |
| 31 | A5 |
| 32 | A6 |
| 33 | A7 |
| 34 | A8 |
| 35 | A9 |
| 36 | A15 |
| 37 | A12 |
| 38 | A13 |
| 39 | A14 |
| 40 | A11 |

### Taikymas ir vėlesni modeliai

Sekantis po Intel 8080 procesoriaus modelis – Intel 8085
Intel 8080 vėliau pakeitė kurį laiką itin plačiai naudotas Zilog firmos Z80. Z80 turėjo gana panašią (bei suderinamą) komandų sistemą, tačiau dėl teisinių priežasčių jam buvo sukurta sintaksiškai visiškai kita asemblerio kalba. Intel sukūrė dar mažiau papildomos logikos ir tik vieno (+5 V) maitinimo šaltinio reikalaujantį 8085, kuris taip pat turėjo ir geriau išvystytą pertraukimų sistemą (trys nauji pertraukimo įėjimai galėjo būti naudojami be papildomų mikroschemų). 

Paskui atėjo laikas Intel 8086.

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| Ž • A • RIntel procesoriai |
| --- |
|  |
| Nebegaminami | 
*x86 (16 bitų):* 8086· 8088· 80186· 80188· 80286
*x86/IA32 (32 bitų):* 80386· 80486· Pentium· Pentium Pro· Pentium II· Pentium III· Pentium 4· Pentium M· Core
*x86-64/EM64T (64 bitų):* Pentium 4· Pentium D· Pentium Extreme Edition
*Kiti:* Originalus Itanium — *x86 prototipai:* 4004· 4040· 8008· 8085· 8080 — *RISC:* iAPX 432· i860· i960· XScale — *Mikrokontroleriai:* 8048· 8051· MCS-96 |
|  |
| Dabartiniai | 
Celeron· Pentium Dual-Core· Core 2· Atom· A100· Xeon· Itanium |
|  |
| Būsimi | 
Core i7· Tukwila· Tolapai· Moorestown |
|  |
| Platformos | 
Centrino· Centrino Duo· Centrino Pro· vPro· Viiv· MID |

 |

Šaltiniai
---------

1. ↑
2. ↑  Classiccmp.org Archyvuota kopija 2018-03-05 iš Wayback Machine projekto..