Intel 8008 je první osmibitový mikroprocesor firmy Intel. Byl navržen 1. dubna1972 v 18pinovém provedení DIP. Pod původním kódovým označením 1201 byl původně vyvinut na zakázku firmou Computer Terminal Corporation do jejího programovatelného terminálu Datapoint 2200, ale čip byl dodán pozdě a nesplnil výkonnostní cíle, a proto nebyl k tomuto účelu použit. Díky tomu došlo k dohodě mezi CTC a Intelem, že obvod bude uveden na trh pro ostatní zákazníky.
Původní verze 8008 běžely na 0,5 MHz, později se taktovací frekvence zvýšila na 0,8 MHz. 8008 byl o trochu pomalejší než Intel 4004 a Intel 4040 co do vykonaných instrukcí za sekundu, ale tím, že 8008 zpracovával 8 bitů najednou, mohl přistupovat k mnohem většímu množství paměti RAM, což z něj dělalo CPU 3–4 × rychlejší než výše zmíněné čtyřbitové čipy.
Instrukční sada Intel 8008 a následných procesorů architektury CISC byly výrazně ovlivněny návrhem společnosti CTC.
Čip měl jednoduchou osmibitovou sběrnici a vyžadoval poměrně mnoho podpůrných obvodů. Intel 8008 mohl přistupovat k 8 vstupním a 24 výstupním portům.
Pro využití jako monitorový terminál a obecný řadič byl návrh Intel 8008 přijatelný, ale pro jiné úkoly bylo jeho použití nepraktické. Jeho hlavními nedostatky je omezená hloubka zásobníku volání a nemožnost uložit všechny registry při příchodu přerušení. Několik málo počítačů na něm bylo založeno, ale většina místo toho využila vylepšených vlastností Intel 8080.
Skupina obvodů okolo 8008 je označována MCS-8.
Procesor Intel 8008 navrhli: Victor Pooh, Harry Pyle, Marcian Hoff, Stan Mazor, Frederico Faggin a Hal Feeney.
Jednočipovou implementaci CTC architektury navrhli Marcian „Ted“ Hoff, Stan Mazor a Larry Potter (hlavní vědecký pracovník IBM), pro registry použili paměť RAM místo posuvných registrů, přidali několik instrukcí a systém přerušení. Návrh čipu 8008 (původně nazývaného 1201) začal ještě před vývojem čipu 4004. Hoff a Mazor však nemohli vyvinout a ani nevyvinuli „křemíkový návrh“, protože nebyli ani návrháři čipů, ani návrháři procesu, a navíc ještě nebyla k dispozici potřebná metodika návrhu založená na křemíkových hradlech a obvodech, kterou pro 4004 vyvíjel Federico Faggin.[1]
Poté, co byl projekt pro nedostatek postupu asi na sedm měsíců pozastaven, se od ledna 1971 stal vedoucím projektu Federico Faggin, který jej v dubnu 1972 dokončil.
Hal Feeney, inženýr projektu, vytvořil pod dohledem Faggina detailní logický návrh, obvodový návrh a fyzické rozvržení; při tom využil stejnou metodu návrhu , kterou Faggin původně vyvinul pro mikroprocesor Intel 4004, a využil základní obvody vyvinuté pro 4004. Na čipu bylo přibližně v polovině vzdálenosti mezi spojovacími ploškami D5 a D6 vyleptáno kombinované logo „HF“.
Intel 8008 byl vyráběn technologií PMOS 10 μm; první verze měly kmitočet hodin do 0,5 MHz, pozdější (8008-1) do 0,8 MHz. Instrukce trvaly 5 až 11 T-stavů a jeden T-stav byly 2 periody hodin.[2]
Přenos dat mezi registry a aritmeticko-logické operace trvaly 5T (20 μs při 0.5 MHz), přenosy mezi registry a pamětí 8T (32 μs), volání podprogramů a skoky trvaly 11T (44 μs).[3]
Rychlost mikroprocesoru Intel 8008 vyjádřená v instrukcích za sekundu byla poněkud nižší (36 až 80 tisíc při 0,8 MHz) než čtyřbitových Intel 4004 a Intel 4040,[4], ale díky tomu, že Intel 8008 zpracovával osmibitová data a mohl adresovat podstatně větší paměť, byl ve většině aplikací rychlejší. Intel 8008 obsahoval 3500 tranzistorů.[5][6][7]
Intel 8008 měl šířku adresní sběrnice 14 bitů, což dovolovalo adresovat 16 KB paměti. Obsahoval 7 osmibitových univerzálních registrů (včetně akumulátoru), 14bitový programový čítač a sedmiúrovňový zásobník 14bitových návratových adres.
Strojové instrukce
Intel 8008 měl interní zásobník o hloubce 7 úrovní. Ve skutečnosti byl zásobník implementován jako soubor 8 registrů o šířce 14 bitů. Aktuální programový čítač byl vždy jedním z nich.
Neexistovala žádná 16bitová aritmetika. Jediným párem registrů byl HL, který se (pod označením M) používal jako odkaz na paměť.
Doba trvání instrukce je uvedena v taktech hodin. Existovaly dvě verze 8008. 8008 s rychlostí do 500 kHz a 8008-1 s rychlostí do 800 kHz. Při taktu 500kHz trvala instrukce NOP 20μs a při taktu 800kHz pro 8008-1 trvala 12,5μs.
Na rozdíl od 8080 neexistoval žádný registr příznaků, proto není uvedena bitová pozice příznaků.
Adresní sběrnice byla široká 14bitů, takže bylo možné adresovat pouze 16kB RAM.
8008 měla jen omezené možnosti přerušení. Neexistovaly instrukce pro zákaz a povolení přerušení, takže přerušení bylo stále povolené. Protože neexistovaly instrukce, které by dokázaly obsah registru uložit na zásobník nebo jej z něj načíst, bylo možné se na paměť odkazovat pouze prostřednictvím dvojice registrů HL, které bylo nutné upravit tak, aby do paměti ukládaly obsah jiných registrů. V rutině obsluhy přerušení nebylo možné uložit a poté obnovit obsah všech registrů, což činilo přerušení téměř nepoužitelným. Existovalo řešení k překonání tohoto problému; obsah registrů mohl uložen na externí port instrukcí OUT a z něj přečten pomocí instrukce IN.[8]
Instrukční sada Intel 8008
_0
_1
_2
_3
_4
_5
_6
_7
_8
_9
_A
_B
_C
_D
_E
_F
0_
*HLT 1 8
- - - -
*HLT 1 8
- - - -
RLC 1 10
- - - C
RFC 1 10/6
- - - -
ADI d8 2 16
S Z P -
RST 0 1 10
- - - -
LAI d8 2 16
- - - -
RET 1 10
- - - -
INB 1 10
S Z P -
DCB 1 10
S Z P -
RRC 1 10
- - - C
RFZ 1 10/6
- - - -
ACI d8 2 16
S Z P -
RST 1 1 10
- - - -
LBI d8 2 16
- - - -
*RET 1 10
- - - -
1_
INC 1 10
S Z P -
DCC 1 10
S Z P -
RAL 1 10
- - - C
RFS 1 10/6
- - - -
SUI d8 2 16
S Z P -
RST 2 1 10
- - - -
LCI d8 2 16
- - - -
*RET 1 10
- - - -
IND 1 10
S Z P -
DCD 1 10
S Z P -
RAR 1 10
- - - C
RFP 1 10/6
- - - -
SBI d8 2 16
S Z P -
RST 3 1 10
- - - -
LDI d8 2 16
- - - -
*RET 1 10
- - - -
2_
INE 1 10
S Z P -
DCE 1 10
S Z P -
RTC 1 10/6
- - - -
NDI d8 2 16
S Z P -
RST 4 1 10
- - - -
LEI d8 2 16
- - - -
*RET 1 10
- - - -
INH 1 10
S Z P -
DCH 1 10
S Z P -
RTZ 1 10/6
- - - -
XRI d8 2 16
S Z P -
RST 5 1 10
- - - -
LHI d8 2 16
- - - -
*RET 1 10
- - - -
3_
INL 1 10
S Z P -
DCL 1 10
S Z P -
RTS 1 10/6
- - - -
ORI d8 2 16
S Z P -
RST 6 1 10
- - - -
LLI d8 2 16
- - - -
*RET 1 10
- - - -
RTP 1 10/6
- - - -
CPI d8 2 16
S Z P -
RST 7 1 10
- - - -
LMI d8 2 18
- - - -
*RET 1 10
- - - -
4_
JFC w 3 22/18
- - - -
INP 0 1 16
- - - -
CFC w 3 22/18
- - - -
INP 1 1 16
- - - -
JMP w 3 22
- - - -
INP 2 1 16
- - - -
CAL w 3 22
- - - -
INP 3 1 16
- - - -
JFZ w 3 22/18
- - - -
INP 4 1 16
- - - -
CFZ w 3 22/18
- - - -
INP 5 1 16
- - - -
*JMP w 3 22
- - - -
INP 6 1 16
- - - -
*CAL w 3 22
- - - -
INP 7 1 16
- - - -
5_
JFS w 3 22/18
- - - -
OUT 8 1 12
- - - -
CFS w 3 22/18
- - - -
OUT 9 1 12
- - - -
*JMP w 3 22
- - - -
OUT 10 1 12
- - - -
*CAL w 3 22
- - - -
OUT 11 1 12
- - - -
JFP w 3 22/18
- - - -
OUT 12 1 12
- - - -
CFP w 3 22/18
- - - -
OUT 13 1 12
- - - -
*JMP w 3 22
- - - -
OUT 14 1 12
- - - -
*CAL w 3 22
- - - -
OUT 15 1 12
- - - -
6_
JTC w 3 22/18
- - - -
OUT 16 1 12
- - - -
CTC w 3 22/18
- - - -
OUT 17 1 12
- - - -
*JMP w 3 22
- - - -
OUT 18 1 12
- - - -
*CAL w 3 22
- - - -
OUT 19 1 12
- - - -
JTZ w 3 22/18
- - - -
OUT 20 1 12
- - - -
CTZ w 3 22/18
- - - -
OUT 21 1 12
- - - -
*JMP w 3 22
- - - -
OUT 22 1 12
- - - -
*CAL w 3 22
- - - -
OUT 23 1 12
- - - -
7_
JTS w 3 22/18
- - - -
OUT 24 1 12
- - - -
CTS w 3 22/18
- - - -
OUT 25 1 12
- - - -
*JMP w 3 22
- - - -
OUT 26 1 12
- - - -
*CAL w 3 22
- - - -
OUT 27 1 12
- - - -
JTP w 3 22/18
- - - -
OUT 28 1 12
- - - -
CTP w 3 22/18
- - - -
OUT 29 1 12
- - - -
*JMP w 3 22
- - - -
OUT 30 1 12
- - - -
*CAL w 3 22
- - - -
OUT 31 1 12
- - - -
8_
ADA 1 10
S Z P C
ADB 1 10
S Z P C
ADC 1 10
S Z P C
ADD 1 10
S Z P C
ADE 1 10
S Z P C
ADH 1 10
S Z P C
ADL 1 10
S Z P C
ADM 1 16
S Z P C
ACA 1 10
S Z P C
ACB 1 10
S Z P C
ACC 1 10
S Z P C
ACD 1 10
S Z P C
ACE 1 10
S Z P C
ACH 1 10
S Z P C
ACL 1 10
S Z P C
ACM 1 16
S Z P C
9_
SUA 1 10
S Z P C
SUB 1 10
S Z P C
SUC 1 10
S Z P C
SUD 1 10
S Z P C
SUE 1 10
S Z P C
SUH 1 10
S Z P C
SUL 1 10
S Z P C
SUM 1 16
S Z P C
SBA 1 10
S Z P C
SBB 1 10
S Z P C
SBC 1 10
S Z P C
SBD 1 10
S Z P C
SBE 1 10
S Z P C
SBH 1 10
S Z P C
SBL 1 10
S Z P C
SBM 1 16
S Z P C
A_
NDA 1 10
S Z P C
NDB 1 10
S Z P C
NDC 1 10
S Z P C
NDD 1 10
S Z P C
NDE 1 10
S Z P C
NDH 1 10
S Z P C
NDL 1 10
S Z P C
NDM 1 16
S Z P C
XRA 1 10
S Z P C
XRB 1 10
S Z P C
XRC 1 10
S Z P C
XRD 1 10
S Z P C
XRE 1 10
S Z P C
XRH 1 10
S Z P C
XRL 1 10
S Z P C
XRM 1 16
S Z P C
B_
ORA 1 10
S Z P C
ORB 1 10
S Z P C
ORC 1 10
S Z P C
ORD 1 10
S Z P C
ORE 1 10
S Z P C
ORH 1 10
S Z P C
ORL 1 10
S Z P C
ORM 1 16
S Z P C
CPA 1 10
S Z P C
CPB 1 10
S Z P C
CPC 1 10
S Z P C
CPD 1 10
S Z P C
CPE 1 10
S Z P C
CPH 1 10
S Z P C
CPL 1 10
S Z P C
CPM 1 16
S Z P C
C_
NOP 1 10
- - - -
LAB 1 10
- - - -
LAC 1 10
- - - -
LAD 1 10
- - - -
LAE 1 10
- - - -
LAH 1 10
- - - -
LAL 1 10
- - - -
LAM 1 16
- - - -
LBA 1 10
- - - -
LBB 1 10
- - - -
LBC 1 10
- - - -
LBD 1 10
- - - -
LBE 1 10
- - - -
LBH 1 10
- - - -
LBL 1 10
- - - -
LBM 1 16
- - - -
D_
LCA 1 10
- - - -
LCB 1 10
- - - -
LCC 1 10
- - - -
LCD 1 10
- - - -
LCE 1 10
- - - -
LCH 1 10
- - - -
LCL 1 10
- - - -
LCM 1 16
- - - -
LDA 1 10
- - - -
LDB 1 10
- - - -
LDC 1 10
- - - -
LDD 1 10
- - - -
LDE 1 10
- - - -
LDH 1 10
- - - -
LDL 1 10
- - - -
LDM 1 16
- - - -
E_
LEA 1 10
- - - -
LEB 1 10
- - - -
LEC 1 10
- - - -
LED 1 10
- - - -
LEE 1 10
- - - -
LEH 1 10
- - - -
LEL 1 10
- - - -
LEM 1 16
- - - -
LHA 1 10
- - - -
LHB 1 10
- - - -
LHC 1 10
- - - -
LHD 1 10
- - - -
LHE 1 10
- - - -
LHH 1 10
- - - -
LHL 1 10
- - - -
LHM 1 16
- - - -
F_
LLA 1 10
- - - -
LLB 1 10
- - - -
LLC 1 10
- - - -
LLD 1 10
- - - -
LLE 1 10
- - - -
LLH 1 10
- - - -
LLL 1 10
- - - -
LLM 1 16
- - - -
LMA 1 14
- - - -
LMB 1 14
- - - -
LMC 1 14
- - - -
LMD 1 14
- - - -
LME 1 14
- - - -
LMH 1 14
- - - -
LML 1 14
- - - -
HLT 1 8
- - - -
_0
_1
_2
_3
_4
_5
_6
_7
_8
_9
_A
_B
_C
_D
_E
_F
Ukázka kódu
Následující zdrojový kód v jazyce symbolických adres Intel 8008 je procedura MEMCPY pro kopírování bloku dat zadané délky z jednoho místa v paměti na jiné.
; MEMCPY --; Zkopíruje blok paměti z jednoho místa na jiné.;; Vstupní parametry; SRC: 14bitová adresa začátku zdrojového bloku; DST: 14bitová adresa začátku cílového bloku; CNT: 14bitová délka bloku v bytechORG1700Q;Data na adrese 001700q001700000SRCDFB0;SRC, nižší byte001701000DFB0; vyšší byte001702000DSTDFB0;DST, nižší byte001703000DFB0; vyšší byte001704000CNTDFB0;CNT, nižší byte001705000DFB0; vyšší byteORG2000Q;Kód na adrese 002000q002000066304MEMCPYLLICNT+0;HL = addr(CNT)002002056003LHICNT+1002004327LCM;BC = CNT002005060INL002006317LBM002007302LOOPLAC;Jestliže BC = 0,002010261ORB002011053RTZ;Návrat002012302DECCNTLAC;BC = BC-1002013024001SUI1002015320LCA002016301LAB002017034000SBI0002021310LBA002022066300GETSRCLLISRC+0;HL = addr(SRC)002024056003LHISRC+1002026347LEM;DE = SRC002027060INL002030337LDM002031302LAC;HL = DE+BC002032206ADE002033360LLA002034301LAB002035215ACD002036350LHA002037307LAM;Načti A z adresy (HL)002040066302GETDSTLLIDST+0;HL = addr(DST)002042056003LHIDST+1002044347LEM;DE = DST002045060INL002046337LDM002047364LLE;HL = DE002050353LHD002051330LDA;D = A002052302LAC;HL = HL+BC002053206ADL002054360LLA002055301LAB002056215ACH002057350LHA002060373LMD;Ulož D na adresu (HL)002061104007004JMPLOOP;Opakovat002064END
Všechny hodnoty v kódu jsou v osmičkové soustavě. Lokace SRC, DST, a hodnota CNT jsou 16bitové parametry podprogramu MEMCPY. Ve skutečnosti se používá pouze 14 bitů, protože procesor má velikost adresy 14 bitů. Hodnoty jsou uloženy ve formátu little endian, ale protože procesor není schopen na rozdíl od Intel 8080 číst nebo zapisovat více než 1 byte v jedné instrukci, jedná se o arbitrární volbu. Protože neexistuje instrukce pro načtení registru přímo ze zadané adresy, musí se adresa nejdříve načíst do dvojice registrů HL, která se použije pro nepřímé adresování paměti jako pseudoregistr M. Do dvojice registrů BC je načtena hodnota parametru CNT, která se snižuje o jedničku na konci smyčky, dokud nedosáhne hodnoty 0. Všimněte si, že většina instrukcí zabírá 8 bitů.
Odkazy
Reference
V tomto článku byl použit překlad textu z článku Intel 8008 na anglické Wikipedii.