vak: (Default)
[personal profile] vak posting in [community profile] besm6
Перед тем, как начать делать теневые регистры и вход-выход в прерывания для МЭСМ-6, изложу здесь концепцию.

В обычном режиме (пользователя) программе доступны 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).

Date: 2019-04-25 07:21 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Что происходит при попытке выполнить команду ATZ или ZTA, когда SR.E==0?

Date: 2019-04-25 10:16 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Понятно. Я имел в виду, что может быть полезно по-разному нумеровать регистры в разных режимах, типа 1-017 - регистры текущего режима, 021-037 - регистры "другого" режима, или наоборот.

Не забудь про регистр С, который тоже нужно упрятывать-восстанавливать.

Ну и открывать/закрывать прерывания было бы удобно одной командой, наподобие VTM с нулевым индексом (но это уродство, поэтому лучше что-нибудь другое).
Edited Date: 2019-04-25 10:19 pm (UTC)

instruction vs. mapping

Date: 2019-05-03 03:18 pm (UTC)
From: [personal profile] mrupor
Как-бы, ввсплыло правило Окама, то есть Коп-ов "не жалко, но тратит их не хочеться". Если уже отхватили отдельные адреса для внешних портов, то почему бы ни сделать доступ к перечисленным регистрам через память?

Re: instruction vs. mapping

Date: 2019-05-06 09:12 pm (UTC)
From: [personal profile] mrupor
Про ATZ понятно, я СВС никогда не интересовался.

Идея связана с тем, что адрес приходиться декодировать для IO в любом случае, а так как кашей нет, то казалось бы, что мультиплекситровать доступ к регистровому файлу (который подрозумевается т.к разделяем контексты для user-a , прерываний и экстракодов) сам бог велел.

p.s. наверняка, реализация становится более сложной, и я тут не могу помочь в VERILOG, так что это на всякий случай, рассмотреть идею если это разумно.

Profile

Сообщество любителей БЭСМ-6

May 2025

S M T W T F S
    123
4 5678910
11121314151617
18192021222324
2526272829 3031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 17th, 2025 06:07 am
Powered by Dreamwidth Studios