spamsink: (Default)
[personal profile] spamsink posting in [community profile] besm6
После переписывания дорогих команд сборки, разборки и сдвига в многотактный вид и исправления нормализации вправо инвертированных мантисс (прибавлять младший бит инверсии можно по ходу нормализации, и в окончательном суммировании РМРу участвовать больше не нужно) всё стало гораздо компактнее:


There are 31 levels of combinational cells
2-input LUTs: 309
3-input LUTs: 231
4-input LUTs: 228
5-input LUTs: 375
6-input LUTs: 726
Total LUT area: 1869
State : 204
(FF) : 204
CARRY4 : 132
DSP : 6


Коммит будет сегодня вечером.

Date: 2019-04-09 05:41 am (UTC)
vak: (Default)
From: [personal profile] vak
15 индекс-регистров (на самом деле 16) по 15 бит это уже 240 FFs, половина. Аккумулятор и командное слово из памяти - ещё сотня. Ну и остальное по мелочи набегает. Так что 475 триггеров по божески получается.

Не хотелось бы при прерывании трогать стек пользователя, и вообще ходить в память. Мы как-то уже обсуждали на Гитхабе: https://github.com/besm6/mesm6/issues/3#issuecomment-475087151

Есть идея ввести для режима прерываний/экстракодов отдельный набор регистров K[1]...K[15]. В режиме пользователя (после ВЫПР) возможны обращения только к M[1]...M[15]. При переключении в режим прерываний обращения идут к регистрам K[1]...K[15]. Из режима прерываний можно читать-писать регистры пользователя командами ITA/ATI, обращаясь к ним как к регистрам K[17]...K[31].

Преимущества:

Обработчики прерывания имеют отдельный стек, задаваемый регистром K[15].

Не надо упрятывать регистры в стеке. Ускоряется обработка прерываний. Достаточно упрятать сумматор и РМР.

Не нужны дополнительные регистры для сохранения информации о прерывании. Например, прерванный счётчик команд PC прячется в K[1], регистр режимов пользователя - в K[2], исполнительный адрес экстракода - в K[3].

Date: 2019-04-09 06:16 am (UTC)
x86128: (Default)
From: [personal profile] x86128
Перенесу сюда из темы на гитхаб.

Что делать с текущим К1 при вызове вложенного экстракода?

Можно сделать Экстракоды так чтобы они всегда выталкивали полный текущий PC_next по адресу [K15--], а команда ВЫПР возвращалась на [++K15]. При необходимости, программное выталкивание К2, К3 прописать в "соглашении о программных вызовах".

Date: 2019-04-10 04:57 am (UTC)
vak: (Default)
From: [personal profile] vak
Экстракоды внутри экстракодов можно сделать, но по жизни они не особо нужны, ведь всегда можно просто вызвать нужную функцию через VJM, переход с возвратом.

Date: 2019-04-10 01:45 pm (UTC)
x86128: (Default)
From: [personal profile] x86128
Хотя вот действительно. Если основной язык для платформы это паскаль, то лучше сделать теневую копию М регистров, как предлагает Сергей, что позволит писать обработчики прерываний на паскале без изменений компилятора. Если будет рантайм, то вызывать всякие печати на экран(терминал), синусы и косинусы через VJM, а не через Э*. Сами же КОПы экстракодов зарезервировать для каких-то инструкций которых нет в БЭСМ6, но будут в системе на чипе МЭСМ6.

Есть мысль, чтобы процессор ходил в память через арбитр как в БЭСМ6, что позволит реализовать подсистемы блочного ввода/вывода с SD-карты, Ethernet (через шилд от ардуины), UART (протокол похожий на SLIP). Обращение к регистрам ввода/вывода сделать через команду УВВ (033), запрет/разрешение прерываний по маске через РЕГ 002.

Date: 2019-04-10 04:55 am (UTC)
vak: (Default)
From: [personal profile] vak
Дополнительный набор регистров удобно иметь, чтобы не заниматься записью регистров в стек при входе в прерывание, и восстановлением потом. Хотелось бы писать обработчики экстракодов прямо на Паскале, с минимальной обвязкой.

Profile

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

January 2026

S M T W T F S
    123
45678910
11121314151617
18192021222324
2526272829 3031

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 3rd, 2026 04:34 pm
Powered by Dreamwidth Studios