©2015
emulator2015@ya.ru
Описание
ОЭВМ КБ1013ВК1-2
Основные сведения о микросхеме приведены в журнале
«Микропроцессорные средства и системы» 1987г. №5 стр. 5-18. К сожалению, данная
статья не описывает многие особенности и функции ОЭВМ, и содержит ошибки - как
банальные опечатки, так и логические. Данная публикация призвана дополнить информацию
и исправить недочёты.
В справочном формате будут изложены сведения об
основных блоках ОЭВМ, системе команд и о внешнем интерфейсе для чтения ПЗУ и тестирования
узлов процессора.
Часть 2.
СИСТЕМА КОМАНД ОЭВМ КБ1013ВК1-2.
Основная информация о командах, их кодах и
назначении приведена в журнале. Здесь я рассмотрю аспекты, не указанные в
вышеупомянутой статье.
Коды команд имеют опечатки. Правильные коды
приведены в таблице:
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
0 |
NOP |
OAR A->R |
BS1 BS=1 |
EN LCD
A->LCDR |
BM0 |
BM0 |
BM0 |
BM0 |
AM |
AC |
COM !A->A |
XL L<->A |
BM1 |
BM1 |
BM1 |
BM1 |
1 |
XM (DP)<->A |
XE |
XE |
XE |
XI (DP++)<->A DP==7->8 PC++ |
XEI(DP)<->A L++ |
XEI(DP)<->A L++ |
XEI(DP)<->A L++ |
LM (DP)->A |
LE (DP)->A
H^01 |
LE (DP)->A
H^10 |
LE (DP)->A
H^11 |
XD |
XED |
XED |
XED |
2 |
LC A=0 |
LC A=1 |
LC A=2 |
LC A=3 |
LC A=4 |
LC A=5 |
LC A=6 |
LC A=7 |
LC A=8 |
LC A=9 |
LC A=a |
LC A=b |
LC A=c |
LC A=d |
LC A=e |
LC A=f |
3 |
AS A+n |
AS A+n |
AS A+n |
AS A+n |
AS A+n |
AS A+n |
AS A+n |
AS A+n |
AS A+n |
AS A+n |
A10 |
AS A+n |
AS A+n |
AS A+n |
AS A+n |
AS A+n |
4 |
LAS DP=00 |
LAS DP=10 |
LAS DP=20 |
LAS DP=30 |
LAS DP=09 |
LAS DP=19 |
LAS DP=29 |
LAS DP=39 |
LAS DP=0A |
LAS DP=1A |
LAS DP=2A |
LAS DP=3A |
LAS DP=0B |
LAS DP=1B |
LAS DP=2B |
LAS DP=3B |
5 |
SI1 |
SI0 |
SCO |
SAM A==(DP) PC++ |
SM1 |
SM1 |
SM1 |
SM1 |
TIM |
ABS |
SAO |
SAL A==L PC++ |
ABF |
DAF |
4=LDF T14…11->A 0=HLT |
LAF 2`BYTE->DP |
6 |
CTB |
DAS |
OA0 A->O8 |
OA1 A->O8 |
INC L++ |
SYN TIMER=0 ON |
CLC |
STC |
CLL |
LD0 |
ICD D->A |
BS0 BS=0 |
DEC L-- |
CMS |
RT |
RTS |
7 |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
LP |
8 |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
9 |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
A |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
B |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
BR |
C |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
D |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
E |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
F |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
CZP |
Сразу следует заметить, что в ОЭВМ используется полиномиальный
счётчик команд, соответственно, программа выполняется не в той последовательности,
как записана в ПЗУ. Рассматривать дамп прошивки «в лоб» бессмысленно: чтобы
увидеть привычный программисту листинг, лучше
провести, так сказать, «деполиномирование» дампа. То
есть переставить строки листинга в той последовательности, как их выполняет
процессор.
Все команды – однобайтовые, за исключением кодов 5Eh и 5Fh – первый является префиксом
двухбайтового опкода, второй – код команды непосредственной
загрузки регистра DP
значением следующего за командой байта. Команды длинной передачи управления
можно рассматривать как последовательность двух команд: LP и BR (CZP).
Теперь рассмотрим команды перехода и вызова
подпрограммы.
Команды смены банка ПЗУ и выбора страницы лишь
подготавливают соответствующие регистры к переходу, но программа продолжает
выполняться на текущей странице. Фактическая смена адреса происходит по команде
короткого перехода BR.
С подпрограммами чуть сложнее. В ОЭВМ есть лишь один
уровень вызова подпрограммы – то есть, если была вызвана подпрограмма, вызывать
другие п/п
невозможно. Стека нет как такового, а регистр хранения адреса возврата (A)
один. Меняется и функционал команды CZP (да и мнемоника, кстати, тоже). ОЭВМ
имеет флаг состояния: Основная программа/Подпрограмма. Устанавливается по команде
CZP, сбрасывается по командам RT и RTS.
Если выполняется связка LP+CZP – происходит вызов п/п из
заданной страницы, если просто CZP – из страницы подпрограмм (10h). Далее коды
C0h-FFh выполняются как команда CBR до появления команды RT или RTS. CBR
загружает регистр слов W
четырьмя младшими битами опкода, а младшие два бита регистра
страниц P
– битами 4 и 5 опкода.
Происходит переход на первые 16 байт в пределах 4х страниц от текущей.
По префиксу 5Eh расположены две (документированных, а
их может быть и больше) команды: 00h – HALT, 04h – LDF.
(продолжение следует)