Концепция системных регистров для МЭСМ-6
Apr. 25th, 2019 11:51 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Перед тем, как начать делать теневые регистры и вход-выход в прерывания для МЭСМ-6, изложу здесь концепцию.
В обычном режиме (пользователя) программе доступны 15 индекс-регистров М[i], как в БЭСМ-6. При входе в прерывание процессор переключается на дополнительный "теневой" набор индекс-регистров K[i]. Это устраняет необходимость сохранять пользовательские регистры в память.
Вводится концепция системных регистров, которые хранят значения, нужные для обработки прерываний.
Вводятся две дополнительные команды 032 ATZ и 033 ZTA, через которые можно обращаться к системным регистрам, а также к пользовательским индекс-регистрам из режима прерываний. Команды работают аналогично ATI и ITA, но нет стекового режима.
Адреса регистров для команд ATZ и ZTA:
(1) Текущее значение PC сохраняется в EPC;
(2) Статус и режимы SR сохраняются в ESR;
(3) Текущее значение C сохраняется в ECN;
(4) Сбрасывается глобальный флаг разрешения прерываний, бит SR.GIE=0;
(5) Устанавливается режим прерываний, бит SR.K=1;
(6) Регистр PC получает значение, соответствующее типу прерывания или номеру экстракода.
Команда 32 IJ выполняет выход из прерывания:
(1) Значение EPC передаётся в PC;
(2) Значение ECN передаётся в C;
(3) Значение ESR передаётся в SR, при этом изменяются режим прерываний (бит SR.K) и разрешение прерываний (бит SR.GIE).
В обычном режиме (пользователя) программе доступны 15 индекс-регистров М[i], как в БЭСМ-6. При входе в прерывание процессор переключается на дополнительный "теневой" набор индекс-регистров K[i]. Это устраняет необходимость сохранять пользовательские регистры в память.
Вводится концепция системных регистров, которые хранят значения, нужные для обработки прерываний.
Вводятся две дополнительные команды 032 ATZ и 033 ZTA, через которые можно обращаться к системным регистрам, а также к пользовательским индекс-регистрам из режима прерываний. Команды работают аналогично ATI и ITA, но нет стекового режима.
Адреса регистров для команд ATZ и ZTA:
- 0...017 - пользовательские индекс-регистры M[i]
- 020...037 - теневые индекс-регистры K[i]
- 040 - счётчик команд PC
- 041 - сохранённый счётчик команд EPC
- 042 - регистр статуса и режимов SR (расширенный регистр R)
- 043 - сохранённый регистр статуса ESR
- 044 - регистр изменения следующей команды CN (фактически регистр С)
- 045 - сохранённый регистр ECN
(1) Текущее значение PC сохраняется в EPC;
(2) Статус и режимы SR сохраняются в ESR;
(3) Текущее значение C сохраняется в ECN;
(4) Сбрасывается глобальный флаг разрешения прерываний, бит SR.GIE=0;
(5) Устанавливается режим прерываний, бит SR.K=1;
(6) Регистр PC получает значение, соответствующее типу прерывания или номеру экстракода.
Команда 32 IJ выполняет выход из прерывания:
(1) Значение EPC передаётся в PC;
(2) Значение ECN передаётся в C;
(3) Значение ESR передаётся в SR, при этом изменяются режим прерываний (бит SR.K) и разрешение прерываний (бит SR.GIE).
no subject
Date: 2019-04-25 07:21 pm (UTC)no subject
Date: 2019-04-25 07:26 pm (UTC)В этом смысле у нас нет защиты.
Считаем, что программа всегда работает в режиме супервизора.
no subject
Date: 2019-04-25 10:16 pm (UTC)Не забудь про регистр С, который тоже нужно упрятывать-восстанавливать.
Ну и открывать/закрывать прерывания было бы удобно одной командой, наподобие VTM с нулевым индексом (но это уродство, поэтому лучше что-нибудь другое).
no subject
Date: 2019-04-25 11:33 pm (UTC)Регистр C, да. Добавлю регистры 044 и 045.
Открывать/закрывать прерывания можно приспособить NTR со старшими битами в адресном поле.
instruction vs. mapping
Date: 2019-05-03 03:18 pm (UTC)Re: instruction vs. mapping
Date: 2019-05-06 08:39 pm (UTC)Это коды операций использовались в СВС для специальных 64-битных обращений к памяти. Мы их задействуем для системных регистров, вместо прежних команд РЕГ и УВВ. Повторять функциональность РЕГ не хочется, когда одна и та же команда работала как чтение (ставила логическую группу) и как запись (не меняла группу).
Re: instruction vs. mapping
Date: 2019-05-06 09:12 pm (UTC)Идея связана с тем, что адрес приходиться декодировать для IO в любом случае, а так как кашей нет, то казалось бы, что мультиплекситровать доступ к регистровому файлу (который подрозумевается т.к разделяем контексты для user-a , прерываний и экстракодов) сам бог велел.
p.s. наверняка, реализация становится более сложной, и я тут не могу помочь в VERILOG, так что это на всякий случай, рассмотреть идею если это разумно.
Re: instruction vs. mapping
Date: 2019-05-06 09:48 pm (UTC)