ЕИМ Свят - Електронното списание
БРОЙ - 5 (март 2001)
Корица Начална страница

30 години микропроцесори
i4004
    Първият микропроцесор е бил разположен върху чип с площ 12mm2, притежавал е 2250 транзистора (плътност ~190 елемента на mm2) и е работел на 108kHz. Използваната технология - 10-micron PMOS...(виж Брой 3-"МИКРОПРОЦЕСОРЪТ - от 1971 до днес")
    Цената му - $200 - повече отколкото един Athlon 1GHz сега :). Доколкото знам е бил основен елемент в калкулатори, но нямам информация за конкретни модели. По-долу ще видите ктатко описание на изводите (виж фигурата), както и всички инструкции на процесора :) Сигурен съм,че ще се намерят хора, на които ще им е интересно да се запознаят с 4004 (поне от любопитство). Естествено,за да можете да получите полза цитираната информация трябва да сте се занимавали поне с един микропроцесор и асемблер - "ЕИМ СВЯТ" е списание на Юнаците, така че трябва да знаете ;-) или ако незнаете,да узнаете...


Инструкции на i4004
Мнемоничен код W1W2TДействие
NOP00 EПразна операция
JCM c,aa1caaGПреход към ROM адрес "aa",зависещ от "c"
FIM Rm,dd2sddIПрехвърля dd в регистърният чифт s)
SRC Rm2t CИзпраща регистров контрол *1
FIN Rm3s BПрехвърля ROM клетката от @R0R1 в s
JIN Rm3t CНепряк преход (Отиди на @t)
JUN aaa4aaaBБезусловен преход към адрес от ROM-а
JMS aaa5aaaFПреход към подпрограма на ROM адрес aaa
INC Rn6r AУвеличава с едно регистър r
ISZ Rn aa7raaHУвеличава регистър r и се преминава към адрес aa при нулев резултат
ADD Rn8r AПрибавя регистър r към акумулатора с пренос
SUB Rn9r AИзважда регистъра r от акумулатора със заем
LD RnAr AЗарежда акумулатора със съдържанието на r
XCH RnBr AРазменя съдържанието на r и акумулатора
BBL dCd DВръща се една стъпка назад в стека и зарежда непосредственият операнд d в акумулатора
LDM dDd DЗарежда непосредственият операнд d в акумулатора
WRME0 EЗаписва съдържанието на акумулатора в RAM-а
WMPE1 EЗаписва съдържанието на акумулатора в изходният RAM порт
WRRE2 EЗаписва съдържанието на акумулатора в ROM входно/изходната шина
WPME3 EЗаписва акумулатора в избрания полу-байт (*2)
WR0E4 EЗаписва избран RAM статус символ 0 (*1)
WR1E5 EЗаписва RAM статус символ1 в акумулатора (*1)
WR2E6 EЗаписва RAM статус символ2 в акумулатора (*1)
WR3E7 EЗаписва RAM статус символ3 в акумулатора (*1)
SBME8 EИзважда избрана RAM клетка от акумулатора
RDME9 EПрехвърля избраната клетка от паметта в акумулатора (*1)
RDREA EПрехвърля съдържанието на входно/изходната ROM шина в акумулатора (*1)
ADMEB EСъбира клетка от RAM и акумулатора с пренос
AD0EC EПрочита избраният RAM статус символ 0 (*1)
AD1ED EПрочита RAM статус символ1 от акумулатора(*1)
AD2EE EПрочита RAM статус символ2 от акумулатора(1*)
AD3EF EПрочита RAM статус символ3 от акумулатора(1*)
CLBF0 EНулира акумулатора и флага за пренос
CLCF1 EНулира преноса
IACF2 EУвеличава акумулатора с единица
CMAF3 EДопълва преноса
CMCF4 EДопълва акумулатора
RALF5 EРотация наляво на акумулатора и преноса
RARF6 EРотация надясно на акумулатора и преноса
TCCF7 EПрехвърля преноса в акумулатора и го нулира
DACF8 EНамалява акумулатора с едно
TCSF9 EПрехвърля преноса и го изчиства(?:))
STCFA EВдига флага за пренос
DAAFB EДесетична корекция на акумулатора
KBPFC EОбработва клавиатурата (*3)
DCLFD EОбозначава командна линия


Формат на инструкциите
Дума-1Дума-2ВидЗабележки
----rrrr Arrrr=R0/R1/.../RE/RF (4 бита )
----rrr0 Brrr=R0R1/.../RERF ( 3 бита )
----rrr1 Crrr=четни регистрови чифта (виж по-горе)
----dddd Ddddd=4 бита непосредствена информация
-------- E 
----xxxxXXFaaaa=старши 4 бита на адреса; XX=младши 8 бита от адреса
----ccccXXGcccc=регистър на състоянието ; XX=младши 8 бита от адреса
----rrrrXXHrrrr=R0/R1/.../RE/RF ; XX=младши 8 бита от адреса
----rrr0DDIDD=Данни


Шестнадесетична променливаОписание
rR0/R1/R2/R3/.../RD/RE/RF
sРегистрови двойки R0R1/.../RERF следвани от bin 0
tРегистрови двойки R0R1/.../RERF следвани от bin 1
aСтарши адрес A11,A10,A9,A8
aaСреден и Младши адрес A7,A6,..,A1,A0
d4 бита непосредствени данни
dd8 бита непосредствени данни
cРегистър на състоянието c1c2c3c4 (*4)


Мнемонична променливаОписание
RnR0/R1/R2/R3/.../RD/RE/RF (4 бита)
RmРегистърна двойка R0R1/R2R3/R4R5/...RERF (3 бита)
dd8 бита непосредствени данни
d4 бита непосредствени данни
aa8 битов адрес
aaa12 битов адрес
cрегистър на състоянието c1c2c3c4 (*4)
    (*1) Източника на адреса (и клетките от RAM-а) за Входно/Изходни инструкции (всички инструкции с "Е")
    (*2) За използване със схемите 4008/4009
    (*3) Превръща съдържанието на акумулатора в двоичен код
    (*4) Битове от регистъра на състоянието
      c1:Обръща условието за преход (ако c1==1)
      c2:Акумулатор==0
      c3:Флаг за пренос==1
      c4:Проверка на Сигнала (TST - Pin 10) за Нула

  Всичко 46 инструкции. Адресируемата ОП (оперативна памет) е общо 640 байта (5120 бита). Програмата се чете от ПЗУ (постоянно запомнящо у-во) до 4КБ. Достатъчни са поне за калкулатор или автоматична пералня :-).