Цитата(SuperMax @ 6.2.2026, 11:16)

надо более детальное описание
но основное на что надо смотреть - на сколько корректно эмулируются регистры внешних устройств - тут есть отличия от БК-0010
да вроде как корректно - я по крайней мере ничего не нашел
вот что мне удалось понять
1. Ядро цикла ожидания (Idle Loop)Этот участок кода — «сердце» простоя. Процессор разрешает прерывания, ждет одну инструкцию и снова запрещает их, чтобы проверить флаги.
Код
PC=0147600: MTPS #00 ; Разрешить прерывания (Priority 0). Здесь может сработать таймер или клавиатура.
PC=0147604: NOP ; Пустая операция. Дает "окно" для срабатывания прерывания.
PC=0147606: MTPS #0340 ; Запретить прерывания (Priority 7). Начало критической секции.
PC=0147612: BR 0147574 ; Переход на проверку диспетчера.
2. Вызов диспетчера задач (Polling)Система прыгает в подпрограмму, чтобы узнать: «Есть ли работа?»
Код
PC=0147572: JSR R7, 0147410 ; Вызов подпрограммы проверки очереди задач.
...
PC=0147412: MOV #041714, R5 ; R5 указывает на структуру данных (очередь задач или буфер).
PC=0147416: TST (R5)+ ; Проверка: есть ли задачи в очереди?
PC=0147420: BEQ 0147456 ; Если 0 (пусто), идем проверять системные флаги.
3. Проверка системных флаговЗдесь проверяется конкретный бит в системной переменной (вероятно, статус клавиатуры или запрос на переключение задач).
Код
PC=0147454: BIT #040000, 040454; Проверка бита 14 в ячейке 040454.
; В БК-0011М это часто связано с флагами консоли или драйверов.
PC=0147462: BEQ 0147544 ; Если бит не установлен (событий нет), уходим на выход.
4. Возврат с неудачей (Nothing to do)Так как задач нет и флаги чисты, подпрограмма возвращает управление с установленным флагом переноса (CARRY), сигнализируя: «Работы нет».
Код
PC=0147544: SEC ; Set Carry (Установить флаг C).
PC=0147546: RTS R7 ; Возврат из подпрограммы.
5. Переключение контекста (Overlay/Paging)БК-0011М имеет страничную организацию памяти. Код по адресу 0142xxx — это системный код (скорее всего, в ПЗУ или скрытой странице ОЗУ), который управляет переключением страниц.
Видно активное взаимодействие с регистром управления памятью:
Код
PC=0142536: MOV @#0114, @#0177716; Восстановление страницы памяти (запись в регистр управления страницами 177716).
...
PC=0142400: MOV #054002, @#0177716; Включение системной страницы памяти (054002 — управляющее слово).
Что происходит в блоке 0142xxx:- Сохранение регистров: MOV R0...R5, -(R6) — все регистры сохраняются в стек.
- Переключение страницы: Система подменяет кусок памяти, чтобы выполнить код ядра или драйвера.
- Выполнение системного вызова: JSR R7, @0160 (вектор EMT/Trap).
- Восстановление: Так как диспетчер вернул SEC (работы нет), система восстанавливает старую страницу памяти (MOV @#0114, @#0177716), восстанавливает регистры из стека и делает RTT (Return From Trap).
Итогхолостой ход (Idle Loop) БК-0011М.
- Процессор открывает прерывания (NOP).
- Если прерываний нет, он вызывает тяжелую процедуру диспетчера.
- Диспетчер сохраняет контекст, переключает страницы памяти (177716), проверяет ячейки 041714 и 040454.
- Ничего не находит.
- Восстанавливает контекст и страницу памяти.
- Возвращается к пункту 1.