Здравствуйте, гость ( Вход | Регистрация )
| kazamul |
6.2.2026, 11:34
Сообщение
#1
|
|
Новичок ![]() Группа: Участники Сообщений: 9 Регистрация: 22.6.2016 Пользователь №: 34 773 |
Помню, что в свое время было много отличных эмуляторов под Windows.
У меня Mac, поэтому запустить их нет возможности. Появилось время, решил написать свой эмулятор на Java. БК-0010 эмулируется нормально, а с БК-0011М пока проблемы. Если кто-то сможет глянуть и подсказать, что не так — буду очень признателен. Могу при необходимости выложить весь код на GitHub. |
![]() ![]() |
| SuperMax |
6.2.2026, 23:16
Сообщение
#2
|
![]() Администратор ![]() ![]() ![]() ![]() ![]() Группа: Root Admin Сообщений: 6 365 Регистрация: 7.1.2006 Из: Красноярск Пользователь №: 1 |
надо более детальное описание
но основное на что надо смотреть - на сколько корректно эмулируются регистры внешних устройств - тут есть отличия от БК-0010 -------------------- Живы будем - Не помрем !
|
| kazamul |
7.2.2026, 7:43
Сообщение
#3
|
|
Новичок ![]() Группа: Участники Сообщений: 9 Регистрация: 22.6.2016 Пользователь №: 34 773 |
надо более детальное описание но основное на что надо смотреть - на сколько корректно эмулируются регистры внешних устройств - тут есть отличия от БК-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:
Итог холостой ход (Idle Loop) БК-0011М.
|
kazamul эмулятор БК-0011М 6.2.2026, 11:34
kazamul в принципе проблема вот в чем - я загружаю конфигу... 6.2.2026, 11:57
kazamul
надо более детальное описание
но основное на что ... 7.2.2026, 7:44
kazamul могу подтвердить что 041714 это кольцевой буффер к... 8.2.2026, 7:27
kazamul у меня есть подозрение что я не правильно делаю сб... 9.2.2026, 10:02
SuperMax у меня есть подозрение что я не правильно делаю с... 9.2.2026, 10:22
kazamul спасибо
ссылка на 11 а не на 11М 11.2.2026, 7:33
SuperMax спасибо
ссылка на 11 а не на 11М
11М в той же т... 11.2.2026, 15:04![]() ![]() |
| Текстовая версия | Сейчас: 14.2.2026, 15:06 |