©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.

(продолжение следует)